diff --git a/client/balance.go b/client/balance.go index 5fe34e5..ca23542 100644 --- a/client/balance.go +++ b/client/balance.go @@ -26,16 +26,20 @@ var balanceCommand = cli.Command{ func balanceAction(ctx *cli.Context) error { withExpiryDetails := ctx.Bool("expiry-details") - client, cancel, err := getClientFromState(ctx) + client, cancel, err := getClientFromState() if err != nil { return err } defer cancel() - offchainAddr, onchainAddr, err := getAddress() + offchainAddr, onchainAddr, redemptionAddr, err := getAddress() if err != nil { return err } + _, network := getNetwork() + // No need to check for error here becuase this function is called also by getAddress(). + // nolint:all + unilateralExitDelay, _ := getUnilateralExitDelay() wg := &sync.WaitGroup{} wg.Add(3) @@ -45,7 +49,7 @@ func balanceAction(ctx *cli.Context) error { defer wg.Done() explorer := NewExplorer() balance, amountByExpiration, err := getOffchainBalance( - ctx, explorer, client, offchainAddr, withExpiryDetails, + ctx.Context, explorer, client, offchainAddr, withExpiryDetails, ) if err != nil { chRes <- balanceRes{0, 0, nil, nil, err} @@ -57,7 +61,8 @@ func balanceAction(ctx *cli.Context) error { go func() { defer wg.Done() - balance, err := getOnchainBalance(onchainAddr) + explorer := NewExplorer() + balance, err := explorer.GetBalance(onchainAddr, network.AssetID) if err != nil { chRes <- balanceRes{0, 0, nil, nil, err} return @@ -67,13 +72,17 @@ func balanceAction(ctx *cli.Context) error { go func() { defer wg.Done() - availableBalance, futureBalance, err := getOnchainVtxosBalance() + explorer := NewExplorer() + + spendableBalance, lockedBalance, err := explorer.GetRedeemedVtxosBalance( + redemptionAddr, unilateralExitDelay, + ) if err != nil { chRes <- balanceRes{0, 0, nil, nil, err} return } - chRes <- balanceRes{0, availableBalance, futureBalance, nil, err} + chRes <- balanceRes{0, spendableBalance, lockedBalance, nil, err} }() wg.Wait() @@ -90,11 +99,11 @@ func balanceAction(ctx *cli.Context) error { if res.offchainBalance > 0 { offchainBalance = res.offchainBalance } - if res.onchainBalance > 0 { - onchainBalance += res.onchainBalance + if res.onchainSpendableBalance > 0 { + onchainBalance += res.onchainSpendableBalance } - if res.amountByExpiration != nil { - for timestamp, amount := range res.amountByExpiration { + if res.offchainBalanceByExpiration != nil { + for timestamp, amount := range res.offchainBalanceByExpiration { if nextExpiration == 0 || timestamp < nextExpiration { nextExpiration = timestamp } @@ -109,8 +118,8 @@ func balanceAction(ctx *cli.Context) error { ) } } - if res.futureBalance != nil { - for timestamp, amount := range res.futureBalance { + if res.onchainLockedBalance != nil { + for timestamp, amount := range res.onchainLockedBalance { fancyTime := time.Unix(timestamp, 0).Format("2006-01-02 15:04:05") lockedOnchainBalance = append( lockedOnchainBalance, @@ -177,9 +186,9 @@ func balanceAction(ctx *cli.Context) error { } type balanceRes struct { - offchainBalance uint64 - onchainBalance uint64 - futureBalance map[int64]uint64 // availableAt -> onchain balance - amountByExpiration map[int64]uint64 // expireAt -> offchain balance - err error + offchainBalance uint64 + onchainSpendableBalance uint64 + onchainLockedBalance map[int64]uint64 + offchainBalanceByExpiration map[int64]uint64 + err error } diff --git a/client/client.go b/client/client.go index 8a152fa..30b7e37 100644 --- a/client/client.go +++ b/client/client.go @@ -1,12 +1,12 @@ package main import ( + "context" "fmt" "strings" "time" arkv1 "github.com/ark-network/ark/api-spec/protobuf/gen/ark/v1" - "github.com/urfave/cli/v2" "google.golang.org/grpc" "google.golang.org/grpc/credentials" "google.golang.org/grpc/credentials/insecure" @@ -21,13 +21,10 @@ type vtxo struct { } func getVtxos( - ctx *cli.Context, - explorer Explorer, - client arkv1.ArkServiceClient, - addr string, - withExpiration bool, + ctx context.Context, explorer Explorer, client arkv1.ArkServiceClient, + addr string, withExpiration bool, ) ([]vtxo, error) { - response, err := client.ListVtxos(ctx.Context, &arkv1.ListVtxosRequest{ + response, err := client.ListVtxos(ctx, &arkv1.ListVtxosRequest{ Address: addr, }) if err != nil { @@ -54,7 +51,7 @@ func getVtxos( } for vtxoTxid, branch := range redeemBranches { - expiration, err := branch.ExpireAt() + expiration, err := branch.expireAt() if err != nil { return nil, err } @@ -70,19 +67,19 @@ func getVtxos( return vtxos, nil } -func getClientFromState(ctx *cli.Context) (arkv1.ArkServiceClient, func(), error) { +func getClientFromState() (arkv1.ArkServiceClient, func(), error) { state, err := getState() if err != nil { return nil, nil, err } - addr, ok := state["ark_url"].(string) - if !ok { - return nil, nil, fmt.Errorf("missing ark_url") + addr := state[ASP_URL] + if len(addr) <= 0 { + return nil, nil, fmt.Errorf("missing asp url") } - return getClient(ctx, addr) + return getClient(addr) } -func getClient(ctx *cli.Context, addr string) (arkv1.ArkServiceClient, func(), error) { +func getClient(addr string) (arkv1.ArkServiceClient, func(), error) { creds := insecure.NewCredentials() port := 80 if strings.HasPrefix(addr, "https://") { diff --git a/client/common.go b/client/common.go index 2339003..f2ba4d8 100644 --- a/client/common.go +++ b/client/common.go @@ -2,6 +2,7 @@ package main import ( "bytes" + "context" "crypto/sha256" "encoding/hex" "encoding/json" @@ -9,6 +10,7 @@ import ( "io" "net/http" "sort" + "strconv" "syscall" "time" @@ -18,7 +20,6 @@ import ( "github.com/btcsuite/btcd/btcec/v2/schnorr" "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/decred/dcrd/dcrec/secp256k1/v4" - "github.com/urfave/cli/v2" "github.com/vulpemventures/go-elements/address" "github.com/vulpemventures/go-elements/elementsutil" "github.com/vulpemventures/go-elements/network" @@ -44,9 +45,9 @@ func verifyPassword(password []byte) error { return err } - passwordHashString, ok := state["password_hash"].(string) - if !ok { - return fmt.Errorf("password hash not found") + passwordHashString := state[PASSWORD_HASH] + if len(passwordHashString) <= 0 { + return fmt.Errorf("missing password hash") } passwordHash, err := hex.DecodeString(passwordHashString) @@ -84,9 +85,9 @@ func privateKeyFromPassword() (*secp256k1.PrivateKey, error) { return nil, err } - encryptedPrivateKeyString, ok := state["encrypted_private_key"].(string) - if !ok { - return nil, fmt.Errorf("encrypted private key not found") + encryptedPrivateKeyString := state[ENCRYPTED_PRVKEY] + if len(encryptedPrivateKeyString) <= 0 { + return nil, fmt.Errorf("missing encrypted private key") } encryptedPrivateKey, err := hex.DecodeString(encryptedPrivateKeyString) @@ -100,8 +101,8 @@ func privateKeyFromPassword() (*secp256k1.PrivateKey, error) { } fmt.Println("wallet unlocked") - cypher := NewAES128Cypher() - privateKeyBytes, err := cypher.Decrypt(encryptedPrivateKey, password) + cypher := newAES128Cypher() + privateKeyBytes, err := cypher.decrypt(encryptedPrivateKey, password) if err != nil { return nil, err } @@ -116,9 +117,9 @@ func getWalletPublicKey() (*secp256k1.PublicKey, error) { return nil, err } - publicKeyString, ok := state["public_key"].(string) - if !ok { - return nil, fmt.Errorf("public key not found") + publicKeyString := state[PUBKEY] + if len(publicKeyString) <= 0 { + return nil, fmt.Errorf("missing public key") } publicKeyBytes, err := hex.DecodeString(publicKeyString) @@ -129,15 +130,15 @@ func getWalletPublicKey() (*secp256k1.PublicKey, error) { return secp256k1.ParsePubKey(publicKeyBytes) } -func getServiceProviderPublicKey() (*secp256k1.PublicKey, error) { +func getAspPublicKey() (*secp256k1.PublicKey, error) { state, err := getState() if err != nil { return nil, err } - arkPubKey, ok := state["ark_pubkey"].(string) - if !ok { - return nil, fmt.Errorf("ark public key not found") + arkPubKey := state[ASP_PUBKEY] + if len(arkPubKey) <= 0 { + return nil, fmt.Errorf("missing asp public key") } pubKeyBytes, err := hex.DecodeString(arkPubKey) @@ -148,32 +149,41 @@ func getServiceProviderPublicKey() (*secp256k1.PublicKey, error) { return secp256k1.ParsePubKey(pubKeyBytes) } -func getLifetime() (int64, error) { +func getRoundLifetime() (int64, error) { state, err := getState() if err != nil { - return 0, err + return -1, err } - lifetime, ok := state["ark_lifetime"].(float64) - if !ok { - return 0, fmt.Errorf("lifetime not found") + lifetime := state[ROUND_LIFETIME] + if len(lifetime) <= 0 { + return -1, fmt.Errorf("missing round lifetime") } - return int64(lifetime), nil + roundLifetime, err := strconv.Atoi(lifetime) + if err != nil { + return -1, err + } + return int64(roundLifetime), nil } -func getExitDelay() (int64, error) { +func getUnilateralExitDelay() (int64, error) { state, err := getState() if err != nil { - return 0, err + return -1, err } - exitDelay, ok := state["exit_delay"].(float64) - if !ok { - return 0, fmt.Errorf("exit delay not found") + delay := state[UNILATERAL_EXIT_DELAY] + if len(delay) <= 0 { + return -1, fmt.Errorf("missing unilateral exit delay") } - return int64(exitDelay), nil + redeemDelay, err := strconv.Atoi(delay) + if err != nil { + return -1, err + } + + return int64(redeemDelay), nil } func coinSelect(vtxos []vtxo, amount uint64) ([]vtxo, uint64, error) { @@ -201,7 +211,7 @@ func coinSelect(vtxos []vtxo, amount uint64) ([]vtxo, uint64, error) { } if selectedAmount < amount { - return nil, 0, fmt.Errorf("insufficient balance: %d to cover %d", selectedAmount, amount) + return nil, 0, fmt.Errorf("not enough funds to cover amount%d", amount) } change := selectedAmount - amount @@ -217,7 +227,8 @@ func coinSelect(vtxos []vtxo, amount uint64) ([]vtxo, uint64, error) { } func getOffchainBalance( - ctx *cli.Context, explorer Explorer, client arkv1.ArkServiceClient, addr string, withExpiration bool, + ctx context.Context, explorer Explorer, client arkv1.ArkServiceClient, + addr string, withExpiration bool, ) (uint64, map[int64]uint64, error) { amountByExpiration := make(map[int64]uint64, 0) @@ -243,120 +254,6 @@ func getOffchainBalance( return balance, amountByExpiration, nil } -type utxo struct { - Txid string `json:"txid"` - Vout uint32 `json:"vout"` - Amount uint64 `json:"value"` - Asset string `json:"asset"` - Status struct { - Confirmed bool `json:"confirmed"` - Blocktime int64 `json:"block_time"` - } `json:"status"` -} - -func getOnchainUtxos(addr string) ([]utxo, error) { - _, net := getNetwork() - baseUrl := explorerUrl[net.Name] - resp, err := http.Get(fmt.Sprintf("%s/address/%s/utxo", baseUrl, addr)) - if err != nil { - return nil, err - } - - defer resp.Body.Close() - body, err := io.ReadAll(resp.Body) - if err != nil { - return nil, err - } - if resp.StatusCode != http.StatusOK { - return nil, fmt.Errorf(string(body)) - } - payload := []utxo{} - if err := json.Unmarshal(body, &payload); err != nil { - return nil, err - } - - return payload, nil -} - -func getOnchainBalance(addr string) (uint64, error) { - payload, err := getOnchainUtxos(addr) - if err != nil { - return 0, err - } - - _, net := getNetwork() - balance := uint64(0) - for _, p := range payload { - if p.Asset != net.AssetID { - continue - } - balance += p.Amount - } - return balance, nil -} - -func getOnchainVtxosBalance() (availableBalance uint64, futureBalance map[int64]uint64, err error) { - userPubKey, err := getWalletPublicKey() - if err != nil { - return - } - - aspPublicKey, err := getServiceProviderPublicKey() - if err != nil { - return - } - - exitDelay, err := getExitDelay() - if err != nil { - return - } - - vtxoTapKey, _, err := computeVtxoTaprootScript(userPubKey, aspPublicKey, uint(exitDelay)) - if err != nil { - return - } - - _, net := getNetwork() - - payment, err := payment.FromTweakedKey(vtxoTapKey, net, nil) - if err != nil { - return - } - - addr, err := payment.TaprootAddress() - if err != nil { - return - } - - utxos, err := getOnchainUtxos(addr) - if err != nil { - return - } - - availableBalance = uint64(0) - futureBalance = make(map[int64]uint64, 0) - now := time.Now() - for _, utxo := range utxos { - blocktime := now - if utxo.Status.Confirmed { - blocktime = time.Unix(utxo.Status.Blocktime, 0) - } - - availableAt := blocktime.Add(time.Duration(exitDelay) * time.Second) - if availableAt.After(now) { - if _, ok := futureBalance[availableAt.Unix()]; !ok { - futureBalance[availableAt.Unix()] = 0 - } - - futureBalance[availableAt.Unix()] += utxo.Amount - } else { - availableBalance += utxo.Amount - } - } - - return -} - func getTxBlocktime(txid string) (confirmed bool, blocktime int64, err error) { _, net := getNetwork() baseUrl := explorerUrl[net.Name] @@ -392,35 +289,13 @@ func getTxBlocktime(txid string) (confirmed bool, blocktime int64, err error) { } -func broadcast(txHex string) (string, error) { - _, net := getNetwork() - body := bytes.NewBuffer([]byte(txHex)) - - baseUrl := explorerUrl[net.Name] - resp, err := http.Post(fmt.Sprintf("%s/tx", baseUrl), "text/plain", body) - if err != nil { - return "", err - } - defer resp.Body.Close() - bodyResponse, err := io.ReadAll(resp.Body) - if err != nil { - return "", err - } - - if resp.StatusCode != http.StatusOK { - return "", fmt.Errorf(string(bodyResponse)) - } - - return string(bodyResponse), nil -} - func getNetwork() (*common.Network, *network.Network) { state, err := getState() if err != nil { return &common.TestNet, &network.Testnet } - net, ok := state["network"] + net, ok := state[NETWORK] if !ok { return &common.MainNet, &network.Liquid } @@ -430,30 +305,54 @@ func getNetwork() (*common.Network, *network.Network) { return &common.MainNet, &network.Liquid } -func getAddress() (offchainAddr, onchainAddr string, err error) { - publicKey, err := getWalletPublicKey() +func getAddress() (offchainAddr, onchainAddr, redemptionAddr string, err error) { + userPubkey, err := getWalletPublicKey() if err != nil { return } - aspPublicKey, err := getServiceProviderPublicKey() + aspPubkey, err := getAspPublicKey() + if err != nil { + return + } + + unilateralExitDelay, err := getUnilateralExitDelay() if err != nil { return } arkNet, liquidNet := getNetwork() - arkAddr, err := common.EncodeAddress(arkNet.Addr, publicKey, aspPublicKey) + arkAddr, err := common.EncodeAddress(arkNet.Addr, userPubkey, aspPubkey) if err != nil { return } - p2wpkh := payment.FromPublicKey(publicKey, liquidNet, nil) + p2wpkh := payment.FromPublicKey(userPubkey, liquidNet, nil) liquidAddr, err := p2wpkh.WitnessPubKeyHash() if err != nil { return } + vtxoTapKey, _, err := computeVtxoTaprootScript( + userPubkey, aspPubkey, uint(unilateralExitDelay), + ) + if err != nil { + return + } + + _, net := getNetwork() + + payment, err := payment.FromTweakedKey(vtxoTapKey, net, nil) + if err != nil { + return + } + + redemptionAddr, err = payment.TaprootAddress() + if err != nil { + return + } + offchainAddr = arkAddr onchainAddr = liquidAddr @@ -471,14 +370,10 @@ func printJSON(resp interface{}) error { } func handleRoundStream( - ctx *cli.Context, - client arkv1.ArkServiceClient, - paymentID string, - vtxosToSign []vtxo, - secKey *secp256k1.PrivateKey, - receivers []*arkv1.Output, + ctx context.Context, client arkv1.ArkServiceClient, paymentID string, + vtxosToSign []vtxo, secKey *secp256k1.PrivateKey, receivers []*arkv1.Output, ) (poolTxID string, err error) { - stream, err := client.GetEventStream(ctx.Context, &arkv1.GetEventStreamRequest{}) + stream, err := client.GetEventStream(ctx, &arkv1.GetEventStreamRequest{}) if err != nil { return "", err } @@ -502,54 +397,53 @@ func handleRoundStream( return "", err } - if event.GetRoundFailed() != nil { + if e := event.GetRoundFailed(); e != nil { pingStop() - return "", fmt.Errorf("round failed: %s", event.GetRoundFailed().GetReason()) + return "", fmt.Errorf("round failed: %s", e.GetReason()) } - if event.GetRoundFinalization() != nil { + if e := event.GetRoundFinalization(); e != nil { // stop pinging as soon as we receive some forfeit txs pingStop() fmt.Println("round finalization started") - poolPartialTx := event.GetRoundFinalization().GetPoolPartialTx() - poolTransaction, err := psetv2.NewPsetFromBase64(poolPartialTx) + poolTxStr := e.GetPoolPartialTx() + poolTx, err := psetv2.NewPsetFromBase64(poolTxStr) if err != nil { return "", err } - congestionTree, err := toCongestionTree(event.GetRoundFinalization().GetCongestionTree()) + congestionTree, err := toCongestionTree(e.GetCongestionTree()) if err != nil { return "", err } - aspPublicKey, err := getServiceProviderPublicKey() + aspPubkey, err := getAspPublicKey() if err != nil { return "", err } - seconds, err := getLifetime() + roundLifetime, err := getRoundLifetime() if err != nil { return "", err } // validate the congestion tree if err := tree.ValidateCongestionTree( - congestionTree, - poolPartialTx, - aspPublicKey, - int64(seconds), + congestionTree, poolTxStr, aspPubkey, int64(roundLifetime), ); err != nil { return "", err } - exitDelay, err := getExitDelay() + exitDelay, err := getUnilateralExitDelay() if err != nil { return "", err } for _, receiver := range receivers { - isOnChain, onchainScript, userPubKey, err := decodeReceiverAddress(receiver.Address) + isOnChain, onchainScript, userPubkey, err := decodeReceiverAddress( + receiver.Address, + ) if err != nil { return "", err } @@ -558,10 +452,13 @@ func handleRoundStream( // collaborative exit case // search for the output in the pool tx found := false - for _, output := range poolTransaction.Outputs { + for _, output := range poolTx.Outputs { if bytes.Equal(output.Script, onchainScript) { if output.Value != receiver.Amount { - return "", fmt.Errorf("invalid collaborative exit output amount: got %d, want %d", output.Value, receiver.Amount) + return "", fmt.Errorf( + "invalid collaborative exit output amount: got %d, want %d", + output.Value, receiver.Amount, + ) } found = true @@ -570,7 +467,9 @@ func handleRoundStream( } if !found { - return "", fmt.Errorf("collaborative exit output not found: %s", receiver.Address) + return "", fmt.Errorf( + "collaborative exit output not found: %s", receiver.Address, + ) } continue @@ -581,7 +480,9 @@ func handleRoundStream( found := false // compute the receiver output taproot key - outputTapKey, _, err := computeVtxoTaprootScript(userPubKey, aspPublicKey, uint(exitDelay)) + outputTapKey, _, err := computeVtxoTaprootScript( + userPubkey, aspPubkey, uint(exitDelay), + ) if err != nil { return "", err } @@ -597,7 +498,9 @@ func handleRoundStream( if len(output.Script) == 0 { continue } - if bytes.Equal(output.Script[2:], schnorr.SerializePubKey(outputTapKey)) { + if bytes.Equal( + output.Script[2:], schnorr.SerializePubKey(outputTapKey), + ) { if output.Value != receiver.Amount { continue } @@ -613,13 +516,15 @@ func handleRoundStream( } if !found { - return "", fmt.Errorf("off-chain send output not found: %s", receiver.Address) + return "", fmt.Errorf( + "off-chain send output not found: %s", receiver.Address, + ) } } fmt.Println("congestion tree validated") - forfeits := event.GetRoundFinalization().GetForfeitTxs() + forfeits := e.GetForfeitTxs() signedForfeits := make([]string, 0) fmt.Print("signing forfeit txs... ") @@ -665,7 +570,7 @@ func handleRoundStream( fmt.Printf("%d signed\n", len(signedForfeits)) fmt.Print("finalizing payment... ") - _, err = client.FinalizePayment(ctx.Context, &arkv1.FinalizePaymentRequest{ + _, err = client.FinalizePayment(ctx, &arkv1.FinalizePaymentRequest{ SignedForfeitTxs: signedForfeits, }) if err != nil { @@ -687,8 +592,10 @@ func handleRoundStream( // send 1 ping message every 5 seconds to signal to the ark service that we are still alive // returns a function that can be used to stop the pinging -func ping(ctx *cli.Context, client arkv1.ArkServiceClient, req *arkv1.PingRequest) func() { - _, err := client.Ping(ctx.Context, req) +func ping( + ctx context.Context, client arkv1.ArkServiceClient, req *arkv1.PingRequest, +) func() { + _, err := client.Ping(ctx, req) if err != nil { return nil } @@ -698,7 +605,7 @@ func ping(ctx *cli.Context, client arkv1.ArkServiceClient, req *arkv1.PingReques go func(t *time.Ticker) { for range t.C { // nolint - client.Ping(ctx.Context, req) + client.Ping(ctx, req) } }(ticker) @@ -758,18 +665,15 @@ func castCongestionTree(congestionTree tree.CongestionTree) *arkv1.Tree { } func decodeReceiverAddress(addr string) ( - isOnChainAddress bool, - onchainScript []byte, - userPubKey *secp256k1.PublicKey, - err error, + bool, []byte, *secp256k1.PublicKey, error, ) { outputScript, err := address.ToOutputScript(addr) if err != nil { - _, userPubKey, _, err = common.DecodeAddress(addr) + _, userPubkey, _, err := common.DecodeAddress(addr) if err != nil { - return + return false, nil, nil, err } - return false, nil, userPubKey, nil + return false, nil, userPubkey, nil } return true, outputScript, nil, nil @@ -777,18 +681,20 @@ func decodeReceiverAddress(addr string) ( func findSweepClosure( congestionTree tree.CongestionTree, -) (sweepClosure *taproot.TapElementsLeaf, seconds uint, err error) { +) (*taproot.TapElementsLeaf, uint, error) { root, err := congestionTree.Root() if err != nil { - return + return nil, 0, err } // find the sweep closure tx, err := psetv2.NewPsetFromBase64(root.Tx) if err != nil { - return + return nil, 0, err } + var seconds uint + var sweepClosure *taproot.TapElementsLeaf for _, tapLeaf := range tx.Inputs[0].TapLeafScript { closure := &tree.CSVSigClosure{} valid, err := closure.Decode(tapLeaf.Script) @@ -806,21 +712,19 @@ func findSweepClosure( return nil, 0, fmt.Errorf("sweep closure not found") } - return + return sweepClosure, seconds, nil } func getRedeemBranches( - ctx *cli.Context, - explorer Explorer, - client arkv1.ArkServiceClient, + ctx context.Context, explorer Explorer, client arkv1.ArkServiceClient, vtxos []vtxo, -) (map[string]RedeemBranch, error) { - congestionTrees := make(map[string]tree.CongestionTree, 0) // poolTxid -> congestionTree - redeemBranches := make(map[string]RedeemBranch, 0) // vtxo.txid -> redeemBranch +) (map[string]*redeemBranch, error) { + congestionTrees := make(map[string]tree.CongestionTree, 0) + redeemBranches := make(map[string]*redeemBranch, 0) for _, vtxo := range vtxos { if _, ok := congestionTrees[vtxo.poolTxid]; !ok { - round, err := client.GetRound(ctx.Context, &arkv1.GetRoundRequest{ + round, err := client.GetRound(ctx, &arkv1.GetRoundRequest{ Txid: vtxo.poolTxid, }) if err != nil { @@ -836,7 +740,9 @@ func getRedeemBranches( congestionTrees[vtxo.poolTxid] = congestionTree } - redeemBranch, err := newRedeemBranch(ctx, explorer, congestionTrees[vtxo.poolTxid], vtxo) + redeemBranch, err := newRedeemBranch( + ctx, explorer, congestionTrees[vtxo.poolTxid], vtxo, + ) if err != nil { return nil, err } @@ -848,18 +754,16 @@ func getRedeemBranches( } func computeVtxoTaprootScript( - userPubKey *secp256k1.PublicKey, - aspPublicKey *secp256k1.PublicKey, - exitDelay uint, + userPubkey, aspPubkey *secp256k1.PublicKey, exitDelay uint, ) (*secp256k1.PublicKey, *taproot.TapscriptElementsProof, error) { redeemClosure := &tree.CSVSigClosure{ - Pubkey: userPubKey, + Pubkey: userPubkey, Seconds: exitDelay, } forfeitClosure := &tree.ForfeitClosure{ - Pubkey: userPubKey, - AspPubkey: aspPublicKey, + Pubkey: userPubkey, + AspPubkey: aspPubkey, } redeemLeaf, err := redeemClosure.Leaf() @@ -872,7 +776,9 @@ func computeVtxoTaprootScript( return nil, nil, err } - vtxoTaprootTree := taproot.AssembleTaprootScriptTree(*redeemLeaf, *forfeitLeaf) + vtxoTaprootTree := taproot.AssembleTaprootScriptTree( + *redeemLeaf, *forfeitLeaf, + ) root := vtxoTaprootTree.RootNode.TapHash() unspendableKey := tree.UnspendableKey() @@ -886,9 +792,7 @@ func computeVtxoTaprootScript( } func addVtxoInput( - updater *psetv2.Updater, - inputArgs psetv2.InputArgs, - exitDelay uint, + updater *psetv2.Updater, inputArgs psetv2.InputArgs, exitDelay uint, tapLeafProof *taproot.TapscriptElementsProof, ) error { sequence, err := common.BIP68EncodeAsNumber(exitDelay) @@ -912,18 +816,20 @@ func addVtxoInput( ) } -func coinSelectOnchain(targetAmount uint64, exclude []utxo) (utxos []utxo, delayedUtxos []utxo, change uint64, err error) { - _, onchainAddr, err := getAddress() +func coinSelectOnchain( + explorer Explorer, targetAmount uint64, exclude []utxo, +) ([]utxo, []utxo, uint64, error) { + _, onchainAddr, _, err := getAddress() if err != nil { return nil, nil, 0, err } - fromExplorer, err := getOnchainUtxos(onchainAddr) + fromExplorer, err := explorer.GetUtxos(onchainAddr) if err != nil { return nil, nil, 0, err } - utxos = make([]utxo, 0) + utxos := make([]utxo, 0) selectedAmount := uint64(0) for _, utxo := range fromExplorer { if selectedAmount >= targetAmount { @@ -944,22 +850,24 @@ func coinSelectOnchain(targetAmount uint64, exclude []utxo) (utxos []utxo, delay return utxos, nil, selectedAmount - targetAmount, nil } - userPubKey, err := getWalletPublicKey() + userPubkey, err := getWalletPublicKey() if err != nil { return nil, nil, 0, err } - aspPublicKey, err := getServiceProviderPublicKey() + aspPubkey, err := getAspPublicKey() if err != nil { return nil, nil, 0, err } - exitDelay, err := getExitDelay() + unilateralExitDelay, err := getUnilateralExitDelay() if err != nil { return nil, nil, 0, err } - vtxoTapKey, _, err := computeVtxoTaprootScript(userPubKey, aspPublicKey, uint(exitDelay)) + vtxoTapKey, _, err := computeVtxoTaprootScript( + userPubkey, aspPubkey, uint(unilateralExitDelay), + ) if err != nil { return nil, nil, 0, err } @@ -976,18 +884,20 @@ func coinSelectOnchain(targetAmount uint64, exclude []utxo) (utxos []utxo, delay return nil, nil, 0, err } - fromExplorer, err = getOnchainUtxos(addr) + fromExplorer, err = explorer.GetUtxos(addr) if err != nil { return nil, nil, 0, err } - delayedUtxos = make([]utxo, 0) + delayedUtxos := make([]utxo, 0) for _, utxo := range fromExplorer { if selectedAmount >= targetAmount { break } - availableAt := time.Unix(utxo.Status.Blocktime, 0).Add(time.Duration(exitDelay) * time.Second) + availableAt := time.Unix(utxo.Status.Blocktime, 0).Add( + time.Duration(unilateralExitDelay) * time.Second, + ) if availableAt.After(time.Now()) { continue } @@ -1003,19 +913,18 @@ func coinSelectOnchain(targetAmount uint64, exclude []utxo) (utxos []utxo, delay } if selectedAmount < targetAmount { - return nil, nil, 0, fmt.Errorf("insufficient balance: %d to cover %d", selectedAmount, targetAmount) + return nil, nil, 0, fmt.Errorf( + "not enough funds to cover amount %d", targetAmount, + ) } return utxos, delayedUtxos, selectedAmount - targetAmount, nil } func addInputs( - updater *psetv2.Updater, - selected []utxo, // the utxos to add owned by the P2WPKH script - delayedSelected []utxo, // the utxos to add owned by the VTXO script - net *network.Network, + updater *psetv2.Updater, utxos, delayedUtxos []utxo, net *network.Network, ) error { - _, onchainAddr, err := getAddress() + _, onchainAddr, _, err := getAddress() if err != nil { return err } @@ -1025,23 +934,22 @@ func addInputs( return err } - for _, coin := range selected { - fmt.Println("adding input", coin.Txid, coin.Vout) + for _, utxo := range utxos { if err := updater.AddInputs([]psetv2.InputArgs{ { - Txid: coin.Txid, - TxIndex: coin.Vout, + Txid: utxo.Txid, + TxIndex: utxo.Vout, }, }); err != nil { return err } - assetID, err := elementsutil.AssetHashToBytes(coin.Asset) + assetID, err := elementsutil.AssetHashToBytes(utxo.Asset) if err != nil { return err } - value, err := elementsutil.ValueToBytes(coin.Amount) + value, err := elementsutil.ValueToBytes(utxo.Amount) if err != nil { return err } @@ -1053,28 +961,32 @@ func addInputs( Nonce: []byte{0x00}, } - if err := updater.AddInWitnessUtxo(len(updater.Pset.Inputs)-1, &witnessUtxo); err != nil { + if err := updater.AddInWitnessUtxo( + len(updater.Pset.Inputs)-1, &witnessUtxo, + ); err != nil { return err } } - if len(delayedSelected) > 0 { - userPubKey, err := getWalletPublicKey() + if len(delayedUtxos) > 0 { + userPubkey, err := getWalletPublicKey() if err != nil { return err } - aspPublicKey, err := getServiceProviderPublicKey() + aspPubkey, err := getAspPublicKey() if err != nil { return err } - exitDelay, err := getExitDelay() + unilateralExitDelay, err := getUnilateralExitDelay() if err != nil { return err } - vtxoTapKey, leafProof, err := computeVtxoTaprootScript(userPubKey, aspPublicKey, uint(exitDelay)) + vtxoTapKey, leafProof, err := computeVtxoTaprootScript( + userPubkey, aspPubkey, uint(unilateralExitDelay), + ) if err != nil { return err } @@ -1094,25 +1006,25 @@ func addInputs( return err } - for _, coin := range delayedSelected { + for _, utxo := range delayedUtxos { if err := addVtxoInput( updater, psetv2.InputArgs{ - Txid: coin.Txid, - TxIndex: coin.Vout, + Txid: utxo.Txid, + TxIndex: utxo.Vout, }, - uint(exitDelay), + uint(unilateralExitDelay), leafProof, ); err != nil { return err } - assetID, err := elementsutil.AssetHashToBytes(coin.Asset) + assetID, err := elementsutil.AssetHashToBytes(utxo.Asset) if err != nil { return err } - value, err := elementsutil.ValueToBytes(coin.Amount) + value, err := elementsutil.ValueToBytes(utxo.Amount) if err != nil { return err } @@ -1124,7 +1036,9 @@ func addInputs( Nonce: []byte{0x00}, } - if err := updater.AddInWitnessUtxo(len(updater.Pset.Inputs)-1, &witnessUtxo); err != nil { + if err := updater.AddInWitnessUtxo( + len(updater.Pset.Inputs)-1, &witnessUtxo, + ); err != nil { return err } } diff --git a/client/cypher.go b/client/cypher.go index 7053bee..85fabc6 100644 --- a/client/cypher.go +++ b/client/cypher.go @@ -10,13 +10,13 @@ import ( "golang.org/x/crypto/scrypt" ) -type Cypher struct{} +type cypher struct{} -func NewAES128Cypher() *Cypher { - return &Cypher{} +func newAES128Cypher() *cypher { + return &cypher{} } -func (c *Cypher) Encrypt(privateKey, password []byte) ([]byte, error) { +func (c *cypher) encrypt(privateKey, password []byte) ([]byte, error) { // Due to https://github.com/golang/go/issues/7168. // This call makes sure that memory is freed in case the GC doesn't do that // right after the encryption/decryption. @@ -53,7 +53,7 @@ func (c *Cypher) Encrypt(privateKey, password []byte) ([]byte, error) { return ciphertext, nil } -func (c *Cypher) Decrypt(encrypted, password []byte) ([]byte, error) { +func (c *cypher) decrypt(encrypted, password []byte) ([]byte, error) { defer debug.FreeOSMemory() if len(encrypted) == 0 { diff --git a/client/dump.go b/client/dump.go index 985a1ac..65ab86d 100644 --- a/client/dump.go +++ b/client/dump.go @@ -19,6 +19,6 @@ func dumpAction(ctx *cli.Context) error { } return printJSON(map[string]interface{}{ - "privateKey": hex.EncodeToString(privateKey.Serialize()), + "private_key": hex.EncodeToString(privateKey.Serialize()), }) } diff --git a/client/explorer.go b/client/explorer.go index 427555f..67dd1eb 100644 --- a/client/explorer.go +++ b/client/explorer.go @@ -1,17 +1,37 @@ package main import ( + "bytes" + "encoding/json" "fmt" "io" "net/http" "strings" + "time" + "github.com/vulpemventures/go-elements/psetv2" "github.com/vulpemventures/go-elements/transaction" ) +type utxo struct { + Txid string `json:"txid"` + Vout uint32 `json:"vout"` + Amount uint64 `json:"value"` + Asset string `json:"asset"` + Status struct { + Confirmed bool `json:"confirmed"` + Blocktime int64 `json:"block_time"` + } `json:"status"` +} + type Explorer interface { GetTxHex(txid string) (string, error) Broadcast(txHex string) (string, error) + GetUtxos(addr string) ([]utxo, error) + GetBalance(addr, asset string) (uint64, error) + GetRedeemedVtxosBalance( + addr string, unilateralExitDelay int64, + ) (uint64, map[int64]uint64, error) } type explorer struct { @@ -44,17 +64,28 @@ func (e *explorer) GetTxHex(txid string) (string, error) { return txHex, nil } -func (e *explorer) Broadcast(txHex string) (string, error) { - tx, err := transaction.NewTxFromHex(txHex) +func (e *explorer) Broadcast(txStr string) (string, error) { + tx, err := transaction.NewTxFromHex(txStr) if err != nil { - return "", err + pset, err := psetv2.NewPsetFromBase64(txStr) + if err != nil { + return "", err + } + + extracted, err := psetv2.Extract(pset) + if err != nil { + return "", err + } + txStr, _ = extracted.ToHex() } txid := tx.TxHash().String() - e.cache[txid] = txHex + e.cache[txid] = txStr - txid, err = broadcast(txHex) + txid, err = e.broadcast(txStr) if err != nil { - if strings.Contains(strings.ToLower(err.Error()), "transaction already in block chain") { + if strings.Contains( + strings.ToLower(err.Error()), "transaction already in block chain", + ) { return txid, nil } @@ -64,6 +95,76 @@ func (e *explorer) Broadcast(txHex string) (string, error) { return txid, nil } +func (e *explorer) GetUtxos(addr string) ([]utxo, error) { + resp, err := http.Get(fmt.Sprintf("%s/address/%s/utxo", e.baseUrl, addr)) + if err != nil { + return nil, err + } + + defer resp.Body.Close() + body, err := io.ReadAll(resp.Body) + if err != nil { + return nil, err + } + if resp.StatusCode != http.StatusOK { + return nil, fmt.Errorf(string(body)) + } + payload := []utxo{} + if err := json.Unmarshal(body, &payload); err != nil { + return nil, err + } + + return payload, nil +} + +func (e *explorer) GetBalance(addr, asset string) (uint64, error) { + payload, err := e.GetUtxos(addr) + if err != nil { + return 0, err + } + + balance := uint64(0) + for _, p := range payload { + if p.Asset != asset { + continue + } + balance += p.Amount + } + return balance, nil +} + +func (e *explorer) GetRedeemedVtxosBalance( + addr string, unilateralExitDelay int64, +) (spendableBalance uint64, lockedBalance map[int64]uint64, err error) { + utxos, err := e.GetUtxos(addr) + if err != nil { + return + } + + lockedBalance = make(map[int64]uint64, 0) + now := time.Now() + for _, utxo := range utxos { + blocktime := now + if utxo.Status.Confirmed { + blocktime = time.Unix(utxo.Status.Blocktime, 0) + } + + delay := time.Duration(unilateralExitDelay) * time.Second + availableAt := blocktime.Add(delay) + if availableAt.After(now) { + if _, ok := lockedBalance[availableAt.Unix()]; !ok { + lockedBalance[availableAt.Unix()] = 0 + } + + lockedBalance[availableAt.Unix()] += utxo.Amount + } else { + spendableBalance += utxo.Amount + } + } + + return +} + func (e *explorer) getTxHex(txid string) (string, error) { resp, err := http.Get(fmt.Sprintf("%s/tx/%s/hex", e.baseUrl, txid)) if err != nil { @@ -83,3 +184,23 @@ func (e *explorer) getTxHex(txid string) (string, error) { e.cache[txid] = hex return hex, nil } + +func (e *explorer) broadcast(txHex string) (string, error) { + body := bytes.NewBuffer([]byte(txHex)) + + resp, err := http.Post(fmt.Sprintf("%s/tx", e.baseUrl), "text/plain", body) + if err != nil { + return "", err + } + defer resp.Body.Close() + bodyResponse, err := io.ReadAll(resp.Body) + if err != nil { + return "", err + } + + if resp.StatusCode != http.StatusOK { + return "", fmt.Errorf(string(bodyResponse)) + } + + return string(bodyResponse), nil +} diff --git a/client/init.go b/client/init.go index d31108c..ee3e038 100644 --- a/client/init.go +++ b/client/init.go @@ -1,8 +1,10 @@ package main import ( + "context" "encoding/hex" "fmt" + "strconv" "strings" arkv1 "github.com/ark-network/ark/api-spec/protobuf/gen/ark/v1" @@ -57,7 +59,7 @@ func initAction(ctx *cli.Context) error { return fmt.Errorf("invalid network") } - if err := connectToAsp(ctx, net, url); err != nil { + if err := connectToAsp(ctx.Context, net, url); err != nil { return err } return initWallet(ctx, key, password) @@ -71,24 +73,24 @@ func generateRandomPrivateKey() (*secp256k1.PrivateKey, error) { return privKey, nil } -func connectToAsp(ctx *cli.Context, net, url string) error { - client, close, err := getClient(ctx, url) +func connectToAsp(ctx context.Context, net, url string) error { + client, close, err := getClient(url) if err != nil { return err } defer close() - resp, err := client.GetInfo(ctx.Context, &arkv1.GetInfoRequest{}) + resp, err := client.GetInfo(ctx, &arkv1.GetInfoRequest{}) if err != nil { return err } - return setState(map[string]interface{}{ - "ark_url": url, - "network": net, - "ark_pubkey": resp.Pubkey, - "ark_lifetime": resp.Lifetime, - "exit_delay": resp.ExitDelay, + return setState(map[string]string{ + ASP_URL: url, + NETWORK: net, + ASP_PUBKEY: resp.Pubkey, + ROUND_LIFETIME: strconv.Itoa(int(resp.GetRoundLifetime())), + UNILATERAL_EXIT_DELAY: strconv.Itoa(int(resp.GetUnilateralExitDelay())), }) } @@ -109,17 +111,20 @@ func initWallet(ctx *cli.Context, key, password string) error { privateKey = secp256k1.PrivKeyFromBytes(privKeyBytes) } - encryptedPrivateKey, err := NewAES128Cypher().Encrypt(privateKey.Serialize(), []byte(password)) + cypher := newAES128Cypher() + buf := privateKey.Serialize() + encryptedPrivateKey, err := cypher.encrypt(buf, []byte(password)) if err != nil { return err } passwordHash := hashPassword([]byte(password)) - state := map[string]interface{}{ - "encrypted_private_key": hex.EncodeToString(encryptedPrivateKey), - "password_hash": hex.EncodeToString(passwordHash), - "public_key": hex.EncodeToString(privateKey.PubKey().SerializeCompressed()), + pubkey := privateKey.PubKey().SerializeCompressed() + state := map[string]string{ + ENCRYPTED_PRVKEY: hex.EncodeToString(encryptedPrivateKey), + PASSWORD_HASH: hex.EncodeToString(passwordHash), + PUBKEY: hex.EncodeToString(pubkey), } if err := setState(state); err != nil { diff --git a/client/main.go b/client/main.go index c33ab00..5503aaa 100644 --- a/client/main.go +++ b/client/main.go @@ -17,6 +17,15 @@ const ( DATADIR_ENVVAR = "ARK_WALLET_DATADIR" STATE_FILE = "state.json" defaultNetwork = "testnet" + + ASP_URL = "asp_url" + ASP_PUBKEY = "asp_public_key" + ROUND_LIFETIME = "round_lifetime" + UNILATERAL_EXIT_DELAY = "unilateral_exit_delay " + ENCRYPTED_PRVKEY = "encrypted_private_key " + PASSWORD_HASH = "password_hash " + PUBKEY = "public_key " + NETWORK = "network " ) var ( @@ -29,14 +38,15 @@ var ( network.Testnet.Name: "https://blockstream.info/liquidtestnet/api", } - initialState = map[string]interface{}{ - "ark_url": "", - "ark_pubkey": "", - "ark_lifetime": 0, - "encrypted_private_key": "", - "password_hash": "", - "public_key": "", - "network": defaultNetwork, + initialState = map[string]string{ + ASP_URL: "", + ASP_PUBKEY: "", + ROUND_LIFETIME: "", + UNILATERAL_EXIT_DELAY: "", + ENCRYPTED_PRVKEY: "", + PASSWORD_HASH: "", + PUBKEY: "", + NETWORK: defaultNetwork, } ) @@ -110,7 +120,7 @@ func cleanAndExpandPath(path string) string { return filepath.Clean(os.ExpandEnv(path)) } -func getState() (map[string]interface{}, error) { +func getState() (map[string]string, error) { file, err := os.ReadFile(statePath) if err != nil { if !os.IsNotExist(err) { @@ -122,7 +132,7 @@ func getState() (map[string]interface{}, error) { return initialState, nil } - data := map[string]interface{}{} + data := map[string]string{} if err := json.Unmarshal(file, &data); err != nil { return nil, err } @@ -138,7 +148,7 @@ func setInitialState() error { return os.WriteFile(statePath, jsonString, 0755) } -func setState(data map[string]interface{}) error { +func setState(data map[string]string) error { currentData, err := getState() if err != nil { return err @@ -158,8 +168,8 @@ func setState(data map[string]interface{}) error { return nil } -func merge(maps ...map[string]interface{}) map[string]interface{} { - merge := make(map[string]interface{}, 0) +func merge(maps ...map[string]string) map[string]string { + merge := make(map[string]string, 0) for _, m := range maps { for k, v := range m { merge[k] = v diff --git a/client/onboard.go b/client/onboard.go index 398a528..c6c5cde 100644 --- a/client/onboard.go +++ b/client/onboard.go @@ -40,17 +40,17 @@ func onboardAction(ctx *cli.Context) error { _, net := getNetwork() - aspPubkey, err := getServiceProviderPublicKey() + aspPubkey, err := getAspPublicKey() if err != nil { return err } - lifetime, err := getLifetime() + roundLifetime, err := getRoundLifetime() if err != nil { return err } - exitDelay, err := getExitDelay() + unilateralExitDelay, err := getUnilateralExitDelay() if err != nil { return err } @@ -66,7 +66,8 @@ func onboardAction(ctx *cli.Context) error { } treeFactoryFn, sharedOutputScript, sharedOutputAmount, err := tree.CraftCongestionTree( - net.AssetID, aspPubkey, []tree.Receiver{congestionTreeLeaf}, minRelayFee, lifetime, exitDelay, + net.AssetID, aspPubkey, []tree.Receiver{congestionTreeLeaf}, + minRelayFee, roundLifetime, unilateralExitDelay, ) if err != nil { return err @@ -92,13 +93,14 @@ func onboardAction(ctx *cli.Context) error { return err } - txid, err := broadcastPset(pset) + explorer := NewExplorer() + txid, err := explorer.Broadcast(pset) if err != nil { return err } - fmt.Println("onboard txid:", txid) - fmt.Println("waiting for confirmation... (this may take a while, do not cancel the process)") + fmt.Println("onboard_txid:", txid) + fmt.Println("waiting for confirmation... (this may take up to a minute, do not cancel the process)") // wait for the transaction to be confirmed if err := waitForTxConfirmation(ctx, txid); err != nil { @@ -116,11 +118,11 @@ func onboardAction(ctx *cli.Context) error { return err } - client, close, err := getClientFromState(ctx) + client, cancel, err := getClientFromState() if err != nil { return err } - defer close() + defer cancel() _, err = client.Onboard(ctx.Context, &arkv1.OnboardRequest{ BoardingTx: pset, diff --git a/client/receive.go b/client/receive.go index 25db261..f4fe8de 100644 --- a/client/receive.go +++ b/client/receive.go @@ -11,7 +11,7 @@ var receiveCommand = cli.Command{ } func receiveAction(ctx *cli.Context) error { - offchainAddr, onchainAddr, err := getAddress() + offchainAddr, onchainAddr, _, err := getAddress() if err != nil { return err } diff --git a/client/redeem.go b/client/redeem.go index b605193..126dc17 100644 --- a/client/redeem.go +++ b/client/redeem.go @@ -2,6 +2,7 @@ package main import ( "bufio" + "context" "fmt" "log" "os" @@ -56,18 +57,26 @@ func redeemAction(ctx *cli.Context) error { return fmt.Errorf("missing amount flag (--amount)") } + client, clean, err := getClientFromState() + if err != nil { + return err + } + defer clean() + if force { if amount > 0 { fmt.Printf("WARNING: unilateral exit (--force) ignores --amount flag, it will redeem all your VTXOs\n") } - return unilateralRedeem(ctx) + return unilateralRedeem(client, ctx.Context) } - return collaborativeRedeem(ctx, addr, amount) + return collaborativeRedeem(client, ctx.Context, addr, amount) } -func collaborativeRedeem(ctx *cli.Context, addr string, amount uint64) error { +func collaborativeRedeem( + client arkv1.ArkServiceClient, ctx context.Context, addr string, amount uint64, +) error { if _, err := address.ToOutputScript(addr); err != nil { return fmt.Errorf("invalid onchain address") } @@ -86,7 +95,7 @@ func collaborativeRedeem(ctx *cli.Context, addr string, amount uint64) error { addr = info.Address } - offchainAddr, _, err := getAddress() + offchainAddr, _, _, err := getAddress() if err != nil { return err } @@ -98,12 +107,6 @@ func collaborativeRedeem(ctx *cli.Context, addr string, amount uint64) error { }, } - client, close, err := getClientFromState(ctx) - if err != nil { - return err - } - defer close() - explorer := NewExplorer() vtxos, err := getVtxos(ctx, explorer, client, offchainAddr, true) @@ -137,14 +140,14 @@ func collaborativeRedeem(ctx *cli.Context, addr string, amount uint64) error { return err } - registerResponse, err := client.RegisterPayment(ctx.Context, &arkv1.RegisterPaymentRequest{ + registerResponse, err := client.RegisterPayment(ctx, &arkv1.RegisterPaymentRequest{ Inputs: inputs, }) if err != nil { return err } - _, err = client.ClaimPayment(ctx.Context, &arkv1.ClaimPaymentRequest{ + _, err = client.ClaimPayment(ctx, &arkv1.ClaimPaymentRequest{ Id: registerResponse.GetId(), Outputs: receivers, }) @@ -173,14 +176,8 @@ func collaborativeRedeem(ctx *cli.Context, addr string, amount uint64) error { return nil } -func unilateralRedeem(ctx *cli.Context) error { - client, close, err := getClientFromState(ctx) - if err != nil { - return err - } - defer close() - - offchainAddr, _, err := getAddress() +func unilateralRedeem(client arkv1.ArkServiceClient, ctx context.Context) error { + offchainAddr, _, _, err := getAddress() if err != nil { return err } @@ -212,7 +209,7 @@ func unilateralRedeem(ctx *cli.Context) error { } for _, branch := range redeemBranches { - branchTxs, err := branch.RedeemPath() + branchTxs, err := branch.redeemPath() if err != nil { return err } diff --git a/client/send.go b/client/send.go index f47250c..ce1259e 100644 --- a/client/send.go +++ b/client/send.go @@ -18,7 +18,7 @@ type receiver struct { Amount uint64 `json:"amount"` } -func (r *receiver) IsOnchain() bool { +func (r *receiver) isOnchain() bool { _, err := address.ToOutputScript(r.To) return err == nil } @@ -75,20 +75,22 @@ func sendAction(ctx *cli.Context) error { offchainReceivers := make([]receiver, 0) for _, receiver := range receiversJSON { - if receiver.IsOnchain() { + if receiver.isOnchain() { onchainReceivers = append(onchainReceivers, receiver) } else { offchainReceivers = append(offchainReceivers, receiver) } } + explorer := NewExplorer() + if len(onchainReceivers) > 0 { pset, err := sendOnchain(ctx, onchainReceivers) if err != nil { return err } - txid, err := broadcastPset(pset) + txid, err := explorer.Broadcast(pset) if err != nil { return err } @@ -108,7 +110,7 @@ func sendAction(ctx *cli.Context) error { } func sendOffchain(ctx *cli.Context, receivers []receiver) error { - offchainAddr, _, err := getAddress() + offchainAddr, _, _, err := getAddress() if err != nil { return err } @@ -127,7 +129,9 @@ func sendOffchain(ctx *cli.Context, receivers []receiver) error { return fmt.Errorf("invalid receiver address: %s", err) } - if !bytes.Equal(aspPubKey.SerializeCompressed(), aspKey.SerializeCompressed()) { + if !bytes.Equal( + aspPubKey.SerializeCompressed(), aspKey.SerializeCompressed(), + ) { return fmt.Errorf("invalid receiver address '%s': must be associated with the connected service provider", receiver.To) } @@ -141,7 +145,7 @@ func sendOffchain(ctx *cli.Context, receivers []receiver) error { }) sumOfReceivers += receiver.Amount } - client, close, err := getClientFromState(ctx) + client, close, err := getClientFromState() if err != nil { return err } @@ -149,7 +153,7 @@ func sendOffchain(ctx *cli.Context, receivers []receiver) error { explorer := NewExplorer() - vtxos, err := getVtxos(ctx, explorer, client, offchainAddr, true) + vtxos, err := getVtxos(ctx.Context, explorer, client, offchainAddr, true) if err != nil { return err } @@ -181,9 +185,9 @@ func sendOffchain(ctx *cli.Context, receivers []receiver) error { return err } - registerResponse, err := client.RegisterPayment(ctx.Context, &arkv1.RegisterPaymentRequest{ - Inputs: inputs, - }) + registerResponse, err := client.RegisterPayment( + ctx.Context, &arkv1.RegisterPaymentRequest{Inputs: inputs}, + ) if err != nil { return err } @@ -197,12 +201,8 @@ func sendOffchain(ctx *cli.Context, receivers []receiver) error { } poolTxID, err := handleRoundStream( - ctx, - client, - registerResponse.GetId(), - selectedCoins, - secKey, - receiversOutput, + ctx.Context, client, registerResponse.GetId(), + selectedCoins, secKey, receiversOutput, ) if err != nil { return err @@ -248,17 +248,21 @@ func sendOnchain(ctx *cli.Context, receivers []receiver) (string, error) { } } - selected, delayedSelected, change, err := coinSelectOnchain(targetAmount, nil) + explorer := NewExplorer() + + utxos, delayedUtxos, change, err := coinSelectOnchain( + explorer, targetAmount, nil, + ) if err != nil { return "", err } - if err := addInputs(updater, selected, delayedSelected, net); err != nil { + if err := addInputs(updater, utxos, delayedUtxos, net); err != nil { return "", err } if change > 0 { - _, changeAddr, err := getAddress() + _, changeAddr, _, err := getAddress() if err != nil { return "", err } @@ -297,8 +301,7 @@ func sendOnchain(ctx *cli.Context, receivers []receiver) (string, error) { } // reselect the difference selected, delayedSelected, newChange, err := coinSelectOnchain( - feeAmount-change, - append(selected, delayedSelected...), + explorer, feeAmount-change, append(utxos, delayedUtxos...), ) if err != nil { return "", err @@ -309,7 +312,7 @@ func sendOnchain(ctx *cli.Context, receivers []receiver) (string, error) { } if newChange > 0 { - _, changeAddr, err := getAddress() + _, changeAddr, _, err := getAddress() if err != nil { return "", err } @@ -345,8 +348,6 @@ func sendOnchain(ctx *cli.Context, receivers []receiver) (string, error) { return "", err } - explorer := NewExplorer() - if err := signPset(updater.Pset, explorer, prvKey); err != nil { return "", err } @@ -357,22 +358,3 @@ func sendOnchain(ctx *cli.Context, receivers []receiver) (string, error) { return updater.Pset.ToBase64() } - -func broadcastPset(psetB64 string) (string, error) { - pset, err := psetv2.NewPsetFromBase64(psetB64) - if err != nil { - return "", err - } - - extracted, err := psetv2.Extract(pset) - if err != nil { - return "", err - } - - hex, err := extracted.ToHex() - if err != nil { - return "", err - } - - return NewExplorer().Broadcast(hex) -} diff --git a/client/signer.go b/client/signer.go index 2597030..0a951ef 100644 --- a/client/signer.go +++ b/client/signer.go @@ -17,9 +17,7 @@ import ( ) func signPset( - pset *psetv2.Pset, - explorer Explorer, - prvKey *secp256k1.PrivateKey, + pset *psetv2.Pset, explorer Explorer, prvKey *secp256k1.PrivateKey, ) error { updater, err := psetv2.NewUpdater(pset) if err != nil { @@ -66,7 +64,7 @@ func signPset( return err } - _, onchainAddr, err := getAddress() + _, onchainAddr, _, err := getAddress() if err != nil { return err } diff --git a/client/unilateral_redeem.go b/client/unilateral_redeem.go index 4b520d2..baffab0 100644 --- a/client/unilateral_redeem.go +++ b/client/unilateral_redeem.go @@ -1,24 +1,17 @@ package main import ( + "context" "fmt" "time" "github.com/ark-network/ark/common/tree" "github.com/btcsuite/btcd/btcec/v2/schnorr" "github.com/decred/dcrd/dcrec/secp256k1/v4" - "github.com/urfave/cli/v2" "github.com/vulpemventures/go-elements/psetv2" "github.com/vulpemventures/go-elements/taproot" ) -type RedeemBranch interface { - // RedeemPath returns the list of transactions to broadcast in order to access the vtxo output - RedeemPath() ([]string, error) - // ExpireAt returns the expiration time of the branch - ExpireAt() (*time.Time, error) -} - type redeemBranch struct { vtxo *vtxo branch []*psetv2.Pset @@ -29,11 +22,9 @@ type redeemBranch struct { } func newRedeemBranch( - ctx *cli.Context, - explorer Explorer, - congestionTree tree.CongestionTree, - vtxo vtxo, -) (RedeemBranch, error) { + ctx context.Context, explorer Explorer, + congestionTree tree.CongestionTree, vtxo vtxo, +) (*redeemBranch, error) { sweepClosure, seconds, err := findSweepClosure(congestionTree) if err != nil { return nil, err @@ -75,7 +66,7 @@ func newRedeemBranch( } // RedeemPath returns the list of transactions to broadcast in order to access the vtxo output -func (r *redeemBranch) RedeemPath() ([]string, error) { +func (r *redeemBranch) redeemPath() ([]string, error) { transactions := make([]string, 0, len(r.branch)) offchainPath, err := r.offchainPath() @@ -125,7 +116,7 @@ func (r *redeemBranch) RedeemPath() ([]string, error) { return transactions, nil } -func (r *redeemBranch) ExpireAt() (*time.Time, error) { +func (r *redeemBranch) expireAt() (*time.Time, error) { lastKnownBlocktime := int64(0) confirmed, blocktime, _ := getTxBlocktime(r.vtxo.poolTxid) diff --git a/common/encoding.go b/common/encoding.go index 7fb6fb6..2f46ef8 100644 --- a/common/encoding.go +++ b/common/encoding.go @@ -7,7 +7,9 @@ import ( "github.com/decred/dcrd/dcrec/secp256k1/v4" ) -func EncodeAddress(hrp string, userKey, aspKey *secp256k1.PublicKey) (addr string, err error) { +func EncodeAddress( + hrp string, userKey, aspKey *secp256k1.PublicKey, +) (addr string, err error) { if userKey == nil { err = fmt.Errorf("missing public key") return @@ -20,7 +22,9 @@ func EncodeAddress(hrp string, userKey, aspKey *secp256k1.PublicKey) (addr strin err = fmt.Errorf("invalid prefix") return } - combinedKey := append(aspKey.SerializeCompressed(), userKey.SerializeCompressed()...) + combinedKey := append( + aspKey.SerializeCompressed(), userKey.SerializeCompressed()..., + ) grp, err := bech32.ConvertBits(combinedKey, 8, 5, true) if err != nil { return @@ -29,7 +33,9 @@ func EncodeAddress(hrp string, userKey, aspKey *secp256k1.PublicKey) (addr strin return } -func DecodeAddress(addr string) (hrp string, userKey *secp256k1.PublicKey, aspKey *secp256k1.PublicKey, err error) { +func DecodeAddress( + addr string, +) (hrp string, userKey *secp256k1.PublicKey, aspKey *secp256k1.PublicKey, err error) { prefix, buf, err := bech32.DecodeNoLimit(addr) if err != nil { return diff --git a/common/taproot.go b/common/taproot.go index bc3eabe..4637ac8 100644 --- a/common/taproot.go +++ b/common/taproot.go @@ -10,9 +10,7 @@ import ( // TaprootPreimage computes the hash for witness v1 input of a pset // it implicitly assumes that the pset has witnessUtxo fields populated func TaprootPreimage( - genesisBlockHash *chainhash.Hash, - pset *psetv2.Pset, - inputIndex int, + genesisBlockHash *chainhash.Hash, pset *psetv2.Pset, inputIndex int, leafHash *chainhash.Hash, ) ([]byte, error) { prevoutScripts := make([][]byte, 0) @@ -35,14 +33,8 @@ func TaprootPreimage( } preimage := utx.HashForWitnessV1( - inputIndex, - prevoutScripts, - prevoutAssets, - prevoutValues, - pset.Inputs[inputIndex].SigHashType, - genesisBlockHash, - leafHash, - nil, + inputIndex, prevoutScripts, prevoutAssets, prevoutValues, + pset.Inputs[inputIndex].SigHashType, genesisBlockHash, leafHash, nil, ) return preimage[:], nil } diff --git a/common/tree/builder.go b/common/tree/builder.go index 464a8f1..2660ee3 100644 --- a/common/tree/builder.go +++ b/common/tree/builder.go @@ -13,14 +13,14 @@ import ( ) func CraftCongestionTree( - asset string, aspPublicKey *secp256k1.PublicKey, - receivers []Receiver, feeSatsPerNode uint64, roundLifetime int64, exitDelay int64, + asset string, aspPubkey *secp256k1.PublicKey, receivers []Receiver, + feeSatsPerNode uint64, roundLifetime, unilateralExitDelay int64, ) ( buildCongestionTree TreeFactory, sharedOutputScript []byte, sharedOutputAmount uint64, err error, ) { root, err := createPartialCongestionTree( - receivers, aspPublicKey, asset, feeSatsPerNode, roundLifetime, exitDelay, + asset, aspPubkey, receivers, feeSatsPerNode, roundLifetime, unilateralExitDelay, ) if err != nil { return @@ -42,14 +42,14 @@ func CraftCongestionTree( } type node struct { - sweepKey *secp256k1.PublicKey - receivers []Receiver - left *node - right *node - asset string - feeSats uint64 - roundLifetime int64 - exitDelay int64 + sweepKey *secp256k1.PublicKey + receivers []Receiver + left *node + right *node + asset string + feeSats uint64 + roundLifetime int64 + unilateralExitDelay int64 _inputTaprootKey *secp256k1.PublicKey _inputTaprootTree *taproot.IndexedElementsTapScriptTree @@ -260,7 +260,7 @@ func (n *node) getVtxoWitnessData() ( redeemClosure := &CSVSigClosure{ Pubkey: pubkey, - Seconds: uint(n.exitDelay), + Seconds: uint(n.unilateralExitDelay), } redeemLeaf, err := redeemClosure.Leaf() @@ -412,12 +412,8 @@ func (n *node) createFinalCongestionTree() TreeFactory { } func createPartialCongestionTree( - receivers []Receiver, - aspPublicKey *secp256k1.PublicKey, - asset string, - feeSatsPerNode uint64, - roundLifetime int64, - exitDelay int64, + asset string, aspPubkey *secp256k1.PublicKey, receivers []Receiver, + feeSatsPerNode uint64, roundLifetime, unilateralExitDelay int64, ) (root *node, err error) { if len(receivers) == 0 { return nil, fmt.Errorf("no receivers provided") @@ -426,12 +422,12 @@ func createPartialCongestionTree( nodes := make([]*node, 0, len(receivers)) for _, r := range receivers { leafNode := &node{ - sweepKey: aspPublicKey, - receivers: []Receiver{r}, - asset: asset, - feeSats: feeSatsPerNode, - roundLifetime: roundLifetime, - exitDelay: exitDelay, + sweepKey: aspPubkey, + receivers: []Receiver{r}, + asset: asset, + feeSats: feeSatsPerNode, + roundLifetime: roundLifetime, + unilateralExitDelay: unilateralExitDelay, } nodes = append(nodes, leafNode) } @@ -476,7 +472,9 @@ func createUpperLevel(nodes []*node) ([]*node, error) { } func taprootOutputScript(taprootKey *secp256k1.PublicKey) ([]byte, error) { - return txscript.NewScriptBuilder().AddOp(txscript.OP_1).AddData(schnorr.SerializePubKey(taprootKey)).Script() + return txscript.NewScriptBuilder().AddOp(txscript.OP_1).AddData( + schnorr.SerializePubKey(taprootKey), + ).Script() } func getPsetId(pset *psetv2.Pset) (string, error) { @@ -488,10 +486,8 @@ func getPsetId(pset *psetv2.Pset) (string, error) { return utx.TxHash().String(), nil } -// wrapper of updater methods adding a taproot input to the pset with all the necessary data to spend it via any taproot script func addTaprootInput( - updater *psetv2.Updater, - input psetv2.InputArgs, + updater *psetv2.Updater, input psetv2.InputArgs, internalTaprootKey *secp256k1.PublicKey, taprootTree *taproot.IndexedElementsTapScriptTree, ) error { @@ -499,7 +495,9 @@ func addTaprootInput( return err } - if err := updater.AddInTapInternalKey(0, schnorr.SerializePubKey(internalTaprootKey)); err != nil { + if err := updater.AddInTapInternalKey( + 0, schnorr.SerializePubKey(internalTaprootKey), + ); err != nil { return err } diff --git a/common/tree/script.go b/common/tree/script.go index e3c0a11..3815d66 100644 --- a/common/tree/script.go +++ b/common/tree/script.go @@ -64,7 +64,9 @@ func (f *ForfeitClosure) Leaf() (*taproot.TapElementsLeaf, error) { aspKeyBytes := schnorr.SerializePubKey(f.AspPubkey) userKeyBytes := schnorr.SerializePubKey(f.Pubkey) - script, err := txscript.NewScriptBuilder().AddData(aspKeyBytes).AddOp(txscript.OP_CHECKSIGVERIFY).AddData(userKeyBytes).AddOp(txscript.OP_CHECKSIG).Script() + script, err := txscript.NewScriptBuilder().AddData(aspKeyBytes). + AddOp(txscript.OP_CHECKSIGVERIFY).AddData(userKeyBytes). + AddOp(txscript.OP_CHECKSIG).Script() if err != nil { return nil, err } @@ -108,7 +110,7 @@ func (f *ForfeitClosure) Decode(script []byte) (bool, error) { } func (d *CSVSigClosure) Leaf() (*taproot.TapElementsLeaf, error) { - script, err := csvChecksigScript(d.Pubkey, d.Seconds) + script, err := encodeCsvWithChecksigScript(d.Pubkey, d.Seconds) if err != nil { return nil, err } @@ -118,7 +120,9 @@ func (d *CSVSigClosure) Leaf() (*taproot.TapElementsLeaf, error) { } func (d *CSVSigClosure) Decode(script []byte) (bool, error) { - csvIndex := bytes.Index(script, []byte{txscript.OP_CHECKSEQUENCEVERIFY, txscript.OP_DROP}) + csvIndex := bytes.Index( + script, []byte{txscript.OP_CHECKSEQUENCEVERIFY, txscript.OP_DROP}, + ) if csvIndex == -1 || csvIndex == 0 { return false, nil } @@ -140,7 +144,7 @@ func (d *CSVSigClosure) Decode(script []byte) (bool, error) { return false, nil } - rebuilt, err := csvChecksigScript(pubkey, seconds) + rebuilt, err := encodeCsvWithChecksigScript(pubkey, seconds) if err != nil { return false, err } @@ -160,14 +164,19 @@ func (c *UnrollClosure) Leaf() (*taproot.TapElementsLeaf, error) { return nil, fmt.Errorf("left key and amount are required") } - nextScriptLeft := withOutput(txscript.OP_0, schnorr.SerializePubKey(c.LeftKey), c.LeftAmount, c.RightKey != nil) + nextScriptLeft := encodeIntrospectionScript( + txscript.OP_0, + schnorr.SerializePubKey(c.LeftKey), c.LeftAmount, c.RightKey != nil, + ) branchScript := append([]byte{}, nextScriptLeft...) if c.RightKey != nil { if c.RightAmount == 0 { return nil, fmt.Errorf("right amount is required") } - nextScriptRight := withOutput(txscript.OP_1, schnorr.SerializePubKey(c.RightKey), c.RightAmount, false) + nextScriptRight := encodeIntrospectionScript( + txscript.OP_1, schnorr.SerializePubKey(c.RightKey), c.RightAmount, false, + ) branchScript = append(branchScript, nextScriptRight...) } leaf := taproot.NewBaseTapElementsLeaf(branchScript) @@ -181,7 +190,9 @@ func (c *UnrollClosure) Decode(script []byte) (valid bool, err error) { isLeftOnly := len(script) == 52 - validLeft, leftKey, leftAmount, err := decodeWithOutputScript(script[:52], txscript.OP_0, !isLeftOnly) + validLeft, leftKey, leftAmount, err := decodeIntrospectionScript( + script[:52], txscript.OP_0, !isLeftOnly, + ) if err != nil { return false, err } @@ -197,7 +208,9 @@ func (c *UnrollClosure) Decode(script []byte) (valid bool, err error) { return true, nil } - validRight, rightKey, rightAmount, err := decodeWithOutputScript(script[52:], txscript.OP_1, false) + validRight, rightKey, rightAmount, err := decodeIntrospectionScript( + script[52:], txscript.OP_1, false, + ) if err != nil { return false, err } @@ -221,7 +234,9 @@ func (c *UnrollClosure) Decode(script []byte) (valid bool, err error) { return true, nil } -func decodeWithOutputScript(script []byte, expectedIndex byte, isVerify bool) (valid bool, pubkey *secp256k1.PublicKey, amount uint64, err error) { +func decodeIntrospectionScript( + script []byte, expectedIndex byte, isVerify bool, +) (bool, *secp256k1.PublicKey, uint64, error) { if len(script) != 52 { return false, nil, 0, nil } @@ -231,7 +246,7 @@ func decodeWithOutputScript(script []byte, expectedIndex byte, isVerify bool) (v } // 32 bytes for the witness program - pubkey, err = schnorr.ParsePubKey(script[5 : 5+32]) + pubkey, err := schnorr.ParsePubKey(script[5 : 5+32]) if err != nil { return false, nil, 0, err } @@ -243,9 +258,11 @@ func decodeWithOutputScript(script []byte, expectedIndex byte, isVerify bool) (v // 8 bytes for the amount amountBytes := script[len(script)-9 : len(script)-1] - amount = binary.LittleEndian.Uint64(amountBytes) + amount := binary.LittleEndian.Uint64(amountBytes) - rebuilt := withOutput(expectedIndex, schnorr.SerializePubKey(pubkey), amount, isVerify) + rebuilt := encodeIntrospectionScript( + expectedIndex, schnorr.SerializePubKey(pubkey), amount, isVerify, + ) if !bytes.Equal(rebuilt, script) { return false, nil, 0, nil } @@ -253,7 +270,7 @@ func decodeWithOutputScript(script []byte, expectedIndex byte, isVerify bool) (v return true, pubkey, amount, nil } -func decodeChecksigScript(script []byte) (valid bool, pubkey *secp256k1.PublicKey, err error) { +func decodeChecksigScript(script []byte) (bool, *secp256k1.PublicKey, error) { data32Index := bytes.Index(script, []byte{txscript.OP_DATA_32}) if data32Index == -1 { return false, nil, nil @@ -264,7 +281,7 @@ func decodeChecksigScript(script []byte) (valid bool, pubkey *secp256k1.PublicKe return false, nil, nil } - pubkey, err = schnorr.ParsePubKey(key) + pubkey, err := schnorr.ParsePubKey(key) if err != nil { return false, nil, err } @@ -273,7 +290,7 @@ func decodeChecksigScript(script []byte) (valid bool, pubkey *secp256k1.PublicKe } // checkSequenceVerifyScript without checksig -func checkSequenceVerifyScript(seconds uint) ([]byte, error) { +func encodeCsvScript(seconds uint) ([]byte, error) { sequence, err := common.BIP68Encode(seconds) if err != nil { return nil, err @@ -286,13 +303,15 @@ func checkSequenceVerifyScript(seconds uint) ([]byte, error) { } // checkSequenceVerifyScript + checksig -func csvChecksigScript(pubkey *secp256k1.PublicKey, seconds uint) ([]byte, error) { - script, err := checksigScript(pubkey) +func encodeCsvWithChecksigScript( + pubkey *secp256k1.PublicKey, seconds uint, +) ([]byte, error) { + script, err := encodeChecksigScript(pubkey) if err != nil { return nil, err } - csvScript, err := checkSequenceVerifyScript(seconds) + csvScript, err := encodeCsvScript(seconds) if err != nil { return nil, err } @@ -300,15 +319,19 @@ func csvChecksigScript(pubkey *secp256k1.PublicKey, seconds uint) ([]byte, error return append(csvScript, script...), nil } -func checksigScript(pubkey *secp256k1.PublicKey) ([]byte, error) { +func encodeChecksigScript(pubkey *secp256k1.PublicKey) ([]byte, error) { key := schnorr.SerializePubKey(pubkey) - return txscript.NewScriptBuilder().AddData(key).AddOp(txscript.OP_CHECKSIG).Script() + return txscript.NewScriptBuilder().AddData(key). + AddOp(txscript.OP_CHECKSIG).Script() } -// withOutput returns an introspection script that checks the script and the amount of the output at the given index -// verify will add an OP_EQUALVERIFY at the end of the script, otherwise it will add an OP_EQUAL +// getIntrospectionScript returns an introspection script that checks the +// script and the amount of the output at the given index verify will add an +// OP_EQUALVERIFY at the end of the script, otherwise it will add an OP_EQUAL // length = 52 bytes -func withOutput(index byte, taprootWitnessProgram []byte, amount uint64, verify bool) []byte { +func encodeIntrospectionScript( + index byte, taprootWitnessProgram []byte, amount uint64, verify bool, +) []byte { amountBuffer := make([]byte, 8) binary.LittleEndian.PutUint64(amountBuffer, amount) diff --git a/common/tree/validation.go b/common/tree/validation.go index f56f0dd..14cbb35 100644 --- a/common/tree/validation.go +++ b/common/tree/validation.go @@ -63,7 +63,7 @@ func UnspendableKey() *secp256k1.PublicKey { // ValidateCongestionTree checks if the given congestion tree is valid // poolTxID & poolTxIndex & poolTxAmount are used to validate the root input outpoint -// aspPublicKey & roundLifetimeSeconds are used to validate the sweep tapscript leaves +// aspPublicKey & roundLifetime are used to validate the sweep tapscript leaves // besides that, the function validates: // - the number of nodes // - the number of leaves @@ -71,10 +71,8 @@ func UnspendableKey() *secp256k1.PublicKey { // - every control block and taproot output scripts // - input and output amounts func ValidateCongestionTree( - tree CongestionTree, - poolTx string, - aspPublicKey *secp256k1.PublicKey, - roundLifetimeSeconds int64, + tree CongestionTree, poolTx string, aspPublicKey *secp256k1.PublicKey, + roundLifetime int64, ) error { poolTransaction, err := psetv2.NewPsetFromBase64(poolTx) if err != nil { @@ -115,7 +113,8 @@ func ValidateCongestionTree( } rootInput := rootPset.Inputs[0] - if chainhash.Hash(rootInput.PreviousTxid).String() != poolTxID || rootInput.PreviousTxIndex != sharedOutputIndex { + if chainhash.Hash(rootInput.PreviousTxid).String() != poolTxID || + rootInput.PreviousTxIndex != sharedOutputIndex { return ErrWrongPoolTxID } @@ -135,7 +134,9 @@ func ValidateCongestionTree( // iterates over all the nodes of the tree for _, level := range tree { for _, node := range level { - if err := validateNodeTransaction(node, tree, UnspendableKey(), aspPublicKey, roundLifetimeSeconds); err != nil { + if err := validateNodeTransaction( + node, tree, UnspendableKey(), aspPublicKey, roundLifetime, + ); err != nil { return err } } @@ -145,11 +146,9 @@ func ValidateCongestionTree( } func validateNodeTransaction( - node Node, - tree CongestionTree, - expectedInternalKey, - expectedPublicKeyASP *secp256k1.PublicKey, - expectedSequenceSeconds int64, + node Node, tree CongestionTree, + expectedInternalKey, expectedPublicKeyASP *secp256k1.PublicKey, + expectedSequence int64, ) error { if node.Tx == "" { return ErrNodeTransactionEmpty @@ -186,7 +185,8 @@ func validateNodeTransaction( return ErrNumberOfTapscripts } - if chainhash.Hash(decodedPset.Inputs[0].PreviousTxid).String() != node.ParentTxid { + prevTxid := chainhash.Hash(decodedPset.Inputs[0].PreviousTxid).String() + if prevTxid != node.ParentTxid { return ErrParentTxidInput } @@ -225,19 +225,24 @@ func validateNodeTransaction( rootHash := tapLeaf.ControlBlock.RootHash(tapLeaf.Script) outputScript := taproot.ComputeTaprootOutputKey(key, rootHash) - if !bytes.Equal(schnorr.SerializePubKey(outputScript), previousScriptKey) { + if !bytes.Equal( + schnorr.SerializePubKey(outputScript), previousScriptKey, + ) { return ErrInvalidTaprootScript } - close, err := DecodeClosure(tapLeaf.Script) + closure, err := DecodeClosure(tapLeaf.Script) if err != nil { continue } - switch c := close.(type) { + switch c := closure.(type) { case *CSVSigClosure: - isASP := bytes.Equal(schnorr.SerializePubKey(c.Pubkey), schnorr.SerializePubKey(expectedPublicKeyASP)) - isSweepDelay := int64(c.Seconds) == expectedSequenceSeconds + isASP := bytes.Equal( + schnorr.SerializePubKey(c.Pubkey), + schnorr.SerializePubKey(expectedPublicKeyASP), + ) + isSweepDelay := int64(c.Seconds) == expectedSequence if isASP && !isSweepDelay { return ErrInvalidSweepSequence @@ -268,7 +273,9 @@ func validateNodeTransaction( leftWitnessProgram := childTx.Outputs[0].Script[2:] leftOutputAmount := childTx.Outputs[0].Value - if !bytes.Equal(leftWitnessProgram, schnorr.SerializePubKey(c.LeftKey)) { + if !bytes.Equal( + leftWitnessProgram, schnorr.SerializePubKey(c.LeftKey), + ) { return ErrInvalidLeftOutput } @@ -280,7 +287,9 @@ func validateNodeTransaction( rightWitnessProgram := childTx.Outputs[1].Script[2:] rightOutputAmount := childTx.Outputs[1].Value - if !bytes.Equal(rightWitnessProgram, schnorr.SerializePubKey(c.RightKey)) { + if !bytes.Equal( + rightWitnessProgram, schnorr.SerializePubKey(c.RightKey), + ) { return ErrInvalidRightOutput } diff --git a/server/api-spec/openapi/swagger/ark/v1/service.swagger.json b/server/api-spec/openapi/swagger/ark/v1/service.swagger.json index 72cec64..e1fab1e 100644 --- a/server/api-spec/openapi/swagger/ark/v1/service.swagger.json +++ b/server/api-spec/openapi/swagger/ark/v1/service.swagger.json @@ -372,11 +372,11 @@ "pubkey": { "type": "string" }, - "lifetime": { + "roundLifetime": { "type": "string", "format": "int64" }, - "exitDelay": { + "unilateralExitDelay": { "type": "string", "format": "int64" } diff --git a/server/api-spec/openapi/swagger/ocean/v1/transaction.swagger.json b/server/api-spec/openapi/swagger/ocean/v1/transaction.swagger.json index 52c1cfd..8360369 100644 --- a/server/api-spec/openapi/swagger/ocean/v1/transaction.swagger.json +++ b/server/api-spec/openapi/swagger/ocean/v1/transaction.swagger.json @@ -169,6 +169,15 @@ } } }, + "v1LockUtxosResponse": { + "type": "object", + "properties": { + "expirationDate": { + "type": "string", + "format": "int64" + } + } + }, "v1MintResponse": { "type": "object", "properties": { diff --git a/server/api-spec/protobuf/ark/v1/service.proto b/server/api-spec/protobuf/ark/v1/service.proto index 4e487c3..f78cc37 100755 --- a/server/api-spec/protobuf/ark/v1/service.proto +++ b/server/api-spec/protobuf/ark/v1/service.proto @@ -56,15 +56,6 @@ service ArkService { } } -message OnboardRequest { - string boarding_tx = 1; - Tree congestion_tree = 2; - string user_pubkey = 3; -} - -message OnboardResponse { -} - message RegisterPaymentRequest { repeated Input inputs = 1; } @@ -94,6 +85,63 @@ message GetRoundResponse { Round round = 1; } +message GetEventStreamRequest {} +message GetEventStreamResponse { + oneof event { + RoundFinalizationEvent round_finalization = 1; + RoundFinalizedEvent round_finalized = 2; + RoundFailed round_failed = 3; + } +} + +message PingRequest { + string payment_id = 1; +} +message PingResponse {} + +message ListVtxosRequest { + string address = 1; +} +message ListVtxosResponse { + repeated Vtxo vtxos = 1; +} + +message GetInfoRequest {} +message GetInfoResponse { + string pubkey = 1; + int64 round_lifetime = 2; + int64 unilateral_exit_delay = 3; +} + +message OnboardRequest { + string boarding_tx = 1; + Tree congestion_tree = 2; + string user_pubkey = 3; +} +message OnboardResponse { +} + +// EVENT TYPES + +message RoundFinalizationEvent { + string id = 1; + string pool_partial_tx = 2; + repeated string forfeit_txs = 3; + Tree congestion_tree = 4; +} + +message RoundFinalizedEvent { + string id = 1; + string pool_txid = 2; +} + +message RoundFailed { + string id = 1; + string reason = 2; +} + +// TYPES + message Round { string id = 1; int64 start = 2; @@ -114,13 +162,6 @@ message Output { uint64 amount = 2; } -message RoundFinalizationEvent { - string id = 1; - string pool_partial_tx = 2; - repeated string forfeit_txs = 3; - Tree congestion_tree = 4; -} - message Tree { repeated TreeLevel levels = 1; } @@ -135,51 +176,9 @@ message Node { string parent_txid = 3; } -message RoundFinalizedEvent { - string id = 1; - string pool_txid = 2; -} - -message RoundFailed { - string id = 1; - string reason = 2; -} - -message GetEventStreamRequest {} - -message GetEventStreamResponse { - oneof event { - RoundFinalizationEvent round_finalization = 1; - RoundFinalizedEvent round_finalized = 2; - RoundFailed round_failed = 3; - } -} - -message PingRequest { - string payment_id = 1; -} - -message PingResponse {} - -message ListVtxosRequest { - string address = 1; -} - -message ListVtxosResponse { - repeated Vtxo vtxos = 1; -} - message Vtxo { Input outpoint = 1; Output receiver = 2; bool spent = 3; string pool_txid = 4; -} - -message GetInfoRequest {} - -message GetInfoResponse { - string pubkey = 1; - int64 lifetime = 2; - int64 exit_delay = 3; } \ No newline at end of file diff --git a/server/api-spec/protobuf/gen/ark/v1/service.pb.go b/server/api-spec/protobuf/gen/ark/v1/service.pb.go index 513ab32..fa3af34 100644 --- a/server/api-spec/protobuf/gen/ark/v1/service.pb.go +++ b/server/api-spec/protobuf/gen/ark/v1/service.pb.go @@ -21,107 +21,6 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -type OnboardRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - BoardingTx string `protobuf:"bytes,1,opt,name=boarding_tx,json=boardingTx,proto3" json:"boarding_tx,omitempty"` - CongestionTree *Tree `protobuf:"bytes,2,opt,name=congestion_tree,json=congestionTree,proto3" json:"congestion_tree,omitempty"` - UserPubkey string `protobuf:"bytes,3,opt,name=user_pubkey,json=userPubkey,proto3" json:"user_pubkey,omitempty"` -} - -func (x *OnboardRequest) Reset() { - *x = OnboardRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_ark_v1_service_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *OnboardRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*OnboardRequest) ProtoMessage() {} - -func (x *OnboardRequest) ProtoReflect() protoreflect.Message { - mi := &file_ark_v1_service_proto_msgTypes[0] - 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 OnboardRequest.ProtoReflect.Descriptor instead. -func (*OnboardRequest) Descriptor() ([]byte, []int) { - return file_ark_v1_service_proto_rawDescGZIP(), []int{0} -} - -func (x *OnboardRequest) GetBoardingTx() string { - if x != nil { - return x.BoardingTx - } - return "" -} - -func (x *OnboardRequest) GetCongestionTree() *Tree { - if x != nil { - return x.CongestionTree - } - return nil -} - -func (x *OnboardRequest) GetUserPubkey() string { - if x != nil { - return x.UserPubkey - } - return "" -} - -type OnboardResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *OnboardResponse) Reset() { - *x = OnboardResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_ark_v1_service_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *OnboardResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*OnboardResponse) ProtoMessage() {} - -func (x *OnboardResponse) ProtoReflect() protoreflect.Message { - mi := &file_ark_v1_service_proto_msgTypes[1] - 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 OnboardResponse.ProtoReflect.Descriptor instead. -func (*OnboardResponse) Descriptor() ([]byte, []int) { - return file_ark_v1_service_proto_rawDescGZIP(), []int{1} -} - type RegisterPaymentRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -133,7 +32,7 @@ type RegisterPaymentRequest struct { func (x *RegisterPaymentRequest) Reset() { *x = RegisterPaymentRequest{} if protoimpl.UnsafeEnabled { - mi := &file_ark_v1_service_proto_msgTypes[2] + mi := &file_ark_v1_service_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -146,7 +45,7 @@ func (x *RegisterPaymentRequest) String() string { func (*RegisterPaymentRequest) ProtoMessage() {} func (x *RegisterPaymentRequest) ProtoReflect() protoreflect.Message { - mi := &file_ark_v1_service_proto_msgTypes[2] + mi := &file_ark_v1_service_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -159,7 +58,7 @@ func (x *RegisterPaymentRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RegisterPaymentRequest.ProtoReflect.Descriptor instead. func (*RegisterPaymentRequest) Descriptor() ([]byte, []int) { - return file_ark_v1_service_proto_rawDescGZIP(), []int{2} + return file_ark_v1_service_proto_rawDescGZIP(), []int{0} } func (x *RegisterPaymentRequest) GetInputs() []*Input { @@ -181,7 +80,7 @@ type RegisterPaymentResponse struct { func (x *RegisterPaymentResponse) Reset() { *x = RegisterPaymentResponse{} if protoimpl.UnsafeEnabled { - mi := &file_ark_v1_service_proto_msgTypes[3] + mi := &file_ark_v1_service_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -194,7 +93,7 @@ func (x *RegisterPaymentResponse) String() string { func (*RegisterPaymentResponse) ProtoMessage() {} func (x *RegisterPaymentResponse) ProtoReflect() protoreflect.Message { - mi := &file_ark_v1_service_proto_msgTypes[3] + mi := &file_ark_v1_service_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -207,7 +106,7 @@ func (x *RegisterPaymentResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RegisterPaymentResponse.ProtoReflect.Descriptor instead. func (*RegisterPaymentResponse) Descriptor() ([]byte, []int) { - return file_ark_v1_service_proto_rawDescGZIP(), []int{3} + return file_ark_v1_service_proto_rawDescGZIP(), []int{1} } func (x *RegisterPaymentResponse) GetId() string { @@ -231,7 +130,7 @@ type ClaimPaymentRequest struct { func (x *ClaimPaymentRequest) Reset() { *x = ClaimPaymentRequest{} if protoimpl.UnsafeEnabled { - mi := &file_ark_v1_service_proto_msgTypes[4] + mi := &file_ark_v1_service_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -244,7 +143,7 @@ func (x *ClaimPaymentRequest) String() string { func (*ClaimPaymentRequest) ProtoMessage() {} func (x *ClaimPaymentRequest) ProtoReflect() protoreflect.Message { - mi := &file_ark_v1_service_proto_msgTypes[4] + mi := &file_ark_v1_service_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -257,7 +156,7 @@ func (x *ClaimPaymentRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ClaimPaymentRequest.ProtoReflect.Descriptor instead. func (*ClaimPaymentRequest) Descriptor() ([]byte, []int) { - return file_ark_v1_service_proto_rawDescGZIP(), []int{4} + return file_ark_v1_service_proto_rawDescGZIP(), []int{2} } func (x *ClaimPaymentRequest) GetId() string { @@ -283,7 +182,7 @@ type ClaimPaymentResponse struct { func (x *ClaimPaymentResponse) Reset() { *x = ClaimPaymentResponse{} if protoimpl.UnsafeEnabled { - mi := &file_ark_v1_service_proto_msgTypes[5] + mi := &file_ark_v1_service_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -296,7 +195,7 @@ func (x *ClaimPaymentResponse) String() string { func (*ClaimPaymentResponse) ProtoMessage() {} func (x *ClaimPaymentResponse) ProtoReflect() protoreflect.Message { - mi := &file_ark_v1_service_proto_msgTypes[5] + mi := &file_ark_v1_service_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -309,7 +208,7 @@ func (x *ClaimPaymentResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ClaimPaymentResponse.ProtoReflect.Descriptor instead. func (*ClaimPaymentResponse) Descriptor() ([]byte, []int) { - return file_ark_v1_service_proto_rawDescGZIP(), []int{5} + return file_ark_v1_service_proto_rawDescGZIP(), []int{3} } type FinalizePaymentRequest struct { @@ -324,7 +223,7 @@ type FinalizePaymentRequest struct { func (x *FinalizePaymentRequest) Reset() { *x = FinalizePaymentRequest{} if protoimpl.UnsafeEnabled { - mi := &file_ark_v1_service_proto_msgTypes[6] + mi := &file_ark_v1_service_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -337,7 +236,7 @@ func (x *FinalizePaymentRequest) String() string { func (*FinalizePaymentRequest) ProtoMessage() {} func (x *FinalizePaymentRequest) ProtoReflect() protoreflect.Message { - mi := &file_ark_v1_service_proto_msgTypes[6] + mi := &file_ark_v1_service_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -350,7 +249,7 @@ func (x *FinalizePaymentRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use FinalizePaymentRequest.ProtoReflect.Descriptor instead. func (*FinalizePaymentRequest) Descriptor() ([]byte, []int) { - return file_ark_v1_service_proto_rawDescGZIP(), []int{6} + return file_ark_v1_service_proto_rawDescGZIP(), []int{4} } func (x *FinalizePaymentRequest) GetSignedForfeitTxs() []string { @@ -369,7 +268,7 @@ type FinalizePaymentResponse struct { func (x *FinalizePaymentResponse) Reset() { *x = FinalizePaymentResponse{} if protoimpl.UnsafeEnabled { - mi := &file_ark_v1_service_proto_msgTypes[7] + mi := &file_ark_v1_service_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -382,7 +281,7 @@ func (x *FinalizePaymentResponse) String() string { func (*FinalizePaymentResponse) ProtoMessage() {} func (x *FinalizePaymentResponse) ProtoReflect() protoreflect.Message { - mi := &file_ark_v1_service_proto_msgTypes[7] + mi := &file_ark_v1_service_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -395,7 +294,7 @@ func (x *FinalizePaymentResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use FinalizePaymentResponse.ProtoReflect.Descriptor instead. func (*FinalizePaymentResponse) Descriptor() ([]byte, []int) { - return file_ark_v1_service_proto_rawDescGZIP(), []int{7} + return file_ark_v1_service_proto_rawDescGZIP(), []int{5} } type GetRoundRequest struct { @@ -409,7 +308,7 @@ type GetRoundRequest struct { func (x *GetRoundRequest) Reset() { *x = GetRoundRequest{} if protoimpl.UnsafeEnabled { - mi := &file_ark_v1_service_proto_msgTypes[8] + mi := &file_ark_v1_service_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -422,7 +321,7 @@ func (x *GetRoundRequest) String() string { func (*GetRoundRequest) ProtoMessage() {} func (x *GetRoundRequest) ProtoReflect() protoreflect.Message { - mi := &file_ark_v1_service_proto_msgTypes[8] + mi := &file_ark_v1_service_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -435,7 +334,7 @@ func (x *GetRoundRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetRoundRequest.ProtoReflect.Descriptor instead. func (*GetRoundRequest) Descriptor() ([]byte, []int) { - return file_ark_v1_service_proto_rawDescGZIP(), []int{8} + return file_ark_v1_service_proto_rawDescGZIP(), []int{6} } func (x *GetRoundRequest) GetTxid() string { @@ -456,7 +355,7 @@ type GetRoundResponse struct { func (x *GetRoundResponse) Reset() { *x = GetRoundResponse{} if protoimpl.UnsafeEnabled { - mi := &file_ark_v1_service_proto_msgTypes[9] + mi := &file_ark_v1_service_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -469,7 +368,7 @@ func (x *GetRoundResponse) String() string { func (*GetRoundResponse) ProtoMessage() {} func (x *GetRoundResponse) ProtoReflect() protoreflect.Message { - mi := &file_ark_v1_service_proto_msgTypes[9] + mi := &file_ark_v1_service_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -482,7 +381,7 @@ func (x *GetRoundResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetRoundResponse.ProtoReflect.Descriptor instead. func (*GetRoundResponse) Descriptor() ([]byte, []int) { - return file_ark_v1_service_proto_rawDescGZIP(), []int{9} + return file_ark_v1_service_proto_rawDescGZIP(), []int{7} } func (x *GetRoundResponse) GetRound() *Round { @@ -492,535 +391,6 @@ func (x *GetRoundResponse) GetRound() *Round { return nil } -type Round struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Start int64 `protobuf:"varint,2,opt,name=start,proto3" json:"start,omitempty"` - End int64 `protobuf:"varint,3,opt,name=end,proto3" json:"end,omitempty"` - Txid string `protobuf:"bytes,4,opt,name=txid,proto3" json:"txid,omitempty"` - CongestionTree *Tree `protobuf:"bytes,5,opt,name=congestion_tree,json=congestionTree,proto3" json:"congestion_tree,omitempty"` -} - -func (x *Round) Reset() { - *x = Round{} - if protoimpl.UnsafeEnabled { - mi := &file_ark_v1_service_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Round) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Round) ProtoMessage() {} - -func (x *Round) ProtoReflect() protoreflect.Message { - mi := &file_ark_v1_service_proto_msgTypes[10] - 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 Round.ProtoReflect.Descriptor instead. -func (*Round) Descriptor() ([]byte, []int) { - return file_ark_v1_service_proto_rawDescGZIP(), []int{10} -} - -func (x *Round) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *Round) GetStart() int64 { - if x != nil { - return x.Start - } - return 0 -} - -func (x *Round) GetEnd() int64 { - if x != nil { - return x.End - } - return 0 -} - -func (x *Round) GetTxid() string { - if x != nil { - return x.Txid - } - return "" -} - -func (x *Round) GetCongestionTree() *Tree { - if x != nil { - return x.CongestionTree - } - return nil -} - -type Input struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Txid string `protobuf:"bytes,1,opt,name=txid,proto3" json:"txid,omitempty"` - Vout uint32 `protobuf:"varint,2,opt,name=vout,proto3" json:"vout,omitempty"` -} - -func (x *Input) Reset() { - *x = Input{} - if protoimpl.UnsafeEnabled { - mi := &file_ark_v1_service_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Input) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Input) ProtoMessage() {} - -func (x *Input) ProtoReflect() protoreflect.Message { - mi := &file_ark_v1_service_proto_msgTypes[11] - 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 Input.ProtoReflect.Descriptor instead. -func (*Input) Descriptor() ([]byte, []int) { - return file_ark_v1_service_proto_rawDescGZIP(), []int{11} -} - -func (x *Input) GetTxid() string { - if x != nil { - return x.Txid - } - return "" -} - -func (x *Input) GetVout() uint32 { - if x != nil { - return x.Vout - } - return 0 -} - -type Output struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Either the offchain or onchain address. - Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` - // Amount to send in satoshis. - Amount uint64 `protobuf:"varint,2,opt,name=amount,proto3" json:"amount,omitempty"` -} - -func (x *Output) Reset() { - *x = Output{} - if protoimpl.UnsafeEnabled { - mi := &file_ark_v1_service_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Output) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Output) ProtoMessage() {} - -func (x *Output) ProtoReflect() protoreflect.Message { - mi := &file_ark_v1_service_proto_msgTypes[12] - 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 Output.ProtoReflect.Descriptor instead. -func (*Output) Descriptor() ([]byte, []int) { - return file_ark_v1_service_proto_rawDescGZIP(), []int{12} -} - -func (x *Output) GetAddress() string { - if x != nil { - return x.Address - } - return "" -} - -func (x *Output) GetAmount() uint64 { - if x != nil { - return x.Amount - } - return 0 -} - -type RoundFinalizationEvent struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - PoolPartialTx string `protobuf:"bytes,2,opt,name=pool_partial_tx,json=poolPartialTx,proto3" json:"pool_partial_tx,omitempty"` - ForfeitTxs []string `protobuf:"bytes,3,rep,name=forfeit_txs,json=forfeitTxs,proto3" json:"forfeit_txs,omitempty"` - CongestionTree *Tree `protobuf:"bytes,4,opt,name=congestion_tree,json=congestionTree,proto3" json:"congestion_tree,omitempty"` -} - -func (x *RoundFinalizationEvent) Reset() { - *x = RoundFinalizationEvent{} - if protoimpl.UnsafeEnabled { - mi := &file_ark_v1_service_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *RoundFinalizationEvent) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RoundFinalizationEvent) ProtoMessage() {} - -func (x *RoundFinalizationEvent) ProtoReflect() protoreflect.Message { - mi := &file_ark_v1_service_proto_msgTypes[13] - 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 RoundFinalizationEvent.ProtoReflect.Descriptor instead. -func (*RoundFinalizationEvent) Descriptor() ([]byte, []int) { - return file_ark_v1_service_proto_rawDescGZIP(), []int{13} -} - -func (x *RoundFinalizationEvent) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *RoundFinalizationEvent) GetPoolPartialTx() string { - if x != nil { - return x.PoolPartialTx - } - return "" -} - -func (x *RoundFinalizationEvent) GetForfeitTxs() []string { - if x != nil { - return x.ForfeitTxs - } - return nil -} - -func (x *RoundFinalizationEvent) GetCongestionTree() *Tree { - if x != nil { - return x.CongestionTree - } - return nil -} - -type Tree struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Levels []*TreeLevel `protobuf:"bytes,1,rep,name=levels,proto3" json:"levels,omitempty"` -} - -func (x *Tree) Reset() { - *x = Tree{} - if protoimpl.UnsafeEnabled { - mi := &file_ark_v1_service_proto_msgTypes[14] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Tree) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Tree) ProtoMessage() {} - -func (x *Tree) ProtoReflect() protoreflect.Message { - mi := &file_ark_v1_service_proto_msgTypes[14] - 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 Tree.ProtoReflect.Descriptor instead. -func (*Tree) Descriptor() ([]byte, []int) { - return file_ark_v1_service_proto_rawDescGZIP(), []int{14} -} - -func (x *Tree) GetLevels() []*TreeLevel { - if x != nil { - return x.Levels - } - return nil -} - -type TreeLevel struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Nodes []*Node `protobuf:"bytes,1,rep,name=nodes,proto3" json:"nodes,omitempty"` -} - -func (x *TreeLevel) Reset() { - *x = TreeLevel{} - if protoimpl.UnsafeEnabled { - mi := &file_ark_v1_service_proto_msgTypes[15] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *TreeLevel) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*TreeLevel) ProtoMessage() {} - -func (x *TreeLevel) ProtoReflect() protoreflect.Message { - mi := &file_ark_v1_service_proto_msgTypes[15] - 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 TreeLevel.ProtoReflect.Descriptor instead. -func (*TreeLevel) Descriptor() ([]byte, []int) { - return file_ark_v1_service_proto_rawDescGZIP(), []int{15} -} - -func (x *TreeLevel) GetNodes() []*Node { - if x != nil { - return x.Nodes - } - return nil -} - -type Node struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Txid string `protobuf:"bytes,1,opt,name=txid,proto3" json:"txid,omitempty"` - Tx string `protobuf:"bytes,2,opt,name=tx,proto3" json:"tx,omitempty"` - ParentTxid string `protobuf:"bytes,3,opt,name=parent_txid,json=parentTxid,proto3" json:"parent_txid,omitempty"` -} - -func (x *Node) Reset() { - *x = Node{} - if protoimpl.UnsafeEnabled { - mi := &file_ark_v1_service_proto_msgTypes[16] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Node) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Node) ProtoMessage() {} - -func (x *Node) ProtoReflect() protoreflect.Message { - mi := &file_ark_v1_service_proto_msgTypes[16] - 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 Node.ProtoReflect.Descriptor instead. -func (*Node) Descriptor() ([]byte, []int) { - return file_ark_v1_service_proto_rawDescGZIP(), []int{16} -} - -func (x *Node) GetTxid() string { - if x != nil { - return x.Txid - } - return "" -} - -func (x *Node) GetTx() string { - if x != nil { - return x.Tx - } - return "" -} - -func (x *Node) GetParentTxid() string { - if x != nil { - return x.ParentTxid - } - return "" -} - -type RoundFinalizedEvent struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - PoolTxid string `protobuf:"bytes,2,opt,name=pool_txid,json=poolTxid,proto3" json:"pool_txid,omitempty"` -} - -func (x *RoundFinalizedEvent) Reset() { - *x = RoundFinalizedEvent{} - if protoimpl.UnsafeEnabled { - mi := &file_ark_v1_service_proto_msgTypes[17] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *RoundFinalizedEvent) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RoundFinalizedEvent) ProtoMessage() {} - -func (x *RoundFinalizedEvent) ProtoReflect() protoreflect.Message { - mi := &file_ark_v1_service_proto_msgTypes[17] - 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 RoundFinalizedEvent.ProtoReflect.Descriptor instead. -func (*RoundFinalizedEvent) Descriptor() ([]byte, []int) { - return file_ark_v1_service_proto_rawDescGZIP(), []int{17} -} - -func (x *RoundFinalizedEvent) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *RoundFinalizedEvent) GetPoolTxid() string { - if x != nil { - return x.PoolTxid - } - return "" -} - -type RoundFailed struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Reason string `protobuf:"bytes,2,opt,name=reason,proto3" json:"reason,omitempty"` -} - -func (x *RoundFailed) Reset() { - *x = RoundFailed{} - if protoimpl.UnsafeEnabled { - mi := &file_ark_v1_service_proto_msgTypes[18] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *RoundFailed) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RoundFailed) ProtoMessage() {} - -func (x *RoundFailed) ProtoReflect() protoreflect.Message { - mi := &file_ark_v1_service_proto_msgTypes[18] - 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 RoundFailed.ProtoReflect.Descriptor instead. -func (*RoundFailed) Descriptor() ([]byte, []int) { - return file_ark_v1_service_proto_rawDescGZIP(), []int{18} -} - -func (x *RoundFailed) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *RoundFailed) GetReason() string { - if x != nil { - return x.Reason - } - return "" -} - type GetEventStreamRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1030,7 +400,7 @@ type GetEventStreamRequest struct { func (x *GetEventStreamRequest) Reset() { *x = GetEventStreamRequest{} if protoimpl.UnsafeEnabled { - mi := &file_ark_v1_service_proto_msgTypes[19] + mi := &file_ark_v1_service_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1043,7 +413,7 @@ func (x *GetEventStreamRequest) String() string { func (*GetEventStreamRequest) ProtoMessage() {} func (x *GetEventStreamRequest) ProtoReflect() protoreflect.Message { - mi := &file_ark_v1_service_proto_msgTypes[19] + mi := &file_ark_v1_service_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1056,7 +426,7 @@ func (x *GetEventStreamRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetEventStreamRequest.ProtoReflect.Descriptor instead. func (*GetEventStreamRequest) Descriptor() ([]byte, []int) { - return file_ark_v1_service_proto_rawDescGZIP(), []int{19} + return file_ark_v1_service_proto_rawDescGZIP(), []int{8} } type GetEventStreamResponse struct { @@ -1075,7 +445,7 @@ type GetEventStreamResponse struct { func (x *GetEventStreamResponse) Reset() { *x = GetEventStreamResponse{} if protoimpl.UnsafeEnabled { - mi := &file_ark_v1_service_proto_msgTypes[20] + mi := &file_ark_v1_service_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1088,7 +458,7 @@ func (x *GetEventStreamResponse) String() string { func (*GetEventStreamResponse) ProtoMessage() {} func (x *GetEventStreamResponse) ProtoReflect() protoreflect.Message { - mi := &file_ark_v1_service_proto_msgTypes[20] + mi := &file_ark_v1_service_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1101,7 +471,7 @@ func (x *GetEventStreamResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetEventStreamResponse.ProtoReflect.Descriptor instead. func (*GetEventStreamResponse) Descriptor() ([]byte, []int) { - return file_ark_v1_service_proto_rawDescGZIP(), []int{20} + return file_ark_v1_service_proto_rawDescGZIP(), []int{9} } func (m *GetEventStreamResponse) GetEvent() isGetEventStreamResponse_Event { @@ -1165,7 +535,7 @@ type PingRequest struct { func (x *PingRequest) Reset() { *x = PingRequest{} if protoimpl.UnsafeEnabled { - mi := &file_ark_v1_service_proto_msgTypes[21] + mi := &file_ark_v1_service_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1178,7 +548,7 @@ func (x *PingRequest) String() string { func (*PingRequest) ProtoMessage() {} func (x *PingRequest) ProtoReflect() protoreflect.Message { - mi := &file_ark_v1_service_proto_msgTypes[21] + mi := &file_ark_v1_service_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1191,7 +561,7 @@ func (x *PingRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use PingRequest.ProtoReflect.Descriptor instead. func (*PingRequest) Descriptor() ([]byte, []int) { - return file_ark_v1_service_proto_rawDescGZIP(), []int{21} + return file_ark_v1_service_proto_rawDescGZIP(), []int{10} } func (x *PingRequest) GetPaymentId() string { @@ -1210,7 +580,7 @@ type PingResponse struct { func (x *PingResponse) Reset() { *x = PingResponse{} if protoimpl.UnsafeEnabled { - mi := &file_ark_v1_service_proto_msgTypes[22] + mi := &file_ark_v1_service_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1223,7 +593,7 @@ func (x *PingResponse) String() string { func (*PingResponse) ProtoMessage() {} func (x *PingResponse) ProtoReflect() protoreflect.Message { - mi := &file_ark_v1_service_proto_msgTypes[22] + mi := &file_ark_v1_service_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1236,7 +606,7 @@ func (x *PingResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use PingResponse.ProtoReflect.Descriptor instead. func (*PingResponse) Descriptor() ([]byte, []int) { - return file_ark_v1_service_proto_rawDescGZIP(), []int{22} + return file_ark_v1_service_proto_rawDescGZIP(), []int{11} } type ListVtxosRequest struct { @@ -1250,7 +620,7 @@ type ListVtxosRequest struct { func (x *ListVtxosRequest) Reset() { *x = ListVtxosRequest{} if protoimpl.UnsafeEnabled { - mi := &file_ark_v1_service_proto_msgTypes[23] + mi := &file_ark_v1_service_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1263,7 +633,7 @@ func (x *ListVtxosRequest) String() string { func (*ListVtxosRequest) ProtoMessage() {} func (x *ListVtxosRequest) ProtoReflect() protoreflect.Message { - mi := &file_ark_v1_service_proto_msgTypes[23] + mi := &file_ark_v1_service_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1276,7 +646,7 @@ func (x *ListVtxosRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListVtxosRequest.ProtoReflect.Descriptor instead. func (*ListVtxosRequest) Descriptor() ([]byte, []int) { - return file_ark_v1_service_proto_rawDescGZIP(), []int{23} + return file_ark_v1_service_proto_rawDescGZIP(), []int{12} } func (x *ListVtxosRequest) GetAddress() string { @@ -1297,7 +667,7 @@ type ListVtxosResponse struct { func (x *ListVtxosResponse) Reset() { *x = ListVtxosResponse{} if protoimpl.UnsafeEnabled { - mi := &file_ark_v1_service_proto_msgTypes[24] + mi := &file_ark_v1_service_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1310,7 +680,7 @@ func (x *ListVtxosResponse) String() string { func (*ListVtxosResponse) ProtoMessage() {} func (x *ListVtxosResponse) ProtoReflect() protoreflect.Message { - mi := &file_ark_v1_service_proto_msgTypes[24] + mi := &file_ark_v1_service_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1323,7 +693,7 @@ func (x *ListVtxosResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListVtxosResponse.ProtoReflect.Descriptor instead. func (*ListVtxosResponse) Descriptor() ([]byte, []int) { - return file_ark_v1_service_proto_rawDescGZIP(), []int{24} + return file_ark_v1_service_proto_rawDescGZIP(), []int{13} } func (x *ListVtxosResponse) GetVtxos() []*Vtxo { @@ -1333,6 +703,737 @@ func (x *ListVtxosResponse) GetVtxos() []*Vtxo { return nil } +type GetInfoRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *GetInfoRequest) Reset() { + *x = GetInfoRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_ark_v1_service_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetInfoRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetInfoRequest) ProtoMessage() {} + +func (x *GetInfoRequest) ProtoReflect() protoreflect.Message { + mi := &file_ark_v1_service_proto_msgTypes[14] + 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 GetInfoRequest.ProtoReflect.Descriptor instead. +func (*GetInfoRequest) Descriptor() ([]byte, []int) { + return file_ark_v1_service_proto_rawDescGZIP(), []int{14} +} + +type GetInfoResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Pubkey string `protobuf:"bytes,1,opt,name=pubkey,proto3" json:"pubkey,omitempty"` + RoundLifetime int64 `protobuf:"varint,2,opt,name=round_lifetime,json=roundLifetime,proto3" json:"round_lifetime,omitempty"` + UnilateralExitDelay int64 `protobuf:"varint,3,opt,name=unilateral_exit_delay,json=unilateralExitDelay,proto3" json:"unilateral_exit_delay,omitempty"` +} + +func (x *GetInfoResponse) Reset() { + *x = GetInfoResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_ark_v1_service_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetInfoResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetInfoResponse) ProtoMessage() {} + +func (x *GetInfoResponse) ProtoReflect() protoreflect.Message { + mi := &file_ark_v1_service_proto_msgTypes[15] + 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 GetInfoResponse.ProtoReflect.Descriptor instead. +func (*GetInfoResponse) Descriptor() ([]byte, []int) { + return file_ark_v1_service_proto_rawDescGZIP(), []int{15} +} + +func (x *GetInfoResponse) GetPubkey() string { + if x != nil { + return x.Pubkey + } + return "" +} + +func (x *GetInfoResponse) GetRoundLifetime() int64 { + if x != nil { + return x.RoundLifetime + } + return 0 +} + +func (x *GetInfoResponse) GetUnilateralExitDelay() int64 { + if x != nil { + return x.UnilateralExitDelay + } + return 0 +} + +type OnboardRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + BoardingTx string `protobuf:"bytes,1,opt,name=boarding_tx,json=boardingTx,proto3" json:"boarding_tx,omitempty"` + CongestionTree *Tree `protobuf:"bytes,2,opt,name=congestion_tree,json=congestionTree,proto3" json:"congestion_tree,omitempty"` + UserPubkey string `protobuf:"bytes,3,opt,name=user_pubkey,json=userPubkey,proto3" json:"user_pubkey,omitempty"` +} + +func (x *OnboardRequest) Reset() { + *x = OnboardRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_ark_v1_service_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *OnboardRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*OnboardRequest) ProtoMessage() {} + +func (x *OnboardRequest) ProtoReflect() protoreflect.Message { + mi := &file_ark_v1_service_proto_msgTypes[16] + 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 OnboardRequest.ProtoReflect.Descriptor instead. +func (*OnboardRequest) Descriptor() ([]byte, []int) { + return file_ark_v1_service_proto_rawDescGZIP(), []int{16} +} + +func (x *OnboardRequest) GetBoardingTx() string { + if x != nil { + return x.BoardingTx + } + return "" +} + +func (x *OnboardRequest) GetCongestionTree() *Tree { + if x != nil { + return x.CongestionTree + } + return nil +} + +func (x *OnboardRequest) GetUserPubkey() string { + if x != nil { + return x.UserPubkey + } + return "" +} + +type OnboardResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *OnboardResponse) Reset() { + *x = OnboardResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_ark_v1_service_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *OnboardResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*OnboardResponse) ProtoMessage() {} + +func (x *OnboardResponse) ProtoReflect() protoreflect.Message { + mi := &file_ark_v1_service_proto_msgTypes[17] + 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 OnboardResponse.ProtoReflect.Descriptor instead. +func (*OnboardResponse) Descriptor() ([]byte, []int) { + return file_ark_v1_service_proto_rawDescGZIP(), []int{17} +} + +type RoundFinalizationEvent struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + PoolPartialTx string `protobuf:"bytes,2,opt,name=pool_partial_tx,json=poolPartialTx,proto3" json:"pool_partial_tx,omitempty"` + ForfeitTxs []string `protobuf:"bytes,3,rep,name=forfeit_txs,json=forfeitTxs,proto3" json:"forfeit_txs,omitempty"` + CongestionTree *Tree `protobuf:"bytes,4,opt,name=congestion_tree,json=congestionTree,proto3" json:"congestion_tree,omitempty"` +} + +func (x *RoundFinalizationEvent) Reset() { + *x = RoundFinalizationEvent{} + if protoimpl.UnsafeEnabled { + mi := &file_ark_v1_service_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RoundFinalizationEvent) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RoundFinalizationEvent) ProtoMessage() {} + +func (x *RoundFinalizationEvent) ProtoReflect() protoreflect.Message { + mi := &file_ark_v1_service_proto_msgTypes[18] + 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 RoundFinalizationEvent.ProtoReflect.Descriptor instead. +func (*RoundFinalizationEvent) Descriptor() ([]byte, []int) { + return file_ark_v1_service_proto_rawDescGZIP(), []int{18} +} + +func (x *RoundFinalizationEvent) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *RoundFinalizationEvent) GetPoolPartialTx() string { + if x != nil { + return x.PoolPartialTx + } + return "" +} + +func (x *RoundFinalizationEvent) GetForfeitTxs() []string { + if x != nil { + return x.ForfeitTxs + } + return nil +} + +func (x *RoundFinalizationEvent) GetCongestionTree() *Tree { + if x != nil { + return x.CongestionTree + } + return nil +} + +type RoundFinalizedEvent struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + PoolTxid string `protobuf:"bytes,2,opt,name=pool_txid,json=poolTxid,proto3" json:"pool_txid,omitempty"` +} + +func (x *RoundFinalizedEvent) Reset() { + *x = RoundFinalizedEvent{} + if protoimpl.UnsafeEnabled { + mi := &file_ark_v1_service_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RoundFinalizedEvent) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RoundFinalizedEvent) ProtoMessage() {} + +func (x *RoundFinalizedEvent) ProtoReflect() protoreflect.Message { + mi := &file_ark_v1_service_proto_msgTypes[19] + 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 RoundFinalizedEvent.ProtoReflect.Descriptor instead. +func (*RoundFinalizedEvent) Descriptor() ([]byte, []int) { + return file_ark_v1_service_proto_rawDescGZIP(), []int{19} +} + +func (x *RoundFinalizedEvent) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *RoundFinalizedEvent) GetPoolTxid() string { + if x != nil { + return x.PoolTxid + } + return "" +} + +type RoundFailed struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Reason string `protobuf:"bytes,2,opt,name=reason,proto3" json:"reason,omitempty"` +} + +func (x *RoundFailed) Reset() { + *x = RoundFailed{} + if protoimpl.UnsafeEnabled { + mi := &file_ark_v1_service_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RoundFailed) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RoundFailed) ProtoMessage() {} + +func (x *RoundFailed) ProtoReflect() protoreflect.Message { + mi := &file_ark_v1_service_proto_msgTypes[20] + 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 RoundFailed.ProtoReflect.Descriptor instead. +func (*RoundFailed) Descriptor() ([]byte, []int) { + return file_ark_v1_service_proto_rawDescGZIP(), []int{20} +} + +func (x *RoundFailed) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *RoundFailed) GetReason() string { + if x != nil { + return x.Reason + } + return "" +} + +type Round struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Start int64 `protobuf:"varint,2,opt,name=start,proto3" json:"start,omitempty"` + End int64 `protobuf:"varint,3,opt,name=end,proto3" json:"end,omitempty"` + Txid string `protobuf:"bytes,4,opt,name=txid,proto3" json:"txid,omitempty"` + CongestionTree *Tree `protobuf:"bytes,5,opt,name=congestion_tree,json=congestionTree,proto3" json:"congestion_tree,omitempty"` +} + +func (x *Round) Reset() { + *x = Round{} + if protoimpl.UnsafeEnabled { + mi := &file_ark_v1_service_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Round) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Round) ProtoMessage() {} + +func (x *Round) ProtoReflect() protoreflect.Message { + mi := &file_ark_v1_service_proto_msgTypes[21] + 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 Round.ProtoReflect.Descriptor instead. +func (*Round) Descriptor() ([]byte, []int) { + return file_ark_v1_service_proto_rawDescGZIP(), []int{21} +} + +func (x *Round) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *Round) GetStart() int64 { + if x != nil { + return x.Start + } + return 0 +} + +func (x *Round) GetEnd() int64 { + if x != nil { + return x.End + } + return 0 +} + +func (x *Round) GetTxid() string { + if x != nil { + return x.Txid + } + return "" +} + +func (x *Round) GetCongestionTree() *Tree { + if x != nil { + return x.CongestionTree + } + return nil +} + +type Input struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Txid string `protobuf:"bytes,1,opt,name=txid,proto3" json:"txid,omitempty"` + Vout uint32 `protobuf:"varint,2,opt,name=vout,proto3" json:"vout,omitempty"` +} + +func (x *Input) Reset() { + *x = Input{} + if protoimpl.UnsafeEnabled { + mi := &file_ark_v1_service_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Input) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Input) ProtoMessage() {} + +func (x *Input) ProtoReflect() protoreflect.Message { + mi := &file_ark_v1_service_proto_msgTypes[22] + 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 Input.ProtoReflect.Descriptor instead. +func (*Input) Descriptor() ([]byte, []int) { + return file_ark_v1_service_proto_rawDescGZIP(), []int{22} +} + +func (x *Input) GetTxid() string { + if x != nil { + return x.Txid + } + return "" +} + +func (x *Input) GetVout() uint32 { + if x != nil { + return x.Vout + } + return 0 +} + +type Output struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Either the offchain or onchain address. + Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` + // Amount to send in satoshis. + Amount uint64 `protobuf:"varint,2,opt,name=amount,proto3" json:"amount,omitempty"` +} + +func (x *Output) Reset() { + *x = Output{} + if protoimpl.UnsafeEnabled { + mi := &file_ark_v1_service_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Output) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Output) ProtoMessage() {} + +func (x *Output) ProtoReflect() protoreflect.Message { + mi := &file_ark_v1_service_proto_msgTypes[23] + 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 Output.ProtoReflect.Descriptor instead. +func (*Output) Descriptor() ([]byte, []int) { + return file_ark_v1_service_proto_rawDescGZIP(), []int{23} +} + +func (x *Output) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +func (x *Output) GetAmount() uint64 { + if x != nil { + return x.Amount + } + return 0 +} + +type Tree struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Levels []*TreeLevel `protobuf:"bytes,1,rep,name=levels,proto3" json:"levels,omitempty"` +} + +func (x *Tree) Reset() { + *x = Tree{} + if protoimpl.UnsafeEnabled { + mi := &file_ark_v1_service_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Tree) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Tree) ProtoMessage() {} + +func (x *Tree) ProtoReflect() protoreflect.Message { + mi := &file_ark_v1_service_proto_msgTypes[24] + 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 Tree.ProtoReflect.Descriptor instead. +func (*Tree) Descriptor() ([]byte, []int) { + return file_ark_v1_service_proto_rawDescGZIP(), []int{24} +} + +func (x *Tree) GetLevels() []*TreeLevel { + if x != nil { + return x.Levels + } + return nil +} + +type TreeLevel struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Nodes []*Node `protobuf:"bytes,1,rep,name=nodes,proto3" json:"nodes,omitempty"` +} + +func (x *TreeLevel) Reset() { + *x = TreeLevel{} + if protoimpl.UnsafeEnabled { + mi := &file_ark_v1_service_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TreeLevel) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TreeLevel) ProtoMessage() {} + +func (x *TreeLevel) ProtoReflect() protoreflect.Message { + mi := &file_ark_v1_service_proto_msgTypes[25] + 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 TreeLevel.ProtoReflect.Descriptor instead. +func (*TreeLevel) Descriptor() ([]byte, []int) { + return file_ark_v1_service_proto_rawDescGZIP(), []int{25} +} + +func (x *TreeLevel) GetNodes() []*Node { + if x != nil { + return x.Nodes + } + return nil +} + +type Node struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Txid string `protobuf:"bytes,1,opt,name=txid,proto3" json:"txid,omitempty"` + Tx string `protobuf:"bytes,2,opt,name=tx,proto3" json:"tx,omitempty"` + ParentTxid string `protobuf:"bytes,3,opt,name=parent_txid,json=parentTxid,proto3" json:"parent_txid,omitempty"` +} + +func (x *Node) Reset() { + *x = Node{} + if protoimpl.UnsafeEnabled { + mi := &file_ark_v1_service_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Node) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Node) ProtoMessage() {} + +func (x *Node) ProtoReflect() protoreflect.Message { + mi := &file_ark_v1_service_proto_msgTypes[26] + 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 Node.ProtoReflect.Descriptor instead. +func (*Node) Descriptor() ([]byte, []int) { + return file_ark_v1_service_proto_rawDescGZIP(), []int{26} +} + +func (x *Node) GetTxid() string { + if x != nil { + return x.Txid + } + return "" +} + +func (x *Node) GetTx() string { + if x != nil { + return x.Tx + } + return "" +} + +func (x *Node) GetParentTxid() string { + if x != nil { + return x.ParentTxid + } + return "" +} + type Vtxo struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1347,7 +1448,7 @@ type Vtxo struct { func (x *Vtxo) Reset() { *x = Vtxo{} if protoimpl.UnsafeEnabled { - mi := &file_ark_v1_service_proto_msgTypes[25] + mi := &file_ark_v1_service_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1360,7 +1461,7 @@ func (x *Vtxo) String() string { func (*Vtxo) ProtoMessage() {} func (x *Vtxo) ProtoReflect() protoreflect.Message { - mi := &file_ark_v1_service_proto_msgTypes[25] + mi := &file_ark_v1_service_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1373,7 +1474,7 @@ func (x *Vtxo) ProtoReflect() protoreflect.Message { // Deprecated: Use Vtxo.ProtoReflect.Descriptor instead. func (*Vtxo) Descriptor() ([]byte, []int) { - return file_ark_v1_service_proto_rawDescGZIP(), []int{25} + return file_ark_v1_service_proto_rawDescGZIP(), []int{27} } func (x *Vtxo) GetOutpoint() *Input { @@ -1404,195 +1505,39 @@ func (x *Vtxo) GetPoolTxid() string { return "" } -type GetInfoRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *GetInfoRequest) Reset() { - *x = GetInfoRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_ark_v1_service_proto_msgTypes[26] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetInfoRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetInfoRequest) ProtoMessage() {} - -func (x *GetInfoRequest) ProtoReflect() protoreflect.Message { - mi := &file_ark_v1_service_proto_msgTypes[26] - 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 GetInfoRequest.ProtoReflect.Descriptor instead. -func (*GetInfoRequest) Descriptor() ([]byte, []int) { - return file_ark_v1_service_proto_rawDescGZIP(), []int{26} -} - -type GetInfoResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Pubkey string `protobuf:"bytes,1,opt,name=pubkey,proto3" json:"pubkey,omitempty"` - Lifetime int64 `protobuf:"varint,2,opt,name=lifetime,proto3" json:"lifetime,omitempty"` - ExitDelay int64 `protobuf:"varint,3,opt,name=exit_delay,json=exitDelay,proto3" json:"exit_delay,omitempty"` -} - -func (x *GetInfoResponse) Reset() { - *x = GetInfoResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_ark_v1_service_proto_msgTypes[27] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetInfoResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetInfoResponse) ProtoMessage() {} - -func (x *GetInfoResponse) ProtoReflect() protoreflect.Message { - mi := &file_ark_v1_service_proto_msgTypes[27] - 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 GetInfoResponse.ProtoReflect.Descriptor instead. -func (*GetInfoResponse) Descriptor() ([]byte, []int) { - return file_ark_v1_service_proto_rawDescGZIP(), []int{27} -} - -func (x *GetInfoResponse) GetPubkey() string { - if x != nil { - return x.Pubkey - } - return "" -} - -func (x *GetInfoResponse) GetLifetime() int64 { - if x != nil { - return x.Lifetime - } - return 0 -} - -func (x *GetInfoResponse) GetExitDelay() int64 { - if x != nil { - return x.ExitDelay - } - return 0 -} - var File_ark_v1_service_proto protoreflect.FileDescriptor var file_ark_v1_service_proto_rawDesc = []byte{ 0x0a, 0x14, 0x61, 0x72, 0x6b, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x06, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x89, 0x01, 0x0a, - 0x0e, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x1f, 0x0a, 0x0b, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x78, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x54, 0x78, - 0x12, 0x35, 0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, - 0x72, 0x65, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x61, 0x72, 0x6b, 0x2e, - 0x76, 0x31, 0x2e, 0x54, 0x72, 0x65, 0x65, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x67, 0x65, 0x73, 0x74, - 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x65, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x5f, - 0x70, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x75, 0x73, - 0x65, 0x72, 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x22, 0x11, 0x0a, 0x0f, 0x4f, 0x6e, 0x62, 0x6f, - 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3f, 0x0a, 0x16, 0x52, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x06, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x49, - 0x6e, 0x70, 0x75, 0x74, 0x52, 0x06, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x22, 0x29, 0x0a, 0x17, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x3f, 0x0a, 0x16, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x4f, 0x0a, 0x13, 0x43, 0x6c, 0x61, 0x69, 0x6d, - 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x28, - 0x0a, 0x07, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x0e, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, - 0x07, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x22, 0x16, 0x0a, 0x14, 0x43, 0x6c, 0x61, 0x69, - 0x6d, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x46, 0x0a, 0x16, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x50, 0x61, 0x79, 0x6d, - 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x73, 0x69, - 0x67, 0x6e, 0x65, 0x64, 0x5f, 0x66, 0x6f, 0x72, 0x66, 0x65, 0x69, 0x74, 0x5f, 0x74, 0x78, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x46, 0x6f, - 0x72, 0x66, 0x65, 0x69, 0x74, 0x54, 0x78, 0x73, 0x22, 0x19, 0x0a, 0x17, 0x46, 0x69, 0x6e, 0x61, - 0x6c, 0x69, 0x7a, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x25, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x69, 0x64, 0x22, 0x37, 0x0a, 0x10, 0x47, 0x65, - 0x74, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x23, - 0x0a, 0x05, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, - 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x05, 0x72, 0x6f, - 0x75, 0x6e, 0x64, 0x22, 0x8a, 0x01, 0x0a, 0x05, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, - 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x03, 0x65, 0x6e, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x69, 0x64, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x69, 0x64, 0x12, 0x35, 0x0a, 0x0f, 0x63, 0x6f, 0x6e, - 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x72, 0x65, 0x65, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x65, 0x65, - 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x65, 0x65, - 0x22, 0x2f, 0x0a, 0x05, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x69, 0x64, 0x12, 0x12, 0x0a, - 0x04, 0x76, 0x6f, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x76, 0x6f, 0x75, - 0x74, 0x22, 0x3a, 0x0a, 0x06, 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, 0x22, 0xa8, 0x01, - 0x0a, 0x16, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x26, 0x0a, 0x0f, 0x70, 0x6f, 0x6f, 0x6c, - 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x74, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0d, 0x70, 0x6f, 0x6f, 0x6c, 0x50, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x54, 0x78, - 0x12, 0x1f, 0x0a, 0x0b, 0x66, 0x6f, 0x72, 0x66, 0x65, 0x69, 0x74, 0x5f, 0x74, 0x78, 0x73, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x66, 0x6f, 0x72, 0x66, 0x65, 0x69, 0x74, 0x54, 0x78, - 0x73, 0x12, 0x35, 0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x74, 0x72, 0x65, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x61, 0x72, 0x6b, - 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x65, 0x65, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x67, 0x65, 0x73, - 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x65, 0x65, 0x22, 0x31, 0x0a, 0x04, 0x54, 0x72, 0x65, 0x65, - 0x12, 0x29, 0x0a, 0x06, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x11, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x65, 0x65, 0x4c, 0x65, - 0x76, 0x65, 0x6c, 0x52, 0x06, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x73, 0x22, 0x2f, 0x0a, 0x09, 0x54, - 0x72, 0x65, 0x65, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x22, 0x0a, 0x05, 0x6e, 0x6f, 0x64, 0x65, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, - 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x05, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x22, 0x4b, 0x0a, 0x04, - 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x69, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x74, 0x78, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x74, 0x78, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x61, 0x72, 0x65, - 0x6e, 0x74, 0x5f, 0x74, 0x78, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, - 0x61, 0x72, 0x65, 0x6e, 0x74, 0x54, 0x78, 0x69, 0x64, 0x22, 0x42, 0x0a, 0x13, 0x52, 0x6f, 0x75, - 0x6e, 0x64, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x74, 0x78, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, 0x6f, 0x6c, 0x54, 0x78, 0x69, 0x64, 0x22, 0x35, 0x0a, - 0x0b, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, - 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, - 0x61, 0x73, 0x6f, 0x6e, 0x22, 0x17, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x06, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, + 0x49, 0x6e, 0x70, 0x75, 0x74, 0x52, 0x06, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x22, 0x29, 0x0a, + 0x17, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x4f, 0x0a, 0x13, 0x43, 0x6c, 0x61, 0x69, + 0x6d, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x28, 0x0a, 0x07, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x0e, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, + 0x52, 0x07, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x22, 0x16, 0x0a, 0x14, 0x43, 0x6c, 0x61, + 0x69, 0x6d, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x46, 0x0a, 0x16, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x50, 0x61, 0x79, + 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x73, + 0x69, 0x67, 0x6e, 0x65, 0x64, 0x5f, 0x66, 0x6f, 0x72, 0x66, 0x65, 0x69, 0x74, 0x5f, 0x74, 0x78, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x46, + 0x6f, 0x72, 0x66, 0x65, 0x69, 0x74, 0x54, 0x78, 0x73, 0x22, 0x19, 0x0a, 0x17, 0x46, 0x69, 0x6e, + 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x25, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x75, 0x6e, 0x64, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x69, 0x64, 0x22, 0x37, 0x0a, 0x10, 0x47, + 0x65, 0x74, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x23, 0x0a, 0x05, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, + 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x05, 0x72, + 0x6f, 0x75, 0x6e, 0x64, 0x22, 0x17, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xf4, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, 0x12, 0x72, 0x6f, 0x75, 0x6e, @@ -1619,89 +1564,146 @@ var file_ark_v1_service_proto_rawDesc = []byte{ 0x22, 0x37, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x74, 0x78, 0x6f, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x22, 0x0a, 0x05, 0x76, 0x74, 0x78, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x74, - 0x78, 0x6f, 0x52, 0x05, 0x76, 0x74, 0x78, 0x6f, 0x73, 0x22, 0x90, 0x01, 0x0a, 0x04, 0x56, 0x74, - 0x78, 0x6f, 0x12, 0x29, 0x0a, 0x08, 0x6f, 0x75, 0x74, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, - 0x70, 0x75, 0x74, 0x52, 0x08, 0x6f, 0x75, 0x74, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x2a, 0x0a, - 0x08, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x0e, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, - 0x08, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x70, 0x65, - 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x74, 0x12, - 0x1b, 0x0a, 0x09, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x74, 0x78, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, 0x6f, 0x6c, 0x54, 0x78, 0x69, 0x64, 0x22, 0x10, 0x0a, 0x0e, - 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x64, - 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x70, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x69, 0x66, - 0x65, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6c, 0x69, 0x66, - 0x65, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x78, 0x69, 0x74, 0x5f, 0x64, 0x65, - 0x6c, 0x61, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x65, 0x78, 0x69, 0x74, 0x44, - 0x65, 0x6c, 0x61, 0x79, 0x32, 0xf2, 0x06, 0x0a, 0x0a, 0x41, 0x72, 0x6b, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x12, 0x73, 0x0a, 0x0f, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x50, - 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1e, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, - 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, - 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x3a, - 0x01, 0x2a, 0x22, 0x14, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2f, - 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x12, 0x67, 0x0a, 0x0c, 0x43, 0x6c, 0x61, 0x69, - 0x6d, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, - 0x31, 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x43, - 0x6c, 0x61, 0x69, 0x6d, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x3a, 0x01, 0x2a, 0x22, 0x11, - 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x63, 0x6c, 0x61, 0x69, - 0x6d, 0x12, 0x73, 0x0a, 0x0f, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x50, 0x61, 0x79, - 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1e, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, - 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, - 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x3a, 0x01, 0x2a, - 0x22, 0x14, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x66, 0x69, - 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x12, 0x57, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x75, - 0x6e, 0x64, 0x12, 0x17, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, - 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x61, 0x72, - 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x12, 0x10, 0x2f, - 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2f, 0x7b, 0x74, 0x78, 0x69, 0x64, 0x7d, 0x12, - 0x65, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x12, 0x1d, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1e, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x12, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0c, 0x12, 0x0a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x76, - 0x65, 0x6e, 0x74, 0x73, 0x30, 0x01, 0x12, 0x50, 0x0a, 0x04, 0x50, 0x69, 0x6e, 0x67, 0x12, 0x13, - 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x69, 0x6e, - 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x17, 0x12, 0x15, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x70, 0x61, 0x79, - 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x5d, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, - 0x56, 0x74, 0x78, 0x6f, 0x73, 0x12, 0x18, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x56, 0x74, 0x78, 0x6f, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x19, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x74, 0x78, - 0x6f, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x15, 0x12, 0x13, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x74, 0x78, 0x6f, 0x73, 0x2f, 0x7b, 0x61, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x7d, 0x12, 0x4c, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x49, 0x6e, - 0x66, 0x6f, 0x12, 0x16, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x49, - 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x61, 0x72, 0x6b, - 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x10, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0a, 0x12, 0x08, 0x2f, 0x76, 0x31, - 0x2f, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x52, 0x0a, 0x07, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, - 0x12, 0x16, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, - 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, - 0x31, 0x2e, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x3a, 0x01, 0x2a, 0x22, 0x0b, 0x2f, 0x76, - 0x31, 0x2f, 0x6f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x42, 0x92, 0x01, 0x0a, 0x0a, 0x63, 0x6f, - 0x6d, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x42, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3d, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x72, 0x6b, 0x2d, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, - 0x2f, 0x61, 0x72, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2d, 0x73, 0x70, 0x65, 0x63, 0x2f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x61, 0x72, 0x6b, 0x2f, 0x76, - 0x31, 0x3b, 0x61, 0x72, 0x6b, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x41, 0x58, 0x58, 0xaa, 0x02, 0x06, - 0x41, 0x72, 0x6b, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x06, 0x41, 0x72, 0x6b, 0x5c, 0x56, 0x31, 0xe2, - 0x02, 0x12, 0x41, 0x72, 0x6b, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x07, 0x41, 0x72, 0x6b, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x78, 0x6f, 0x52, 0x05, 0x76, 0x74, 0x78, 0x6f, 0x73, 0x22, 0x10, 0x0a, 0x0e, 0x47, 0x65, 0x74, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x84, 0x01, 0x0a, 0x0f, + 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x16, 0x0a, 0x06, 0x70, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x70, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x6f, 0x75, 0x6e, 0x64, + 0x5f, 0x6c, 0x69, 0x66, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x0d, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x4c, 0x69, 0x66, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x32, + 0x0a, 0x15, 0x75, 0x6e, 0x69, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x65, 0x78, 0x69, + 0x74, 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x13, 0x75, + 0x6e, 0x69, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x45, 0x78, 0x69, 0x74, 0x44, 0x65, 0x6c, + 0x61, 0x79, 0x22, 0x89, 0x01, 0x0a, 0x0e, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x69, 0x6e, + 0x67, 0x5f, 0x74, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x62, 0x6f, 0x61, 0x72, + 0x64, 0x69, 0x6e, 0x67, 0x54, 0x78, 0x12, 0x35, 0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x67, 0x65, 0x73, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x72, 0x65, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x0c, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x65, 0x65, 0x52, 0x0e, 0x63, + 0x6f, 0x6e, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x65, 0x65, 0x12, 0x1f, 0x0a, + 0x0b, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x70, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x22, 0x11, + 0x0a, 0x0f, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0xa8, 0x01, 0x0a, 0x16, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x46, 0x69, 0x6e, 0x61, 0x6c, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x26, 0x0a, 0x0f, + 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x74, 0x78, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x70, 0x6f, 0x6f, 0x6c, 0x50, 0x61, 0x72, 0x74, 0x69, + 0x61, 0x6c, 0x54, 0x78, 0x12, 0x1f, 0x0a, 0x0b, 0x66, 0x6f, 0x72, 0x66, 0x65, 0x69, 0x74, 0x5f, + 0x74, 0x78, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x66, 0x6f, 0x72, 0x66, 0x65, + 0x69, 0x74, 0x54, 0x78, 0x73, 0x12, 0x35, 0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x67, 0x65, 0x73, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x72, 0x65, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, + 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x65, 0x65, 0x52, 0x0e, 0x63, 0x6f, + 0x6e, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x65, 0x65, 0x22, 0x42, 0x0a, 0x13, + 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x02, 0x69, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x74, 0x78, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, 0x6f, 0x6c, 0x54, 0x78, 0x69, 0x64, + 0x22, 0x35, 0x0a, 0x0b, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, 0x8a, 0x01, 0x0a, 0x05, 0x52, 0x6f, 0x75, 0x6e, + 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x65, 0x6e, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x69, + 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x69, 0x64, 0x12, 0x35, 0x0a, + 0x0f, 0x63, 0x6f, 0x6e, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x72, 0x65, 0x65, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, + 0x54, 0x72, 0x65, 0x65, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, + 0x54, 0x72, 0x65, 0x65, 0x22, 0x2f, 0x0a, 0x05, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x12, 0x0a, + 0x04, 0x74, 0x78, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x69, + 0x64, 0x12, 0x12, 0x0a, 0x04, 0x76, 0x6f, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x04, 0x76, 0x6f, 0x75, 0x74, 0x22, 0x3a, 0x0a, 0x06, 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, 0x22, 0x31, 0x0a, 0x04, 0x54, 0x72, 0x65, 0x65, 0x12, 0x29, 0x0a, 0x06, 0x6c, 0x65, 0x76, + 0x65, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x61, 0x72, 0x6b, 0x2e, + 0x76, 0x31, 0x2e, 0x54, 0x72, 0x65, 0x65, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x06, 0x6c, 0x65, + 0x76, 0x65, 0x6c, 0x73, 0x22, 0x2f, 0x0a, 0x09, 0x54, 0x72, 0x65, 0x65, 0x4c, 0x65, 0x76, 0x65, + 0x6c, 0x12, 0x22, 0x0a, 0x05, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x0c, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x05, + 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x22, 0x4b, 0x0a, 0x04, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, + 0x04, 0x74, 0x78, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x69, + 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x74, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x74, + 0x78, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x78, 0x69, 0x64, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x54, 0x78, + 0x69, 0x64, 0x22, 0x90, 0x01, 0x0a, 0x04, 0x56, 0x74, 0x78, 0x6f, 0x12, 0x29, 0x0a, 0x08, 0x6f, + 0x75, 0x74, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, + 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x52, 0x08, 0x6f, 0x75, + 0x74, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x2a, 0x0a, 0x08, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, + 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, + 0x31, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x08, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, + 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x6f, 0x6f, 0x6c, + 0x5f, 0x74, 0x78, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, 0x6f, + 0x6c, 0x54, 0x78, 0x69, 0x64, 0x32, 0xf2, 0x06, 0x0a, 0x0a, 0x41, 0x72, 0x6b, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x12, 0x73, 0x0a, 0x0f, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, + 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1e, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, + 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, + 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, + 0x3a, 0x01, 0x2a, 0x22, 0x14, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, + 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x12, 0x67, 0x0a, 0x0c, 0x43, 0x6c, 0x61, + 0x69, 0x6d, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x2e, 0x61, 0x72, 0x6b, 0x2e, + 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, + 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x3a, 0x01, 0x2a, 0x22, + 0x11, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x63, 0x6c, 0x61, + 0x69, 0x6d, 0x12, 0x73, 0x0a, 0x0f, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x50, 0x61, + 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1e, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x46, + 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x46, + 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x3a, 0x01, + 0x2a, 0x22, 0x14, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x66, + 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x12, 0x57, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x52, 0x6f, + 0x75, 0x6e, 0x64, 0x12, 0x17, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, + 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x61, + 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x12, 0x10, + 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2f, 0x7b, 0x74, 0x78, 0x69, 0x64, 0x7d, + 0x12, 0x65, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x65, + 0x61, 0x6d, 0x12, 0x1d, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x1e, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x12, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0c, 0x12, 0x0a, 0x2f, 0x76, 0x31, 0x2f, 0x65, + 0x76, 0x65, 0x6e, 0x74, 0x73, 0x30, 0x01, 0x12, 0x50, 0x0a, 0x04, 0x50, 0x69, 0x6e, 0x67, 0x12, + 0x13, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x69, + 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1d, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x17, 0x12, 0x15, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x70, 0x61, + 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x5d, 0x0a, 0x09, 0x4c, 0x69, 0x73, + 0x74, 0x56, 0x74, 0x78, 0x6f, 0x73, 0x12, 0x18, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x56, 0x74, 0x78, 0x6f, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x19, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x74, + 0x78, 0x6f, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x74, 0x78, 0x6f, 0x73, 0x2f, 0x7b, + 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x7d, 0x12, 0x4c, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x49, + 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x61, 0x72, + 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x10, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0a, 0x12, 0x08, 0x2f, 0x76, + 0x31, 0x2f, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x52, 0x0a, 0x07, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, + 0x64, 0x12, 0x16, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x6e, 0x62, 0x6f, 0x61, + 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x61, 0x72, 0x6b, 0x2e, + 0x76, 0x31, 0x2e, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x3a, 0x01, 0x2a, 0x22, 0x0b, 0x2f, + 0x76, 0x31, 0x2f, 0x6f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x42, 0x92, 0x01, 0x0a, 0x0a, 0x63, + 0x6f, 0x6d, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x42, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3d, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x72, 0x6b, 0x2d, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x2f, 0x61, 0x72, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2d, 0x73, 0x70, 0x65, 0x63, 0x2f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x61, 0x72, 0x6b, 0x2f, + 0x76, 0x31, 0x3b, 0x61, 0x72, 0x6b, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x41, 0x58, 0x58, 0xaa, 0x02, + 0x06, 0x41, 0x72, 0x6b, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x06, 0x41, 0x72, 0x6b, 0x5c, 0x56, 0x31, + 0xe2, 0x02, 0x12, 0x41, 0x72, 0x6b, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x07, 0x41, 0x72, 0x6b, 0x3a, 0x3a, 0x56, 0x31, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1718,68 +1720,68 @@ func file_ark_v1_service_proto_rawDescGZIP() []byte { var file_ark_v1_service_proto_msgTypes = make([]protoimpl.MessageInfo, 28) var file_ark_v1_service_proto_goTypes = []interface{}{ - (*OnboardRequest)(nil), // 0: ark.v1.OnboardRequest - (*OnboardResponse)(nil), // 1: ark.v1.OnboardResponse - (*RegisterPaymentRequest)(nil), // 2: ark.v1.RegisterPaymentRequest - (*RegisterPaymentResponse)(nil), // 3: ark.v1.RegisterPaymentResponse - (*ClaimPaymentRequest)(nil), // 4: ark.v1.ClaimPaymentRequest - (*ClaimPaymentResponse)(nil), // 5: ark.v1.ClaimPaymentResponse - (*FinalizePaymentRequest)(nil), // 6: ark.v1.FinalizePaymentRequest - (*FinalizePaymentResponse)(nil), // 7: ark.v1.FinalizePaymentResponse - (*GetRoundRequest)(nil), // 8: ark.v1.GetRoundRequest - (*GetRoundResponse)(nil), // 9: ark.v1.GetRoundResponse - (*Round)(nil), // 10: ark.v1.Round - (*Input)(nil), // 11: ark.v1.Input - (*Output)(nil), // 12: ark.v1.Output - (*RoundFinalizationEvent)(nil), // 13: ark.v1.RoundFinalizationEvent - (*Tree)(nil), // 14: ark.v1.Tree - (*TreeLevel)(nil), // 15: ark.v1.TreeLevel - (*Node)(nil), // 16: ark.v1.Node - (*RoundFinalizedEvent)(nil), // 17: ark.v1.RoundFinalizedEvent - (*RoundFailed)(nil), // 18: ark.v1.RoundFailed - (*GetEventStreamRequest)(nil), // 19: ark.v1.GetEventStreamRequest - (*GetEventStreamResponse)(nil), // 20: ark.v1.GetEventStreamResponse - (*PingRequest)(nil), // 21: ark.v1.PingRequest - (*PingResponse)(nil), // 22: ark.v1.PingResponse - (*ListVtxosRequest)(nil), // 23: ark.v1.ListVtxosRequest - (*ListVtxosResponse)(nil), // 24: ark.v1.ListVtxosResponse - (*Vtxo)(nil), // 25: ark.v1.Vtxo - (*GetInfoRequest)(nil), // 26: ark.v1.GetInfoRequest - (*GetInfoResponse)(nil), // 27: ark.v1.GetInfoResponse + (*RegisterPaymentRequest)(nil), // 0: ark.v1.RegisterPaymentRequest + (*RegisterPaymentResponse)(nil), // 1: ark.v1.RegisterPaymentResponse + (*ClaimPaymentRequest)(nil), // 2: ark.v1.ClaimPaymentRequest + (*ClaimPaymentResponse)(nil), // 3: ark.v1.ClaimPaymentResponse + (*FinalizePaymentRequest)(nil), // 4: ark.v1.FinalizePaymentRequest + (*FinalizePaymentResponse)(nil), // 5: ark.v1.FinalizePaymentResponse + (*GetRoundRequest)(nil), // 6: ark.v1.GetRoundRequest + (*GetRoundResponse)(nil), // 7: ark.v1.GetRoundResponse + (*GetEventStreamRequest)(nil), // 8: ark.v1.GetEventStreamRequest + (*GetEventStreamResponse)(nil), // 9: ark.v1.GetEventStreamResponse + (*PingRequest)(nil), // 10: ark.v1.PingRequest + (*PingResponse)(nil), // 11: ark.v1.PingResponse + (*ListVtxosRequest)(nil), // 12: ark.v1.ListVtxosRequest + (*ListVtxosResponse)(nil), // 13: ark.v1.ListVtxosResponse + (*GetInfoRequest)(nil), // 14: ark.v1.GetInfoRequest + (*GetInfoResponse)(nil), // 15: ark.v1.GetInfoResponse + (*OnboardRequest)(nil), // 16: ark.v1.OnboardRequest + (*OnboardResponse)(nil), // 17: ark.v1.OnboardResponse + (*RoundFinalizationEvent)(nil), // 18: ark.v1.RoundFinalizationEvent + (*RoundFinalizedEvent)(nil), // 19: ark.v1.RoundFinalizedEvent + (*RoundFailed)(nil), // 20: ark.v1.RoundFailed + (*Round)(nil), // 21: ark.v1.Round + (*Input)(nil), // 22: ark.v1.Input + (*Output)(nil), // 23: ark.v1.Output + (*Tree)(nil), // 24: ark.v1.Tree + (*TreeLevel)(nil), // 25: ark.v1.TreeLevel + (*Node)(nil), // 26: ark.v1.Node + (*Vtxo)(nil), // 27: ark.v1.Vtxo } var file_ark_v1_service_proto_depIdxs = []int32{ - 14, // 0: ark.v1.OnboardRequest.congestion_tree:type_name -> ark.v1.Tree - 11, // 1: ark.v1.RegisterPaymentRequest.inputs:type_name -> ark.v1.Input - 12, // 2: ark.v1.ClaimPaymentRequest.outputs:type_name -> ark.v1.Output - 10, // 3: ark.v1.GetRoundResponse.round:type_name -> ark.v1.Round - 14, // 4: ark.v1.Round.congestion_tree:type_name -> ark.v1.Tree - 14, // 5: ark.v1.RoundFinalizationEvent.congestion_tree:type_name -> ark.v1.Tree - 15, // 6: ark.v1.Tree.levels:type_name -> ark.v1.TreeLevel - 16, // 7: ark.v1.TreeLevel.nodes:type_name -> ark.v1.Node - 13, // 8: ark.v1.GetEventStreamResponse.round_finalization:type_name -> ark.v1.RoundFinalizationEvent - 17, // 9: ark.v1.GetEventStreamResponse.round_finalized:type_name -> ark.v1.RoundFinalizedEvent - 18, // 10: ark.v1.GetEventStreamResponse.round_failed:type_name -> ark.v1.RoundFailed - 25, // 11: ark.v1.ListVtxosResponse.vtxos:type_name -> ark.v1.Vtxo - 11, // 12: ark.v1.Vtxo.outpoint:type_name -> ark.v1.Input - 12, // 13: ark.v1.Vtxo.receiver:type_name -> ark.v1.Output - 2, // 14: ark.v1.ArkService.RegisterPayment:input_type -> ark.v1.RegisterPaymentRequest - 4, // 15: ark.v1.ArkService.ClaimPayment:input_type -> ark.v1.ClaimPaymentRequest - 6, // 16: ark.v1.ArkService.FinalizePayment:input_type -> ark.v1.FinalizePaymentRequest - 8, // 17: ark.v1.ArkService.GetRound:input_type -> ark.v1.GetRoundRequest - 19, // 18: ark.v1.ArkService.GetEventStream:input_type -> ark.v1.GetEventStreamRequest - 21, // 19: ark.v1.ArkService.Ping:input_type -> ark.v1.PingRequest - 23, // 20: ark.v1.ArkService.ListVtxos:input_type -> ark.v1.ListVtxosRequest - 26, // 21: ark.v1.ArkService.GetInfo:input_type -> ark.v1.GetInfoRequest - 0, // 22: ark.v1.ArkService.Onboard:input_type -> ark.v1.OnboardRequest - 3, // 23: ark.v1.ArkService.RegisterPayment:output_type -> ark.v1.RegisterPaymentResponse - 5, // 24: ark.v1.ArkService.ClaimPayment:output_type -> ark.v1.ClaimPaymentResponse - 7, // 25: ark.v1.ArkService.FinalizePayment:output_type -> ark.v1.FinalizePaymentResponse - 9, // 26: ark.v1.ArkService.GetRound:output_type -> ark.v1.GetRoundResponse - 20, // 27: ark.v1.ArkService.GetEventStream:output_type -> ark.v1.GetEventStreamResponse - 22, // 28: ark.v1.ArkService.Ping:output_type -> ark.v1.PingResponse - 24, // 29: ark.v1.ArkService.ListVtxos:output_type -> ark.v1.ListVtxosResponse - 27, // 30: ark.v1.ArkService.GetInfo:output_type -> ark.v1.GetInfoResponse - 1, // 31: ark.v1.ArkService.Onboard:output_type -> ark.v1.OnboardResponse + 22, // 0: ark.v1.RegisterPaymentRequest.inputs:type_name -> ark.v1.Input + 23, // 1: ark.v1.ClaimPaymentRequest.outputs:type_name -> ark.v1.Output + 21, // 2: ark.v1.GetRoundResponse.round:type_name -> ark.v1.Round + 18, // 3: ark.v1.GetEventStreamResponse.round_finalization:type_name -> ark.v1.RoundFinalizationEvent + 19, // 4: ark.v1.GetEventStreamResponse.round_finalized:type_name -> ark.v1.RoundFinalizedEvent + 20, // 5: ark.v1.GetEventStreamResponse.round_failed:type_name -> ark.v1.RoundFailed + 27, // 6: ark.v1.ListVtxosResponse.vtxos:type_name -> ark.v1.Vtxo + 24, // 7: ark.v1.OnboardRequest.congestion_tree:type_name -> ark.v1.Tree + 24, // 8: ark.v1.RoundFinalizationEvent.congestion_tree:type_name -> ark.v1.Tree + 24, // 9: ark.v1.Round.congestion_tree:type_name -> ark.v1.Tree + 25, // 10: ark.v1.Tree.levels:type_name -> ark.v1.TreeLevel + 26, // 11: ark.v1.TreeLevel.nodes:type_name -> ark.v1.Node + 22, // 12: ark.v1.Vtxo.outpoint:type_name -> ark.v1.Input + 23, // 13: ark.v1.Vtxo.receiver:type_name -> ark.v1.Output + 0, // 14: ark.v1.ArkService.RegisterPayment:input_type -> ark.v1.RegisterPaymentRequest + 2, // 15: ark.v1.ArkService.ClaimPayment:input_type -> ark.v1.ClaimPaymentRequest + 4, // 16: ark.v1.ArkService.FinalizePayment:input_type -> ark.v1.FinalizePaymentRequest + 6, // 17: ark.v1.ArkService.GetRound:input_type -> ark.v1.GetRoundRequest + 8, // 18: ark.v1.ArkService.GetEventStream:input_type -> ark.v1.GetEventStreamRequest + 10, // 19: ark.v1.ArkService.Ping:input_type -> ark.v1.PingRequest + 12, // 20: ark.v1.ArkService.ListVtxos:input_type -> ark.v1.ListVtxosRequest + 14, // 21: ark.v1.ArkService.GetInfo:input_type -> ark.v1.GetInfoRequest + 16, // 22: ark.v1.ArkService.Onboard:input_type -> ark.v1.OnboardRequest + 1, // 23: ark.v1.ArkService.RegisterPayment:output_type -> ark.v1.RegisterPaymentResponse + 3, // 24: ark.v1.ArkService.ClaimPayment:output_type -> ark.v1.ClaimPaymentResponse + 5, // 25: ark.v1.ArkService.FinalizePayment:output_type -> ark.v1.FinalizePaymentResponse + 7, // 26: ark.v1.ArkService.GetRound:output_type -> ark.v1.GetRoundResponse + 9, // 27: ark.v1.ArkService.GetEventStream:output_type -> ark.v1.GetEventStreamResponse + 11, // 28: ark.v1.ArkService.Ping:output_type -> ark.v1.PingResponse + 13, // 29: ark.v1.ArkService.ListVtxos:output_type -> ark.v1.ListVtxosResponse + 15, // 30: ark.v1.ArkService.GetInfo:output_type -> ark.v1.GetInfoResponse + 17, // 31: ark.v1.ArkService.Onboard:output_type -> ark.v1.OnboardResponse 23, // [23:32] is the sub-list for method output_type 14, // [14:23] is the sub-list for method input_type 14, // [14:14] is the sub-list for extension type_name @@ -1794,30 +1796,6 @@ func file_ark_v1_service_proto_init() { } if !protoimpl.UnsafeEnabled { file_ark_v1_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*OnboardRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_ark_v1_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*OnboardResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_ark_v1_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RegisterPaymentRequest); i { case 0: return &v.state @@ -1829,7 +1807,7 @@ func file_ark_v1_service_proto_init() { return nil } } - file_ark_v1_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_ark_v1_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RegisterPaymentResponse); i { case 0: return &v.state @@ -1841,7 +1819,7 @@ func file_ark_v1_service_proto_init() { return nil } } - file_ark_v1_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_ark_v1_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClaimPaymentRequest); i { case 0: return &v.state @@ -1853,7 +1831,7 @@ func file_ark_v1_service_proto_init() { return nil } } - file_ark_v1_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_ark_v1_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClaimPaymentResponse); i { case 0: return &v.state @@ -1865,7 +1843,7 @@ func file_ark_v1_service_proto_init() { return nil } } - file_ark_v1_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_ark_v1_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*FinalizePaymentRequest); i { case 0: return &v.state @@ -1877,7 +1855,7 @@ func file_ark_v1_service_proto_init() { return nil } } - file_ark_v1_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_ark_v1_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*FinalizePaymentResponse); i { case 0: return &v.state @@ -1889,7 +1867,7 @@ func file_ark_v1_service_proto_init() { return nil } } - file_ark_v1_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_ark_v1_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetRoundRequest); i { case 0: return &v.state @@ -1901,7 +1879,7 @@ func file_ark_v1_service_proto_init() { return nil } } - file_ark_v1_service_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_ark_v1_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetRoundResponse); i { case 0: return &v.state @@ -1913,115 +1891,7 @@ func file_ark_v1_service_proto_init() { return nil } } - file_ark_v1_service_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Round); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_ark_v1_service_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Input); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_ark_v1_service_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Output); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_ark_v1_service_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RoundFinalizationEvent); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_ark_v1_service_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Tree); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_ark_v1_service_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TreeLevel); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_ark_v1_service_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Node); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_ark_v1_service_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RoundFinalizedEvent); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_ark_v1_service_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RoundFailed); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_ark_v1_service_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + file_ark_v1_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetEventStreamRequest); i { case 0: return &v.state @@ -2033,7 +1903,7 @@ func file_ark_v1_service_proto_init() { return nil } } - file_ark_v1_service_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + file_ark_v1_service_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetEventStreamResponse); i { case 0: return &v.state @@ -2045,7 +1915,7 @@ func file_ark_v1_service_proto_init() { return nil } } - file_ark_v1_service_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + file_ark_v1_service_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PingRequest); i { case 0: return &v.state @@ -2057,7 +1927,7 @@ func file_ark_v1_service_proto_init() { return nil } } - file_ark_v1_service_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + file_ark_v1_service_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PingResponse); i { case 0: return &v.state @@ -2069,7 +1939,7 @@ func file_ark_v1_service_proto_init() { return nil } } - file_ark_v1_service_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + file_ark_v1_service_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListVtxosRequest); i { case 0: return &v.state @@ -2081,7 +1951,7 @@ func file_ark_v1_service_proto_init() { return nil } } - file_ark_v1_service_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + file_ark_v1_service_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListVtxosResponse); i { case 0: return &v.state @@ -2093,19 +1963,7 @@ func file_ark_v1_service_proto_init() { return nil } } - file_ark_v1_service_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Vtxo); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_ark_v1_service_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + file_ark_v1_service_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetInfoRequest); i { case 0: return &v.state @@ -2117,7 +1975,7 @@ func file_ark_v1_service_proto_init() { return nil } } - file_ark_v1_service_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + file_ark_v1_service_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetInfoResponse); i { case 0: return &v.state @@ -2129,8 +1987,152 @@ func file_ark_v1_service_proto_init() { return nil } } + file_ark_v1_service_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*OnboardRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_ark_v1_service_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*OnboardResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_ark_v1_service_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RoundFinalizationEvent); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_ark_v1_service_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RoundFinalizedEvent); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_ark_v1_service_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RoundFailed); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_ark_v1_service_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Round); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_ark_v1_service_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Input); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_ark_v1_service_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Output); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_ark_v1_service_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Tree); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_ark_v1_service_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TreeLevel); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_ark_v1_service_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Node); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_ark_v1_service_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Vtxo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } - file_ark_v1_service_proto_msgTypes[20].OneofWrappers = []interface{}{ + file_ark_v1_service_proto_msgTypes[9].OneofWrappers = []interface{}{ (*GetEventStreamResponse_RoundFinalization)(nil), (*GetEventStreamResponse_RoundFinalized)(nil), (*GetEventStreamResponse_RoundFailed)(nil), diff --git a/server/api-spec/protobuf/gen/ocean/v1/transaction.pb.go b/server/api-spec/protobuf/gen/ocean/v1/transaction.pb.go index e8a7ab2..62711df 100644 --- a/server/api-spec/protobuf/gen/ocean/v1/transaction.pb.go +++ b/server/api-spec/protobuf/gen/ocean/v1/transaction.pb.go @@ -315,6 +315,108 @@ func (x *SelectUtxosResponse) GetExpirationDate() int64 { return 0 } +type LockUtxosRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + AccountName string `protobuf:"bytes,1,opt,name=account_name,json=accountName,proto3" json:"account_name,omitempty"` + Utxos []*Input `protobuf:"bytes,2,rep,name=utxos,proto3" json:"utxos,omitempty"` +} + +func (x *LockUtxosRequest) Reset() { + *x = LockUtxosRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_ocean_v1_transaction_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LockUtxosRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LockUtxosRequest) ProtoMessage() {} + +func (x *LockUtxosRequest) ProtoReflect() protoreflect.Message { + mi := &file_ocean_v1_transaction_proto_msgTypes[4] + 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 LockUtxosRequest.ProtoReflect.Descriptor instead. +func (*LockUtxosRequest) Descriptor() ([]byte, []int) { + return file_ocean_v1_transaction_proto_rawDescGZIP(), []int{4} +} + +func (x *LockUtxosRequest) GetAccountName() string { + if x != nil { + return x.AccountName + } + return "" +} + +func (x *LockUtxosRequest) GetUtxos() []*Input { + if x != nil { + return x.Utxos + } + return nil +} + +type LockUtxosResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ExpirationDate int64 `protobuf:"varint,1,opt,name=expiration_date,json=expirationDate,proto3" json:"expiration_date,omitempty"` +} + +func (x *LockUtxosResponse) Reset() { + *x = LockUtxosResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_ocean_v1_transaction_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LockUtxosResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LockUtxosResponse) ProtoMessage() {} + +func (x *LockUtxosResponse) ProtoReflect() protoreflect.Message { + mi := &file_ocean_v1_transaction_proto_msgTypes[5] + 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 LockUtxosResponse.ProtoReflect.Descriptor instead. +func (*LockUtxosResponse) Descriptor() ([]byte, []int) { + return file_ocean_v1_transaction_proto_rawDescGZIP(), []int{5} +} + +func (x *LockUtxosResponse) GetExpirationDate() int64 { + if x != nil { + return x.ExpirationDate + } + return 0 +} + type EstimateFeesRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -328,7 +430,7 @@ type EstimateFeesRequest struct { func (x *EstimateFeesRequest) Reset() { *x = EstimateFeesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_ocean_v1_transaction_proto_msgTypes[4] + mi := &file_ocean_v1_transaction_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -341,7 +443,7 @@ func (x *EstimateFeesRequest) String() string { func (*EstimateFeesRequest) ProtoMessage() {} func (x *EstimateFeesRequest) ProtoReflect() protoreflect.Message { - mi := &file_ocean_v1_transaction_proto_msgTypes[4] + mi := &file_ocean_v1_transaction_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -354,7 +456,7 @@ func (x *EstimateFeesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use EstimateFeesRequest.ProtoReflect.Descriptor instead. func (*EstimateFeesRequest) Descriptor() ([]byte, []int) { - return file_ocean_v1_transaction_proto_rawDescGZIP(), []int{4} + return file_ocean_v1_transaction_proto_rawDescGZIP(), []int{6} } func (x *EstimateFeesRequest) GetInputs() []*Input { @@ -389,7 +491,7 @@ type EstimateFeesResponse struct { func (x *EstimateFeesResponse) Reset() { *x = EstimateFeesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_ocean_v1_transaction_proto_msgTypes[5] + mi := &file_ocean_v1_transaction_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -402,7 +504,7 @@ func (x *EstimateFeesResponse) String() string { func (*EstimateFeesResponse) ProtoMessage() {} func (x *EstimateFeesResponse) ProtoReflect() protoreflect.Message { - mi := &file_ocean_v1_transaction_proto_msgTypes[5] + mi := &file_ocean_v1_transaction_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -415,7 +517,7 @@ func (x *EstimateFeesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use EstimateFeesResponse.ProtoReflect.Descriptor instead. func (*EstimateFeesResponse) Descriptor() ([]byte, []int) { - return file_ocean_v1_transaction_proto_rawDescGZIP(), []int{5} + return file_ocean_v1_transaction_proto_rawDescGZIP(), []int{7} } func (x *EstimateFeesResponse) GetFeeAmount() uint64 { @@ -439,7 +541,7 @@ type SignTransactionRequest struct { func (x *SignTransactionRequest) Reset() { *x = SignTransactionRequest{} if protoimpl.UnsafeEnabled { - mi := &file_ocean_v1_transaction_proto_msgTypes[6] + mi := &file_ocean_v1_transaction_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -452,7 +554,7 @@ func (x *SignTransactionRequest) String() string { func (*SignTransactionRequest) ProtoMessage() {} func (x *SignTransactionRequest) ProtoReflect() protoreflect.Message { - mi := &file_ocean_v1_transaction_proto_msgTypes[6] + mi := &file_ocean_v1_transaction_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -465,7 +567,7 @@ func (x *SignTransactionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SignTransactionRequest.ProtoReflect.Descriptor instead. func (*SignTransactionRequest) Descriptor() ([]byte, []int) { - return file_ocean_v1_transaction_proto_rawDescGZIP(), []int{6} + return file_ocean_v1_transaction_proto_rawDescGZIP(), []int{8} } func (x *SignTransactionRequest) GetTxHex() string { @@ -494,7 +596,7 @@ type SignTransactionResponse struct { func (x *SignTransactionResponse) Reset() { *x = SignTransactionResponse{} if protoimpl.UnsafeEnabled { - mi := &file_ocean_v1_transaction_proto_msgTypes[7] + mi := &file_ocean_v1_transaction_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -507,7 +609,7 @@ func (x *SignTransactionResponse) String() string { func (*SignTransactionResponse) ProtoMessage() {} func (x *SignTransactionResponse) ProtoReflect() protoreflect.Message { - mi := &file_ocean_v1_transaction_proto_msgTypes[7] + mi := &file_ocean_v1_transaction_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -520,7 +622,7 @@ func (x *SignTransactionResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SignTransactionResponse.ProtoReflect.Descriptor instead. func (*SignTransactionResponse) Descriptor() ([]byte, []int) { - return file_ocean_v1_transaction_proto_rawDescGZIP(), []int{7} + return file_ocean_v1_transaction_proto_rawDescGZIP(), []int{9} } func (x *SignTransactionResponse) GetTxHex() string { @@ -542,7 +644,7 @@ type BroadcastTransactionRequest struct { func (x *BroadcastTransactionRequest) Reset() { *x = BroadcastTransactionRequest{} if protoimpl.UnsafeEnabled { - mi := &file_ocean_v1_transaction_proto_msgTypes[8] + mi := &file_ocean_v1_transaction_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -555,7 +657,7 @@ func (x *BroadcastTransactionRequest) String() string { func (*BroadcastTransactionRequest) ProtoMessage() {} func (x *BroadcastTransactionRequest) ProtoReflect() protoreflect.Message { - mi := &file_ocean_v1_transaction_proto_msgTypes[8] + mi := &file_ocean_v1_transaction_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -568,7 +670,7 @@ func (x *BroadcastTransactionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use BroadcastTransactionRequest.ProtoReflect.Descriptor instead. func (*BroadcastTransactionRequest) Descriptor() ([]byte, []int) { - return file_ocean_v1_transaction_proto_rawDescGZIP(), []int{8} + return file_ocean_v1_transaction_proto_rawDescGZIP(), []int{10} } func (x *BroadcastTransactionRequest) GetTxHex() string { @@ -590,7 +692,7 @@ type BroadcastTransactionResponse struct { func (x *BroadcastTransactionResponse) Reset() { *x = BroadcastTransactionResponse{} if protoimpl.UnsafeEnabled { - mi := &file_ocean_v1_transaction_proto_msgTypes[9] + mi := &file_ocean_v1_transaction_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -603,7 +705,7 @@ func (x *BroadcastTransactionResponse) String() string { func (*BroadcastTransactionResponse) ProtoMessage() {} func (x *BroadcastTransactionResponse) ProtoReflect() protoreflect.Message { - mi := &file_ocean_v1_transaction_proto_msgTypes[9] + mi := &file_ocean_v1_transaction_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -616,7 +718,7 @@ func (x *BroadcastTransactionResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use BroadcastTransactionResponse.ProtoReflect.Descriptor instead. func (*BroadcastTransactionResponse) Descriptor() ([]byte, []int) { - return file_ocean_v1_transaction_proto_rawDescGZIP(), []int{9} + return file_ocean_v1_transaction_proto_rawDescGZIP(), []int{11} } func (x *BroadcastTransactionResponse) GetTxid() string { @@ -640,7 +742,7 @@ type CreatePsetRequest struct { func (x *CreatePsetRequest) Reset() { *x = CreatePsetRequest{} if protoimpl.UnsafeEnabled { - mi := &file_ocean_v1_transaction_proto_msgTypes[10] + mi := &file_ocean_v1_transaction_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -653,7 +755,7 @@ func (x *CreatePsetRequest) String() string { func (*CreatePsetRequest) ProtoMessage() {} func (x *CreatePsetRequest) ProtoReflect() protoreflect.Message { - mi := &file_ocean_v1_transaction_proto_msgTypes[10] + mi := &file_ocean_v1_transaction_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -666,7 +768,7 @@ func (x *CreatePsetRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreatePsetRequest.ProtoReflect.Descriptor instead. func (*CreatePsetRequest) Descriptor() ([]byte, []int) { - return file_ocean_v1_transaction_proto_rawDescGZIP(), []int{10} + return file_ocean_v1_transaction_proto_rawDescGZIP(), []int{12} } func (x *CreatePsetRequest) GetInputs() []*Input { @@ -695,7 +797,7 @@ type CreatePsetResponse struct { func (x *CreatePsetResponse) Reset() { *x = CreatePsetResponse{} if protoimpl.UnsafeEnabled { - mi := &file_ocean_v1_transaction_proto_msgTypes[11] + mi := &file_ocean_v1_transaction_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -708,7 +810,7 @@ func (x *CreatePsetResponse) String() string { func (*CreatePsetResponse) ProtoMessage() {} func (x *CreatePsetResponse) ProtoReflect() protoreflect.Message { - mi := &file_ocean_v1_transaction_proto_msgTypes[11] + mi := &file_ocean_v1_transaction_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -721,7 +823,7 @@ func (x *CreatePsetResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreatePsetResponse.ProtoReflect.Descriptor instead. func (*CreatePsetResponse) Descriptor() ([]byte, []int) { - return file_ocean_v1_transaction_proto_rawDescGZIP(), []int{11} + return file_ocean_v1_transaction_proto_rawDescGZIP(), []int{13} } func (x *CreatePsetResponse) GetPset() string { @@ -747,7 +849,7 @@ type UpdatePsetRequest struct { func (x *UpdatePsetRequest) Reset() { *x = UpdatePsetRequest{} if protoimpl.UnsafeEnabled { - mi := &file_ocean_v1_transaction_proto_msgTypes[12] + mi := &file_ocean_v1_transaction_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -760,7 +862,7 @@ func (x *UpdatePsetRequest) String() string { func (*UpdatePsetRequest) ProtoMessage() {} func (x *UpdatePsetRequest) ProtoReflect() protoreflect.Message { - mi := &file_ocean_v1_transaction_proto_msgTypes[12] + mi := &file_ocean_v1_transaction_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -773,7 +875,7 @@ func (x *UpdatePsetRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdatePsetRequest.ProtoReflect.Descriptor instead. func (*UpdatePsetRequest) Descriptor() ([]byte, []int) { - return file_ocean_v1_transaction_proto_rawDescGZIP(), []int{12} + return file_ocean_v1_transaction_proto_rawDescGZIP(), []int{14} } func (x *UpdatePsetRequest) GetPset() string { @@ -809,7 +911,7 @@ type UpdatePsetResponse struct { func (x *UpdatePsetResponse) Reset() { *x = UpdatePsetResponse{} if protoimpl.UnsafeEnabled { - mi := &file_ocean_v1_transaction_proto_msgTypes[13] + mi := &file_ocean_v1_transaction_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -822,7 +924,7 @@ func (x *UpdatePsetResponse) String() string { func (*UpdatePsetResponse) ProtoMessage() {} func (x *UpdatePsetResponse) ProtoReflect() protoreflect.Message { - mi := &file_ocean_v1_transaction_proto_msgTypes[13] + mi := &file_ocean_v1_transaction_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -835,7 +937,7 @@ func (x *UpdatePsetResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdatePsetResponse.ProtoReflect.Descriptor instead. func (*UpdatePsetResponse) Descriptor() ([]byte, []int) { - return file_ocean_v1_transaction_proto_rawDescGZIP(), []int{13} + return file_ocean_v1_transaction_proto_rawDescGZIP(), []int{15} } func (x *UpdatePsetResponse) GetPset() string { @@ -862,7 +964,7 @@ type BlindPsetRequest struct { func (x *BlindPsetRequest) Reset() { *x = BlindPsetRequest{} if protoimpl.UnsafeEnabled { - mi := &file_ocean_v1_transaction_proto_msgTypes[14] + mi := &file_ocean_v1_transaction_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -875,7 +977,7 @@ func (x *BlindPsetRequest) String() string { func (*BlindPsetRequest) ProtoMessage() {} func (x *BlindPsetRequest) ProtoReflect() protoreflect.Message { - mi := &file_ocean_v1_transaction_proto_msgTypes[14] + mi := &file_ocean_v1_transaction_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -888,7 +990,7 @@ func (x *BlindPsetRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use BlindPsetRequest.ProtoReflect.Descriptor instead. func (*BlindPsetRequest) Descriptor() ([]byte, []int) { - return file_ocean_v1_transaction_proto_rawDescGZIP(), []int{14} + return file_ocean_v1_transaction_proto_rawDescGZIP(), []int{16} } func (x *BlindPsetRequest) GetPset() string { @@ -924,7 +1026,7 @@ type BlindPsetResponse struct { func (x *BlindPsetResponse) Reset() { *x = BlindPsetResponse{} if protoimpl.UnsafeEnabled { - mi := &file_ocean_v1_transaction_proto_msgTypes[15] + mi := &file_ocean_v1_transaction_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -937,7 +1039,7 @@ func (x *BlindPsetResponse) String() string { func (*BlindPsetResponse) ProtoMessage() {} func (x *BlindPsetResponse) ProtoReflect() protoreflect.Message { - mi := &file_ocean_v1_transaction_proto_msgTypes[15] + mi := &file_ocean_v1_transaction_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -950,7 +1052,7 @@ func (x *BlindPsetResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use BlindPsetResponse.ProtoReflect.Descriptor instead. func (*BlindPsetResponse) Descriptor() ([]byte, []int) { - return file_ocean_v1_transaction_proto_rawDescGZIP(), []int{15} + return file_ocean_v1_transaction_proto_rawDescGZIP(), []int{17} } func (x *BlindPsetResponse) GetPset() string { @@ -975,7 +1077,7 @@ type SignPsetRequest struct { func (x *SignPsetRequest) Reset() { *x = SignPsetRequest{} if protoimpl.UnsafeEnabled { - mi := &file_ocean_v1_transaction_proto_msgTypes[16] + mi := &file_ocean_v1_transaction_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -988,7 +1090,7 @@ func (x *SignPsetRequest) String() string { func (*SignPsetRequest) ProtoMessage() {} func (x *SignPsetRequest) ProtoReflect() protoreflect.Message { - mi := &file_ocean_v1_transaction_proto_msgTypes[16] + mi := &file_ocean_v1_transaction_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1001,7 +1103,7 @@ func (x *SignPsetRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SignPsetRequest.ProtoReflect.Descriptor instead. func (*SignPsetRequest) Descriptor() ([]byte, []int) { - return file_ocean_v1_transaction_proto_rawDescGZIP(), []int{16} + return file_ocean_v1_transaction_proto_rawDescGZIP(), []int{18} } func (x *SignPsetRequest) GetPset() string { @@ -1030,7 +1132,7 @@ type SignPsetResponse struct { func (x *SignPsetResponse) Reset() { *x = SignPsetResponse{} if protoimpl.UnsafeEnabled { - mi := &file_ocean_v1_transaction_proto_msgTypes[17] + mi := &file_ocean_v1_transaction_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1043,7 +1145,7 @@ func (x *SignPsetResponse) String() string { func (*SignPsetResponse) ProtoMessage() {} func (x *SignPsetResponse) ProtoReflect() protoreflect.Message { - mi := &file_ocean_v1_transaction_proto_msgTypes[17] + mi := &file_ocean_v1_transaction_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1056,7 +1158,7 @@ func (x *SignPsetResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SignPsetResponse.ProtoReflect.Descriptor instead. func (*SignPsetResponse) Descriptor() ([]byte, []int) { - return file_ocean_v1_transaction_proto_rawDescGZIP(), []int{17} + return file_ocean_v1_transaction_proto_rawDescGZIP(), []int{19} } func (x *SignPsetResponse) GetPset() string { @@ -1090,7 +1192,7 @@ type MintRequest struct { func (x *MintRequest) Reset() { *x = MintRequest{} if protoimpl.UnsafeEnabled { - mi := &file_ocean_v1_transaction_proto_msgTypes[18] + mi := &file_ocean_v1_transaction_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1103,7 +1205,7 @@ func (x *MintRequest) String() string { func (*MintRequest) ProtoMessage() {} func (x *MintRequest) ProtoReflect() protoreflect.Message { - mi := &file_ocean_v1_transaction_proto_msgTypes[18] + mi := &file_ocean_v1_transaction_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1116,7 +1218,7 @@ func (x *MintRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use MintRequest.ProtoReflect.Descriptor instead. func (*MintRequest) Descriptor() ([]byte, []int) { - return file_ocean_v1_transaction_proto_rawDescGZIP(), []int{18} + return file_ocean_v1_transaction_proto_rawDescGZIP(), []int{20} } func (x *MintRequest) GetAccountName() string { @@ -1180,7 +1282,7 @@ type MintResponse struct { func (x *MintResponse) Reset() { *x = MintResponse{} if protoimpl.UnsafeEnabled { - mi := &file_ocean_v1_transaction_proto_msgTypes[19] + mi := &file_ocean_v1_transaction_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1193,7 +1295,7 @@ func (x *MintResponse) String() string { func (*MintResponse) ProtoMessage() {} func (x *MintResponse) ProtoReflect() protoreflect.Message { - mi := &file_ocean_v1_transaction_proto_msgTypes[19] + mi := &file_ocean_v1_transaction_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1206,7 +1308,7 @@ func (x *MintResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use MintResponse.ProtoReflect.Descriptor instead. func (*MintResponse) Descriptor() ([]byte, []int) { - return file_ocean_v1_transaction_proto_rawDescGZIP(), []int{19} + return file_ocean_v1_transaction_proto_rawDescGZIP(), []int{21} } func (x *MintResponse) GetTxHex() string { @@ -1234,7 +1336,7 @@ type RemintRequest struct { func (x *RemintRequest) Reset() { *x = RemintRequest{} if protoimpl.UnsafeEnabled { - mi := &file_ocean_v1_transaction_proto_msgTypes[20] + mi := &file_ocean_v1_transaction_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1247,7 +1349,7 @@ func (x *RemintRequest) String() string { func (*RemintRequest) ProtoMessage() {} func (x *RemintRequest) ProtoReflect() protoreflect.Message { - mi := &file_ocean_v1_transaction_proto_msgTypes[20] + mi := &file_ocean_v1_transaction_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1260,7 +1362,7 @@ func (x *RemintRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RemintRequest.ProtoReflect.Descriptor instead. func (*RemintRequest) Descriptor() ([]byte, []int) { - return file_ocean_v1_transaction_proto_rawDescGZIP(), []int{20} + return file_ocean_v1_transaction_proto_rawDescGZIP(), []int{22} } func (x *RemintRequest) GetAccountName() string { @@ -1303,7 +1405,7 @@ type RemintResponse struct { func (x *RemintResponse) Reset() { *x = RemintResponse{} if protoimpl.UnsafeEnabled { - mi := &file_ocean_v1_transaction_proto_msgTypes[21] + mi := &file_ocean_v1_transaction_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1316,7 +1418,7 @@ func (x *RemintResponse) String() string { func (*RemintResponse) ProtoMessage() {} func (x *RemintResponse) ProtoReflect() protoreflect.Message { - mi := &file_ocean_v1_transaction_proto_msgTypes[21] + mi := &file_ocean_v1_transaction_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1329,7 +1431,7 @@ func (x *RemintResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RemintResponse.ProtoReflect.Descriptor instead. func (*RemintResponse) Descriptor() ([]byte, []int) { - return file_ocean_v1_transaction_proto_rawDescGZIP(), []int{21} + return file_ocean_v1_transaction_proto_rawDescGZIP(), []int{23} } func (x *RemintResponse) GetTxHex() string { @@ -1356,7 +1458,7 @@ type BurnRequest struct { func (x *BurnRequest) Reset() { *x = BurnRequest{} if protoimpl.UnsafeEnabled { - mi := &file_ocean_v1_transaction_proto_msgTypes[22] + mi := &file_ocean_v1_transaction_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1369,7 +1471,7 @@ func (x *BurnRequest) String() string { func (*BurnRequest) ProtoMessage() {} func (x *BurnRequest) ProtoReflect() protoreflect.Message { - mi := &file_ocean_v1_transaction_proto_msgTypes[22] + mi := &file_ocean_v1_transaction_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1382,7 +1484,7 @@ func (x *BurnRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use BurnRequest.ProtoReflect.Descriptor instead. func (*BurnRequest) Descriptor() ([]byte, []int) { - return file_ocean_v1_transaction_proto_rawDescGZIP(), []int{22} + return file_ocean_v1_transaction_proto_rawDescGZIP(), []int{24} } func (x *BurnRequest) GetAccountName() string { @@ -1418,7 +1520,7 @@ type BurnResponse struct { func (x *BurnResponse) Reset() { *x = BurnResponse{} if protoimpl.UnsafeEnabled { - mi := &file_ocean_v1_transaction_proto_msgTypes[23] + mi := &file_ocean_v1_transaction_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1431,7 +1533,7 @@ func (x *BurnResponse) String() string { func (*BurnResponse) ProtoMessage() {} func (x *BurnResponse) ProtoReflect() protoreflect.Message { - mi := &file_ocean_v1_transaction_proto_msgTypes[23] + mi := &file_ocean_v1_transaction_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1444,7 +1546,7 @@ func (x *BurnResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use BurnResponse.ProtoReflect.Descriptor instead. func (*BurnResponse) Descriptor() ([]byte, []int) { - return file_ocean_v1_transaction_proto_rawDescGZIP(), []int{23} + return file_ocean_v1_transaction_proto_rawDescGZIP(), []int{25} } func (x *BurnResponse) GetTxHex() string { @@ -1470,7 +1572,7 @@ type TransferRequest struct { func (x *TransferRequest) Reset() { *x = TransferRequest{} if protoimpl.UnsafeEnabled { - mi := &file_ocean_v1_transaction_proto_msgTypes[24] + mi := &file_ocean_v1_transaction_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1483,7 +1585,7 @@ func (x *TransferRequest) String() string { func (*TransferRequest) ProtoMessage() {} func (x *TransferRequest) ProtoReflect() protoreflect.Message { - mi := &file_ocean_v1_transaction_proto_msgTypes[24] + mi := &file_ocean_v1_transaction_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1496,7 +1598,7 @@ func (x *TransferRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use TransferRequest.ProtoReflect.Descriptor instead. func (*TransferRequest) Descriptor() ([]byte, []int) { - return file_ocean_v1_transaction_proto_rawDescGZIP(), []int{24} + return file_ocean_v1_transaction_proto_rawDescGZIP(), []int{26} } func (x *TransferRequest) GetAccountName() string { @@ -1532,7 +1634,7 @@ type TransferResponse struct { func (x *TransferResponse) Reset() { *x = TransferResponse{} if protoimpl.UnsafeEnabled { - mi := &file_ocean_v1_transaction_proto_msgTypes[25] + mi := &file_ocean_v1_transaction_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1545,7 +1647,7 @@ func (x *TransferResponse) String() string { func (*TransferResponse) ProtoMessage() {} func (x *TransferResponse) ProtoReflect() protoreflect.Message { - mi := &file_ocean_v1_transaction_proto_msgTypes[25] + mi := &file_ocean_v1_transaction_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1558,7 +1660,7 @@ func (x *TransferResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use TransferResponse.ProtoReflect.Descriptor instead. func (*TransferResponse) Descriptor() ([]byte, []int) { - return file_ocean_v1_transaction_proto_rawDescGZIP(), []int{25} + return file_ocean_v1_transaction_proto_rawDescGZIP(), []int{27} } func (x *TransferResponse) GetTxHex() string { @@ -1577,7 +1679,7 @@ type PegInAddressRequest struct { func (x *PegInAddressRequest) Reset() { *x = PegInAddressRequest{} if protoimpl.UnsafeEnabled { - mi := &file_ocean_v1_transaction_proto_msgTypes[26] + mi := &file_ocean_v1_transaction_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1590,7 +1692,7 @@ func (x *PegInAddressRequest) String() string { func (*PegInAddressRequest) ProtoMessage() {} func (x *PegInAddressRequest) ProtoReflect() protoreflect.Message { - mi := &file_ocean_v1_transaction_proto_msgTypes[26] + mi := &file_ocean_v1_transaction_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1603,7 +1705,7 @@ func (x *PegInAddressRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use PegInAddressRequest.ProtoReflect.Descriptor instead. func (*PegInAddressRequest) Descriptor() ([]byte, []int) { - return file_ocean_v1_transaction_proto_rawDescGZIP(), []int{26} + return file_ocean_v1_transaction_proto_rawDescGZIP(), []int{28} } type PegInAddressResponse struct { @@ -1622,7 +1724,7 @@ type PegInAddressResponse struct { func (x *PegInAddressResponse) Reset() { *x = PegInAddressResponse{} if protoimpl.UnsafeEnabled { - mi := &file_ocean_v1_transaction_proto_msgTypes[27] + mi := &file_ocean_v1_transaction_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1635,7 +1737,7 @@ func (x *PegInAddressResponse) String() string { func (*PegInAddressResponse) ProtoMessage() {} func (x *PegInAddressResponse) ProtoReflect() protoreflect.Message { - mi := &file_ocean_v1_transaction_proto_msgTypes[27] + mi := &file_ocean_v1_transaction_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1648,7 +1750,7 @@ func (x *PegInAddressResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use PegInAddressResponse.ProtoReflect.Descriptor instead. func (*PegInAddressResponse) Descriptor() ([]byte, []int) { - return file_ocean_v1_transaction_proto_rawDescGZIP(), []int{27} + return file_ocean_v1_transaction_proto_rawDescGZIP(), []int{29} } func (x *PegInAddressResponse) GetAccountName() string { @@ -1688,7 +1790,7 @@ type ClaimPegInRequest struct { func (x *ClaimPegInRequest) Reset() { *x = ClaimPegInRequest{} if protoimpl.UnsafeEnabled { - mi := &file_ocean_v1_transaction_proto_msgTypes[28] + mi := &file_ocean_v1_transaction_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1701,7 +1803,7 @@ func (x *ClaimPegInRequest) String() string { func (*ClaimPegInRequest) ProtoMessage() {} func (x *ClaimPegInRequest) ProtoReflect() protoreflect.Message { - mi := &file_ocean_v1_transaction_proto_msgTypes[28] + mi := &file_ocean_v1_transaction_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1714,7 +1816,7 @@ func (x *ClaimPegInRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ClaimPegInRequest.ProtoReflect.Descriptor instead. func (*ClaimPegInRequest) Descriptor() ([]byte, []int) { - return file_ocean_v1_transaction_proto_rawDescGZIP(), []int{28} + return file_ocean_v1_transaction_proto_rawDescGZIP(), []int{30} } func (x *ClaimPegInRequest) GetBitcoinTx() string { @@ -1750,7 +1852,7 @@ type ClaimPegInResponse struct { func (x *ClaimPegInResponse) Reset() { *x = ClaimPegInResponse{} if protoimpl.UnsafeEnabled { - mi := &file_ocean_v1_transaction_proto_msgTypes[29] + mi := &file_ocean_v1_transaction_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1763,7 +1865,7 @@ func (x *ClaimPegInResponse) String() string { func (*ClaimPegInResponse) ProtoMessage() {} func (x *ClaimPegInResponse) ProtoReflect() protoreflect.Message { - mi := &file_ocean_v1_transaction_proto_msgTypes[29] + mi := &file_ocean_v1_transaction_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1776,7 +1878,7 @@ func (x *ClaimPegInResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ClaimPegInResponse.ProtoReflect.Descriptor instead. func (*ClaimPegInResponse) Descriptor() ([]byte, []int) { - return file_ocean_v1_transaction_proto_rawDescGZIP(), []int{29} + return file_ocean_v1_transaction_proto_rawDescGZIP(), []int{31} } func (x *ClaimPegInResponse) GetTxHex() string { @@ -1800,7 +1902,7 @@ type SignPsetWithSchnorrKeyRequest struct { func (x *SignPsetWithSchnorrKeyRequest) Reset() { *x = SignPsetWithSchnorrKeyRequest{} if protoimpl.UnsafeEnabled { - mi := &file_ocean_v1_transaction_proto_msgTypes[30] + mi := &file_ocean_v1_transaction_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1813,7 +1915,7 @@ func (x *SignPsetWithSchnorrKeyRequest) String() string { func (*SignPsetWithSchnorrKeyRequest) ProtoMessage() {} func (x *SignPsetWithSchnorrKeyRequest) ProtoReflect() protoreflect.Message { - mi := &file_ocean_v1_transaction_proto_msgTypes[30] + mi := &file_ocean_v1_transaction_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1826,7 +1928,7 @@ func (x *SignPsetWithSchnorrKeyRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SignPsetWithSchnorrKeyRequest.ProtoReflect.Descriptor instead. func (*SignPsetWithSchnorrKeyRequest) Descriptor() ([]byte, []int) { - return file_ocean_v1_transaction_proto_rawDescGZIP(), []int{30} + return file_ocean_v1_transaction_proto_rawDescGZIP(), []int{32} } func (x *SignPsetWithSchnorrKeyRequest) GetTx() string { @@ -1854,7 +1956,7 @@ type SignPsetWithSchnorrKeyResponse struct { func (x *SignPsetWithSchnorrKeyResponse) Reset() { *x = SignPsetWithSchnorrKeyResponse{} if protoimpl.UnsafeEnabled { - mi := &file_ocean_v1_transaction_proto_msgTypes[31] + mi := &file_ocean_v1_transaction_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1867,7 +1969,7 @@ func (x *SignPsetWithSchnorrKeyResponse) String() string { func (*SignPsetWithSchnorrKeyResponse) ProtoMessage() {} func (x *SignPsetWithSchnorrKeyResponse) ProtoReflect() protoreflect.Message { - mi := &file_ocean_v1_transaction_proto_msgTypes[31] + mi := &file_ocean_v1_transaction_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1880,7 +1982,7 @@ func (x *SignPsetWithSchnorrKeyResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SignPsetWithSchnorrKeyResponse.ProtoReflect.Descriptor instead. func (*SignPsetWithSchnorrKeyResponse) Descriptor() ([]byte, []int) { - return file_ocean_v1_transaction_proto_rawDescGZIP(), []int{31} + return file_ocean_v1_transaction_proto_rawDescGZIP(), []int{33} } func (x *SignPsetWithSchnorrKeyResponse) GetSignedTx() string { @@ -1932,117 +2034,115 @@ var file_ocean_v1_transaction_proto_rawDesc = []byte{ 0x04, 0x52, 0x06, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, - 0x74, 0x65, 0x22, 0x98, 0x01, 0x0a, 0x13, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x46, - 0x65, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x27, 0x0a, 0x06, 0x69, 0x6e, - 0x70, 0x75, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x6f, 0x63, 0x65, - 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x52, 0x06, 0x69, 0x6e, 0x70, - 0x75, 0x74, 0x73, 0x12, 0x2a, 0x0a, 0x07, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6f, 0x63, 0x65, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x2e, - 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x07, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x12, - 0x2c, 0x0a, 0x12, 0x6d, 0x69, 0x6c, 0x6c, 0x69, 0x73, 0x61, 0x74, 0x73, 0x5f, 0x70, 0x65, 0x72, - 0x5f, 0x62, 0x79, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x6d, 0x69, 0x6c, - 0x6c, 0x69, 0x73, 0x61, 0x74, 0x73, 0x50, 0x65, 0x72, 0x42, 0x79, 0x74, 0x65, 0x22, 0x35, 0x0a, - 0x14, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x46, 0x65, 0x65, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x65, 0x65, 0x5f, 0x61, 0x6d, 0x6f, - 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x66, 0x65, 0x65, 0x41, 0x6d, - 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x52, 0x0a, 0x16, 0x53, 0x69, 0x67, 0x6e, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x15, - 0x0a, 0x06, 0x74, 0x78, 0x5f, 0x68, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x74, 0x78, 0x48, 0x65, 0x78, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x69, 0x67, 0x68, 0x61, 0x73, 0x68, - 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x73, 0x69, 0x67, - 0x68, 0x61, 0x73, 0x68, 0x54, 0x79, 0x70, 0x65, 0x22, 0x30, 0x0a, 0x17, 0x53, 0x69, 0x67, 0x6e, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x15, 0x0a, 0x06, 0x74, 0x78, 0x5f, 0x68, 0x65, 0x78, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x78, 0x48, 0x65, 0x78, 0x22, 0x34, 0x0a, 0x1b, 0x42, 0x72, - 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x15, 0x0a, 0x06, 0x74, 0x78, 0x5f, - 0x68, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x78, 0x48, 0x65, 0x78, - 0x22, 0x32, 0x0a, 0x1c, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x54, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x74, 0x78, 0x69, 0x64, 0x22, 0x68, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x73, - 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x27, 0x0a, 0x06, 0x69, 0x6e, 0x70, - 0x75, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x6f, 0x63, 0x65, 0x61, - 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x52, 0x06, 0x69, 0x6e, 0x70, 0x75, - 0x74, 0x73, 0x12, 0x2a, 0x0a, 0x07, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6f, 0x63, 0x65, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4f, - 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x07, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x22, 0x28, - 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x70, 0x73, 0x65, 0x74, 0x22, 0x7c, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x50, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, + 0x74, 0x65, 0x22, 0x5c, 0x0a, 0x10, 0x4c, 0x6f, 0x63, 0x6b, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x05, 0x75, 0x74, 0x78, + 0x6f, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x6f, 0x63, 0x65, 0x61, 0x6e, + 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x52, 0x05, 0x75, 0x74, 0x78, 0x6f, 0x73, + 0x22, 0x3c, 0x0a, 0x11, 0x4c, 0x6f, 0x63, 0x6b, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, + 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x22, 0x98, + 0x01, 0x0a, 0x13, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x46, 0x65, 0x65, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x27, 0x0a, 0x06, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x6f, 0x63, 0x65, 0x61, 0x6e, 0x2e, 0x76, + 0x31, 0x2e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x52, 0x06, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x12, + 0x2a, 0x0a, 0x07, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x10, 0x2e, 0x6f, 0x63, 0x65, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x75, 0x74, 0x70, + 0x75, 0x74, 0x52, 0x07, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x6d, + 0x69, 0x6c, 0x6c, 0x69, 0x73, 0x61, 0x74, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x62, 0x79, 0x74, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x6d, 0x69, 0x6c, 0x6c, 0x69, 0x73, 0x61, + 0x74, 0x73, 0x50, 0x65, 0x72, 0x42, 0x79, 0x74, 0x65, 0x22, 0x35, 0x0a, 0x14, 0x45, 0x73, 0x74, + 0x69, 0x6d, 0x61, 0x74, 0x65, 0x46, 0x65, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x65, 0x65, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x66, 0x65, 0x65, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, + 0x22, 0x52, 0x0a, 0x16, 0x53, 0x69, 0x67, 0x6e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x15, 0x0a, 0x06, 0x74, 0x78, + 0x5f, 0x68, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x78, 0x48, 0x65, + 0x78, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x69, 0x67, 0x68, 0x61, 0x73, 0x68, 0x5f, 0x74, 0x79, 0x70, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x73, 0x69, 0x67, 0x68, 0x61, 0x73, 0x68, + 0x54, 0x79, 0x70, 0x65, 0x22, 0x30, 0x0a, 0x17, 0x53, 0x69, 0x67, 0x6e, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x15, 0x0a, 0x06, 0x74, 0x78, 0x5f, 0x68, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x74, 0x78, 0x48, 0x65, 0x78, 0x22, 0x34, 0x0a, 0x1b, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, + 0x61, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x15, 0x0a, 0x06, 0x74, 0x78, 0x5f, 0x68, 0x65, 0x78, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x78, 0x48, 0x65, 0x78, 0x22, 0x32, 0x0a, 0x1c, + 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, + 0x74, 0x78, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x69, 0x64, + 0x22, 0x68, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x73, 0x65, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x27, 0x0a, 0x06, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x6f, 0x63, 0x65, 0x61, 0x6e, 0x2e, 0x76, 0x31, + 0x2e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x52, 0x06, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x12, 0x2a, + 0x0a, 0x07, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x10, 0x2e, 0x6f, 0x63, 0x65, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, + 0x74, 0x52, 0x07, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x22, 0x28, 0x0a, 0x12, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x50, 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x12, 0x0a, 0x04, 0x70, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x70, 0x73, 0x65, 0x74, 0x22, 0x7c, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x73, + 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x73, 0x65, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x73, 0x65, 0x74, 0x12, 0x27, 0x0a, + 0x06, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, + 0x6f, 0x63, 0x65, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x52, 0x06, + 0x69, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x12, 0x2a, 0x0a, 0x07, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, + 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6f, 0x63, 0x65, 0x61, 0x6e, 0x2e, + 0x76, 0x31, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x07, 0x6f, 0x75, 0x74, 0x70, 0x75, + 0x74, 0x73, 0x22, 0x28, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x73, 0x65, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x73, 0x65, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x73, 0x65, 0x74, 0x22, 0x99, 0x01, 0x0a, + 0x10, 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x50, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x70, 0x73, 0x65, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x62, 0x6c, + 0x69, 0x6e, 0x64, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x6c, 0x61, 0x73, + 0x74, 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x4e, 0x0a, 0x16, 0x65, 0x78, 0x74, 0x72, + 0x61, 0x5f, 0x75, 0x6e, 0x62, 0x6c, 0x69, 0x6e, 0x64, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x70, 0x75, + 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6f, 0x63, 0x65, 0x61, 0x6e, + 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x62, 0x6c, 0x69, 0x6e, 0x64, 0x65, 0x64, 0x49, 0x6e, 0x70, + 0x75, 0x74, 0x52, 0x14, 0x65, 0x78, 0x74, 0x72, 0x61, 0x55, 0x6e, 0x62, 0x6c, 0x69, 0x6e, 0x64, + 0x65, 0x64, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x22, 0x27, 0x0a, 0x11, 0x42, 0x6c, 0x69, 0x6e, + 0x64, 0x50, 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x73, 0x65, - 0x74, 0x12, 0x27, 0x0a, 0x06, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x0f, 0x2e, 0x6f, 0x63, 0x65, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x70, - 0x75, 0x74, 0x52, 0x06, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x12, 0x2a, 0x0a, 0x07, 0x6f, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6f, 0x63, - 0x65, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x07, 0x6f, - 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x22, 0x28, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x50, 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, - 0x70, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x73, 0x65, 0x74, - 0x22, 0x99, 0x01, 0x0a, 0x10, 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x50, 0x73, 0x65, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x73, 0x65, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x6c, 0x61, 0x73, - 0x74, 0x5f, 0x62, 0x6c, 0x69, 0x6e, 0x64, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x0b, 0x6c, 0x61, 0x73, 0x74, 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x4e, 0x0a, 0x16, - 0x65, 0x78, 0x74, 0x72, 0x61, 0x5f, 0x75, 0x6e, 0x62, 0x6c, 0x69, 0x6e, 0x64, 0x65, 0x64, 0x5f, - 0x69, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6f, - 0x63, 0x65, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x62, 0x6c, 0x69, 0x6e, 0x64, 0x65, - 0x64, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x52, 0x14, 0x65, 0x78, 0x74, 0x72, 0x61, 0x55, 0x6e, 0x62, - 0x6c, 0x69, 0x6e, 0x64, 0x65, 0x64, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x22, 0x27, 0x0a, 0x11, - 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x50, 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x70, 0x73, 0x65, 0x74, 0x22, 0x48, 0x0a, 0x0f, 0x53, 0x69, 0x67, 0x6e, 0x50, 0x73, 0x65, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x73, 0x65, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x73, 0x65, 0x74, 0x12, 0x21, 0x0a, 0x0c, - 0x73, 0x69, 0x67, 0x68, 0x61, 0x73, 0x68, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x0b, 0x73, 0x69, 0x67, 0x68, 0x61, 0x73, 0x68, 0x54, 0x79, 0x70, 0x65, 0x22, - 0x26, 0x0a, 0x10, 0x53, 0x69, 0x67, 0x6e, 0x50, 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x70, 0x73, 0x65, 0x74, 0x22, 0x89, 0x02, 0x0a, 0x0b, 0x4d, 0x69, 0x6e, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x63, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x73, - 0x73, 0x65, 0x74, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x0b, 0x61, 0x73, 0x73, 0x65, 0x74, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x21, 0x0a, - 0x0c, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x0b, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, - 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x73, 0x73, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x21, 0x0a, 0x0c, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x72, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x73, 0x73, 0x65, 0x74, 0x54, 0x69, 0x63, 0x6b, - 0x65, 0x72, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x64, 0x6f, 0x6d, 0x61, - 0x69, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x73, 0x73, 0x65, 0x74, 0x44, - 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x2c, 0x0a, 0x12, 0x6d, 0x69, 0x6c, 0x6c, 0x69, 0x73, 0x61, - 0x74, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x10, 0x6d, 0x69, 0x6c, 0x6c, 0x69, 0x73, 0x61, 0x74, 0x73, 0x50, 0x65, 0x72, 0x42, - 0x79, 0x74, 0x65, 0x22, 0x25, 0x0a, 0x0c, 0x4d, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x15, 0x0a, 0x06, 0x74, 0x78, 0x5f, 0x68, 0x65, 0x78, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x78, 0x48, 0x65, 0x78, 0x22, 0x8e, 0x01, 0x0a, 0x0d, 0x52, - 0x65, 0x6d, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, - 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x14, 0x0a, 0x05, 0x61, 0x73, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x61, 0x73, 0x73, 0x65, 0x74, 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, 0x2c, 0x0a, - 0x12, 0x6d, 0x69, 0x6c, 0x6c, 0x69, 0x73, 0x61, 0x74, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x62, - 0x79, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x6d, 0x69, 0x6c, 0x6c, 0x69, - 0x73, 0x61, 0x74, 0x73, 0x50, 0x65, 0x72, 0x42, 0x79, 0x74, 0x65, 0x22, 0x27, 0x0a, 0x0e, 0x52, - 0x65, 0x6d, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x15, 0x0a, - 0x06, 0x74, 0x78, 0x5f, 0x68, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, - 0x78, 0x48, 0x65, 0x78, 0x22, 0x8e, 0x01, 0x0a, 0x0b, 0x42, 0x75, 0x72, 0x6e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2e, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x65, 0x69, - 0x76, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6f, 0x63, 0x65, - 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x09, 0x72, 0x65, - 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x6d, 0x69, 0x6c, 0x6c, 0x69, - 0x73, 0x61, 0x74, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x10, 0x6d, 0x69, 0x6c, 0x6c, 0x69, 0x73, 0x61, 0x74, 0x73, 0x50, 0x65, - 0x72, 0x42, 0x79, 0x74, 0x65, 0x22, 0x25, 0x0a, 0x0c, 0x42, 0x75, 0x72, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x15, 0x0a, 0x06, 0x74, 0x78, 0x5f, 0x68, 0x65, 0x78, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x78, 0x48, 0x65, 0x78, 0x22, 0x92, 0x01, 0x0a, - 0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x74, 0x22, 0x48, 0x0a, 0x0f, 0x53, 0x69, 0x67, 0x6e, 0x50, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x70, 0x73, 0x65, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x69, 0x67, 0x68, + 0x61, 0x73, 0x68, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, + 0x73, 0x69, 0x67, 0x68, 0x61, 0x73, 0x68, 0x54, 0x79, 0x70, 0x65, 0x22, 0x26, 0x0a, 0x10, 0x53, + 0x69, 0x67, 0x6e, 0x50, 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x12, 0x0a, 0x04, 0x70, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, + 0x73, 0x65, 0x74, 0x22, 0x89, 0x02, 0x0a, 0x0b, 0x4d, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, + 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x61, 0x73, + 0x73, 0x65, 0x74, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x6f, 0x6b, + 0x65, 0x6e, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x0b, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, + 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x61, 0x73, 0x73, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x61, + 0x73, 0x73, 0x65, 0x74, 0x5f, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x61, 0x73, 0x73, 0x65, 0x74, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x72, 0x12, 0x21, + 0x0a, 0x0c, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x73, 0x73, 0x65, 0x74, 0x44, 0x6f, 0x6d, 0x61, 0x69, + 0x6e, 0x12, 0x2c, 0x0a, 0x12, 0x6d, 0x69, 0x6c, 0x6c, 0x69, 0x73, 0x61, 0x74, 0x73, 0x5f, 0x70, + 0x65, 0x72, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x6d, + 0x69, 0x6c, 0x6c, 0x69, 0x73, 0x61, 0x74, 0x73, 0x50, 0x65, 0x72, 0x42, 0x79, 0x74, 0x65, 0x22, + 0x25, 0x0a, 0x0c, 0x4d, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x15, 0x0a, 0x06, 0x74, 0x78, 0x5f, 0x68, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x74, 0x78, 0x48, 0x65, 0x78, 0x22, 0x8e, 0x01, 0x0a, 0x0d, 0x52, 0x65, 0x6d, 0x69, 0x6e, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x61, + 0x73, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x61, 0x73, 0x73, 0x65, + 0x74, 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, 0x2c, 0x0a, 0x12, 0x6d, 0x69, 0x6c, + 0x6c, 0x69, 0x73, 0x61, 0x74, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x6d, 0x69, 0x6c, 0x6c, 0x69, 0x73, 0x61, 0x74, 0x73, + 0x50, 0x65, 0x72, 0x42, 0x79, 0x74, 0x65, 0x22, 0x27, 0x0a, 0x0e, 0x52, 0x65, 0x6d, 0x69, 0x6e, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x15, 0x0a, 0x06, 0x74, 0x78, 0x5f, + 0x68, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x78, 0x48, 0x65, 0x78, + 0x22, 0x8e, 0x01, 0x0a, 0x0b, 0x42, 0x75, 0x72, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2e, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x73, @@ -2051,127 +2151,143 @@ var file_ocean_v1_transaction_proto_rawDesc = []byte{ 0x65, 0x72, 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x6d, 0x69, 0x6c, 0x6c, 0x69, 0x73, 0x61, 0x74, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x6d, 0x69, 0x6c, 0x6c, 0x69, 0x73, 0x61, 0x74, 0x73, 0x50, 0x65, 0x72, 0x42, 0x79, 0x74, - 0x65, 0x22, 0x29, 0x0a, 0x10, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x15, 0x0a, 0x06, 0x74, 0x78, 0x5f, 0x68, 0x65, 0x78, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x78, 0x48, 0x65, 0x78, 0x22, 0x15, 0x0a, 0x13, - 0x50, 0x65, 0x67, 0x49, 0x6e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x22, 0x8a, 0x01, 0x0a, 0x14, 0x50, 0x65, 0x67, 0x49, 0x6e, 0x41, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x21, 0x0a, 0x0c, + 0x65, 0x22, 0x25, 0x0a, 0x0c, 0x42, 0x75, 0x72, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x15, 0x0a, 0x06, 0x74, 0x78, 0x5f, 0x68, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x74, 0x78, 0x48, 0x65, 0x78, 0x22, 0x92, 0x01, 0x0a, 0x0f, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x66, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x2c, 0x0a, 0x12, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x61, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x6d, 0x61, 0x69, - 0x6e, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x21, 0x0a, - 0x0c, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x5f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x22, 0x77, 0x0a, 0x11, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x50, 0x65, 0x67, 0x49, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x69, 0x74, 0x63, 0x6f, 0x69, 0x6e, - 0x5f, 0x74, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x62, 0x69, 0x74, 0x63, 0x6f, - 0x69, 0x6e, 0x54, 0x78, 0x12, 0x20, 0x0a, 0x0c, 0x74, 0x78, 0x5f, 0x6f, 0x75, 0x74, 0x5f, 0x70, - 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x78, 0x4f, 0x75, - 0x74, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x5f, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, - 0x61, 0x69, 0x6d, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x22, 0x2b, 0x0a, 0x12, 0x43, 0x6c, 0x61, - 0x69, 0x6d, 0x50, 0x65, 0x67, 0x49, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x15, 0x0a, 0x06, 0x74, 0x78, 0x5f, 0x68, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x74, 0x78, 0x48, 0x65, 0x78, 0x22, 0x52, 0x0a, 0x1d, 0x53, 0x69, 0x67, 0x6e, 0x50, 0x73, - 0x65, 0x74, 0x57, 0x69, 0x74, 0x68, 0x53, 0x63, 0x68, 0x6e, 0x6f, 0x72, 0x72, 0x4b, 0x65, 0x79, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x74, 0x78, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x02, 0x74, 0x78, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x69, 0x67, 0x68, 0x61, - 0x73, 0x68, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x73, - 0x69, 0x67, 0x68, 0x61, 0x73, 0x68, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3d, 0x0a, 0x1e, 0x53, 0x69, - 0x67, 0x6e, 0x50, 0x73, 0x65, 0x74, 0x57, 0x69, 0x74, 0x68, 0x53, 0x63, 0x68, 0x6e, 0x6f, 0x72, - 0x72, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, - 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x5f, 0x74, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x54, 0x78, 0x32, 0xd1, 0x09, 0x0a, 0x12, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x12, 0x53, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x1f, 0x2e, 0x6f, 0x63, 0x65, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, - 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x6f, 0x63, 0x65, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4a, 0x0a, 0x0b, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x55, - 0x74, 0x78, 0x6f, 0x73, 0x12, 0x1c, 0x2e, 0x6f, 0x63, 0x65, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x2e, - 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x6f, 0x63, 0x65, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, - 0x6c, 0x65, 0x63, 0x74, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x4d, 0x0a, 0x0c, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x46, 0x65, 0x65, - 0x73, 0x12, 0x1d, 0x2e, 0x6f, 0x63, 0x65, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x73, 0x74, - 0x69, 0x6d, 0x61, 0x74, 0x65, 0x46, 0x65, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1e, 0x2e, 0x6f, 0x63, 0x65, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x73, 0x74, 0x69, - 0x6d, 0x61, 0x74, 0x65, 0x46, 0x65, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x56, 0x0a, 0x0f, 0x53, 0x69, 0x67, 0x6e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x2e, 0x6f, 0x63, 0x65, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, - 0x69, 0x67, 0x6e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x6f, 0x63, 0x65, 0x61, 0x6e, 0x2e, 0x76, 0x31, - 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x65, 0x0a, 0x14, 0x42, 0x72, 0x6f, 0x61, - 0x64, 0x63, 0x61, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x25, 0x2e, 0x6f, 0x63, 0x65, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x72, 0x6f, 0x61, - 0x64, 0x63, 0x61, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x6f, 0x63, 0x65, 0x61, 0x6e, 0x2e, - 0x76, 0x31, 0x2e, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x47, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x73, 0x65, 0x74, 0x12, 0x1b, 0x2e, - 0x6f, 0x63, 0x65, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, - 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, 0x63, 0x65, - 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x73, 0x65, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x47, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x50, 0x73, 0x65, 0x74, 0x12, 0x1b, 0x2e, 0x6f, 0x63, 0x65, 0x61, 0x6e, 0x2e, 0x76, - 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, 0x63, 0x65, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x44, 0x0a, 0x09, 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x50, 0x73, 0x65, 0x74, 0x12, 0x1a, - 0x2e, 0x6f, 0x63, 0x65, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x50, - 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6f, 0x63, 0x65, - 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x50, 0x73, 0x65, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x08, 0x53, 0x69, 0x67, 0x6e, 0x50, - 0x73, 0x65, 0x74, 0x12, 0x19, 0x2e, 0x6f, 0x63, 0x65, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, - 0x69, 0x67, 0x6e, 0x50, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, - 0x2e, 0x6f, 0x63, 0x65, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x50, 0x73, - 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x04, 0x4d, 0x69, - 0x6e, 0x74, 0x12, 0x15, 0x2e, 0x6f, 0x63, 0x65, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x69, - 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x6f, 0x63, 0x65, 0x61, - 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x3b, 0x0a, 0x06, 0x52, 0x65, 0x6d, 0x69, 0x6e, 0x74, 0x12, 0x17, 0x2e, 0x6f, 0x63, - 0x65, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6d, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x6f, 0x63, 0x65, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x2e, - 0x52, 0x65, 0x6d, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, - 0x0a, 0x04, 0x42, 0x75, 0x72, 0x6e, 0x12, 0x15, 0x2e, 0x6f, 0x63, 0x65, 0x61, 0x6e, 0x2e, 0x76, - 0x31, 0x2e, 0x42, 0x75, 0x72, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, - 0x6f, 0x63, 0x65, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x75, 0x72, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x08, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, - 0x72, 0x12, 0x19, 0x2e, 0x6f, 0x63, 0x65, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x61, - 0x6e, 0x73, 0x66, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x6f, - 0x63, 0x65, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4d, 0x0a, 0x0c, 0x50, 0x65, 0x67, 0x49, - 0x6e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1d, 0x2e, 0x6f, 0x63, 0x65, 0x61, 0x6e, - 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x65, 0x67, 0x49, 0x6e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x6f, 0x63, 0x65, 0x61, 0x6e, 0x2e, - 0x76, 0x31, 0x2e, 0x50, 0x65, 0x67, 0x49, 0x6e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x47, 0x0a, 0x0a, 0x43, 0x6c, 0x61, 0x69, 0x6d, - 0x50, 0x65, 0x67, 0x49, 0x6e, 0x12, 0x1b, 0x2e, 0x6f, 0x63, 0x65, 0x61, 0x6e, 0x2e, 0x76, 0x31, - 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x50, 0x65, 0x67, 0x49, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, 0x63, 0x65, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, - 0x61, 0x69, 0x6d, 0x50, 0x65, 0x67, 0x49, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x6b, 0x0a, 0x16, 0x53, 0x69, 0x67, 0x6e, 0x50, 0x73, 0x65, 0x74, 0x57, 0x69, 0x74, 0x68, - 0x53, 0x63, 0x68, 0x6e, 0x6f, 0x72, 0x72, 0x4b, 0x65, 0x79, 0x12, 0x27, 0x2e, 0x6f, 0x63, 0x65, - 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x50, 0x73, 0x65, 0x74, 0x57, 0x69, + 0x2e, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6f, 0x63, 0x65, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x75, + 0x74, 0x70, 0x75, 0x74, 0x52, 0x09, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x73, 0x12, + 0x2c, 0x0a, 0x12, 0x6d, 0x69, 0x6c, 0x6c, 0x69, 0x73, 0x61, 0x74, 0x73, 0x5f, 0x70, 0x65, 0x72, + 0x5f, 0x62, 0x79, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x6d, 0x69, 0x6c, + 0x6c, 0x69, 0x73, 0x61, 0x74, 0x73, 0x50, 0x65, 0x72, 0x42, 0x79, 0x74, 0x65, 0x22, 0x29, 0x0a, + 0x10, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x15, 0x0a, 0x06, 0x74, 0x78, 0x5f, 0x68, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x74, 0x78, 0x48, 0x65, 0x78, 0x22, 0x15, 0x0a, 0x13, 0x50, 0x65, 0x67, 0x49, + 0x6e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, + 0x8a, 0x01, 0x0a, 0x14, 0x50, 0x65, 0x67, 0x49, 0x6e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x6d, + 0x61, 0x69, 0x6e, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x6d, 0x61, 0x69, 0x6e, 0x43, 0x68, 0x61, + 0x69, 0x6e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x61, + 0x69, 0x6d, 0x5f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x22, 0x77, 0x0a, 0x11, + 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x50, 0x65, 0x67, 0x49, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x69, 0x74, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x74, 0x78, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x62, 0x69, 0x74, 0x63, 0x6f, 0x69, 0x6e, 0x54, 0x78, + 0x12, 0x20, 0x0a, 0x0c, 0x74, 0x78, 0x5f, 0x6f, 0x75, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x6f, 0x66, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x78, 0x4f, 0x75, 0x74, 0x50, 0x72, 0x6f, + 0x6f, 0x66, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x5f, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x53, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x22, 0x2b, 0x0a, 0x12, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x50, 0x65, + 0x67, 0x49, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x15, 0x0a, 0x06, 0x74, + 0x78, 0x5f, 0x68, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x78, 0x48, + 0x65, 0x78, 0x22, 0x52, 0x0a, 0x1d, 0x53, 0x69, 0x67, 0x6e, 0x50, 0x73, 0x65, 0x74, 0x57, 0x69, 0x74, 0x68, 0x53, 0x63, 0x68, 0x6e, 0x6f, 0x72, 0x72, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x6f, 0x63, 0x65, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, - 0x69, 0x67, 0x6e, 0x50, 0x73, 0x65, 0x74, 0x57, 0x69, 0x74, 0x68, 0x53, 0x63, 0x68, 0x6e, 0x6f, - 0x72, 0x72, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0xa4, 0x01, - 0x0a, 0x0c, 0x63, 0x6f, 0x6d, 0x2e, 0x6f, 0x63, 0x65, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x42, 0x10, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x50, 0x01, 0x5a, 0x41, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, - 0x72, 0x6b, 0x2d, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x61, 0x72, 0x6b, 0x2f, 0x61, - 0x70, 0x69, 0x2d, 0x73, 0x70, 0x65, 0x63, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x6f, 0x63, 0x65, 0x61, 0x6e, 0x2f, 0x76, 0x31, 0x3b, 0x6f, 0x63, - 0x65, 0x61, 0x6e, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4f, 0x58, 0x58, 0xaa, 0x02, 0x08, 0x4f, 0x63, - 0x65, 0x61, 0x6e, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x08, 0x4f, 0x63, 0x65, 0x61, 0x6e, 0x5c, 0x56, - 0x31, 0xe2, 0x02, 0x14, 0x4f, 0x63, 0x65, 0x61, 0x6e, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x09, 0x4f, 0x63, 0x65, 0x61, 0x6e, - 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x74, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x02, 0x74, 0x78, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x69, 0x67, 0x68, 0x61, 0x73, 0x68, 0x5f, 0x74, + 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x73, 0x69, 0x67, 0x68, 0x61, + 0x73, 0x68, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3d, 0x0a, 0x1e, 0x53, 0x69, 0x67, 0x6e, 0x50, 0x73, + 0x65, 0x74, 0x57, 0x69, 0x74, 0x68, 0x53, 0x63, 0x68, 0x6e, 0x6f, 0x72, 0x72, 0x4b, 0x65, 0x79, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, + 0x65, 0x64, 0x5f, 0x74, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x69, 0x67, + 0x6e, 0x65, 0x64, 0x54, 0x78, 0x32, 0x97, 0x0a, 0x0a, 0x12, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x53, 0x0a, 0x0e, + 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1f, + 0x2e, 0x6f, 0x63, 0x65, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x20, 0x2e, 0x6f, 0x63, 0x65, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x4a, 0x0a, 0x0b, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x55, 0x74, 0x78, 0x6f, 0x73, + 0x12, 0x1c, 0x2e, 0x6f, 0x63, 0x65, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6c, 0x65, + 0x63, 0x74, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, + 0x2e, 0x6f, 0x63, 0x65, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, + 0x55, 0x74, 0x78, 0x6f, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, + 0x09, 0x4c, 0x6f, 0x63, 0x6b, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x12, 0x1a, 0x2e, 0x6f, 0x63, 0x65, + 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x63, 0x6b, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6f, 0x63, 0x65, 0x61, 0x6e, 0x2e, 0x76, + 0x31, 0x2e, 0x4c, 0x6f, 0x63, 0x6b, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x4d, 0x0a, 0x0c, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x46, + 0x65, 0x65, 0x73, 0x12, 0x1d, 0x2e, 0x6f, 0x63, 0x65, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x45, + 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x46, 0x65, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x6f, 0x63, 0x65, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x73, + 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x46, 0x65, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x56, 0x0a, 0x0f, 0x53, 0x69, 0x67, 0x6e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x2e, 0x6f, 0x63, 0x65, 0x61, 0x6e, 0x2e, 0x76, 0x31, + 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x6f, 0x63, 0x65, 0x61, 0x6e, 0x2e, + 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x65, 0x0a, 0x14, 0x42, 0x72, + 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x6f, 0x63, 0x65, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x72, + 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x6f, 0x63, 0x65, 0x61, + 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x47, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x73, 0x65, 0x74, 0x12, + 0x1b, 0x2e, 0x6f, 0x63, 0x65, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x50, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, + 0x63, 0x65, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x73, + 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x47, 0x0a, 0x0a, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x50, 0x73, 0x65, 0x74, 0x12, 0x1b, 0x2e, 0x6f, 0x63, 0x65, 0x61, 0x6e, + 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x73, 0x65, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, 0x63, 0x65, 0x61, 0x6e, 0x2e, 0x76, 0x31, + 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, 0x09, 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x50, 0x73, 0x65, 0x74, + 0x12, 0x1a, 0x2e, 0x6f, 0x63, 0x65, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6c, 0x69, 0x6e, + 0x64, 0x50, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6f, + 0x63, 0x65, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x50, 0x73, 0x65, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x08, 0x53, 0x69, 0x67, + 0x6e, 0x50, 0x73, 0x65, 0x74, 0x12, 0x19, 0x2e, 0x6f, 0x63, 0x65, 0x61, 0x6e, 0x2e, 0x76, 0x31, + 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x50, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x1a, 0x2e, 0x6f, 0x63, 0x65, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, + 0x50, 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x04, + 0x4d, 0x69, 0x6e, 0x74, 0x12, 0x15, 0x2e, 0x6f, 0x63, 0x65, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x2e, + 0x4d, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x6f, 0x63, + 0x65, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x06, 0x52, 0x65, 0x6d, 0x69, 0x6e, 0x74, 0x12, 0x17, 0x2e, + 0x6f, 0x63, 0x65, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6d, 0x69, 0x6e, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x6f, 0x63, 0x65, 0x61, 0x6e, 0x2e, 0x76, + 0x31, 0x2e, 0x52, 0x65, 0x6d, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x35, 0x0a, 0x04, 0x42, 0x75, 0x72, 0x6e, 0x12, 0x15, 0x2e, 0x6f, 0x63, 0x65, 0x61, 0x6e, + 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x75, 0x72, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x16, 0x2e, 0x6f, 0x63, 0x65, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x75, 0x72, 0x6e, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x08, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x66, 0x65, 0x72, 0x12, 0x19, 0x2e, 0x6f, 0x63, 0x65, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, + 0x2e, 0x6f, 0x63, 0x65, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, + 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4d, 0x0a, 0x0c, 0x50, 0x65, + 0x67, 0x49, 0x6e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1d, 0x2e, 0x6f, 0x63, 0x65, + 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x65, 0x67, 0x49, 0x6e, 0x41, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x6f, 0x63, 0x65, 0x61, + 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x65, 0x67, 0x49, 0x6e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x47, 0x0a, 0x0a, 0x43, 0x6c, 0x61, + 0x69, 0x6d, 0x50, 0x65, 0x67, 0x49, 0x6e, 0x12, 0x1b, 0x2e, 0x6f, 0x63, 0x65, 0x61, 0x6e, 0x2e, + 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x50, 0x65, 0x67, 0x49, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, 0x63, 0x65, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x2e, + 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x50, 0x65, 0x67, 0x49, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x6b, 0x0a, 0x16, 0x53, 0x69, 0x67, 0x6e, 0x50, 0x73, 0x65, 0x74, 0x57, 0x69, + 0x74, 0x68, 0x53, 0x63, 0x68, 0x6e, 0x6f, 0x72, 0x72, 0x4b, 0x65, 0x79, 0x12, 0x27, 0x2e, 0x6f, + 0x63, 0x65, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x50, 0x73, 0x65, 0x74, + 0x57, 0x69, 0x74, 0x68, 0x53, 0x63, 0x68, 0x6e, 0x6f, 0x72, 0x72, 0x4b, 0x65, 0x79, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x6f, 0x63, 0x65, 0x61, 0x6e, 0x2e, 0x76, 0x31, + 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x50, 0x73, 0x65, 0x74, 0x57, 0x69, 0x74, 0x68, 0x53, 0x63, 0x68, + 0x6e, 0x6f, 0x72, 0x72, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, + 0xa4, 0x01, 0x0a, 0x0c, 0x63, 0x6f, 0x6d, 0x2e, 0x6f, 0x63, 0x65, 0x61, 0x6e, 0x2e, 0x76, 0x31, + 0x42, 0x10, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, + 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x41, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x61, 0x72, 0x6b, 0x2d, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x61, 0x72, 0x6b, + 0x2f, 0x61, 0x70, 0x69, 0x2d, 0x73, 0x70, 0x65, 0x63, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x6f, 0x63, 0x65, 0x61, 0x6e, 0x2f, 0x76, 0x31, 0x3b, + 0x6f, 0x63, 0x65, 0x61, 0x6e, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4f, 0x58, 0x58, 0xaa, 0x02, 0x08, + 0x4f, 0x63, 0x65, 0x61, 0x6e, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x08, 0x4f, 0x63, 0x65, 0x61, 0x6e, + 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x14, 0x4f, 0x63, 0x65, 0x61, 0x6e, 0x5c, 0x56, 0x31, 0x5c, 0x47, + 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x09, 0x4f, 0x63, 0x65, + 0x61, 0x6e, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2187,97 +2303,102 @@ func file_ocean_v1_transaction_proto_rawDescGZIP() []byte { } var file_ocean_v1_transaction_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_ocean_v1_transaction_proto_msgTypes = make([]protoimpl.MessageInfo, 32) +var file_ocean_v1_transaction_proto_msgTypes = make([]protoimpl.MessageInfo, 34) var file_ocean_v1_transaction_proto_goTypes = []interface{}{ (SelectUtxosRequest_Strategy)(0), // 0: ocean.v1.SelectUtxosRequest.Strategy (*GetTransactionRequest)(nil), // 1: ocean.v1.GetTransactionRequest (*GetTransactionResponse)(nil), // 2: ocean.v1.GetTransactionResponse (*SelectUtxosRequest)(nil), // 3: ocean.v1.SelectUtxosRequest (*SelectUtxosResponse)(nil), // 4: ocean.v1.SelectUtxosResponse - (*EstimateFeesRequest)(nil), // 5: ocean.v1.EstimateFeesRequest - (*EstimateFeesResponse)(nil), // 6: ocean.v1.EstimateFeesResponse - (*SignTransactionRequest)(nil), // 7: ocean.v1.SignTransactionRequest - (*SignTransactionResponse)(nil), // 8: ocean.v1.SignTransactionResponse - (*BroadcastTransactionRequest)(nil), // 9: ocean.v1.BroadcastTransactionRequest - (*BroadcastTransactionResponse)(nil), // 10: ocean.v1.BroadcastTransactionResponse - (*CreatePsetRequest)(nil), // 11: ocean.v1.CreatePsetRequest - (*CreatePsetResponse)(nil), // 12: ocean.v1.CreatePsetResponse - (*UpdatePsetRequest)(nil), // 13: ocean.v1.UpdatePsetRequest - (*UpdatePsetResponse)(nil), // 14: ocean.v1.UpdatePsetResponse - (*BlindPsetRequest)(nil), // 15: ocean.v1.BlindPsetRequest - (*BlindPsetResponse)(nil), // 16: ocean.v1.BlindPsetResponse - (*SignPsetRequest)(nil), // 17: ocean.v1.SignPsetRequest - (*SignPsetResponse)(nil), // 18: ocean.v1.SignPsetResponse - (*MintRequest)(nil), // 19: ocean.v1.MintRequest - (*MintResponse)(nil), // 20: ocean.v1.MintResponse - (*RemintRequest)(nil), // 21: ocean.v1.RemintRequest - (*RemintResponse)(nil), // 22: ocean.v1.RemintResponse - (*BurnRequest)(nil), // 23: ocean.v1.BurnRequest - (*BurnResponse)(nil), // 24: ocean.v1.BurnResponse - (*TransferRequest)(nil), // 25: ocean.v1.TransferRequest - (*TransferResponse)(nil), // 26: ocean.v1.TransferResponse - (*PegInAddressRequest)(nil), // 27: ocean.v1.PegInAddressRequest - (*PegInAddressResponse)(nil), // 28: ocean.v1.PegInAddressResponse - (*ClaimPegInRequest)(nil), // 29: ocean.v1.ClaimPegInRequest - (*ClaimPegInResponse)(nil), // 30: ocean.v1.ClaimPegInResponse - (*SignPsetWithSchnorrKeyRequest)(nil), // 31: ocean.v1.SignPsetWithSchnorrKeyRequest - (*SignPsetWithSchnorrKeyResponse)(nil), // 32: ocean.v1.SignPsetWithSchnorrKeyResponse - (*BlockDetails)(nil), // 33: ocean.v1.BlockDetails - (*Utxo)(nil), // 34: ocean.v1.Utxo - (*Input)(nil), // 35: ocean.v1.Input - (*Output)(nil), // 36: ocean.v1.Output - (*UnblindedInput)(nil), // 37: ocean.v1.UnblindedInput + (*LockUtxosRequest)(nil), // 5: ocean.v1.LockUtxosRequest + (*LockUtxosResponse)(nil), // 6: ocean.v1.LockUtxosResponse + (*EstimateFeesRequest)(nil), // 7: ocean.v1.EstimateFeesRequest + (*EstimateFeesResponse)(nil), // 8: ocean.v1.EstimateFeesResponse + (*SignTransactionRequest)(nil), // 9: ocean.v1.SignTransactionRequest + (*SignTransactionResponse)(nil), // 10: ocean.v1.SignTransactionResponse + (*BroadcastTransactionRequest)(nil), // 11: ocean.v1.BroadcastTransactionRequest + (*BroadcastTransactionResponse)(nil), // 12: ocean.v1.BroadcastTransactionResponse + (*CreatePsetRequest)(nil), // 13: ocean.v1.CreatePsetRequest + (*CreatePsetResponse)(nil), // 14: ocean.v1.CreatePsetResponse + (*UpdatePsetRequest)(nil), // 15: ocean.v1.UpdatePsetRequest + (*UpdatePsetResponse)(nil), // 16: ocean.v1.UpdatePsetResponse + (*BlindPsetRequest)(nil), // 17: ocean.v1.BlindPsetRequest + (*BlindPsetResponse)(nil), // 18: ocean.v1.BlindPsetResponse + (*SignPsetRequest)(nil), // 19: ocean.v1.SignPsetRequest + (*SignPsetResponse)(nil), // 20: ocean.v1.SignPsetResponse + (*MintRequest)(nil), // 21: ocean.v1.MintRequest + (*MintResponse)(nil), // 22: ocean.v1.MintResponse + (*RemintRequest)(nil), // 23: ocean.v1.RemintRequest + (*RemintResponse)(nil), // 24: ocean.v1.RemintResponse + (*BurnRequest)(nil), // 25: ocean.v1.BurnRequest + (*BurnResponse)(nil), // 26: ocean.v1.BurnResponse + (*TransferRequest)(nil), // 27: ocean.v1.TransferRequest + (*TransferResponse)(nil), // 28: ocean.v1.TransferResponse + (*PegInAddressRequest)(nil), // 29: ocean.v1.PegInAddressRequest + (*PegInAddressResponse)(nil), // 30: ocean.v1.PegInAddressResponse + (*ClaimPegInRequest)(nil), // 31: ocean.v1.ClaimPegInRequest + (*ClaimPegInResponse)(nil), // 32: ocean.v1.ClaimPegInResponse + (*SignPsetWithSchnorrKeyRequest)(nil), // 33: ocean.v1.SignPsetWithSchnorrKeyRequest + (*SignPsetWithSchnorrKeyResponse)(nil), // 34: ocean.v1.SignPsetWithSchnorrKeyResponse + (*BlockDetails)(nil), // 35: ocean.v1.BlockDetails + (*Utxo)(nil), // 36: ocean.v1.Utxo + (*Input)(nil), // 37: ocean.v1.Input + (*Output)(nil), // 38: ocean.v1.Output + (*UnblindedInput)(nil), // 39: ocean.v1.UnblindedInput } var file_ocean_v1_transaction_proto_depIdxs = []int32{ - 33, // 0: ocean.v1.GetTransactionResponse.block_details:type_name -> ocean.v1.BlockDetails + 35, // 0: ocean.v1.GetTransactionResponse.block_details:type_name -> ocean.v1.BlockDetails 0, // 1: ocean.v1.SelectUtxosRequest.strategy:type_name -> ocean.v1.SelectUtxosRequest.Strategy - 34, // 2: ocean.v1.SelectUtxosResponse.utxos:type_name -> ocean.v1.Utxo - 35, // 3: ocean.v1.EstimateFeesRequest.inputs:type_name -> ocean.v1.Input - 36, // 4: ocean.v1.EstimateFeesRequest.outputs:type_name -> ocean.v1.Output - 35, // 5: ocean.v1.CreatePsetRequest.inputs:type_name -> ocean.v1.Input - 36, // 6: ocean.v1.CreatePsetRequest.outputs:type_name -> ocean.v1.Output - 35, // 7: ocean.v1.UpdatePsetRequest.inputs:type_name -> ocean.v1.Input - 36, // 8: ocean.v1.UpdatePsetRequest.outputs:type_name -> ocean.v1.Output - 37, // 9: ocean.v1.BlindPsetRequest.extra_unblinded_inputs:type_name -> ocean.v1.UnblindedInput - 36, // 10: ocean.v1.BurnRequest.receivers:type_name -> ocean.v1.Output - 36, // 11: ocean.v1.TransferRequest.receivers:type_name -> ocean.v1.Output - 1, // 12: ocean.v1.TransactionService.GetTransaction:input_type -> ocean.v1.GetTransactionRequest - 3, // 13: ocean.v1.TransactionService.SelectUtxos:input_type -> ocean.v1.SelectUtxosRequest - 5, // 14: ocean.v1.TransactionService.EstimateFees:input_type -> ocean.v1.EstimateFeesRequest - 7, // 15: ocean.v1.TransactionService.SignTransaction:input_type -> ocean.v1.SignTransactionRequest - 9, // 16: ocean.v1.TransactionService.BroadcastTransaction:input_type -> ocean.v1.BroadcastTransactionRequest - 11, // 17: ocean.v1.TransactionService.CreatePset:input_type -> ocean.v1.CreatePsetRequest - 13, // 18: ocean.v1.TransactionService.UpdatePset:input_type -> ocean.v1.UpdatePsetRequest - 15, // 19: ocean.v1.TransactionService.BlindPset:input_type -> ocean.v1.BlindPsetRequest - 17, // 20: ocean.v1.TransactionService.SignPset:input_type -> ocean.v1.SignPsetRequest - 19, // 21: ocean.v1.TransactionService.Mint:input_type -> ocean.v1.MintRequest - 21, // 22: ocean.v1.TransactionService.Remint:input_type -> ocean.v1.RemintRequest - 23, // 23: ocean.v1.TransactionService.Burn:input_type -> ocean.v1.BurnRequest - 25, // 24: ocean.v1.TransactionService.Transfer:input_type -> ocean.v1.TransferRequest - 27, // 25: ocean.v1.TransactionService.PegInAddress:input_type -> ocean.v1.PegInAddressRequest - 29, // 26: ocean.v1.TransactionService.ClaimPegIn:input_type -> ocean.v1.ClaimPegInRequest - 31, // 27: ocean.v1.TransactionService.SignPsetWithSchnorrKey:input_type -> ocean.v1.SignPsetWithSchnorrKeyRequest - 2, // 28: ocean.v1.TransactionService.GetTransaction:output_type -> ocean.v1.GetTransactionResponse - 4, // 29: ocean.v1.TransactionService.SelectUtxos:output_type -> ocean.v1.SelectUtxosResponse - 6, // 30: ocean.v1.TransactionService.EstimateFees:output_type -> ocean.v1.EstimateFeesResponse - 8, // 31: ocean.v1.TransactionService.SignTransaction:output_type -> ocean.v1.SignTransactionResponse - 10, // 32: ocean.v1.TransactionService.BroadcastTransaction:output_type -> ocean.v1.BroadcastTransactionResponse - 12, // 33: ocean.v1.TransactionService.CreatePset:output_type -> ocean.v1.CreatePsetResponse - 14, // 34: ocean.v1.TransactionService.UpdatePset:output_type -> ocean.v1.UpdatePsetResponse - 16, // 35: ocean.v1.TransactionService.BlindPset:output_type -> ocean.v1.BlindPsetResponse - 18, // 36: ocean.v1.TransactionService.SignPset:output_type -> ocean.v1.SignPsetResponse - 20, // 37: ocean.v1.TransactionService.Mint:output_type -> ocean.v1.MintResponse - 22, // 38: ocean.v1.TransactionService.Remint:output_type -> ocean.v1.RemintResponse - 24, // 39: ocean.v1.TransactionService.Burn:output_type -> ocean.v1.BurnResponse - 26, // 40: ocean.v1.TransactionService.Transfer:output_type -> ocean.v1.TransferResponse - 28, // 41: ocean.v1.TransactionService.PegInAddress:output_type -> ocean.v1.PegInAddressResponse - 30, // 42: ocean.v1.TransactionService.ClaimPegIn:output_type -> ocean.v1.ClaimPegInResponse - 32, // 43: ocean.v1.TransactionService.SignPsetWithSchnorrKey:output_type -> ocean.v1.SignPsetWithSchnorrKeyResponse - 28, // [28:44] is the sub-list for method output_type - 12, // [12:28] is the sub-list for method input_type - 12, // [12:12] is the sub-list for extension type_name - 12, // [12:12] is the sub-list for extension extendee - 0, // [0:12] is the sub-list for field type_name + 36, // 2: ocean.v1.SelectUtxosResponse.utxos:type_name -> ocean.v1.Utxo + 37, // 3: ocean.v1.LockUtxosRequest.utxos:type_name -> ocean.v1.Input + 37, // 4: ocean.v1.EstimateFeesRequest.inputs:type_name -> ocean.v1.Input + 38, // 5: ocean.v1.EstimateFeesRequest.outputs:type_name -> ocean.v1.Output + 37, // 6: ocean.v1.CreatePsetRequest.inputs:type_name -> ocean.v1.Input + 38, // 7: ocean.v1.CreatePsetRequest.outputs:type_name -> ocean.v1.Output + 37, // 8: ocean.v1.UpdatePsetRequest.inputs:type_name -> ocean.v1.Input + 38, // 9: ocean.v1.UpdatePsetRequest.outputs:type_name -> ocean.v1.Output + 39, // 10: ocean.v1.BlindPsetRequest.extra_unblinded_inputs:type_name -> ocean.v1.UnblindedInput + 38, // 11: ocean.v1.BurnRequest.receivers:type_name -> ocean.v1.Output + 38, // 12: ocean.v1.TransferRequest.receivers:type_name -> ocean.v1.Output + 1, // 13: ocean.v1.TransactionService.GetTransaction:input_type -> ocean.v1.GetTransactionRequest + 3, // 14: ocean.v1.TransactionService.SelectUtxos:input_type -> ocean.v1.SelectUtxosRequest + 5, // 15: ocean.v1.TransactionService.LockUtxos:input_type -> ocean.v1.LockUtxosRequest + 7, // 16: ocean.v1.TransactionService.EstimateFees:input_type -> ocean.v1.EstimateFeesRequest + 9, // 17: ocean.v1.TransactionService.SignTransaction:input_type -> ocean.v1.SignTransactionRequest + 11, // 18: ocean.v1.TransactionService.BroadcastTransaction:input_type -> ocean.v1.BroadcastTransactionRequest + 13, // 19: ocean.v1.TransactionService.CreatePset:input_type -> ocean.v1.CreatePsetRequest + 15, // 20: ocean.v1.TransactionService.UpdatePset:input_type -> ocean.v1.UpdatePsetRequest + 17, // 21: ocean.v1.TransactionService.BlindPset:input_type -> ocean.v1.BlindPsetRequest + 19, // 22: ocean.v1.TransactionService.SignPset:input_type -> ocean.v1.SignPsetRequest + 21, // 23: ocean.v1.TransactionService.Mint:input_type -> ocean.v1.MintRequest + 23, // 24: ocean.v1.TransactionService.Remint:input_type -> ocean.v1.RemintRequest + 25, // 25: ocean.v1.TransactionService.Burn:input_type -> ocean.v1.BurnRequest + 27, // 26: ocean.v1.TransactionService.Transfer:input_type -> ocean.v1.TransferRequest + 29, // 27: ocean.v1.TransactionService.PegInAddress:input_type -> ocean.v1.PegInAddressRequest + 31, // 28: ocean.v1.TransactionService.ClaimPegIn:input_type -> ocean.v1.ClaimPegInRequest + 33, // 29: ocean.v1.TransactionService.SignPsetWithSchnorrKey:input_type -> ocean.v1.SignPsetWithSchnorrKeyRequest + 2, // 30: ocean.v1.TransactionService.GetTransaction:output_type -> ocean.v1.GetTransactionResponse + 4, // 31: ocean.v1.TransactionService.SelectUtxos:output_type -> ocean.v1.SelectUtxosResponse + 6, // 32: ocean.v1.TransactionService.LockUtxos:output_type -> ocean.v1.LockUtxosResponse + 8, // 33: ocean.v1.TransactionService.EstimateFees:output_type -> ocean.v1.EstimateFeesResponse + 10, // 34: ocean.v1.TransactionService.SignTransaction:output_type -> ocean.v1.SignTransactionResponse + 12, // 35: ocean.v1.TransactionService.BroadcastTransaction:output_type -> ocean.v1.BroadcastTransactionResponse + 14, // 36: ocean.v1.TransactionService.CreatePset:output_type -> ocean.v1.CreatePsetResponse + 16, // 37: ocean.v1.TransactionService.UpdatePset:output_type -> ocean.v1.UpdatePsetResponse + 18, // 38: ocean.v1.TransactionService.BlindPset:output_type -> ocean.v1.BlindPsetResponse + 20, // 39: ocean.v1.TransactionService.SignPset:output_type -> ocean.v1.SignPsetResponse + 22, // 40: ocean.v1.TransactionService.Mint:output_type -> ocean.v1.MintResponse + 24, // 41: ocean.v1.TransactionService.Remint:output_type -> ocean.v1.RemintResponse + 26, // 42: ocean.v1.TransactionService.Burn:output_type -> ocean.v1.BurnResponse + 28, // 43: ocean.v1.TransactionService.Transfer:output_type -> ocean.v1.TransferResponse + 30, // 44: ocean.v1.TransactionService.PegInAddress:output_type -> ocean.v1.PegInAddressResponse + 32, // 45: ocean.v1.TransactionService.ClaimPegIn:output_type -> ocean.v1.ClaimPegInResponse + 34, // 46: ocean.v1.TransactionService.SignPsetWithSchnorrKey:output_type -> ocean.v1.SignPsetWithSchnorrKeyResponse + 30, // [30:47] is the sub-list for method output_type + 13, // [13:30] is the sub-list for method input_type + 13, // [13:13] is the sub-list for extension type_name + 13, // [13:13] is the sub-list for extension extendee + 0, // [0:13] is the sub-list for field type_name } func init() { file_ocean_v1_transaction_proto_init() } @@ -2336,7 +2457,7 @@ func file_ocean_v1_transaction_proto_init() { } } file_ocean_v1_transaction_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EstimateFeesRequest); i { + switch v := v.(*LockUtxosRequest); i { case 0: return &v.state case 1: @@ -2348,7 +2469,7 @@ func file_ocean_v1_transaction_proto_init() { } } file_ocean_v1_transaction_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EstimateFeesResponse); i { + switch v := v.(*LockUtxosResponse); i { case 0: return &v.state case 1: @@ -2360,7 +2481,7 @@ func file_ocean_v1_transaction_proto_init() { } } file_ocean_v1_transaction_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SignTransactionRequest); i { + switch v := v.(*EstimateFeesRequest); i { case 0: return &v.state case 1: @@ -2372,7 +2493,7 @@ func file_ocean_v1_transaction_proto_init() { } } file_ocean_v1_transaction_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SignTransactionResponse); i { + switch v := v.(*EstimateFeesResponse); i { case 0: return &v.state case 1: @@ -2384,7 +2505,7 @@ func file_ocean_v1_transaction_proto_init() { } } file_ocean_v1_transaction_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BroadcastTransactionRequest); i { + switch v := v.(*SignTransactionRequest); i { case 0: return &v.state case 1: @@ -2396,7 +2517,7 @@ func file_ocean_v1_transaction_proto_init() { } } file_ocean_v1_transaction_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BroadcastTransactionResponse); i { + switch v := v.(*SignTransactionResponse); i { case 0: return &v.state case 1: @@ -2408,7 +2529,7 @@ func file_ocean_v1_transaction_proto_init() { } } file_ocean_v1_transaction_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreatePsetRequest); i { + switch v := v.(*BroadcastTransactionRequest); i { case 0: return &v.state case 1: @@ -2420,7 +2541,7 @@ func file_ocean_v1_transaction_proto_init() { } } file_ocean_v1_transaction_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreatePsetResponse); i { + switch v := v.(*BroadcastTransactionResponse); i { case 0: return &v.state case 1: @@ -2432,7 +2553,7 @@ func file_ocean_v1_transaction_proto_init() { } } file_ocean_v1_transaction_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdatePsetRequest); i { + switch v := v.(*CreatePsetRequest); i { case 0: return &v.state case 1: @@ -2444,7 +2565,7 @@ func file_ocean_v1_transaction_proto_init() { } } file_ocean_v1_transaction_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdatePsetResponse); i { + switch v := v.(*CreatePsetResponse); i { case 0: return &v.state case 1: @@ -2456,7 +2577,7 @@ func file_ocean_v1_transaction_proto_init() { } } file_ocean_v1_transaction_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BlindPsetRequest); i { + switch v := v.(*UpdatePsetRequest); i { case 0: return &v.state case 1: @@ -2468,7 +2589,7 @@ func file_ocean_v1_transaction_proto_init() { } } file_ocean_v1_transaction_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BlindPsetResponse); i { + switch v := v.(*UpdatePsetResponse); i { case 0: return &v.state case 1: @@ -2480,7 +2601,7 @@ func file_ocean_v1_transaction_proto_init() { } } file_ocean_v1_transaction_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SignPsetRequest); i { + switch v := v.(*BlindPsetRequest); i { case 0: return &v.state case 1: @@ -2492,7 +2613,7 @@ func file_ocean_v1_transaction_proto_init() { } } file_ocean_v1_transaction_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SignPsetResponse); i { + switch v := v.(*BlindPsetResponse); i { case 0: return &v.state case 1: @@ -2504,7 +2625,7 @@ func file_ocean_v1_transaction_proto_init() { } } file_ocean_v1_transaction_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MintRequest); i { + switch v := v.(*SignPsetRequest); i { case 0: return &v.state case 1: @@ -2516,7 +2637,7 @@ func file_ocean_v1_transaction_proto_init() { } } file_ocean_v1_transaction_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MintResponse); i { + switch v := v.(*SignPsetResponse); i { case 0: return &v.state case 1: @@ -2528,7 +2649,7 @@ func file_ocean_v1_transaction_proto_init() { } } file_ocean_v1_transaction_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RemintRequest); i { + switch v := v.(*MintRequest); i { case 0: return &v.state case 1: @@ -2540,7 +2661,7 @@ func file_ocean_v1_transaction_proto_init() { } } file_ocean_v1_transaction_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RemintResponse); i { + switch v := v.(*MintResponse); i { case 0: return &v.state case 1: @@ -2552,7 +2673,7 @@ func file_ocean_v1_transaction_proto_init() { } } file_ocean_v1_transaction_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BurnRequest); i { + switch v := v.(*RemintRequest); i { case 0: return &v.state case 1: @@ -2564,7 +2685,7 @@ func file_ocean_v1_transaction_proto_init() { } } file_ocean_v1_transaction_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BurnResponse); i { + switch v := v.(*RemintResponse); i { case 0: return &v.state case 1: @@ -2576,7 +2697,7 @@ func file_ocean_v1_transaction_proto_init() { } } file_ocean_v1_transaction_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TransferRequest); i { + switch v := v.(*BurnRequest); i { case 0: return &v.state case 1: @@ -2588,7 +2709,7 @@ func file_ocean_v1_transaction_proto_init() { } } file_ocean_v1_transaction_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TransferResponse); i { + switch v := v.(*BurnResponse); i { case 0: return &v.state case 1: @@ -2600,7 +2721,7 @@ func file_ocean_v1_transaction_proto_init() { } } file_ocean_v1_transaction_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PegInAddressRequest); i { + switch v := v.(*TransferRequest); i { case 0: return &v.state case 1: @@ -2612,7 +2733,7 @@ func file_ocean_v1_transaction_proto_init() { } } file_ocean_v1_transaction_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PegInAddressResponse); i { + switch v := v.(*TransferResponse); i { case 0: return &v.state case 1: @@ -2624,7 +2745,7 @@ func file_ocean_v1_transaction_proto_init() { } } file_ocean_v1_transaction_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClaimPegInRequest); i { + switch v := v.(*PegInAddressRequest); i { case 0: return &v.state case 1: @@ -2636,7 +2757,7 @@ func file_ocean_v1_transaction_proto_init() { } } file_ocean_v1_transaction_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClaimPegInResponse); i { + switch v := v.(*PegInAddressResponse); i { case 0: return &v.state case 1: @@ -2648,7 +2769,7 @@ func file_ocean_v1_transaction_proto_init() { } } file_ocean_v1_transaction_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SignPsetWithSchnorrKeyRequest); i { + switch v := v.(*ClaimPegInRequest); i { case 0: return &v.state case 1: @@ -2660,6 +2781,30 @@ func file_ocean_v1_transaction_proto_init() { } } file_ocean_v1_transaction_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClaimPegInResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_ocean_v1_transaction_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SignPsetWithSchnorrKeyRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_ocean_v1_transaction_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SignPsetWithSchnorrKeyResponse); i { case 0: return &v.state @@ -2678,7 +2823,7 @@ func file_ocean_v1_transaction_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_ocean_v1_transaction_proto_rawDesc, NumEnums: 1, - NumMessages: 32, + NumMessages: 34, NumExtensions: 0, NumServices: 1, }, diff --git a/server/api-spec/protobuf/gen/ocean/v1/transaction_grpc.pb.go b/server/api-spec/protobuf/gen/ocean/v1/transaction_grpc.pb.go index c0037a0..898bc64 100644 --- a/server/api-spec/protobuf/gen/ocean/v1/transaction_grpc.pb.go +++ b/server/api-spec/protobuf/gen/ocean/v1/transaction_grpc.pb.go @@ -25,6 +25,8 @@ type TransactionServiceClient interface { // Selected utxos are locked for predefined amount of time to prevent // double-spending them. SelectUtxos(ctx context.Context, in *SelectUtxosRequest, opts ...grpc.CallOption) (*SelectUtxosResponse, error) + // LockUtxos allows to manually select utxos to spend by a subsequent tx. + LockUtxos(ctx context.Context, in *LockUtxosRequest, opts ...grpc.CallOption) (*LockUtxosResponse, error) // EstimateFees returns the fee amount to pay for a tx containing the given // inputs and outputs. EstimateFees(ctx context.Context, in *EstimateFeesRequest, opts ...grpc.CallOption) (*EstimateFeesResponse, error) @@ -87,6 +89,15 @@ func (c *transactionServiceClient) SelectUtxos(ctx context.Context, in *SelectUt return out, nil } +func (c *transactionServiceClient) LockUtxos(ctx context.Context, in *LockUtxosRequest, opts ...grpc.CallOption) (*LockUtxosResponse, error) { + out := new(LockUtxosResponse) + err := c.cc.Invoke(ctx, "/ocean.v1.TransactionService/LockUtxos", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *transactionServiceClient) EstimateFees(ctx context.Context, in *EstimateFeesRequest, opts ...grpc.CallOption) (*EstimateFeesResponse, error) { out := new(EstimateFeesResponse) err := c.cc.Invoke(ctx, "/ocean.v1.TransactionService/EstimateFees", in, out, opts...) @@ -224,6 +235,8 @@ type TransactionServiceServer interface { // Selected utxos are locked for predefined amount of time to prevent // double-spending them. SelectUtxos(context.Context, *SelectUtxosRequest) (*SelectUtxosResponse, error) + // LockUtxos allows to manually select utxos to spend by a subsequent tx. + LockUtxos(context.Context, *LockUtxosRequest) (*LockUtxosResponse, error) // EstimateFees returns the fee amount to pay for a tx containing the given // inputs and outputs. EstimateFees(context.Context, *EstimateFeesRequest) (*EstimateFeesResponse, error) @@ -270,6 +283,9 @@ func (UnimplementedTransactionServiceServer) GetTransaction(context.Context, *Ge func (UnimplementedTransactionServiceServer) SelectUtxos(context.Context, *SelectUtxosRequest) (*SelectUtxosResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method SelectUtxos not implemented") } +func (UnimplementedTransactionServiceServer) LockUtxos(context.Context, *LockUtxosRequest) (*LockUtxosResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method LockUtxos not implemented") +} func (UnimplementedTransactionServiceServer) EstimateFees(context.Context, *EstimateFeesRequest) (*EstimateFeesResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method EstimateFees not implemented") } @@ -360,6 +376,24 @@ func _TransactionService_SelectUtxos_Handler(srv interface{}, ctx context.Contex return interceptor(ctx, in, info, handler) } +func _TransactionService_LockUtxos_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(LockUtxosRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TransactionServiceServer).LockUtxos(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/ocean.v1.TransactionService/LockUtxos", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TransactionServiceServer).LockUtxos(ctx, req.(*LockUtxosRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _TransactionService_EstimateFees_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(EstimateFeesRequest) if err := dec(in); err != nil { @@ -627,6 +661,10 @@ var TransactionService_ServiceDesc = grpc.ServiceDesc{ MethodName: "SelectUtxos", Handler: _TransactionService_SelectUtxos_Handler, }, + { + MethodName: "LockUtxos", + Handler: _TransactionService_LockUtxos_Handler, + }, { MethodName: "EstimateFees", Handler: _TransactionService_EstimateFees_Handler, diff --git a/server/cmd/arkd/main.go b/server/cmd/arkd/main.go index 3f653ab..9e9ecbc 100755 --- a/server/cmd/arkd/main.go +++ b/server/cmd/arkd/main.go @@ -31,18 +31,6 @@ func main() { NoTLS: cfg.NoTLS, } - if cfg.RoundLifetime%512 != 0 { - setLifetime := cfg.RoundLifetime - cfg.RoundLifetime = cfg.RoundLifetime - (cfg.RoundLifetime % 512) - log.Infof("round lifetime must be a multiple of 512, %d -> %d", setLifetime, cfg.RoundLifetime) - } - - if cfg.ExitDelay%512 != 0 { - setExitDelay := cfg.ExitDelay - cfg.ExitDelay = cfg.ExitDelay - (cfg.ExitDelay % 512) - log.Infof("exit delay must be a multiple of 512, %d -> %d", setExitDelay, cfg.ExitDelay) - } - appConfig := &appconfig.Config{ DbType: cfg.DbType, DbDir: cfg.DbDir, @@ -54,7 +42,7 @@ func main() { WalletAddr: cfg.WalletAddr, MinRelayFee: cfg.MinRelayFee, RoundLifetime: cfg.RoundLifetime, - ExitDelay: cfg.ExitDelay, + UnilateralExitDelay: cfg.UnilateralExitDelay, } svc, err := grpcservice.NewService(svcConfig, appConfig) if err != nil { diff --git a/server/internal/app-config/config.go b/server/internal/app-config/config.go index 17f5043..7962505 100644 --- a/server/internal/app-config/config.go +++ b/server/internal/app-config/config.go @@ -15,6 +15,8 @@ import ( "github.com/vulpemventures/go-elements/network" ) +const minAllowedSequence = 512 + var ( supportedDbs = supportedType{ "badger": {}, @@ -41,7 +43,7 @@ type Config struct { WalletAddr string MinRelayFee uint64 RoundLifetime int64 - ExitDelay int64 + UnilateralExitDelay int64 repo ports.RepoManager svc application.Service @@ -95,25 +97,32 @@ func (c *Config) Validate() error { return err } // round life time must be a multiple of 512 - if c.RoundLifetime < 512 || c.RoundLifetime%512 != 0 { - return fmt.Errorf("invalid round lifetime, must be greater or equal than 512 and a multiple of 512") - } - seq, err := common.BIP68Encode(uint(c.RoundLifetime)) - if err != nil { - return fmt.Errorf("invalid round lifetime, %s", err) + if c.RoundLifetime < minAllowedSequence { + return fmt.Errorf( + "invalid round lifetime, must be a at least %d", minAllowedSequence, + ) } - seconds, err := common.BIP68Decode(seq) - if err != nil { - return fmt.Errorf("invalid round lifetime, %s", err) + if c.UnilateralExitDelay < minAllowedSequence { + return fmt.Errorf( + "invalid unilateral exit delay, must at least %d", minAllowedSequence, + ) } - if seconds != uint(c.RoundLifetime) { - return fmt.Errorf("invalid round lifetime, must be a multiple of 512") + if c.RoundLifetime%minAllowedSequence != 0 { + c.RoundLifetime -= c.RoundLifetime % minAllowedSequence + log.Infof( + "round lifetime must be a multiple of %d, rounded to %d", + minAllowedSequence, c.RoundLifetime, + ) } - if c.ExitDelay < 512 || c.ExitDelay%512 != 0 { - return fmt.Errorf("invalid exit delay, must be greater or equal than 512 and a multiple of 512") + if c.UnilateralExitDelay%minAllowedSequence != 0 { + c.UnilateralExitDelay -= c.UnilateralExitDelay % minAllowedSequence + log.Infof( + "unilateral exit delay must be a multiple of %d, rounded to %d", + minAllowedSequence, c.UnilateralExitDelay, + ) } return nil @@ -166,7 +175,9 @@ func (c *Config) txBuilderService() error { switch c.TxBuilderType { case "covenant": - svc = txbuilder.NewTxBuilder(c.wallet, net, c.RoundLifetime, c.ExitDelay) + svc = txbuilder.NewTxBuilder( + c.wallet, net, c.RoundLifetime, c.UnilateralExitDelay, + ) default: err = fmt.Errorf("unknown tx builder type") } @@ -215,7 +226,8 @@ func (c *Config) schedulerService() error { func (c *Config) appService() error { net := c.mainChain() svc, err := application.NewService( - c.Network, net, c.RoundInterval, c.RoundLifetime, c.ExitDelay, c.MinRelayFee, + c.Network, net, + c.RoundInterval, c.RoundLifetime, c.UnilateralExitDelay, c.MinRelayFee, c.wallet, c.repo, c.txBuilder, c.scanner, c.scheduler, ) if err != nil { diff --git a/server/internal/config/config.go b/server/internal/config/config.go index aca2bb7..9ad38f3 100644 --- a/server/internal/config/config.go +++ b/server/internal/config/config.go @@ -24,7 +24,7 @@ type Config struct { LogLevel int MinRelayFee uint64 RoundLifetime int64 - ExitDelay int64 + UnilateralExitDelay int64 } var ( @@ -41,7 +41,7 @@ var ( Network = "NETWORK" MinRelayFee = "MIN_RELAY_FEE" RoundLifetime = "ROUND_LIFETIME" - ExitDelay = "EXIT_DELAY" + UnilateralExitDelay = "UNILATERAL_EXIT_DELAY" defaultDatadir = common.AppDataDir("arkd", false) defaultRoundInterval = 10 @@ -55,7 +55,7 @@ var ( defaultLogLevel = 5 defaultMinRelayFee = 30 defaultRoundLifetime = 512 - defaultExitDelay = 512 + defaultUnilateralExitDelay = 512 ) func LoadConfig() (*Config, error) { @@ -74,7 +74,7 @@ func LoadConfig() (*Config, error) { viper.SetDefault(Network, defaultNetwork) viper.SetDefault(RoundLifetime, defaultRoundLifetime) viper.SetDefault(MinRelayFee, defaultMinRelayFee) - viper.SetDefault(ExitDelay, defaultExitDelay) + viper.SetDefault(UnilateralExitDelay, defaultUnilateralExitDelay) net, err := getNetwork() if err != nil { @@ -99,7 +99,7 @@ func LoadConfig() (*Config, error) { Network: net, MinRelayFee: viper.GetUint64(MinRelayFee), RoundLifetime: viper.GetInt64(RoundLifetime), - ExitDelay: viper.GetInt64(ExitDelay), + UnilateralExitDelay: viper.GetInt64(UnilateralExitDelay), }, nil } diff --git a/server/internal/core/application/service.go b/server/internal/core/application/service.go index 3f1eb97..2090509 100644 --- a/server/internal/core/application/service.go +++ b/server/internal/core/application/service.go @@ -38,13 +38,13 @@ type Service interface { } type service struct { - network common.Network - onchainNework network.Network - pubkey *secp256k1.PublicKey - roundLifetime int64 - roundInterval int64 - minRelayFee uint64 - exitDelay int64 + network common.Network + onchainNework network.Network + pubkey *secp256k1.PublicKey + roundLifetime int64 + roundInterval int64 + unilateralExitDelay int64 + minRelayFee uint64 wallet ports.WalletService repoManager ports.RepoManager @@ -60,7 +60,7 @@ type service struct { func NewService( network common.Network, onchainNetwork network.Network, - roundInterval, roundLifetime int64, exitDelay int64, minRelayFee uint64, + roundInterval, roundLifetime, unilateralExitDelay int64, minRelayFee uint64, walletSvc ports.WalletService, repoManager ports.RepoManager, builder ports.TxBuilder, scanner ports.BlockchainScanner, scheduler ports.SchedulerService, @@ -79,7 +79,7 @@ func NewService( svc := &service{ network, onchainNetwork, pubkey, - roundLifetime, roundInterval, minRelayFee, exitDelay, + roundLifetime, roundInterval, unilateralExitDelay, minRelayFee, walletSvc, repoManager, builder, scanner, sweeper, paymentRequests, forfeitTxs, eventsCh, } @@ -181,7 +181,8 @@ func (s *service) GetRoundByTxid(ctx context.Context, poolTxid string) (*domain. } func (s *service) GetInfo(ctx context.Context) (string, int64, int64, error) { - return hex.EncodeToString(s.pubkey.SerializeCompressed()), s.roundLifetime, s.exitDelay, nil + pubkey := hex.EncodeToString(s.pubkey.SerializeCompressed()) + return pubkey, s.roundLifetime, s.unilateralExitDelay, nil } func (s *service) Onboard( diff --git a/server/internal/infrastructure/tx-builder/covenant/builder_test.go b/server/internal/infrastructure/tx-builder/covenant/builder_test.go index ddc4404..4abd85e 100644 --- a/server/internal/infrastructure/tx-builder/covenant/builder_test.go +++ b/server/internal/infrastructure/tx-builder/covenant/builder_test.go @@ -20,10 +20,10 @@ import ( ) const ( - testingKey = "0218d5ca8b58797b7dbd65c075dd7ba7784b3f38ab71b1a5a8e3f94ba0257654a6" - minRelayFee = uint64(30) - roundLifetime = int64(1209344) - exitDelay = int64(512) + testingKey = "0218d5ca8b58797b7dbd65c075dd7ba7784b3f38ab71b1a5a8e3f94ba0257654a6" + minRelayFee = uint64(30) + roundLifetime = int64(1209344) + unilateralExitDelay = int64(512) ) var ( @@ -45,7 +45,9 @@ func TestMain(m *testing.M) { } func TestBuildPoolTx(t *testing.T) { - builder := txbuilder.NewTxBuilder(wallet, network.Liquid, roundLifetime, exitDelay) + builder := txbuilder.NewTxBuilder( + wallet, network.Liquid, roundLifetime, unilateralExitDelay, + ) fixtures, err := parsePoolTxFixtures() require.NoError(t, err) @@ -54,14 +56,18 @@ func TestBuildPoolTx(t *testing.T) { if len(fixtures.Valid) > 0 { t.Run("valid", func(t *testing.T) { for _, f := range fixtures.Valid { - poolTx, congestionTree, err := builder.BuildPoolTx(pubkey, f.Payments, minRelayFee) + poolTx, congestionTree, err := builder.BuildPoolTx( + pubkey, f.Payments, minRelayFee, + ) require.NoError(t, err) require.NotEmpty(t, poolTx) require.NotEmpty(t, congestionTree) require.Equal(t, f.ExpectedNumOfNodes, congestionTree.NumberOfNodes()) require.Len(t, congestionTree.Leaves(), f.ExpectedNumOfLeaves) - err = tree.ValidateCongestionTree(congestionTree, poolTx, pubkey, roundLifetime) + err = tree.ValidateCongestionTree( + congestionTree, poolTx, pubkey, roundLifetime, + ) require.NoError(t, err) } }) @@ -70,7 +76,9 @@ func TestBuildPoolTx(t *testing.T) { if len(fixtures.Invalid) > 0 { t.Run("invalid", func(t *testing.T) { for _, f := range fixtures.Invalid { - poolTx, congestionTree, err := builder.BuildPoolTx(pubkey, f.Payments, minRelayFee) + poolTx, congestionTree, err := builder.BuildPoolTx( + pubkey, f.Payments, minRelayFee, + ) require.EqualError(t, err, f.ExpectedErr) require.Empty(t, poolTx) require.Empty(t, congestionTree) @@ -80,7 +88,9 @@ func TestBuildPoolTx(t *testing.T) { } func TestBuildForfeitTxs(t *testing.T) { - builder := txbuilder.NewTxBuilder(wallet, network.Liquid, 1209344, exitDelay) + builder := txbuilder.NewTxBuilder( + wallet, network.Liquid, 1209344, unilateralExitDelay, + ) fixtures, err := parseForfeitTxsFixtures() require.NoError(t, err) diff --git a/server/internal/interface/grpc/handlers/arkservice.go b/server/internal/interface/grpc/handlers/arkservice.go index dbe1466..40fc849 100644 --- a/server/internal/interface/grpc/handlers/arkservice.go +++ b/server/internal/interface/grpc/handlers/arkservice.go @@ -203,9 +203,9 @@ func (h *handler) GetInfo(ctx context.Context, req *arkv1.GetInfoRequest) (*arkv } return &arkv1.GetInfoResponse{ - Pubkey: pubkey, - Lifetime: lifetime, - ExitDelay: delay, + Pubkey: pubkey, + RoundLifetime: lifetime, + UnilateralExitDelay: delay, }, nil }