From ecf7bf10be007a10aa2048100a335daedcca717c Mon Sep 17 00:00:00 2001 From: Sam Ricotta Date: Fri, 29 Nov 2024 16:27:58 +0200 Subject: [PATCH 01/40] Create transfer-setup.md --- docs/transfer-setup.md | 286 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 286 insertions(+) create mode 100644 docs/transfer-setup.md diff --git a/docs/transfer-setup.md b/docs/transfer-setup.md new file mode 100644 index 0000000..9411809 --- /dev/null +++ b/docs/transfer-setup.md @@ -0,0 +1,286 @@ +# Transfer your setup from a covenant signer to a covenant emulator + +## Table of Contents + +1. [Purpose of this guide](#1-purpose-of-this-guide) +2. [Prerequesites](#2-prerequisites) +3. [Install Covenant Emulator Binary](#3-install-covenant-emulator-binary) +4. [Setting up the Covenant Emulator Program](#4-setting-up-the-covenant-emulator-program) + 1. [Initialize directories](#41-initialize-directories) + 2. [Configure the covenant emulator](#42-configure-the-covenant-emulator) +5. [Setting up the Covenant Signer](#5-setting-up-the-covenant-signer) +6. [Importing your keys from the prior setup](#6-importing-your-keys-from-the-prior-setup) +7. [Verifying Your Setup](#7-verifying-your-setup) + +## 1. Purpose of this guide + +This guide explains how to transition your setup from solely using the covenant +signer to integrating the covenant emulator alongside the covenant signer. + +Previously, the [covenant signer](https://github.com/babylonlabs-io/covenant-signer), was limited to signing unbonding signatures. With this +transition we are introducing the [covenant emulator](https://github.com/babylonlabs-io/covenant-emulator), which retrieves delegations from Babylon chain + and signs them by communicating with the updated [covenant signer](https://github.com/babylonlabs-io/covenant-emulator/tree/main/covenant-signer). The updated + covenant signer can now generate both unbonding signatures and adaptor signatures, + whereas previously it was limited to creating only unbonding signatures. + +In this guide, we will cover exporting the key from the Bitcoin node and importing +it into the new integrated keyring in the covenant signer. + +## 2. Prerequisites + +To complete the guide you will need to have the following setup: + +1. Setup of bitcoin node in order to retrieve keys, seen [here](https://github.com/babylonlabs-io/covenant-signer/blob/main/docs/deployment.md#2-bitcoind-setup). +2. Access to the private Bitcoin key (covenant emulator key). + +## 3. Install covenant emulator binary + +Download [Golang 1.21](https://go.dev/dl)  + +Using the go version 1.21. Once installed run: + +```shell +go version +``` + +Subsequently clone the covenant [repository](https://github.com/babylonlabs-io/covenant-emulator). + +```shell +git clone git@github.com:babylonlabs-io/covenant-emulator.git +cd covenant-emulator +git checkout +``` + +Run the following command to build the binaries and +install them to your `$GOPATH/bin` directory: + +```shell +make install +``` + +This command will: +- Build and compile all Go packages +- Install `covd` binary to `$GOPATH/bin` +- Make commands globally accessible from your terminal + +If your shell cannot find the installed binary, make sure `$GOPATH/bin` is in +the `$PATH` of your shell. Use the following command to add it to your profile +depending on your shell. + +```shell +export PATH=$HOME/go/bin:$PATH +echo 'export PATH=$HOME/go/bin:$PATH' >> ~/.profile +``` + +## 4. Setting up the covenant emulator program + +### 4.1. Initialize directories + +Next, we initialize the node and home directory. It should generate all of the +necessary files such as `covd.config`, these files will live in the `` +that you set for the `--home`with the below command. + +```shell +covd init --home +``` + +After initialization, the home directory will have the following structure: + +```shell +$ ls + ├── covd.conf # Covd-specific configuration file. + ├── logs # Covd logs +``` + +### 4.2. Configure the covenant emulator + +To set up the connection parameters for the Babylon chain and other covenant +emulator settings, configure the `covd.conf` file with the following parameters. + +``` +# The interval between each query for pending BTC delegations +QueryInterval = 15s + +# The maximum number of delegations that the covd processes each time +DelegationLimit = 100 + +# Bitcoin network to run on +BitcoinNetwork = simnet + +# Babylon specific parameters + +# Babylon chain ID +ChainID = bbn-test-5 + +# Babylon node RPC endpoint +RPCAddr = https://rpc-euphrates.devnet.babylonlabs.io:443 + +# Babylon node gRPC endpoint +GRPCAddr = https://rpc-euphrates.devnet.babylonlabs.io:443 + +# Name of the key in the keyring to use for signing transactions +Key = covenant-key + +# Type of keyring to use, +# supported backends - (os|file|kwallet|pass|test|memory) +# ref https://docs.cosmos.network/v0.46/run-node/keyring.html#available-backends-for-the-keyring +KeyringBackend = test +``` + +## 5. Setting up the covenant signer + +Before proceeding, ensure you have completed the [Covenant Signer Setup](https://github.com/babylonlabs-io/covenant-signer/blob/main/docs/deployment.md#4-covenant-signer-setup). +This involves deploying the Covenant Signer server, which is responsible for +receiving unbonding transactions and returning them signed by the covenant +emulator's key. + +## 6. Importing your keys from the prior setup + +At this stage, you should already have access to the Bitcoin node. If you need a +refresher on setting up `bitcoind`, refer to the [setup guide](https://github.com/babylonlabs-io/covenant-signer/blob/main/docs/deployment.md#2-bitcoind-setup). +Once you have node access, you can proceed with the next steps. + +Load wallet with your covenant key. + +```shell +bitcoind bitcoin-cli loadwallet "covenant-wallet" +``` + +If we want to then confirm that this was successful, we can then retrieve +information about our address to the corresponding key that was returned. + +```shell +bitcoind bitcoin-cli getaddressinfo bcrt1qazasawj3ard0ffwj04zpxlw2pt9cp7kwmnqyvk +``` + +This should generate output information on your address. + +```json +{ + "address": "bcrt1qazasawj3ard0ffwj04zpxlw2pt9cp7kwmnqyvk", + "scriptPubKey": "0014e8bb0eba51e8daf4a5d27d44137dca0acb80face", + "ismine": true, + "solvable": true, + "desc": "wpkh([5e174bde/84h/1h/0h/0/0]023a79b546c79d7f7c5ff20620d914b5cf7250631d12f6e26427ed9d3f98c5ccb1)#ye9usklr", + "parent_desc": "wpkh([5e174bde/84h/1h/0h]tpubDDeLN74J6FLfbwXGzwrqQ8ZCG9e4c9uVLP5TjLxLwZVNewFwZ5qB14mu7Fa1g1MStVvUAwXDZHkBzjjNpiRCq9JoA8yxDW9hh7xyqGkhter/0/*)#59fjcx8s", + "iswatchonly": false, + "isscript": false, + "iswitness": true, + "witness_version": 0, + "witness_program": "e8bb0eba51e8daf4a5d27d44137dca0acb80face", + "pubkey": "023a79b546c79d7f7c5ff20620d914b5cf7250631d12f6e26427ed9d3f98c5ccb1", + "ischange": false, + "timestamp": 1732624709, + "hdkeypath": "m/84h/1h/0h/0/0", + "hdseedid": "0000000000000000000000000000000000000000", + "hdmasterfingerprint": "5e174bde", + "labels": [ + "" + ] +} +``` + +The most important field to focus on is `hdkeypath` that contains derivation path +of our key. In the example it is `84h/1h/0h/0/0` (the intilal `m/` can be ignored). + +Next, list all descriptors in the wallet, ensuring that private keys are included +in the output: + +```shell +docker exec -it bitcoind bitcoin-cli -chain=regtest -rpcuser=user -rpcpassword=pass listdescriptors true +``` + +The terminal should produce output similar to the following: + +```json +{ + "wallet_name": "covenant-wallet", + "descriptors": [ + { + "desc": "wpkh(tprv8ZgxMBicQKsPe9aCeUQgMEMy2YMZ6PHnn2iCuG12y5E8oYhYNEvUqUkNy6sJ7ViBmFUMicikHSK2LBUNPx5do5EDJBjG7puwd6azci2wEdq/84h/1h/0h/0/*)#sachkrde", + "timestamp": 1732624709, + "active": true, + "internal": false, + "range": [ + 0, + 1000 + ], + "next": 1, + "next_index": 1 + } + ... + ] +} + +``` + +The most important field to note is the `desc` value: + +```json +"desc": "wpkh(tprv8ZgxMBicQKsPe9aCeUQgMEMy2YMZ6PHnn2iCuG12y5E8oYhYNEvUqUkNy6sJ7ViBmFUMicikHSK2LBUNPx5do5EDJBjG7puwd6azci2wEdq/84h/1h/0h/0/*)#sachkrde" +``` + +Here, you can see the string starting with `tprv8ZgxMBicQKsPe9aCeUQgMEMy2YMZ6PHnn2iCuG12y5E8oYhYNEvUqUkNy6sJ7ViBmFUMicikHSK2LBUNPx5do5EDJBjG7puwd6azci2wEdq`is the **base58-encoded master private key** of the covenant wallet. This key is critical for signing operations and should be securely stored. + +#### Deriving the Covenant Private Key from the Master Key + +You can derive the covenant private key from the master key by performing a **BIP32 derivation**. The `covenant-signer`repository includes a command to accomplish this: + +```shell +covenant-signer derive-child-key \ tprv8ZgxMBicQKsPe9aCeUQgMEMy2YMZ6PHnn2iCuG12y5E8oYhYNEvUqUkNy6sJ7ViBmFUMicikHSK2LBUNPx5do5EDJBjG7puwd6azci2wEdq \ 84h/1h/0h/0/0 +``` + +The output will display the derived private and public keys: + +```shell +Derived private key: fe1c56c494c730f13739c0655bf06e615409870200047fc65cdf781837cf7f06 +Derived public key: 023a79b546c79d7f7c5ff20620d914b5cf7250631d12f6e26427ed9d3f98c5ccb1 +``` + +As seen, the **Derived Public Key**: + +``` +023a79b546c79d7f7c5ff20620d914b5cf7250631d12f6e26427ed9d3f98c5ccb1 + +``` + +Matches the public key obtained earlier using the `getaddressinfo` command. + +#### Importing the Derived Private Key into the Cosmos Keyring + +The derived private key can now be imported into the Cosmos keyring. Use the +following command: + +```shell +babylond keys import-hex cov fe1c56c494c730f13739c0655bf06e615409870200047fc65cdf781837cf7f06 +``` + +## 7. Verifying your setup + +To confirm that the import was successful, run: + +```shell +babylond keys show cov +``` + +The output will display the details of the imported key: + +```shell + address: bbn1azasawj3ard0ffwj04zpxlw2pt9cp7kwjcdqmc + name: cov + pubkey: '{"@type":"/cosmos.crypto.secp256k1.PubKey","key":"Ajp5tUbHnX98X/IGINkUtc9yUGMdEvbiZCftnT+Yxcyx"}' + type: local + +``` + +Here, the `key` field contains the base64-encoded public key. After decoding, +this key: + +```shell +023a79b546c79d7f7c5ff20620d914b5cf7250631d12f6e26427ed9d3f98c5ccb1 +``` + +Matches the public key derived earlier and seen in the outputs of `getaddressinfo` and `derive-child-key`. + +Congratulations! You have successfully imported your keys from the prior setup +and verified your setup for the covenant emulator. \ No newline at end of file From 37764a4a074a1cdf41e7a85ecf1478c112b19914 Mon Sep 17 00:00:00 2001 From: Sam Ricotta Date: Fri, 29 Nov 2024 16:33:21 +0200 Subject: [PATCH 02/40] Update transfer-setup.md --- docs/transfer-setup.md | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/docs/transfer-setup.md b/docs/transfer-setup.md index 9411809..620b3f0 100644 --- a/docs/transfer-setup.md +++ b/docs/transfer-setup.md @@ -8,9 +8,8 @@ 4. [Setting up the Covenant Emulator Program](#4-setting-up-the-covenant-emulator-program) 1. [Initialize directories](#41-initialize-directories) 2. [Configure the covenant emulator](#42-configure-the-covenant-emulator) -5. [Setting up the Covenant Signer](#5-setting-up-the-covenant-signer) -6. [Importing your keys from the prior setup](#6-importing-your-keys-from-the-prior-setup) -7. [Verifying Your Setup](#7-verifying-your-setup) +5. [Importing your keys from the prior setup](#5-importing-your-keys-from-the-prior-setup) +6. [Verifying Your Setup](#6-verifying-your-setup) ## 1. Purpose of this guide @@ -127,14 +126,7 @@ Key = covenant-key KeyringBackend = test ``` -## 5. Setting up the covenant signer - -Before proceeding, ensure you have completed the [Covenant Signer Setup](https://github.com/babylonlabs-io/covenant-signer/blob/main/docs/deployment.md#4-covenant-signer-setup). -This involves deploying the Covenant Signer server, which is responsible for -receiving unbonding transactions and returning them signed by the covenant -emulator's key. - -## 6. Importing your keys from the prior setup +## 5. Importing your keys from the prior setup At this stage, you should already have access to the Bitcoin node. If you need a refresher on setting up `bitcoind`, refer to the [setup guide](https://github.com/babylonlabs-io/covenant-signer/blob/main/docs/deployment.md#2-bitcoind-setup). @@ -255,7 +247,7 @@ following command: babylond keys import-hex cov fe1c56c494c730f13739c0655bf06e615409870200047fc65cdf781837cf7f06 ``` -## 7. Verifying your setup +## 6. Verifying your setup To confirm that the import was successful, run: From 44b4c1e324632fc04db456d5bae5d1e5a298e2fd Mon Sep 17 00:00:00 2001 From: Sam Ricotta Date: Fri, 29 Nov 2024 16:33:41 +0200 Subject: [PATCH 03/40] Update transfer-setup.md --- docs/transfer-setup.md | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/transfer-setup.md b/docs/transfer-setup.md index 620b3f0..9cbc57b 100644 --- a/docs/transfer-setup.md +++ b/docs/transfer-setup.md @@ -233,7 +233,6 @@ As seen, the **Derived Public Key**: ``` 023a79b546c79d7f7c5ff20620d914b5cf7250631d12f6e26427ed9d3f98c5ccb1 - ``` Matches the public key obtained earlier using the `getaddressinfo` command. From 6ac5008b55a9811470a799b727a41bdf40c82ce5 Mon Sep 17 00:00:00 2001 From: Sam Ricotta Date: Fri, 29 Nov 2024 16:35:30 +0200 Subject: [PATCH 04/40] Update transfer-setup.md --- docs/transfer-setup.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/transfer-setup.md b/docs/transfer-setup.md index 9cbc57b..c33a1dd 100644 --- a/docs/transfer-setup.md +++ b/docs/transfer-setup.md @@ -18,8 +18,8 @@ signer to integrating the covenant emulator alongside the covenant signer. Previously, the [covenant signer](https://github.com/babylonlabs-io/covenant-signer), was limited to signing unbonding signatures. With this transition we are introducing the [covenant emulator](https://github.com/babylonlabs-io/covenant-emulator), which retrieves delegations from Babylon chain - and signs them by communicating with the updated [covenant signer](https://github.com/babylonlabs-io/covenant-emulator/tree/main/covenant-signer). The updated - covenant signer can now generate both unbonding signatures and adaptor signatures, + and signs them by communicating with the updated [covenant signer](https://github.com/babylonlabs-io/covenant-emulator/tree/main/covenant-signer). This means that the + covenant emulator can now generate both unbonding signatures and adaptor signatures, whereas previously it was limited to creating only unbonding signatures. In this guide, we will cover exporting the key from the Bitcoin node and importing From b9f29a5076d06e97385487253aca36d308b7b9c1 Mon Sep 17 00:00:00 2001 From: Sam Ricotta Date: Fri, 29 Nov 2024 16:38:53 +0200 Subject: [PATCH 05/40] Update transfer-setup.md --- docs/transfer-setup.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/transfer-setup.md b/docs/transfer-setup.md index c33a1dd..870b94f 100644 --- a/docs/transfer-setup.md +++ b/docs/transfer-setup.md @@ -13,8 +13,7 @@ ## 1. Purpose of this guide -This guide explains how to transition your setup from solely using the covenant -signer to integrating the covenant emulator alongside the covenant signer. +This guide outlines the transition from solely using the covenant-signer to an integrated setup that includes the covenant emulator. Previously, the [covenant signer](https://github.com/babylonlabs-io/covenant-signer), was limited to signing unbonding signatures. With this transition we are introducing the [covenant emulator](https://github.com/babylonlabs-io/covenant-emulator), which retrieves delegations from Babylon chain From fa4f3dfe21861eff8de61d2bbf11c653a1c3a228 Mon Sep 17 00:00:00 2001 From: Sam Ricotta Date: Fri, 29 Nov 2024 16:44:51 +0200 Subject: [PATCH 06/40] Update transfer-setup.md --- docs/transfer-setup.md | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/docs/transfer-setup.md b/docs/transfer-setup.md index 870b94f..71b462f 100644 --- a/docs/transfer-setup.md +++ b/docs/transfer-setup.md @@ -13,23 +13,26 @@ ## 1. Purpose of this guide -This guide outlines the transition from solely using the covenant-signer to an integrated setup that includes the covenant emulator. +This guide outlines the transition from solely using the covenant signer to an integrated setup that includes the covenant emulator. Previously, the [covenant signer](https://github.com/babylonlabs-io/covenant-signer), was limited to signing unbonding signatures. With this transition we are introducing the [covenant emulator](https://github.com/babylonlabs-io/covenant-emulator), which retrieves delegations from Babylon chain and signs them by communicating with the updated [covenant signer](https://github.com/babylonlabs-io/covenant-emulator/tree/main/covenant-signer). This means that the - covenant emulator can now generate both unbonding signatures and adaptor signatures, - whereas previously it was limited to creating only unbonding signatures. + covenant emulator can now generate both unbonding signatures and adaptor signatures. In this guide, we will cover exporting the key from the Bitcoin node and importing it into the new integrated keyring in the covenant signer. ## 2. Prerequisites -To complete the guide you will need to have the following setup: +To successfully complete this guide, ensure the following setup and resources +are in place: -1. Setup of bitcoin node in order to retrieve keys, seen [here](https://github.com/babylonlabs-io/covenant-signer/blob/main/docs/deployment.md#2-bitcoind-setup). -2. Access to the private Bitcoin key (covenant emulator key). +1. Setup of bitcoin node in order to retrieve keys. For more information, refer to + [Bitcoin Node Setup](https://github.com/babylonlabs-io/covenant-signer/blob/main/docs/deployment.md#2-bitcoind-setup). +2. Ensure you have access to the private Bitcoin key, also referred to as the + covenant emulator key, which will be used for signing operations. + ## 3. Install covenant emulator binary @@ -125,6 +128,8 @@ Key = covenant-key KeyringBackend = test ``` +Now we are ready to import the keys from the prior setup. + ## 5. Importing your keys from the prior setup At this stage, you should already have access to the Bitcoin node. If you need a From 8d9c94bb0f1e84ddcd43cbea6f4041eb0ccef0b7 Mon Sep 17 00:00:00 2001 From: Sam Ricotta Date: Mon, 2 Dec 2024 16:43:56 +0200 Subject: [PATCH 07/40] Update docs with new flow --- covenant-signer/README.md | 307 ++++++++++++++++++++++++++++++++++++++ docs/transfer-setup.md | 217 +++++++-------------------- 2 files changed, 364 insertions(+), 160 deletions(-) create mode 100644 covenant-signer/README.md diff --git a/covenant-signer/README.md b/covenant-signer/README.md new file mode 100644 index 0000000..eb1b295 --- /dev/null +++ b/covenant-signer/README.md @@ -0,0 +1,307 @@ +# Covenant Signer + +## Table of Contents +1. [Purpose of this guide](#purpose-of-this-guide) +2. [Prerequisites](#prerequisites) +3. [Install covenant emulator](#install-covenant-emulator) +4. [Export the key from the Bitcoin node](#export-the-key-from-the-bitcoin-node) +5. [Import the key into the cosmos keyring](#import-the-key-into-the-cosmos-keyring) +6. [Create the configuration file](#create-the-configuration-file) +7. [Running the Covenant Signer](#running-the-covenant-signer) +8. [Using the covenant signer for signing transactions](#using-the-covenant-signer-for-signing-transactions) + +## 1. Purpose of this guide + +This guide outlines the setup and configuration of the +[covenant signer](https://github.com/babylonlabs-io/covenant-emulator/tree/main/covenant-signer). +in conjunction with the [covenant emulator](https://github.com/babylonlabs-io/covenant-emulator). + +## 2. Prerequisites + +To successfully complete this guide, ensure the following setup and resources +are in place: + +1. Setup of bitcoin node in order to retrieve keys. For more information, refer to + [Bitcoin Node Setup](https://github.com/babylonlabs-io/covenant-signer/blob/main/docs/deployment.md#2-bitcoind-setup). +2. Ensure you have access to the private Bitcoin key, also referred to as the + covenant emulator key, which will be used for signing operations. + +## 3. Install covenant signer binary + +If you havent already, download [Golang 1.21](https://go.dev/dl)  + +Using the go version 1.21. Once installed run: + +```shell +go version +``` + +Subsequently clone the covenant [repository](https://github.com/babylonlabs-io/covenant-emulator). + +```shell +git clone git@github.com:babylonlabs-io/covenant-emulator.git +cd covenant-emulator +git checkout +``` + +Run the following command to build the binaries and +install them to your `$GOPATH/bin` directory: + +```shell +cd covenant-signer +make install +``` + +This command will: +- Build and compile all Go packages +- Install `covenant-signer` binary to `$GOPATH/bin` +- Make commands globally accessible from your terminal + +If your shell cannot find the installed binary, make sure `$GOPATH/bin` is in +the `$PATH` of your shell. Use the following command to add it to your profile +depending on your shell. + +```shell +export PATH=$HOME/go/bin:$PATH +echo 'export PATH=$HOME/go/bin:$PATH' >> ~/.profile +``` + +## 4. Export the key from the Bitcoin node + +At this stage, you should already have access to the Bitcoin node. +If you need a refresher on setting up `bitcoind`, refer to the [setup guide](https://github.com/babylonlabs-io/covenant-signer/blob/main/docs/deployment.md#2-bitcoind-setup). +Once you have node access, you can proceed with the next steps. + +Load wallet with your covenant key. + +```shell +bitcoind bitcoin-cli loadwallet "covenant-wallet" +``` + +If we want to then confirm that this was successful, we can then retrieve +information about our address to the corresponding key that was returned. + +```shell +bitcoind bitcoin-cli getaddressinfo bcrt1qazasawj3ard0ffwj04zpxlw2pt9cp7kwmnqyvk +``` + +This should generate output information on your address. + +```json +{ + "address": "bcrt1qazasawj3ard0ffwj04zpxlw2pt9cp7kwmnqyvk", + "scriptPubKey": "0014e8bb0eba51e8daf4a5d27d44137dca0acb80face", + "ismine": true, + "solvable": true, + "desc": "wpkh([5e174bde/84h/1h/0h/0/0]023a79b546c79d7f7c5ff20620d914b5cf7250631d12f6e26427ed9d3f98c5ccb1)#ye9usklr", + "parent_desc": "wpkh([5e174bde/84h/1h/0h]tpubDDeLN74J6FLfbwXGzwrqQ8ZCG9e4c9uVLP5TjLxLwZVNewFwZ5qB14mu7Fa1g1MStVvUAwXDZHkBzjjNpiRCq9JoA8yxDW9hh7xyqGkhter/0/*)#59fjcx8s", + "iswatchonly": false, + "isscript": false, + "iswitness": true, + "witness_version": 0, + "witness_program": "e8bb0eba51e8daf4a5d27d44137dca0acb80face", + "pubkey": "023a79b546c79d7f7c5ff20620d914b5cf7250631d12f6e26427ed9d3f98c5ccb1", + "ischange": false, + "timestamp": 1732624709, + "hdkeypath": "m/84h/1h/0h/0/0", + "hdseedid": "0000000000000000000000000000000000000000", + "hdmasterfingerprint": "5e174bde", + "labels": [ + "" + ] +} +``` + +The most important field to focus on is `hdkeypath` that contains derivation path +of our key. In the example it is `84h/1h/0h/0/0` (the intilal `m/` can be ignored). + +Next, list all descriptors in the wallet, ensuring that private keys are included +in the output: + +```shell +docker exec -it bitcoind bitcoin-cli -chain=regtest -rpcuser=user -rpcpassword=pass listdescriptors true +``` + +The terminal should produce output similar to the following: + +```json +{ + "wallet_name": "covenant-wallet", + "descriptors": [ + { + "desc": "wpkh(tprv8ZgxMBicQKsPe9aCeUQgMEMy2YMZ6PHnn2iCuG12y5E8oYhYNEvUqUkNy6sJ7ViBmFUMicikHSK2LBUNPx5do5EDJBjG7puwd6azci2wEdq/84h/1h/0h/0/*)#sachkrde", + "timestamp": 1732624709, + "active": true, + "internal": false, + "range": [ + 0, + 1000 + ], + "next": 1, + "next_index": 1 + } + ... + ] +} + +``` + +The most important field to note is the `desc` value: + +```json +"desc": "wpkh(tprv8ZgxMBicQKsPe9aCeUQgMEMy2YMZ6PHnn2iCuG12y5E8oYhYNEvUqUkNy6sJ7ViBmFUMicikHSK2LBUNPx5do5EDJBjG7puwd6azci2wEdq/84h/1h/0h/0/*)#sachkrde" +``` + +Here, you can see the string starting with `tprv8ZgxMBicQKsPe9aCeUQgMEMy2YMZ6PHnn2iCuG12y5E8oYhYNEvUqUkNy6sJ7ViBmFUMicikHSK2LBUNPx5do5EDJBjG7puwd6azci2wEdq`is the **base58-encoded master private key** of the covenant wallet. This key is critical for signing operations and should be securely stored. + + +#### Deriving the Covenant Private Key from the Master Key + +You can derive the covenant private key from the master key by performing a **BIP32 derivation**. The `covenant-signer`repository includes a command to accomplish this: + +```shell +covenant-signer derive-child-key \ tprv8ZgxMBicQKsPe9aCeUQgMEMy2YMZ6PHnn2iCuG12y5E8oYhYNEvUqUkNy6sJ7ViBmFUMicikHSK2LBUNPx5do5EDJBjG7puwd6azci2wEdq \ 84h/1h/0h/0/0 +``` + +The output will display the derived private and public keys: + +```shell +Derived private key: fe1c56c494c730f13739c0655bf06e615409870200047fc65cdf781837cf7f06 +Derived public key: 023a79b546c79d7f7c5ff20620d914b5cf7250631d12f6e26427ed9d3f98c5ccb1 +``` + +As seen, the **Derived Public Key**: + +``` +023a79b546c79d7f7c5ff20620d914b5cf7250631d12f6e26427ed9d3f98c5ccb1 +``` + +Matches the public key obtained earlier using the `getaddressinfo` command. + +#### Importing the Derived Private Key into the Cosmos Keyring + +The derived private key can now be imported into the Cosmos keyring. Use the +following command: + +```shell +babylond keys import-hex cov fe1c56c494c730f13739c0655bf06e615409870200047fc65cdf781837cf7f06 +``` + +To confirm that the import was successful, run: + +```shell +babylond keys show cov +``` + +The output will display the details of the imported key: + +```shell + address: bbn1azasawj3ard0ffwj04zpxlw2pt9cp7kwjcdqmc + name: cov + pubkey: '{"@type":"/cosmos.crypto.secp256k1.PubKey","key":"Ajp5tUbHnX98X/IGINkUtc9yUGMdEvbiZCftnT+Yxcyx"}' + type: local + +``` + +Here, the `key` field contains the base64-encoded public key. After decoding, +this key: + +```shell +023a79b546c79d7f7c5ff20620d914b5cf7250631d12f6e26427ed9d3f98c5ccb1 +``` + +Matches the public key derived earlier and seen in the outputs of `getaddressinfo`  +and `derive-child-key`. + +Congratulations! You have successfully imported your keys from the prior setup +and verified your setup for the covenant emulator. + +## 6. Create the configuration file + +Use the example configuration [file](./example/config.toml) to create your own +configuration file. Then, replace the placeholder values with your own configuration. + +```toml +[keystore] +keystore-type = "cosmos" + +[keystore.cosmos] +# pointing to the directory where the key is stored, unless specified otherwise +key-directory = "/path/to/keydir" + +# the backend to be used for storing the key, in this case file +keyring-backend = "file" + +# the name of the key you used when importing the key +key-name = "your-key-name" + +# the chain id of the chain to be used +chain-id = "your-chain-id" + +[server-config] +host = "127.0.0.1" +port = 9791 + +[metrics] +host = "127.0.0.1" +port = 2113 +``` + +## 7. Running the Covenant Signer + +The covenant signer can be run using the following command: + +```shell +covenant-signer start --config ./path/to/config.toml +``` + +the covenant signer must be run in a secure network and only accessible by the +covenant emulator. + +Once the covenant signer is set up and unlocked, you can configure the covenant +emulator to use it. The URL of the covenant signer, which is http://127.0.0.1:9791, +should be specified in the covenant emulator's configuration file under the +remotesigner section. + +It's important to note that the key specified in the covenant emulator's +configuration is not the covenant key itself. Instead, it is a +key used for sending Cosmos transactions. + +## 8. Using the covenant signer for signing transactions + +To enable signing transactions with the covenant key, you need to unlock it first. + +```shell +curl -X POST http://127.0.0.1:9791/v1/unlock -d '{"passphrase": ""}' +``` + +Now that the key is unlocked you can add its url to the covenant emulator's +configuration file. See [here](./docs/transfer-setup.md#42-configure-the-covenant-emulator) +for more information. + +You can sign transactions using the following command. However, ensure that both +the staking and unbonding transactions are provided in hex format: + +```shell +curl -X POST http://127.0.0.1:9791/v1/sign-transactions \ + -d '{ + "staking_tx_hex": "", + "unbonding_tx_hex": "" + }' +``` + +This will generate a signature for the provided transactions and return it in JSON +format. + +```json +{ + "staking_tx_signature": "", + "unbonding_tx_signature": "" +} +``` + +These signatures can then be used to verify that the transactions were signed by +the covenant key. + +Congratulations! You have successfully setup the covenant signer and are now able +to sign transactions with the covenant key. \ No newline at end of file diff --git a/docs/transfer-setup.md b/docs/transfer-setup.md index 71b462f..b7bc2d7 100644 --- a/docs/transfer-setup.md +++ b/docs/transfer-setup.md @@ -8,43 +8,38 @@ 4. [Setting up the Covenant Emulator Program](#4-setting-up-the-covenant-emulator-program) 1. [Initialize directories](#41-initialize-directories) 2. [Configure the covenant emulator](#42-configure-the-covenant-emulator) -5. [Importing your keys from the prior setup](#5-importing-your-keys-from-the-prior-setup) -6. [Verifying Your Setup](#6-verifying-your-setup) +5. [Generate key pairs](#5-generate-key-pairs) +6. [Start the emulator daemon](#6-start-the-emulator-daemon) ## 1. Purpose of this guide -This guide outlines the transition from solely using the covenant signer to an integrated setup that includes the covenant emulator. +This guide outlines the transition from solely using the covenant signer to an +integrated setup that includes the covenant emulator. -Previously, the [covenant signer](https://github.com/babylonlabs-io/covenant-signer), was limited to signing unbonding signatures. With this -transition we are introducing the [covenant emulator](https://github.com/babylonlabs-io/covenant-emulator), which retrieves delegations from Babylon chain - and signs them by communicating with the updated [covenant signer](https://github.com/babylonlabs-io/covenant-emulator/tree/main/covenant-signer). This means that the - covenant emulator can now generate both unbonding signatures and adaptor signatures. +Previously, the [covenant signer](https://github.com/babylonlabs-io/covenant-signer), +was limited to signing unbonding signatures. In this transition we are introducing +the [covenant emulator](https://github.com/babylonlabs-io/covenant-emulator), which +retrieves delegations from Babylon chain and signs them by communicating with the +updated [covenant signer](https://github.com/babylonlabs-io/covenant-emulator/tree/main/covenant-signer). +This means that the covenant emulator can now generate both unbonding signatures +unbonding signatures and adaptor signatures. In this guide, we will cover exporting the key from the Bitcoin node and importing it into the new integrated keyring in the covenant signer. ## 2. Prerequisites -To successfully complete this guide, ensure the following setup and resources -are in place: +To successfully complete this guide, you will need a running instance of the +[covenant signer](./covenant-signer) with your keys imported from `bitcoind` +wallet into the cosmos keyring. -1. Setup of bitcoin node in order to retrieve keys. For more information, refer to - [Bitcoin Node Setup](https://github.com/babylonlabs-io/covenant-signer/blob/main/docs/deployment.md#2-bitcoind-setup). -2. Ensure you have access to the private Bitcoin key, also referred to as the - covenant emulator key, which will be used for signing operations. - +Please follow the [covenant signer setup guide](covenant-signer/README.md) to +complete the setup of the covenant signer with your keys before proceeding. -## 3. Install covenant emulator binary +## 3. Install covenant emulator binary -Download [Golang 1.21](https://go.dev/dl)  - -Using the go version 1.21. Once installed run: - -```shell -go version -``` - -Subsequently clone the covenant [repository](https://github.com/babylonlabs-io/covenant-emulator). +Once you have the covenant signer running, you can install the covenant emulator +binary. ```shell git clone git@github.com:babylonlabs-io/covenant-emulator.git @@ -95,8 +90,10 @@ $ ls ### 4.2. Configure the covenant emulator -To set up the connection parameters for the Babylon chain and other covenant -emulator settings, configure the `covd.conf` file with the following parameters. +As you have already set up the covenant signer, you can now configure the covenant +emulator to use it. + +Use the following parameters to configure the `covd.conf` file. ``` # The interval between each query for pending BTC delegations @@ -126,156 +123,56 @@ Key = covenant-key # supported backends - (os|file|kwallet|pass|test|memory) # ref https://docs.cosmos.network/v0.46/run-node/keyring.html#available-backends-for-the-keyring KeyringBackend = test -``` -Now we are ready to import the keys from the prior setup. +[remotesigner] +; URL of the remote signer +URL = http://127.0.0.1:9792 -## 5. Importing your keys from the prior setup +; client when making requests to the remote signer +Timeout = 2s -At this stage, you should already have access to the Bitcoin node. If you need a -refresher on setting up `bitcoind`, refer to the [setup guide](https://github.com/babylonlabs-io/covenant-signer/blob/main/docs/deployment.md#2-bitcoind-setup). -Once you have node access, you can proceed with the next steps. - -Load wallet with your covenant key. - -```shell -bitcoind bitcoin-cli loadwallet "covenant-wallet" +; if true, covenant will use the remote signer to sign transactions +RemoteSignerEnabled = true ``` -If we want to then confirm that this was successful, we can then retrieve -information about our address to the corresponding key that was returned. +Ensure that the covenant signer is running and unlocked before proceeding +otherwise you will be unable to run the emulator. -```shell -bitcoind bitcoin-cli getaddressinfo bcrt1qazasawj3ard0ffwj04zpxlw2pt9cp7kwmnqyvk -``` +## 5. Generate key pairs -This should generate output information on your address. +The covenant emulator daemon requires the existence of a keyring that signs +signatures and interacts with Babylon. Use the following command to generate the +key: -```json +```bash +$ covd create-key --key-name covenant-key --chain-id chain-test { - "address": "bcrt1qazasawj3ard0ffwj04zpxlw2pt9cp7kwmnqyvk", - "scriptPubKey": "0014e8bb0eba51e8daf4a5d27d44137dca0acb80face", - "ismine": true, - "solvable": true, - "desc": "wpkh([5e174bde/84h/1h/0h/0/0]023a79b546c79d7f7c5ff20620d914b5cf7250631d12f6e26427ed9d3f98c5ccb1)#ye9usklr", - "parent_desc": "wpkh([5e174bde/84h/1h/0h]tpubDDeLN74J6FLfbwXGzwrqQ8ZCG9e4c9uVLP5TjLxLwZVNewFwZ5qB14mu7Fa1g1MStVvUAwXDZHkBzjjNpiRCq9JoA8yxDW9hh7xyqGkhter/0/*)#59fjcx8s", - "iswatchonly": false, - "isscript": false, - "iswitness": true, - "witness_version": 0, - "witness_program": "e8bb0eba51e8daf4a5d27d44137dca0acb80face", - "pubkey": "023a79b546c79d7f7c5ff20620d914b5cf7250631d12f6e26427ed9d3f98c5ccb1", - "ischange": false, - "timestamp": 1732624709, - "hdkeypath": "m/84h/1h/0h/0/0", - "hdseedid": "0000000000000000000000000000000000000000", - "hdmasterfingerprint": "5e174bde", - "labels": [ - "" - ] + "name": "covenant-key", + "public-key": "9bd5baaba3d3fb5a8bcb8c2995c51793e14a1e32f1665cade168f638e3b15538" } ``` -The most important field to focus on is `hdkeypath` that contains derivation path -of our key. In the example it is `84h/1h/0h/0/0` (the intilal `m/` can be ignored). - -Next, list all descriptors in the wallet, ensuring that private keys are included -in the output: - -```shell -docker exec -it bitcoind bitcoin-cli -chain=regtest -rpcuser=user -rpcpassword=pass listdescriptors true -``` - -The terminal should produce output similar to the following: - -```json -{ - "wallet_name": "covenant-wallet", - "descriptors": [ - { - "desc": "wpkh(tprv8ZgxMBicQKsPe9aCeUQgMEMy2YMZ6PHnn2iCuG12y5E8oYhYNEvUqUkNy6sJ7ViBmFUMicikHSK2LBUNPx5do5EDJBjG7puwd6azci2wEdq/84h/1h/0h/0/*)#sachkrde", - "timestamp": 1732624709, - "active": true, - "internal": false, - "range": [ - 0, - 1000 - ], - "next": 1, - "next_index": 1 - } - ... - ] -} - -``` - -The most important field to note is the `desc` value: - -```json -"desc": "wpkh(tprv8ZgxMBicQKsPe9aCeUQgMEMy2YMZ6PHnn2iCuG12y5E8oYhYNEvUqUkNy6sJ7ViBmFUMicikHSK2LBUNPx5do5EDJBjG7puwd6azci2wEdq/84h/1h/0h/0/*)#sachkrde" -``` - -Here, you can see the string starting with `tprv8ZgxMBicQKsPe9aCeUQgMEMy2YMZ6PHnn2iCuG12y5E8oYhYNEvUqUkNy6sJ7ViBmFUMicikHSK2LBUNPx5do5EDJBjG7puwd6azci2wEdq`is the **base58-encoded master private key** of the covenant wallet. This key is critical for signing operations and should be securely stored. - -#### Deriving the Covenant Private Key from the Master Key - -You can derive the covenant private key from the master key by performing a **BIP32 derivation**. The `covenant-signer`repository includes a command to accomplish this: - -```shell -covenant-signer derive-child-key \ tprv8ZgxMBicQKsPe9aCeUQgMEMy2YMZ6PHnn2iCuG12y5E8oYhYNEvUqUkNy6sJ7ViBmFUMicikHSK2LBUNPx5do5EDJBjG7puwd6azci2wEdq \ 84h/1h/0h/0/0 -``` - -The output will display the derived private and public keys: - -```shell -Derived private key: fe1c56c494c730f13739c0655bf06e615409870200047fc65cdf781837cf7f06 -Derived public key: 023a79b546c79d7f7c5ff20620d914b5cf7250631d12f6e26427ed9d3f98c5ccb1 -``` - -As seen, the **Derived Public Key**: +After executing the above command, the key name will be saved in the config file +created in [step](#configuration). +Note that the `public-key` in the output should be used as one of the inputs of +the genesis of the Babylon chain. +Also, this key will be used to pay for the fees due to the daemon submitting +signatures to Babylon. -``` -023a79b546c79d7f7c5ff20620d914b5cf7250631d12f6e26427ed9d3f98c5ccb1 -``` +## 6. Start the emulator daemon -Matches the public key obtained earlier using the `getaddressinfo` command. +You can start the covenant emulator daemon using the following command: -#### Importing the Derived Private Key into the Cosmos Keyring - -The derived private key can now be imported into the Cosmos keyring. Use the -following command: - -```shell -babylond keys import-hex cov fe1c56c494c730f13739c0655bf06e615409870200047fc65cdf781837cf7f06 +```bash +$ covd start +2024-01-05T05:59:09.429615Z info Starting Covenant Emulator +2024-01-05T05:59:09.429713Z info Covenant Emulator Daemon is fully active! ``` -## 6. Verifying your setup - -To confirm that the import was successful, run: - -```shell -babylond keys show cov -``` - -The output will display the details of the imported key: - -```shell - address: bbn1azasawj3ard0ffwj04zpxlw2pt9cp7kwjcdqmc - name: cov - pubkey: '{"@type":"/cosmos.crypto.secp256k1.PubKey","key":"Ajp5tUbHnX98X/IGINkUtc9yUGMdEvbiZCftnT+Yxcyx"}' - type: local - -``` - -Here, the `key` field contains the base64-encoded public key. After decoding, -this key: - -```shell -023a79b546c79d7f7c5ff20620d914b5cf7250631d12f6e26427ed9d3f98c5ccb1 -``` +All the available CLI options can be viewed using the `--help` flag. These +options can also be set in the configuration file. -Matches the public key derived earlier and seen in the outputs of `getaddressinfo` and `derive-child-key`. +Next you will need to unlock the key and sign transactions. Please refer to the +[covenant signer setup guide](covenant-signer/README.md#using-the-covenant-signer-for-signing-transactions) +to unlock the key and sign any transactions that are needed. -Congratulations! You have successfully imported your keys from the prior setup -and verified your setup for the covenant emulator. \ No newline at end of file From df33891357d3c2df1b1273da563434a337401a8d Mon Sep 17 00:00:00 2001 From: Sam Ricotta Date: Mon, 2 Dec 2024 17:01:25 +0200 Subject: [PATCH 08/40] Update README.md --- covenant-signer/README.md | 41 ++++++++++++++++++++++++--------------- 1 file changed, 25 insertions(+), 16 deletions(-) diff --git a/covenant-signer/README.md b/covenant-signer/README.md index eb1b295..0b65993 100644 --- a/covenant-signer/README.md +++ b/covenant-signer/README.md @@ -1,30 +1,39 @@ # Covenant Signer ## Table of Contents -1. [Purpose of this guide](#purpose-of-this-guide) -2. [Prerequisites](#prerequisites) -3. [Install covenant emulator](#install-covenant-emulator) +1. [Purpose of this guide](#1-purpose-of-this-guide) +2. [Prerequisites](#2-prerequisites) +3. [Install covenant emulator](#3-install-covenant-emulator) 4. [Export the key from the Bitcoin node](#export-the-key-from-the-bitcoin-node) -5. [Import the key into the cosmos keyring](#import-the-key-into-the-cosmos-keyring) -6. [Create the configuration file](#create-the-configuration-file) -7. [Running the Covenant Signer](#running-the-covenant-signer) -8. [Using the covenant signer for signing transactions](#using-the-covenant-signer-for-signing-transactions) +5. [Import the key into the cosmos keyring](#5-import-the-key-into-the-cosmos-keyring) +6. [Create the configuration file](#6-create-the-configuration-file) +7. [Running the Covenant Signer](#7-running-the-covenant-signer) +8. [Using the covenant signer for signing transactions](#8-using-the-covenant-signer-for-signing-transactions) ## 1. Purpose of this guide -This guide outlines the setup and configuration of the -[covenant signer](https://github.com/babylonlabs-io/covenant-emulator/tree/main/covenant-signer). -in conjunction with the [covenant emulator](https://github.com/babylonlabs-io/covenant-emulator). +This guide outlines the transition from solely using the covenant signer to an +integrated setup that includes the covenant emulator. + +Previously, the [covenant signer](https://github.com/babylonlabs-io/covenant-signer), +was limited to signing unbonding signatures. In this transition we are introducing +the [covenant emulator](https://github.com/babylonlabs-io/covenant-emulator), which +retrieves delegations from Babylon chain and signs them by communicating with the +updated [covenant signer](https://github.com/babylonlabs-io/covenant-emulator/tree/main/covenant-signer). +This means that the covenant emulator can now generate both unbonding signatures +unbonding signatures and adaptor signatures. + +In this guide, we will cover exporting the key from the Bitcoin node and importing +it into the new integrated keyring in the covenant signer. ## 2. Prerequisites -To successfully complete this guide, ensure the following setup and resources -are in place: +To successfully complete this guide, ensure you have the bitcoin node setup and you +have access to the private Bitcoin key you used previously when you generated your +address as it contains the covenant key. -1. Setup of bitcoin node in order to retrieve keys. For more information, refer to - [Bitcoin Node Setup](https://github.com/babylonlabs-io/covenant-signer/blob/main/docs/deployment.md#2-bitcoind-setup). -2. Ensure you have access to the private Bitcoin key, also referred to as the - covenant emulator key, which will be used for signing operations. +For a refresher on setting up the bitcoin node, refer to the +[deployment guide](https://github.com/babylonlabs-io/covenant-signer/blob/main/docs/deployment.md#2-bitcoind-setup). ## 3. Install covenant signer binary From c17fc3aaaf5f6c3335debac1f56f7c1f53e9353d Mon Sep 17 00:00:00 2001 From: Sam Ricotta Date: Mon, 2 Dec 2024 17:05:24 +0200 Subject: [PATCH 09/40] Update README.md --- covenant-signer/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/covenant-signer/README.md b/covenant-signer/README.md index 0b65993..8c415b9 100644 --- a/covenant-signer/README.md +++ b/covenant-signer/README.md @@ -3,8 +3,8 @@ ## Table of Contents 1. [Purpose of this guide](#1-purpose-of-this-guide) 2. [Prerequisites](#2-prerequisites) -3. [Install covenant emulator](#3-install-covenant-emulator) -4. [Export the key from the Bitcoin node](#export-the-key-from-the-bitcoin-node) +3. [Install covenant signer](#3-install-covenant-signer-binary) +4. [Export the key from the Bitcoin node](#4-export-the-key-from-the-bitcoin-node) 5. [Import the key into the cosmos keyring](#5-import-the-key-into-the-cosmos-keyring) 6. [Create the configuration file](#6-create-the-configuration-file) 7. [Running the Covenant Signer](#7-running-the-covenant-signer) @@ -187,7 +187,7 @@ As seen, the **Derived Public Key**: Matches the public key obtained earlier using the `getaddressinfo` command. -#### Importing the Derived Private Key into the Cosmos Keyring +#### 5. Importing the Derived Private Key into the Cosmos Keyring The derived private key can now be imported into the Cosmos keyring. Use the following command: From e0fd7044fa5e463ad05bc5c53448d6849100fc32 Mon Sep 17 00:00:00 2001 From: Sam Ricotta Date: Mon, 2 Dec 2024 17:07:10 +0200 Subject: [PATCH 10/40] Update README.md --- covenant-signer/README.md | 43 +++++++++++++-------------------------- 1 file changed, 14 insertions(+), 29 deletions(-) diff --git a/covenant-signer/README.md b/covenant-signer/README.md index 8c415b9..fe72e87 100644 --- a/covenant-signer/README.md +++ b/covenant-signer/README.md @@ -1,32 +1,17 @@ # Covenant Signer ## Table of Contents -1. [Purpose of this guide](#1-purpose-of-this-guide) -2. [Prerequisites](#2-prerequisites) -3. [Install covenant signer](#3-install-covenant-signer-binary) -4. [Export the key from the Bitcoin node](#4-export-the-key-from-the-bitcoin-node) -5. [Import the key into the cosmos keyring](#5-import-the-key-into-the-cosmos-keyring) -6. [Create the configuration file](#6-create-the-configuration-file) -7. [Running the Covenant Signer](#7-running-the-covenant-signer) -8. [Using the covenant signer for signing transactions](#8-using-the-covenant-signer-for-signing-transactions) -## 1. Purpose of this guide +1. [Prerequisites](#1-prerequisites) +2. [Install covenant signer](#2-install-covenant-signer-binary) +3. [Export the key from the Bitcoin node](#3-export-the-key-from-the-bitcoin-node) +4. [Import the key into the cosmos keyring](#4-import-the-key-into-the-cosmos-keyring) +5. [Create the configuration file](#5-create-the-configuration-file) +6. [Running the Covenant Signer](#6-running-the-covenant-signer) +7. [Using the covenant signer for signing transactions](#7-using-the-covenant-signer-for-signing-transactions) -This guide outlines the transition from solely using the covenant signer to an -integrated setup that includes the covenant emulator. -Previously, the [covenant signer](https://github.com/babylonlabs-io/covenant-signer), -was limited to signing unbonding signatures. In this transition we are introducing -the [covenant emulator](https://github.com/babylonlabs-io/covenant-emulator), which -retrieves delegations from Babylon chain and signs them by communicating with the -updated [covenant signer](https://github.com/babylonlabs-io/covenant-emulator/tree/main/covenant-signer). -This means that the covenant emulator can now generate both unbonding signatures -unbonding signatures and adaptor signatures. - -In this guide, we will cover exporting the key from the Bitcoin node and importing -it into the new integrated keyring in the covenant signer. - -## 2. Prerequisites +## 1. Prerequisites To successfully complete this guide, ensure you have the bitcoin node setup and you have access to the private Bitcoin key you used previously when you generated your @@ -35,7 +20,7 @@ address as it contains the covenant key. For a refresher on setting up the bitcoin node, refer to the [deployment guide](https://github.com/babylonlabs-io/covenant-signer/blob/main/docs/deployment.md#2-bitcoind-setup). -## 3. Install covenant signer binary +## 2. Install covenant signer binary If you havent already, download [Golang 1.21](https://go.dev/dl)  @@ -75,7 +60,7 @@ export PATH=$HOME/go/bin:$PATH echo 'export PATH=$HOME/go/bin:$PATH' >> ~/.profile ``` -## 4. Export the key from the Bitcoin node +## 3. Export the key from the Bitcoin node At this stage, you should already have access to the Bitcoin node. If you need a refresher on setting up `bitcoind`, refer to the [setup guide](https://github.com/babylonlabs-io/covenant-signer/blob/main/docs/deployment.md#2-bitcoind-setup). @@ -187,7 +172,7 @@ As seen, the **Derived Public Key**: Matches the public key obtained earlier using the `getaddressinfo` command. -#### 5. Importing the Derived Private Key into the Cosmos Keyring +#### 4. Importing the Derived Private Key into the Cosmos Keyring The derived private key can now be imported into the Cosmos keyring. Use the following command: @@ -225,7 +210,7 @@ and `derive-child-key`. Congratulations! You have successfully imported your keys from the prior setup and verified your setup for the covenant emulator. -## 6. Create the configuration file +## 5. Create the configuration file Use the example configuration [file](./example/config.toml) to create your own configuration file. Then, replace the placeholder values with your own configuration. @@ -256,7 +241,7 @@ host = "127.0.0.1" port = 2113 ``` -## 7. Running the Covenant Signer +## 6. Running the Covenant Signer The covenant signer can be run using the following command: @@ -276,7 +261,7 @@ It's important to note that the key specified in the covenant emulator's configuration is not the covenant key itself. Instead, it is a key used for sending Cosmos transactions. -## 8. Using the covenant signer for signing transactions +## 7. Using the covenant signer for signing transactions To enable signing transactions with the covenant key, you need to unlock it first. From 6133297557348a4b35ba7116cbd6d4919b25d13d Mon Sep 17 00:00:00 2001 From: Sam Ricotta Date: Mon, 2 Dec 2024 17:21:17 +0200 Subject: [PATCH 11/40] Update README.md --- covenant-signer/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/covenant-signer/README.md b/covenant-signer/README.md index fe72e87..fc0b8a2 100644 --- a/covenant-signer/README.md +++ b/covenant-signer/README.md @@ -5,7 +5,7 @@ 1. [Prerequisites](#1-prerequisites) 2. [Install covenant signer](#2-install-covenant-signer-binary) 3. [Export the key from the Bitcoin node](#3-export-the-key-from-the-bitcoin-node) -4. [Import the key into the cosmos keyring](#4-import-the-key-into-the-cosmos-keyring) +4. [Importing the Derived Private Key into the Cosmos Keyring](#4-importing-the-derived-private-key-into-the-cosmos-keyring) 5. [Create the configuration file](#5-create-the-configuration-file) 6. [Running the Covenant Signer](#6-running-the-covenant-signer) 7. [Using the covenant signer for signing transactions](#7-using-the-covenant-signer-for-signing-transactions) @@ -172,7 +172,7 @@ As seen, the **Derived Public Key**: Matches the public key obtained earlier using the `getaddressinfo` command. -#### 4. Importing the Derived Private Key into the Cosmos Keyring +## 4. Importing the Derived Private Key into the Cosmos Keyring The derived private key can now be imported into the Cosmos keyring. Use the following command: From 91f44a2a8ecb5f2c1d9751da61c9cd3dcfeead0f Mon Sep 17 00:00:00 2001 From: Sam Ricotta Date: Mon, 2 Dec 2024 17:25:38 +0200 Subject: [PATCH 12/40] Update README.md --- covenant-signer/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/covenant-signer/README.md b/covenant-signer/README.md index fc0b8a2..fccb154 100644 --- a/covenant-signer/README.md +++ b/covenant-signer/README.md @@ -22,7 +22,7 @@ For a refresher on setting up the bitcoin node, refer to the ## 2. Install covenant signer binary -If you havent already, download [Golang 1.21](https://go.dev/dl)  +If you havent already, download [Golang 1.21](https://go.dev/dl) and the repository. Using the go version 1.21. Once installed run: @@ -30,7 +30,7 @@ Using the go version 1.21. Once installed run: go version ``` -Subsequently clone the covenant [repository](https://github.com/babylonlabs-io/covenant-emulator). +And to clone the repository please run: ```shell git clone git@github.com:babylonlabs-io/covenant-emulator.git From 934babb84438831ba52d69fcf6c91a317c8756a6 Mon Sep 17 00:00:00 2001 From: Sam Ricotta Date: Mon, 2 Dec 2024 17:26:56 +0200 Subject: [PATCH 13/40] Update README.md --- covenant-signer/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/covenant-signer/README.md b/covenant-signer/README.md index fccb154..b05be6b 100644 --- a/covenant-signer/README.md +++ b/covenant-signer/README.md @@ -22,7 +22,7 @@ For a refresher on setting up the bitcoin node, refer to the ## 2. Install covenant signer binary -If you havent already, download [Golang 1.21](https://go.dev/dl) and the repository. +If you havent already, download [Golang 1.21](https://go.dev/dl). Using the go version 1.21. Once installed run: @@ -30,7 +30,7 @@ Using the go version 1.21. Once installed run: go version ``` -And to clone the repository please run: +If you also still have not yet cloned the repository, run: ```shell git clone git@github.com:babylonlabs-io/covenant-emulator.git From 30d7c56348a6f0092859de75ab31df2be9de5f0f Mon Sep 17 00:00:00 2001 From: Sam Ricotta Date: Mon, 2 Dec 2024 22:18:37 +0200 Subject: [PATCH 14/40] updates --- README.md | 225 ++++-------------- covenant-signer/README.md | 70 ++++-- ...ransfer-setup.md => configure-emulator.md} | 2 +- 3 files changed, 101 insertions(+), 196 deletions(-) rename docs/{transfer-setup.md => configure-emulator.md} (98%) diff --git a/README.md b/README.md index bd2542c..4501826 100644 --- a/README.md +++ b/README.md @@ -57,18 +57,22 @@ code. This committee can be dimissed once such programmability becomes available, e.g., if BTC's covenant proposal [BIP-119](https://github.com/bitcoin/bips/blob/master/bip-0119.mediawiki) is merged. -Covenant emulation committee members are defined in the Babylon parameters and -their public keys are recorded in the genesis file of the Babylon chain. -Changing the covenant committee requires a -[governance proposal](https://docs.cosmos.network/v0.50/build/modules/gov). -Each committee member runs the `covd` daemon (short for -`covenant-emulator-daemon`), which -constantly monitors staking requests on the Babylon chain, verifies the -validity of the Bitcoin transactions that are involved with them, and -sends the necessary signatures if verification is passed. -The staking requests can only become active and receive voting power -if a sufficient quorum of covenant committee members have -verified the validity of the transactions and sent corresponding signatures. +Covenant emulation committee members are defined in the Babylon parameters and +their public keys are recorded in the genesis file of the Babylon chain. +Changing the covenant committee requires a +[governance proposal](https://docs.cosmos.network/v0.50/build/modules/gov). +Each committee member runs two components: + +1. The `covd` daemon (short for `covenant-emulator-daemon`), which constantly +monitors staking requests on the Babylon chain, verifies the validity of the +Bitcoin transactions that are involved with them, and sends the necessary +signatures if verification is passed. +2. A Covenant Signer instance, which securely manages the private key and +performs signing operations in an isolated environment. + +The staking requests can only become active and receive voting power if a +sufficient quorum of covenant committee members have verified the validity +of the transactions and sent corresponding signatures. Upon a pending staking request being found, the covenant emulation daemon (`covd`), validates it against the spending rules defined in @@ -87,177 +91,44 @@ staking time lock expires (on-demand unbonding). signature, which has similar usage to the **slashing signature** but signs over the slashing path of the unbonding transaction. -## Installation +For instructions on how to run the Covenant Emulator, please refer to the +[Covenant Emulator](./docs/configure-emulator.md). -### Prerequisites +## Covenant Signer -This project requires Go version `1.21` or later. -Install Go by following the instructions on -the [official Go installation guide](https://golang.org/doc/install). +The Covenant Signer works alongside the Covenant Emulator. It is designed to +securely handle private keys for signing operations. The signer has been +redesigned to prioritize security through isolation - separating the private key +handling from the more exposed emulator program. -#### Download the code +Previously, private keys were stored in the Bitcoin wallet using PSBT (Partially +Signed Bitcoin Transactions) for signing operations. The new design uses a +dedicated Covenant Signer that acts as a remote signing service, storing private +keys in an encrypted Cosmos SDK keyring. This approach not only improves security +through isolation but also enables the creation of both Schnorr signatures and +Schnorr adaptor signatures required for covenant operations. -To get started, clone the repository to your local machine from Github: +For instructions on how to run the Covenant Signer, please refer to the +[Covenant Signer](./covenant-signer/README.md). -```bash -$ git clone git@github.com:babylonlabs-io/covenant-emulator.git -``` +## Interaction Between Emulator and Signer -You can choose a specific version from -the [official releases page](https://github.com/babylonlabs-io/covenant-emulator/releases): +The Covenant Emulator handles the application logic, including monitoring the +Babylon blockchain and validating transactions. When a signature is needed, it +forwards the request to the Covenant Signer, which processes the signing operation +and returns the necessary cryptographic signature. -```bash -$ cd covenant-emulator # cd into the project directory -$ git checkout -``` +The interaction begins with the Covenant Emulator monitoring the Babylon +blockchain for new staking requests. The emulator then prepares the necessary +signing data, which includes transactions requiring slashing signatures +(adaptor signatures), unbonding signatures (Schnorr signatures), and +unbonding slashing signatures (adaptor signatures). This data is then forwarded +to the Covenant Signer. -### Build and install the binary +The Covenant Signer, upon receiving the request, retrieves the private key from +its keyring and performs the signing operations. The generated signatures are +returned to the emulator, which then submits them to the Babylon blockchain. -At the top-level directory of the project - -```bash -$ make install -``` - -The above command will build and install the covenant-emulator daemon (`covd`) -binary to `$GOPATH/bin`: - -If your shell cannot find the installed binaries, make sure `$GOPATH/bin` is in -the `$PATH` of your shell. Usually, these commands will do the job - -```bash -export PATH=$HOME/go/bin:$PATH -echo 'export PATH=$HOME/go/bin:$PATH' >> ~/.profile -``` - -To build without installing, - -```bash -$ make build -``` - -The above command will put the built binaries in a build directory with the -following structure: - -```bash -$ ls build - └── covd -``` - -Another common issue with compiling is that some of the dependencies have -components written in C. If a C toolchain is absent, the Go compiler will throw -errors. (Most likely it will complain about undefined names/types.) Make sure a -C toolchain (for example, GCC or Clang) is available. On Ubuntu, this can be -installed by running - -```bash -sudo apt install build-essential -``` - -## Setting up a covenant emulator - -### Configuration - -The `covd init` command initializes a home directory for the -finality provider daemon. -This directory is created in the default home location or in a -location specified by the `--home` flag. -If the home directory already exists, add `--force` to override the directory if -needed. - -```bash -$ covd init --home /path/to/covd/home/ -``` - -After initialization, the home directory will have the following structure - -```bash -$ ls /path/to/covd/home/ - ├── covd.conf # Covd-specific configuration file. - ├── logs # Covd logs -``` - -If the `--home` flag is not specified, then the default home directory -will be used. For different operating systems, those are: - -- **MacOS** `~/Users//Library/Application Support/Covd` -- **Linux** `~/.Covd` -- **Windows** `C:\Users\\AppData\Local\Covd` - -Below are some important parameters of the `covd.conf` file. - -**Note**: -The configuration below requires to point to the path where this keyring is -stored `KeyDirectory`. This `Key` field stores the key name used for interacting -with the Babylon chain and will be specified along with the `KeyringBackend` -field in the next [step](#generate-key-pairs). So we can ignore the setting of -the two fields in this step. - -```bash -# The interval between each query for pending BTC delegations -QueryInterval = 15s - -# The maximum number of delegations that the covd processes each time -DelegationLimit = 100 - -# Bitcoin network to run on -BitcoinNetwork = simnet - -# Babylon specific parameters - -# Babylon chain ID -ChainID = chain-test - -# Babylon node RPC endpoint -RPCAddr = http://127.0.0.1:26657 - -# Babylon node gRPC endpoint -GRPCAddr = https://127.0.0.1:9090 - -# Name of the key in the keyring to use for signing transactions -Key = - -# Type of keyring to use, -# supported backends - (os|file|kwallet|pass|test|memory) -# ref https://docs.cosmos.network/v0.46/run-node/keyring.html#available-backends-for-the-keyring -KeyringBackend = test - -# Directory where keys will be retrieved from and stored -KeyDirectory = /path/to/covd/home -``` - -To see the complete list of configuration options, check the `covd.conf` file. - -## Generate key pairs - -The covenant emulator daemon requires the existence of a keyring that signs -signatures and interacts with Babylon. Use the following command to generate the -key: - -```bash -$ covd create-key --key-name covenant-key --chain-id chain-test -{ - "name": "cov-key", - "public-key": "9bd5baaba3d3fb5a8bcb8c2995c51793e14a1e32f1665cade168f638e3b15538" -} -``` - -After executing the above command, the key name will be saved in the config file -created in [step](#configuration). -Note that the `public-key` in the output should be used as one of the inputs of -the genesis of the Babylon chain. -Also, this key will be used to pay for the fees due to the daemon submitting -signatures to Babylon. - -## Start the daemon - -You can start the covenant emulator daemon using the following command: - -```bash -$ covd start -2024-01-05T05:59:09.429615Z info Starting Covenant Emulator -2024-01-05T05:59:09.429713Z info Covenant Emulator Daemon is fully active! -``` - -All the available CLI options can be viewed using the `--help` flag. These -options can also be set in the configuration file. +This flow ensures that all private key operations remain isolated within the +secure Covenant Signer while the emulator handles the blockchain interaction +and validation logic. \ No newline at end of file diff --git a/covenant-signer/README.md b/covenant-signer/README.md index b05be6b..897e83f 100644 --- a/covenant-signer/README.md +++ b/covenant-signer/README.md @@ -1,5 +1,11 @@ # Covenant Signer +This program is a separate implementation from the original +[covenant signer](https://github.com/babylonlabs-io/covenant-signer/blob/main/README.md) +and serves as part of the transition to a new architecture. It should not be +confused with the earlier version. + + ## Table of Contents 1. [Prerequisites](#1-prerequisites) @@ -13,9 +19,12 @@ ## 1. Prerequisites -To successfully complete this guide, ensure you have the bitcoin node setup and you -have access to the private Bitcoin key you used previously when you generated your -address as it contains the covenant key. +This guide requires that: + +1. you have a Bitcoin node setup for the Bitcoin +network you intend to operate your covenant signer in and +2. you have access to the the private Bitcoin key you +set up your covenant with. For a refresher on setting up the bitcoin node, refer to the [deployment guide](https://github.com/babylonlabs-io/covenant-signer/blob/main/docs/deployment.md#2-bitcoind-setup). @@ -63,7 +72,8 @@ echo 'export PATH=$HOME/go/bin:$PATH' >> ~/.profile ## 3. Export the key from the Bitcoin node At this stage, you should already have access to the Bitcoin node. -If you need a refresher on setting up `bitcoind`, refer to the [setup guide](https://github.com/babylonlabs-io/covenant-signer/blob/main/docs/deployment.md#2-bitcoind-setup). +If you need a refresher on setting up `bitcoind`, refer to the  +[setup guide](https://github.com/babylonlabs-io/covenant-signer/blob/main/docs/deployment.md#2-bitcoind-setup). Once you have node access, you can proceed with the next steps. Load wallet with your covenant key. @@ -139,22 +149,27 @@ The terminal should produce output similar to the following: } ``` - The most important field to note is the `desc` value: ```json "desc": "wpkh(tprv8ZgxMBicQKsPe9aCeUQgMEMy2YMZ6PHnn2iCuG12y5E8oYhYNEvUqUkNy6sJ7ViBmFUMicikHSK2LBUNPx5do5EDJBjG7puwd6azci2wEdq/84h/1h/0h/0/*)#sachkrde" ``` -Here, you can see the string starting with `tprv8ZgxMBicQKsPe9aCeUQgMEMy2YMZ6PHnn2iCuG12y5E8oYhYNEvUqUkNy6sJ7ViBmFUMicikHSK2LBUNPx5do5EDJBjG7puwd6azci2wEdq`is the **base58-encoded master private key** of the covenant wallet. This key is critical for signing operations and should be securely stored. +Here, you can see the string starting with `tprv8ZgxMBicQKsPe9aCeUQgMEMy2YMZ6PHnn2iCuG12y5E8oYhYNEvUqUkNy6sJ7ViBmFUMicikHSK2LBUNPx5do5EDJBjG7puwd6azci2wEdq` +is the **base58-encoded master private key** of the covenant wallet. +This key is critical for signing operations and should be securely stored. #### Deriving the Covenant Private Key from the Master Key -You can derive the covenant private key from the master key by performing a **BIP32 derivation**. The `covenant-signer`repository includes a command to accomplish this: +You can derive the covenant private key from the master key by performing a  +**BIP32 derivation**. The `covenant-signer`repository includes a command to +accomplish this: ```shell -covenant-signer derive-child-key \ tprv8ZgxMBicQKsPe9aCeUQgMEMy2YMZ6PHnn2iCuG12y5E8oYhYNEvUqUkNy6sJ7ViBmFUMicikHSK2LBUNPx5do5EDJBjG7puwd6azci2wEdq \ 84h/1h/0h/0/0 +covenant-signer derive-child-key \ + tprv8ZgxMBicQKsPe9aCeUQgMEMy2YMZ6PHnn2iCuG12y5E8oYhYNEvUqUkNy6sJ7ViBmFUMicikHSK2LBUNPx5do5EDJBjG7puwd6azci2wEdq \ + 84h/1h/0h/0/0 ``` The output will display the derived private and public keys: @@ -213,7 +228,8 @@ and verified your setup for the covenant emulator. ## 5. Create the configuration file Use the example configuration [file](./example/config.toml) to create your own -configuration file. Then, replace the placeholder values with your own configuration. +configuration file. Then, replace the placeholder values with your own +configuration. ```toml [keystore] @@ -233,14 +249,29 @@ key-name = "your-key-name" chain-id = "your-chain-id" [server-config] +# The IP address where the covenant-signer server will listen host = "127.0.0.1" +# The TCP port number where the covenant-signer server will listen port = 9791 [metrics] +# The IP address where the Prometheus metrics server will listen host = "127.0.0.1" +# This port is used to expose metrics that can be scraped by Prometheus port = 2113 ``` +Parameters: +- `keystore-type`: Type of keystore used, e.g., "cosmos" for Cosmos SDK compatibility. +- `key-directory`: Path where keys are stored on the filesystem. +- `keyring-backend`: Backend system for key management, e.g., "file", "os". +- `key-name`: Name of the key used for signing transactions. +- `chain-id`: Identifier of the blockchain network. +- `host` (server-config): IP address where the server listens, typically "127.0.0.1" for local access. +- `port` (server-config): TCP port number for the server. +- `host` (metrics): IP address for the Prometheus metrics server, typically "127.0.0.1". +- `port` (metrics): TCP port number for the Prometheus metrics server. + ## 6. Running the Covenant Signer The covenant signer can be run using the following command: @@ -249,13 +280,13 @@ The covenant signer can be run using the following command: covenant-signer start --config ./path/to/config.toml ``` -the covenant signer must be run in a secure network and only accessible by the +The covenant signer must be run in a secure network and only accessible by the covenant emulator. Once the covenant signer is set up and unlocked, you can configure the covenant -emulator to use it. The URL of the covenant signer, which is http://127.0.0.1:9791, -should be specified in the covenant emulator's configuration file under the -remotesigner section. +emulator to use it. The URL of the covenant signer, which is +http://127.0.0.1:9791, should be specified in the covenant emulator's +configuration file under the `remotesigner` section. It's important to note that the key specified in the covenant emulator's configuration is not the covenant key itself. Instead, it is a @@ -263,24 +294,27 @@ key used for sending Cosmos transactions. ## 7. Using the covenant signer for signing transactions -To enable signing transactions with the covenant key, you need to unlock it first. +Before you can sign transactions with the covenant key, you need to unlock the +keyring that stores it. The passphrase here must match the one you used when +importing the covenant key into the keyring. Once the keyring is unlocked, you +can use the covenant key to sign transactions. ```shell curl -X POST http://127.0.0.1:9791/v1/unlock -d '{"passphrase": ""}' ``` Now that the key is unlocked you can add its url to the covenant emulator's -configuration file. See [here](./docs/transfer-setup.md#42-configure-the-covenant-emulator) +configuration file. See [here](../docs/transfer-setup.md#42-configure-the-covenant-emulator) for more information. You can sign transactions using the following command. However, ensure that both -the staking and unbonding transactions are provided in hex format: +the staking and unbonding transactions are provided in hex format. ```shell curl -X POST http://127.0.0.1:9791/v1/sign-transactions \ -d '{ - "staking_tx_hex": "", - "unbonding_tx_hex": "" + "staking_tx_hex": "", + "unbonding_tx_hex": "" }' ``` diff --git a/docs/transfer-setup.md b/docs/configure-emulator.md similarity index 98% rename from docs/transfer-setup.md rename to docs/configure-emulator.md index b7bc2d7..03d9439 100644 --- a/docs/transfer-setup.md +++ b/docs/configure-emulator.md @@ -1,4 +1,4 @@ -# Transfer your setup from a covenant signer to a covenant emulator +# Configuring the Covenant Emulator ## Table of Contents From da0bae2d70f91f8aa2133ba33ebeae4e4aef49e7 Mon Sep 17 00:00:00 2001 From: Sam Ricotta Date: Tue, 3 Dec 2024 15:54:41 +0200 Subject: [PATCH 15/40] part 2 updates review --- README.md | 31 +-- .../{README.md => transition-guide.md} | 199 ++++++++++-------- static/covenant.png | Bin 0 -> 33100 bytes 3 files changed, 128 insertions(+), 102 deletions(-) rename covenant-signer/{README.md => transition-guide.md} (55%) create mode 100644 static/covenant.png diff --git a/README.md b/README.md index 4501826..fbb2065 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,10 @@ -# Covenant Emulator +# Covenant Emulation Toolset ## Overview -Covenant emulator is a daemon program run by every member of the covenant -committee of the BTC staking protocol. The role of the covenant committee -is to protect PoS systems against attacks from the BTC stakers and +The covenant emulation toolset is a set of programs operated by every member of +the covenant committee of the BTC staking protocol. The role of the covenant +committee is to protect PoS systems against attacks from the BTC stakers and validators. It achieves this by representing itself as an M-out-of-N multi-signature that co-signs BTC transactions with the BTC staker. @@ -67,13 +67,16 @@ Each committee member runs two components: monitors staking requests on the Babylon chain, verifies the validity of the Bitcoin transactions that are involved with them, and sends the necessary signatures if verification is passed. -2. A Covenant Signer instance, which securely manages the private key and +2. The `covenant-signer` daemon, which securely manages the private key and performs signing operations in an isolated environment. The staking requests can only become active and receive voting power if a sufficient quorum of covenant committee members have verified the validity of the transactions and sent corresponding signatures. + +## Covenant Emulator Daemon + Upon a pending staking request being found, the covenant emulation daemon (`covd`), validates it against the spending rules defined in [Staking Script specification](https://github.com/babylonlabs-io/babylon/blob/dev/docs/staking-script.md), @@ -96,10 +99,12 @@ For instructions on how to run the Covenant Emulator, please refer to the ## Covenant Signer -The Covenant Signer works alongside the Covenant Emulator. It is designed to -securely handle private keys for signing operations. The signer has been -redesigned to prioritize security through isolation - separating the private key -handling from the more exposed emulator program. +The Covenant Signer operates in tandem with the Covenant Emulator and +is purpose-built to securely manage private keys for signing operations. +It prioritizes security through isolation, +ensuring that private key handling is confined to an instance with +minimal connectivity and simpler application logic compared to the +Covenant Emulator daemon. Previously, private keys were stored in the Bitcoin wallet using PSBT (Partially Signed Bitcoin Transactions) for signing operations. The new design uses a @@ -125,10 +130,8 @@ signing data, which includes transactions requiring slashing signatures unbonding slashing signatures (adaptor signatures). This data is then forwarded to the Covenant Signer. -The Covenant Signer, upon receiving the request, retrieves the private key from -its keyring and performs the signing operations. The generated signatures are -returned to the emulator, which then submits them to the Babylon blockchain. - This flow ensures that all private key operations remain isolated within the secure Covenant Signer while the emulator handles the blockchain interaction -and validation logic. \ No newline at end of file +and validation logic. + +![Covenant Architecture](./static/covenant.png) \ No newline at end of file diff --git a/covenant-signer/README.md b/covenant-signer/transition-guide.md similarity index 55% rename from covenant-signer/README.md rename to covenant-signer/transition-guide.md index 897e83f..4229e39 100644 --- a/covenant-signer/README.md +++ b/covenant-signer/transition-guide.md @@ -1,51 +1,68 @@ # Covenant Signer -This program is a separate implementation from the original -[covenant signer](https://github.com/babylonlabs-io/covenant-signer/blob/main/README.md) -and serves as part of the transition to a new architecture. It should not be -confused with the earlier version. +The Covenant Signer is a daemon program in the Covenant Emulator toolset +that is responsible for securely managing the private key of the +covenant committee member and producing the necessary cryptographic +signatures. +It prioritizes security through isolation, ensuring that private key handling +is confined to an instance with minimal connectivity and simpler application +logic compared to the Covenant Emulator daemon. + +> ⚡ Note: This program is a separate implementation from the +[covenant signer](https://github.com/babylonlabs-io/covenant-signer/blob/main/README.md) +program used for phase-1. All covenant committee members +are required to transition their keys to this program to participate +in phase-2. + +This document is intended for covenant committee members that +are transitioning their phase-1 set up to the phase-2 one. ## Table of Contents 1. [Prerequisites](#1-prerequisites) -2. [Install covenant signer](#2-install-covenant-signer-binary) -3. [Export the key from the Bitcoin node](#3-export-the-key-from-the-bitcoin-node) -4. [Importing the Derived Private Key into the Cosmos Keyring](#4-importing-the-derived-private-key-into-the-cosmos-keyring) -5. [Create the configuration file](#5-create-the-configuration-file) -6. [Running the Covenant Signer](#6-running-the-covenant-signer) -7. [Using the covenant signer for signing transactions](#7-using-the-covenant-signer-for-signing-transactions) - +2. [Installation](#2-installation) +3. [Transitioning your covenant key from phase-1 setup](#3-transitioning-your-covenant-key-from-phase-1-setup) +4. [Operation](#4-operation) + 4.1 [Configuration](#41-configuration) + 4.2 [Starting the daemon](#42-starting-the-daemon) + 4.3 [Unlocking the key](#43-unlocking-the-key) + 4.4 [Testing the setup](#44-testing-the-setup) ## 1. Prerequisites This guide requires that: 1. you have a Bitcoin node setup for the Bitcoin -network you intend to operate your covenant signer in and +network you intend to operate your covenant signer on and 2. you have access to the the private Bitcoin key you set up your covenant with. -For a refresher on setting up the bitcoin node, refer to the -[deployment guide](https://github.com/babylonlabs-io/covenant-signer/blob/main/docs/deployment.md#2-bitcoind-setup). +For a refresher on setting up the Bitcoin node, refer to the +[deployment guide of your phase-1 covenant signer setup](https://github.com/babylonlabs-io/covenant-signer/blob/main/docs/deployment.md#2-bitcoind-setup). + + -## 2. Install covenant signer binary +## 2. Installation -If you havent already, download [Golang 1.21](https://go.dev/dl). +If you haven't already, download [Golang 1.23](https://go.dev/dl). -Using the go version 1.21. Once installed run: +Once installed run: ```shell go version ``` -If you also still have not yet cloned the repository, run: +If you have not yet cloned the repository, run: ```shell git clone git@github.com:babylonlabs-io/covenant-emulator.git cd covenant-emulator -git checkout +git checkout v0.3.0 ``` + + +> ⚡ Note: Replace the checkout tag with the version you want to install. Run the following command to build the binaries and install them to your `$GOPATH/bin` directory: @@ -69,26 +86,41 @@ export PATH=$HOME/go/bin:$PATH echo 'export PATH=$HOME/go/bin:$PATH' >> ~/.profile ``` -## 3. Export the key from the Bitcoin node +## 3. Transitioning your covenant key from phase-1 setup At this stage, you should already have access to the Bitcoin node. -If you need a refresher on setting up `bitcoind`, refer to the  -[setup guide](https://github.com/babylonlabs-io/covenant-signer/blob/main/docs/deployment.md#2-bitcoind-setup). +If you need a refresher on setting up `bitcoind`, refer to the setup guide. Once you have node access, you can proceed with the next steps. -Load wallet with your covenant key. +To start off, connect to your Bitcoin node machine and load the wallet that +contains your covenant key. ```shell -bitcoind bitcoin-cli loadwallet "covenant-wallet" +bitcoin-cli loadwallet "covenant-wallet" ``` -If we want to then confirm that this was successful, we can then retrieve -information about our address to the corresponding key that was returned. +Parameters: +- `loadwallet`: (string, required) The wallet directory or .dat file. In our + example we have named it `covenant-wallet`. + +The above input will output the following response: + +{ + "name": "covenant-wallet" +} + +To verify the key was successfully imported, you can retrieve the key information +using the command below. Make note of the HD key path information - you'll need +it later when deriving the covenant private key from the master key. ```shell -bitcoind bitcoin-cli getaddressinfo bcrt1qazasawj3ard0ffwj04zpxlw2pt9cp7kwmnqyvk +bitcoin-cli getaddressinfo bcrt1qazasawj3ard0ffwj04zpxlw2pt9cp7kwmnqyvk ``` +Parameters: +- `getaddressinfo`: (string, required) The Bitcoin address for which to get + information on. + This should generate output information on your address. ```json @@ -116,55 +148,45 @@ This should generate output information on your address. } ``` -The most important field to focus on is `hdkeypath` that contains derivation path -of our key. In the example it is `84h/1h/0h/0/0` (the intilal `m/` can be ignored). +As mentioned above, the most important field to focus on is `hdkeypath` that +contains the derivation path of our key. In the example it is `84h/1h/0h/0/0` +(the initial `m/` can be ignored). + +Next, we need to retrieve the **base58-encoded master private key** from the +wallet. This is the key we will use to derive the covenant private key. From +here we will be able to import this directly into the Cosmos keyring. -Next, list all descriptors in the wallet, ensuring that private keys are included -in the output: +To do this, we need to list all descriptors in the wallet ensuring that private +keys are included in the output. We do this as we need to collect the descriptor +of the key we want to derive the private key from. ```shell -docker exec -it bitcoind bitcoin-cli -chain=regtest -rpcuser=user -rpcpassword=pass listdescriptors true +bitcoin-cli -chain=regtest -rpcuser=user -rpcpassword=pass listdescriptors true | jq -r '.descriptors[] | select(.desc | contains("wpkh(")) | .desc | capture("wpkh\\((?.*?)\\)").key | sub("/\\*$"; "")' ``` -The terminal should produce output similar to the following: - -```json -{ - "wallet_name": "covenant-wallet", - "descriptors": [ - { - "desc": "wpkh(tprv8ZgxMBicQKsPe9aCeUQgMEMy2YMZ6PHnn2iCuG12y5E8oYhYNEvUqUkNy6sJ7ViBmFUMicikHSK2LBUNPx5do5EDJBjG7puwd6azci2wEdq/84h/1h/0h/0/*)#sachkrde", - "timestamp": 1732624709, - "active": true, - "internal": false, - "range": [ - 0, - 1000 - ], - "next": 1, - "next_index": 1 - } - ... - ] -} +The terminal will output your base58-encoded master private key and the +`hdkeypath`, which should match above. +```shell +tprv8ZgxMBicQKsPe9aCeUQgMEMy2YMZ6PHnn2iCuG12y5E8oYhYNEvUqUkNy6sJ7ViBmFUMicikHSK2LBUNPx5do5EDJBjG7puwd6azci2wEdq/84h/1h/0h/0 ``` -The most important field to note is the `desc` value: -```json -"desc": "wpkh(tprv8ZgxMBicQKsPe9aCeUQgMEMy2YMZ6PHnn2iCuG12y5E8oYhYNEvUqUkNy6sJ7ViBmFUMicikHSK2LBUNPx5do5EDJBjG7puwd6azci2wEdq/84h/1h/0h/0/*)#sachkrde" -``` +The key has been successfully imported. In the next step, we'll retrieve two +important pieces of information: +1. The **base58-encoded master private key** + `tprv8ZgxMBicQKsPe9aCeUQgMEMy2YMZ6PHnn2iCuG12y5E8oYhYNEvUqUkNy6sJ7ViBmFUMicikHSK2LBUNPx5do5EDJBjG7puwd6azci2wEdq` +2. The `hdkeypath` which should be similar to what we saved in the +`getaddressinfo` above. -Here, you can see the string starting with `tprv8ZgxMBicQKsPe9aCeUQgMEMy2YMZ6PHnn2iCuG12y5E8oYhYNEvUqUkNy6sJ7ViBmFUMicikHSK2LBUNPx5do5EDJBjG7puwd6azci2wEdq` -is the **base58-encoded master private key** of the covenant wallet. -This key is critical for signing operations and should be securely stored. +#### 3.2 Deriving the Covenant Private Key from the Master Key +Next, we'll derive the covenant private key from the master key using +**BIP32 derivation**. You'll need: -#### Deriving the Covenant Private Key from the Master Key +1. The `hdkeypath` we saved from the `getaddressinfo` command +2. Access to the `covenant-signer` directory, which contains the derivation tool -You can derive the covenant private key from the master key by performing a  -**BIP32 derivation**. The `covenant-signer`repository includes a command to -accomplish this: +Navigate to the `covenant-signer` directory and run the following command: ```shell covenant-signer derive-child-key \ @@ -179,18 +201,11 @@ Derived private key: fe1c56c494c730f13739c0655bf06e615409870200047fc65cdf781837c Derived public key: 023a79b546c79d7f7c5ff20620d914b5cf7250631d12f6e26427ed9d3f98c5ccb1 ``` -As seen, the **Derived Public Key**: +You can see that the derived public key matches the public key obtained earlier +using the `getaddressinfo` command. -``` -023a79b546c79d7f7c5ff20620d914b5cf7250631d12f6e26427ed9d3f98c5ccb1 -``` - -Matches the public key obtained earlier using the `getaddressinfo` command. - -## 4. Importing the Derived Private Key into the Cosmos Keyring - -The derived private key can now be imported into the Cosmos keyring. Use the -following command: +We will now use the derived private key from above and import it into the +Cosmos keyring. To do this, use the following command: ```shell babylond keys import-hex cov fe1c56c494c730f13739c0655bf06e615409870200047fc65cdf781837cf7f06 @@ -225,7 +240,8 @@ and `derive-child-key`. Congratulations! You have successfully imported your keys from the prior setup and verified your setup for the covenant emulator. -## 5. Create the configuration file +## 4. Operation +### 4.1. Configuration Use the example configuration [file](./example/config.toml) to create your own configuration file. Then, replace the placeholder values with your own @@ -261,8 +277,8 @@ host = "127.0.0.1" port = 2113 ``` -Parameters: -- `keystore-type`: Type of keystore used, e.g., "cosmos" for Cosmos SDK compatibility. +Below are brief explanations of the configuration entries: +- `keystore-type`: Type of keystore used, which is "cosmos" - `key-directory`: Path where keys are stored on the filesystem. - `keyring-backend`: Backend system for key management, e.g., "file", "os". - `key-name`: Name of the key used for signing transactions. @@ -272,7 +288,7 @@ Parameters: - `host` (metrics): IP address for the Prometheus metrics server, typically "127.0.0.1". - `port` (metrics): TCP port number for the Prometheus metrics server. -## 6. Running the Covenant Signer +### 4.2. Starting the daemon The covenant signer can be run using the following command: @@ -292,9 +308,9 @@ It's important to note that the key specified in the covenant emulator's configuration is not the covenant key itself. Instead, it is a key used for sending Cosmos transactions. -## 7. Using the covenant signer for signing transactions +### 4.3. Unlocking the key -Before you can sign transactions with the covenant key, you need to unlock the +Before you can sign transactions with the covenant key, you must unlock the keyring that stores it. The passphrase here must match the one you used when importing the covenant key into the keyring. Once the keyring is unlocked, you can use the covenant key to sign transactions. @@ -303,21 +319,28 @@ can use the covenant key to sign transactions. curl -X POST http://127.0.0.1:9791/v1/unlock -d '{"passphrase": ""}' ``` -Now that the key is unlocked you can add its url to the covenant emulator's -configuration file. See [here](../docs/transfer-setup.md#42-configure-the-covenant-emulator) -for more information. - You can sign transactions using the following command. However, ensure that both the staking and unbonding transactions are provided in hex format. ```shell curl -X POST http://127.0.0.1:9791/v1/sign-transactions \ -d '{ - "staking_tx_hex": "", - "unbonding_tx_hex": "" - }' + "staking_tx_hex": "020000000001", + "slashing_tx_hex": "020000000001...", + "unbonding_tx_hex": "020000000001...", + "slash_unbonding_tx_hex": "020000000001...", + "staking_output_idx": 0, + "slashing_script_hex": "76a914...", + "unbonding_script_hex": "76a914...", + "unbonding_slashing_script_hex": "76a914...", + "fp_enc_keys": [ + "0123456789abcdef..." + ] + }' ``` +### 4.4. Testing the setup + This will generate a signature for the provided transactions and return it in JSON format. diff --git a/static/covenant.png b/static/covenant.png new file mode 100644 index 0000000000000000000000000000000000000000..588cdfdb4d1703e131be1f01a42178465c98e560 GIT binary patch literal 33100 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 Date: Tue, 3 Dec 2024 15:59:59 +0200 Subject: [PATCH 16/40] Update transition-guide.md --- covenant-signer/transition-guide.md | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/covenant-signer/transition-guide.md b/covenant-signer/transition-guide.md index 4229e39..662e343 100644 --- a/covenant-signer/transition-guide.md +++ b/covenant-signer/transition-guide.md @@ -208,9 +208,14 @@ We will now use the derived private key from above and import it into the Cosmos keyring. To do this, use the following command: ```shell -babylond keys import-hex cov fe1c56c494c730f13739c0655bf06e615409870200047fc65cdf781837cf7f06 +babylond keys import-hex cov fe1c56c494c730f13739c0655bf06e615409870200047fc65cdf781837cf7f06 --keyring-backend file ``` +> ⚡ Note: Use the `file` backend to store the private key in encrypted form on +disk. When running `import-hex` with the encrypted file backend, you will be +prompted for a passphrase. This passphrase will be required to unlock the signer +later. + To confirm that the import was successful, run: ```shell @@ -300,8 +305,9 @@ The covenant signer must be run in a secure network and only accessible by the covenant emulator. Once the covenant signer is set up and unlocked, you can configure the covenant -emulator to use it. The URL of the covenant signer, which is -http://127.0.0.1:9791, should be specified in the covenant emulator's +emulator to use it. The URL of the covenant signer, which is configured by the +covenant members but in this example we use the default value of +`http://127.0.0.1:9791`, should be specified in the covenant emulator's configuration file under the `remotesigner` section. It's important to note that the key specified in the covenant emulator's From 024b11b23576536346a3e4b6c4d39627383ae989 Mon Sep 17 00:00:00 2001 From: Sam Ricotta Date: Tue, 3 Dec 2024 16:00:57 +0200 Subject: [PATCH 17/40] Update transition-guide.md --- covenant-signer/transition-guide.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/covenant-signer/transition-guide.md b/covenant-signer/transition-guide.md index 662e343..32feae0 100644 --- a/covenant-signer/transition-guide.md +++ b/covenant-signer/transition-guide.md @@ -24,10 +24,10 @@ are transitioning their phase-1 set up to the phase-2 one. 2. [Installation](#2-installation) 3. [Transitioning your covenant key from phase-1 setup](#3-transitioning-your-covenant-key-from-phase-1-setup) 4. [Operation](#4-operation) - 4.1 [Configuration](#41-configuration) - 4.2 [Starting the daemon](#42-starting-the-daemon) - 4.3 [Unlocking the key](#43-unlocking-the-key) - 4.4 [Testing the setup](#44-testing-the-setup) + 1. [Configuration](#41-configuration) + 2. [Starting the daemon](#42-starting-the-daemon) + 3. [Unlocking the key](#43-unlocking-the-key) + 4. [Testing the setup](#44-testing-the-setup) ## 1. Prerequisites From bb527e453cd9816814a4dd7728396bdf08c5a659 Mon Sep 17 00:00:00 2001 From: Sam Ricotta Date: Tue, 3 Dec 2024 16:04:35 +0200 Subject: [PATCH 18/40] update toc --- covenant-signer/transition-guide.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/covenant-signer/transition-guide.md b/covenant-signer/transition-guide.md index 32feae0..78692bf 100644 --- a/covenant-signer/transition-guide.md +++ b/covenant-signer/transition-guide.md @@ -24,10 +24,10 @@ are transitioning their phase-1 set up to the phase-2 one. 2. [Installation](#2-installation) 3. [Transitioning your covenant key from phase-1 setup](#3-transitioning-your-covenant-key-from-phase-1-setup) 4. [Operation](#4-operation) - 1. [Configuration](#41-configuration) - 2. [Starting the daemon](#42-starting-the-daemon) - 3. [Unlocking the key](#43-unlocking-the-key) - 4. [Testing the setup](#44-testing-the-setup) + 1. [Configuration](#41-configuration) + 2. [Starting the daemon](#42-starting-the-daemon) + 3. [Unlocking the key](#43-unlocking-the-key) + 4. [Testing the setup](#44-testing-the-setup) ## 1. Prerequisites From 5e2d29f9c414ff49b1a8df5b8a30e911b82c886c Mon Sep 17 00:00:00 2001 From: Sam Ricotta Date: Tue, 3 Dec 2024 16:36:44 +0200 Subject: [PATCH 19/40] last updates for emulator and signer --- covenant-signer/transition-guide.md | 63 +++++++++++++---------------- docs/configure-emulator.md | 50 +++++++++++++++++------ 2 files changed, 67 insertions(+), 46 deletions(-) diff --git a/covenant-signer/transition-guide.md b/covenant-signer/transition-guide.md index 78692bf..489750e 100644 --- a/covenant-signer/transition-guide.md +++ b/covenant-signer/transition-guide.md @@ -99,25 +99,29 @@ contains your covenant key. bitcoin-cli loadwallet "covenant-wallet" ``` -Parameters: +Action: - `loadwallet`: (string, required) The wallet directory or .dat file. In our example we have named it `covenant-wallet`. The above input will output the following response: +```json { "name": "covenant-wallet" } +``` To verify the key was successfully imported, you can retrieve the key information -using the command below. Make note of the HD key path information - you'll need -it later when deriving the covenant private key from the master key. +using the command below. + +> ⚡ Note: Make note of the `hdkeypath` information - you'll need it later when +> deriving the covenant private key from the master key. ```shell bitcoin-cli getaddressinfo bcrt1qazasawj3ard0ffwj04zpxlw2pt9cp7kwmnqyvk ``` -Parameters: +Action: - `getaddressinfo`: (string, required) The Bitcoin address for which to get information on. @@ -152,19 +156,18 @@ As mentioned above, the most important field to focus on is `hdkeypath` that contains the derivation path of our key. In the example it is `84h/1h/0h/0/0` (the initial `m/` can be ignored). -Next, we need to retrieve the **base58-encoded master private key** from the -wallet. This is the key we will use to derive the covenant private key. From -here we will be able to import this directly into the Cosmos keyring. +Next, retrieve the **base58-encoded master private key** from the Bitcoin wallet. +This key will be used to derive the covenant private key, which can then be +imported directly into the Cosmos keyring. -To do this, we need to list all descriptors in the wallet ensuring that private -keys are included in the output. We do this as we need to collect the descriptor -of the key we want to derive the private key from. +List all descriptors in the wallet with private keys included in the output. +This will provide the descriptor needed to derive the private key. ```shell bitcoin-cli -chain=regtest -rpcuser=user -rpcpassword=pass listdescriptors true | jq -r '.descriptors[] | select(.desc | contains("wpkh(")) | .desc | capture("wpkh\\((?.*?)\\)").key | sub("/\\*$"; "")' ``` -The terminal will output your base58-encoded master private key and the +The terminal will output your **base58-encoded master private key** and the `hdkeypath`, which should match above. ```shell @@ -178,13 +181,11 @@ important pieces of information: 2. The `hdkeypath` which should be similar to what we saved in the `getaddressinfo` above. -#### 3.2 Deriving the Covenant Private Key from the Master Key - -Next, we'll derive the covenant private key from the master key using -**BIP32 derivation**. You'll need: +Next, derive the covenant private key from the master key using **BIP32 +derivation**. You'll need: -1. The `hdkeypath` we saved from the `getaddressinfo` command -2. Access to the `covenant-signer` directory, which contains the derivation tool + 1. The `hdkeypath` we saved from the `getaddressinfo` command + 2. Access to the `covenant-signer` directory, which contains the derivation tool Navigate to the `covenant-signer` directory and run the following command: @@ -201,11 +202,14 @@ Derived private key: fe1c56c494c730f13739c0655bf06e615409870200047fc65cdf781837c Derived public key: 023a79b546c79d7f7c5ff20620d914b5cf7250631d12f6e26427ed9d3f98c5ccb1 ``` -You can see that the derived public key matches the public key obtained earlier -using the `getaddressinfo` command. +Matches the public key derived earlier and seen in the outputs of `getaddressinfo`  +and `derive-child-key`. -We will now use the derived private key from above and import it into the -Cosmos keyring. To do this, use the following command: +Verify that the derived public key matches the one obtained earlier from the +`getaddressinfo` command. + +Next, import the derived private key into the Cosmos keyring using the following +command: ```shell babylond keys import-hex cov fe1c56c494c730f13739c0655bf06e615409870200047fc65cdf781837cf7f06 --keyring-backend file @@ -232,16 +236,6 @@ The output will display the details of the imported key: ``` -Here, the `key` field contains the base64-encoded public key. After decoding, -this key: - -```shell -023a79b546c79d7f7c5ff20620d914b5cf7250631d12f6e26427ed9d3f98c5ccb1 -``` - -Matches the public key derived earlier and seen in the outputs of `getaddressinfo`  -and `derive-child-key`. - Congratulations! You have successfully imported your keys from the prior setup and verified your setup for the covenant emulator. @@ -283,6 +277,7 @@ port = 2113 ``` Below are brief explanations of the configuration entries: + - `keystore-type`: Type of keystore used, which is "cosmos" - `key-directory`: Path where keys are stored on the filesystem. - `keyring-backend`: Backend system for key management, e.g., "file", "os". @@ -305,12 +300,12 @@ The covenant signer must be run in a secure network and only accessible by the covenant emulator. Once the covenant signer is set up and unlocked, you can configure the covenant -emulator to use it. The URL of the covenant signer, which is configured by the +emulator to use it. The URL of the covenant signer is configured by the covenant members but in this example we use the default value of -`http://127.0.0.1:9791`, should be specified in the covenant emulator's +`http://127.0.0.1:9791`. This is specified in the covenant emulator's configuration file under the `remotesigner` section. -It's important to note that the key specified in the covenant emulator's +> ⚡ Note: It's important to note that the key specified in the covenant emulator's configuration is not the covenant key itself. Instead, it is a key used for sending Cosmos transactions. diff --git a/docs/configure-emulator.md b/docs/configure-emulator.md index 03d9439..b93048a 100644 --- a/docs/configure-emulator.md +++ b/docs/configure-emulator.md @@ -29,9 +29,12 @@ it into the new integrated keyring in the covenant signer. ## 2. Prerequisites -To successfully complete this guide, you will need a running instance of the -[covenant signer](./covenant-signer) with your keys imported from `bitcoind` -wallet into the cosmos keyring. +To successfully complete this guide, you will need + +1. To successfully complete this guide, you will need a running instance of the +[covenant signer](../covenant-signer) +2. A connection to a Babylon node. To run your own node, please refer to the +[Babylon Node Setup Guide](https://github.com/babylonlabs-io/networks/blob/sam/bbn-test-5/bbn-test-5/babylon-node/README.md). Please follow the [covenant signer setup guide](covenant-signer/README.md) to complete the setup of the covenant signer with your keys before proceeding. @@ -44,9 +47,9 @@ binary. ```shell git clone git@github.com:babylonlabs-io/covenant-emulator.git cd covenant-emulator -git checkout +git checkout v0.10.0 ``` - + Run the following command to build the binaries and install them to your `$GOPATH/bin` directory: @@ -74,7 +77,7 @@ echo 'export PATH=$HOME/go/bin:$PATH' >> ~/.profile Next, we initialize the node and home directory. It should generate all of the necessary files such as `covd.config`, these files will live in the `` -that you set for the `--home`with the below command. +that you set for the `--home` with the below command. ```shell covd init --home @@ -121,7 +124,7 @@ Key = covenant-key # Type of keyring to use, # supported backends - (os|file|kwallet|pass|test|memory) -# ref https://docs.cosmos.network/v0.46/run-node/keyring.html#available-backends-for-the-keyring +# ref https://docs.cosmos.network/v0.50/run-node/keyring.html#available-backends-for-the-keyring KeyringBackend = test [remotesigner] @@ -135,17 +138,31 @@ Timeout = 2s RemoteSignerEnabled = true ``` +Below are brief explanations of the configuration entries: + +- `QueryInterval` - How often to check for new BTC delegations that need processing +- `DelegationLimit` - Maximum number of delegations to process in a single batch +- `BitcoinNetwork` - Which Bitcoin network to connect to (mainnet, testnet, simnet, etc.) +- `ChainID` - Unique identifier of the Babylon blockchain network +- `RPCAddr` - HTTP endpoint for connecting to a Babylon node +- `GRPCAddr` - gRPC endpoint for connecting to a Babylon node +- `Key` - Name of the key in the keyring used for transaction signing +- `KeyringBackend` - Storage backend for the keyring (os, file, kwallet, pass, test, memory) +- `URL` - Endpoint where the remote signing service is running +- `Timeout` - Maximum time to wait for remote signer responses +- `RemoteSignerEnabled` - Whether to use the remote signing service + Ensure that the covenant signer is running and unlocked before proceeding otherwise you will be unable to run the emulator. ## 5. Generate key pairs -The covenant emulator daemon requires the existence of a keyring that signs -signatures and interacts with Babylon. Use the following command to generate the -key: +The covenant emulator daemon requires the existence of a Babylon keyring that +signs signatures and interacts with Babylon. Use the following command to generate +the key: ```bash -$ covd create-key --key-name covenant-key --chain-id chain-test +$ covd create-key --key-name covenant-key --chain-id bbn-test-5 { "name": "covenant-key", "public-key": "9bd5baaba3d3fb5a8bcb8c2995c51793e14a1e32f1665cade168f638e3b15538" @@ -153,12 +170,21 @@ $ covd create-key --key-name covenant-key --chain-id chain-test ``` After executing the above command, the key name will be saved in the config file -created in [step](#configuration). +created in the last [step](#42-configure-the-covenant-emulator). Note that the `public-key` in the output should be used as one of the inputs of the genesis of the Babylon chain. + Also, this key will be used to pay for the fees due to the daemon submitting signatures to Babylon. +To check your balance, you will need to use the `babylond` CLI. + +```shell +babylond query bank balances +``` + +This will return the balance of the key provided. + ## 6. Start the emulator daemon You can start the covenant emulator daemon using the following command: From 137bc87f4201845bc14e5f7c4c5bc133b0181080 Mon Sep 17 00:00:00 2001 From: Vitalis Salis Date: Tue, 3 Dec 2024 18:42:58 +0200 Subject: [PATCH 20/40] add a bit --- covenant-signer/README.md | 14 ++ .../transition-from-phase1.md} | 203 +++++++++--------- 2 files changed, 110 insertions(+), 107 deletions(-) create mode 100644 covenant-signer/README.md rename covenant-signer/{transition-guide.md => docs/transition-from-phase1.md} (58%) diff --git a/covenant-signer/README.md b/covenant-signer/README.md new file mode 100644 index 0000000..20cd3fa --- /dev/null +++ b/covenant-signer/README.md @@ -0,0 +1,14 @@ +# Covenant Signer + +The Covenant Signer is a daemon program in the Covenant Emulator toolset +that is responsible for securely managing the private key of the +covenant committee member and producing the necessary cryptographic +signatures. +It prioritizes security through isolation, +ensuring that private key handling is confined to an instance with +minimal connectivity and simpler application logic compared to the +Covenant Emulator daemon. + +If you participated in phase-1 as a covenant signer, read this +[document](docs/transition-from-phase1.md) in order to set up +your phase-2 covenant signer. \ No newline at end of file diff --git a/covenant-signer/transition-guide.md b/covenant-signer/docs/transition-from-phase1.md similarity index 58% rename from covenant-signer/transition-guide.md rename to covenant-signer/docs/transition-from-phase1.md index 489750e..61d225f 100644 --- a/covenant-signer/transition-guide.md +++ b/covenant-signer/docs/transition-from-phase1.md @@ -10,7 +10,7 @@ is confined to an instance with minimal connectivity and simpler application logic compared to the Covenant Emulator daemon. > ⚡ Note: This program is a separate implementation from the -[covenant signer](https://github.com/babylonlabs-io/covenant-signer/blob/main/README.md) +[covenant signer](https://github.com/babylonlabs-io/covenant-signer/) program used for phase-1. All covenant committee members are required to transition their keys to this program to participate in phase-2. @@ -35,7 +35,7 @@ This guide requires that: 1. you have a Bitcoin node setup for the Bitcoin network you intend to operate your covenant signer on and -2. you have access to the the private Bitcoin key you +2. you have access to the private Bitcoin key you set up your covenant with. For a refresher on setting up the Bitcoin node, refer to the @@ -58,14 +58,14 @@ If you have not yet cloned the repository, run: ```shell git clone git@github.com:babylonlabs-io/covenant-emulator.git cd covenant-emulator -git checkout v0.3.0 +git checkout ``` - > ⚡ Note: Replace the checkout tag with the version you want to install. -Run the following command to build the binaries and -install them to your `$GOPATH/bin` directory: +Enter the covenant-signer directory, and run the following +command to build the `covenant-signer` binary +and install it to your `$GOPATH/bin` directory: ```shell cd covenant-signer @@ -75,7 +75,7 @@ make install This command will: - Build and compile all Go packages - Install `covenant-signer` binary to `$GOPATH/bin` -- Make commands globally accessible from your terminal +- Make it globally accessible from your terminal If your shell cannot find the installed binary, make sure `$GOPATH/bin` is in the `$PATH` of your shell. Use the following command to add it to your profile @@ -88,75 +88,64 @@ echo 'export PATH=$HOME/go/bin:$PATH' >> ~/.profile ## 3. Transitioning your covenant key from phase-1 setup -At this stage, you should already have access to the Bitcoin node. -If you need a refresher on setting up `bitcoind`, refer to the setup guide. -Once you have node access, you can proceed with the next steps. +After installing the necessary binaries, we are ready +to transition our covenant private key from the `bitcoind` wallet +into a Cosmos keyring. This is necessary as the `bitcoind` wallet +does not have support for important covenant signer operations, +such as the generation of adaptor signatures. -To start off, connect to your Bitcoin node machine and load the wallet that -contains your covenant key. +To complete this process, you are going to need to have access +to the machine that holds your `bitcoind` wallet and +know the Bitcoin address associated with your covenant's public key. +If you need a refresher on the functionalities supported by your +`bitcoind` wallet or how you previously set it up, you can refer +to the relevant phase-1 guide. -```shell -bitcoin-cli loadwallet "covenant-wallet" -``` +In the following, we'll go through all the necessary steps +to transition your wallet. -Action: -- `loadwallet`: (string, required) The wallet directory or .dat file. In our - example we have named it `covenant-wallet`. +#### Step 1: Load wallet -The above input will output the following response: +We start off by loading the wallet holding the covenant keys, +using the `loadwallet` command. It receives as an argument +the wallet directory or `.dat` file. In the below example, +we are loading the wallet named `covenant-wallet`. -```json +```shell +$ bitcoin-cli loadwallet "covenant-wallet" { "name": "covenant-wallet" } ``` -To verify the key was successfully imported, you can retrieve the key information -using the command below. +#### Step 2: Extract the covenant address' `hdkeypath` -> ⚡ Note: Make note of the `hdkeypath` information - you'll need it later when -> deriving the covenant private key from the master key. + +Next, we are going to retrieve the `hdkeypath` of the Bitcoin address +associated with our covenant key. +We do this through the usage of the `getaddresssinfo` command +which takes your covenant Bitcoin address as a parameter. ```shell -bitcoin-cli getaddressinfo bcrt1qazasawj3ard0ffwj04zpxlw2pt9cp7kwmnqyvk +$ bitcoin-cli getaddressinfo bcrt1qazasawj3ard0ffwj04zpxlw2pt9cp7kwmnqyvk | jq .hdkeypath +"m/84h/1h/0h/0/0" ``` -Action: -- `getaddressinfo`: (string, required) The Bitcoin address for which to get - information on. +In the above command, we use the `jq` utility to extract only the relevant `hdkeypath` +information, which in this example is `84h/1h/0h/0/0` (the initial `m/` can be ignored). -This should generate output information on your address. +Make note of the `hdkeypath` information - you'll need it later when +deriving the covenant private key from the master key for verification purposes. -```json -{ - "address": "bcrt1qazasawj3ard0ffwj04zpxlw2pt9cp7kwmnqyvk", - "scriptPubKey": "0014e8bb0eba51e8daf4a5d27d44137dca0acb80face", - "ismine": true, - "solvable": true, - "desc": "wpkh([5e174bde/84h/1h/0h/0/0]023a79b546c79d7f7c5ff20620d914b5cf7250631d12f6e26427ed9d3f98c5ccb1)#ye9usklr", - "parent_desc": "wpkh([5e174bde/84h/1h/0h]tpubDDeLN74J6FLfbwXGzwrqQ8ZCG9e4c9uVLP5TjLxLwZVNewFwZ5qB14mu7Fa1g1MStVvUAwXDZHkBzjjNpiRCq9JoA8yxDW9hh7xyqGkhter/0/*)#59fjcx8s", - "iswatchonly": false, - "isscript": false, - "iswitness": true, - "witness_version": 0, - "witness_program": "e8bb0eba51e8daf4a5d27d44137dca0acb80face", - "pubkey": "023a79b546c79d7f7c5ff20620d914b5cf7250631d12f6e26427ed9d3f98c5ccb1", - "ischange": false, - "timestamp": 1732624709, - "hdkeypath": "m/84h/1h/0h/0/0", - "hdseedid": "0000000000000000000000000000000000000000", - "hdmasterfingerprint": "5e174bde", - "labels": [ - "" - ] -} -``` - -As mentioned above, the most important field to focus on is `hdkeypath` that -contains the derivation path of our key. In the example it is `84h/1h/0h/0/0` -(the initial `m/` can be ignored). +#### Step 3: Retrieve the master private key -Next, retrieve the **base58-encoded master private key** from the Bitcoin wallet. +In this step, +we are going to retrieve the **base58-encoded master private key** from the Bitcoin wallet. This key will be used to derive the covenant private key, which can then be imported directly into the Cosmos keyring. @@ -164,50 +153,53 @@ List all descriptors in the wallet with private keys included in the output. This will provide the descriptor needed to derive the private key. ```shell -bitcoin-cli -chain=regtest -rpcuser=user -rpcpassword=pass listdescriptors true | jq -r '.descriptors[] | select(.desc | contains("wpkh(")) | .desc | capture("wpkh\\((?.*?)\\)").key | sub("/\\*$"; "")' -``` - -The terminal will output your **base58-encoded master private key** and the -`hdkeypath`, which should match above. - -```shell +$ bitcoin-cli listdescriptors true | jq -r '.descriptors[] | select(.desc | contains("wpkh(")) | .desc | capture("wpkh\\((?.*?)\\)").key | sub("/\\*$"; "")' tprv8ZgxMBicQKsPe9aCeUQgMEMy2YMZ6PHnn2iCuG12y5E8oYhYNEvUqUkNy6sJ7ViBmFUMicikHSK2LBUNPx5do5EDJBjG7puwd6azci2wEdq/84h/1h/0h/0 ``` -The key has been successfully imported. In the next step, we'll retrieve two -important pieces of information: -1. The **base58-encoded master private key** - `tprv8ZgxMBicQKsPe9aCeUQgMEMy2YMZ6PHnn2iCuG12y5E8oYhYNEvUqUkNy6sJ7ViBmFUMicikHSK2LBUNPx5do5EDJBjG7puwd6azci2wEdq` -2. The `hdkeypath` which should be similar to what we saved in the -`getaddressinfo` above. - -Next, derive the covenant private key from the master key using **BIP32 -derivation**. You'll need: - - 1. The `hdkeypath` we saved from the `getaddressinfo` command - 2. Access to the `covenant-signer` directory, which contains the derivation tool - -Navigate to the `covenant-signer` directory and run the following command: + -```shell -covenant-signer derive-child-key \ - tprv8ZgxMBicQKsPe9aCeUQgMEMy2YMZ6PHnn2iCuG12y5E8oYhYNEvUqUkNy6sJ7ViBmFUMicikHSK2LBUNPx5do5EDJBjG7puwd6azci2wEdq \ - 84h/1h/0h/0/0 -``` +The above output contains two key pieces of information +as a concatenated string: +1. The **base58-encoded master private key** + `tprv8ZgxMBicQKsPe9aCeUQgMEMy2YMZ6PHnn2iCuG12y5E8oYhYNEvUqUkNy6sJ7ViBmFUMicikHSK2LBUNPx5do5EDJBjG7puwd6azci2wEdq` +2. The `hdkeypath` which should be exactly match the one you received + on step 2. -The output will display the derived private and public keys: +We are going pass the above pieces to the `covenant-signer` binary +to derive the covenant private key from the master key using **BIP32 derivation**. + ```shell +$ covenant-signer derive-child-key \ + tprv8ZgxMBicQKsPe9aCeUQgMEMy2YMZ6PHnn2iCuG12y5E8oYhYNEvUqUkNy6sJ7ViBmFUMicikHSK2LBUNPx5do5EDJBjG7puwd6azci2wEdq \ + 84h/1h/0h/0/0 Derived private key: fe1c56c494c730f13739c0655bf06e615409870200047fc65cdf781837cf7f06 Derived public key: 023a79b546c79d7f7c5ff20620d914b5cf7250631d12f6e26427ed9d3f98c5ccb1 ``` -Matches the public key derived earlier and seen in the outputs of `getaddressinfo`  -and `derive-child-key`. +The above output displays the derived private and public keys. + + +Matches the public key derived earlier and seen in the outputs of `getaddressinfo` +and `derive-child-key`. Verify that the derived public key matches the one obtained earlier from the `getaddressinfo` command. +#### Step 4: Import the private key into a Cosmos Keyring + + + Next, import the derived private key into the Cosmos keyring using the following command: @@ -242,7 +234,7 @@ and verified your setup for the covenant emulator. ## 4. Operation ### 4.1. Configuration -Use the example configuration [file](./example/config.toml) to create your own +Use the example configuration [file](../example/config.toml) to create your own configuration file. Then, replace the placeholder values with your own configuration. @@ -300,28 +292,23 @@ The covenant signer must be run in a secure network and only accessible by the covenant emulator. Once the covenant signer is set up and unlocked, you can configure the covenant -emulator to use it. The URL of the covenant signer is configured by the -covenant members but in this example we use the default value of -`http://127.0.0.1:9791`. This is specified in the covenant emulator's -configuration file under the `remotesigner` section. - -> ⚡ Note: It's important to note that the key specified in the covenant emulator's -configuration is not the covenant key itself. Instead, it is a -key used for sending Cosmos transactions. +emulator to use it. The URL of the covenant signer is configurable (`remotesigner` section) +but in this example we use the default value of +`http://127.0.0.1:9791`. ### 4.3. Unlocking the key Before you can sign transactions with the covenant key, you must unlock the -keyring that stores it. The passphrase here must match the one you used when -importing the covenant key into the keyring. Once the keyring is unlocked, you -can use the covenant key to sign transactions. +keyring that stores it. This happens through a `POST` request +on the `v1/unlock` endpoint with a payload containing +the covenant keyring passphrase. ```shell curl -X POST http://127.0.0.1:9791/v1/unlock -d '{"passphrase": ""}' ``` -You can sign transactions using the following command. However, ensure that both -the staking and unbonding transactions are provided in hex format. +You can sign transactions by invoking the `v1/sign-transactions` endpoint, +which expects staking and unbonding transactions in hex format. ```shell curl -X POST http://127.0.0.1:9791/v1/sign-transactions \ @@ -340,10 +327,8 @@ curl -X POST http://127.0.0.1:9791/v1/sign-transactions \ }' ``` -### 4.4. Testing the setup - -This will generate a signature for the provided transactions and return it in JSON -format. +The above command will generate a signature for the provided +transactions and return it in JSON format. ```json { @@ -355,5 +340,9 @@ format. These signatures can then be used to verify that the transactions were signed by the covenant key. -Congratulations! You have successfully setup the covenant signer and are now able -to sign transactions with the covenant key. \ No newline at end of file +Congratulations! You have successfully set up the covenant signer and are now able +to sign transactions with the covenant key. + + \ No newline at end of file From 00b34a2c43a736901c52eda71f83edf4515d84d5 Mon Sep 17 00:00:00 2001 From: Sam Ricotta Date: Wed, 4 Dec 2024 11:48:23 +0200 Subject: [PATCH 21/40] update docs for signer and emulator --- .../docs/transition-from-phase1.md | 99 ++++++---- ...e-emulator.md => configure-with-signer.md} | 21 ++- docs/emulator-installation.md | 175 ++++++++++++++++++ 3 files changed, 257 insertions(+), 38 deletions(-) rename docs/{configure-emulator.md => configure-with-signer.md} (94%) create mode 100644 docs/emulator-installation.md diff --git a/covenant-signer/docs/transition-from-phase1.md b/covenant-signer/docs/transition-from-phase1.md index 61d225f..0514e74 100644 --- a/covenant-signer/docs/transition-from-phase1.md +++ b/covenant-signer/docs/transition-from-phase1.md @@ -27,7 +27,6 @@ are transitioning their phase-1 set up to the phase-2 one. 1. [Configuration](#41-configuration) 2. [Starting the daemon](#42-starting-the-daemon) 3. [Unlocking the key](#43-unlocking-the-key) - 4. [Testing the setup](#44-testing-the-setup) ## 1. Prerequisites @@ -37,6 +36,8 @@ This guide requires that: network you intend to operate your covenant signer on and 2. you have access to the private Bitcoin key you set up your covenant with. +3. A connection to a Babylon node. To run your own node, please refer to the +[Babylon Node Setup Guide](https://github.com/babylonlabs-io/networks/blob/sam/bbn-test-5/bbn-test-5/babylon-node/README.md). For a refresher on setting up the Bitcoin node, refer to the [deployment guide of your phase-1 covenant signer setup](https://github.com/babylonlabs-io/covenant-signer/blob/main/docs/deployment.md#2-bitcoind-setup). @@ -112,27 +113,24 @@ the wallet directory or `.dat` file. In the below example, we are loading the wallet named `covenant-wallet`. ```shell -$ bitcoin-cli loadwallet "covenant-wallet" +bitcoin-cli loadwallet "covenant-wallet" { "name": "covenant-wallet" } ``` #### Step 2: Extract the covenant address' `hdkeypath` + - - + Next, we are going to retrieve the `hdkeypath` of the Bitcoin address associated with our covenant key. We do this through the usage of the `getaddresssinfo` command which takes your covenant Bitcoin address as a parameter. ```shell -$ bitcoin-cli getaddressinfo bcrt1qazasawj3ard0ffwj04zpxlw2pt9cp7kwmnqyvk | jq .hdkeypath +bitcoin-cli getaddressinfo bcrt1qazasawj3ard0ffwj04zpxlw2pt9cp7kwmnqyvk | jq .hdkeypath "m/84h/1h/0h/0/0" ``` @@ -149,19 +147,44 @@ we are going to retrieve the **base58-encoded master private key** from the Bitc This key will be used to derive the covenant private key, which can then be imported directly into the Cosmos keyring. +What we need you to do is replace the `` with the one you received +in step 2. + List all descriptors in the wallet with private keys included in the output. -This will provide the descriptor needed to derive the private key. +This will provide the descriptor needed to derive the private key. ```shell -$ bitcoin-cli listdescriptors true | jq -r '.descriptors[] | select(.desc | contains("wpkh(")) | .desc | capture("wpkh\\((?.*?)\\)").key | sub("/\\*$"; "")' -tprv8ZgxMBicQKsPe9aCeUQgMEMy2YMZ6PHnn2iCuG12y5E8oYhYNEvUqUkNy6sJ7ViBmFUMicikHSK2LBUNPx5do5EDJBjG7puwd6azci2wEdq/84h/1h/0h/0 -``` +bitcoin-cli listdescriptors true | jq -r ' + .descriptors[] | + select(.desc | contains("/84h/1h/0h/0/")) | + .desc +' descriptors.json +wpkh(tprv8ZgxMBicQKsPe9aCeUQgMEMy2YMZ6PHnn2iCuG12y5E8oYhYNEvUqUkNy6sJ7ViBmFUMicikHSK2LBUNPx5do5EDJBjG7puwd6azci2wEdq/84h/1h/0h/0/*)#sachkrde +``` + + +Since Bitcoin wallets typically contain multiple descriptors +(usually 6 by default), we need to use `jq` to find the specific descriptor that + matches our previously saved `hdkeypath` (84h/1h/0h/0/0) and extract the master + private key from it. + +To extract the private key: +1. Remove everything outside the parentheses `wpkh(` and `)` +2. Remove the derivation path after the private key +(everything after and including `/`) + +You'll be left with just the base58-encoded master private key: + +``` +tprv8ZgxMBicQKsPe9aCeUQgMEMy2YMZ6PHnn2iCuG12y5E8oYhYNEvUqUkNy6sJ7ViBmFUMicikHSK2LBUNPx5do5EDJBjG7puwd6azci2wEdq +``` + The above output contains two key pieces of information as a concatenated string: 1. The **base58-encoded master private key** @@ -174,8 +197,14 @@ to derive the covenant private key from the master key using **BIP32 derivation* + + ```shell -$ covenant-signer derive-child-key \ +covenant-signer derive-child-key \ tprv8ZgxMBicQKsPe9aCeUQgMEMy2YMZ6PHnn2iCuG12y5E8oYhYNEvUqUkNy6sJ7ViBmFUMicikHSK2LBUNPx5do5EDJBjG7puwd6azci2wEdq \ 84h/1h/0h/0/0 Derived private key: fe1c56c494c730f13739c0655bf06e615409870200047fc65cdf781837cf7f06 @@ -186,22 +215,26 @@ The above output displays the derived private and public keys. -Matches the public key derived earlier and seen in the outputs of `getaddressinfo` -and `derive-child-key`. + +You can verify your key derivation was successful by checking that the public +key matches the one shown earlier in both: +- The `getaddressinfo` command output +- The `derive-child-key` command output -Verify that the derived public key matches the one obtained earlier from the -`getaddressinfo` command. +This verification ensures you've extracted the correct master private key from the descriptor. #### Step 4: Import the private key into a Cosmos Keyring - +As mentioned above as a prerequesite, you will need access to a Babylon node, or +one setup on your machine. The reason for this is that we need to access the +`babylond` binary to import the private key into the Cosmos keyring. Currently +the `covenant-signer` does not have support for importing keys. If you need a +guide on how to set up a Babylon node, you can refer to the +[Babylon Node Setup Guide](https://github.com/babylonlabs-io/networks/bbn-test-5/babylon-node/README.md). + -Next, import the derived private key into the Cosmos keyring using the following -command: +Next, navigate to where you have the babylon node running and import the derived +private key into the Cosmos keyring using the following command: ```shell babylond keys import-hex cov fe1c56c494c730f13739c0655bf06e615409870200047fc65cdf781837cf7f06 --keyring-backend file @@ -228,15 +261,17 @@ The output will display the details of the imported key: ``` -Congratulations! You have successfully imported your keys from the prior setup -and verified your setup for the covenant emulator. +Congratulations! You have successfully imported your key. ## 4. Operation ### 4.1. Configuration +Next, we can return to the terminal where you have the covenant signer directory +and create your own configuration file. + Use the example configuration [file](../example/config.toml) to create your own configuration file. Then, replace the placeholder values with your own -configuration. +configuration. This can be placed directly in the `covenant-signer` directory. ```toml [keystore] @@ -282,7 +317,8 @@ Below are brief explanations of the configuration entries: ### 4.2. Starting the daemon -The covenant signer can be run using the following command: +We then will run the following command to start the daemon from the +`covenant-signer` directory: ```shell covenant-signer start --config ./path/to/config.toml @@ -345,4 +381,5 @@ to sign transactions with the covenant key. \ No newline at end of file +* Prometheus metrics and logs --> + \ No newline at end of file diff --git a/docs/configure-emulator.md b/docs/configure-with-signer.md similarity index 94% rename from docs/configure-emulator.md rename to docs/configure-with-signer.md index b93048a..b02e910 100644 --- a/docs/configure-emulator.md +++ b/docs/configure-with-signer.md @@ -1,4 +1,4 @@ -# Configuring the Covenant Emulator +# Configuring the Covenant Emulator with covenant Signer ## Table of Contents @@ -29,10 +29,10 @@ it into the new integrated keyring in the covenant signer. ## 2. Prerequisites -To successfully complete this guide, you will need +To successfully complete this guide, you will need: -1. To successfully complete this guide, you will need a running instance of the -[covenant signer](../covenant-signer) +1. A running instance of the [covenant signer](../covenant-signer) +with the url that you configured it to. 2. A connection to a Babylon node. To run your own node, please refer to the [Babylon Node Setup Guide](https://github.com/babylonlabs-io/networks/blob/sam/bbn-test-5/bbn-test-5/babylon-node/README.md). @@ -41,8 +41,15 @@ complete the setup of the covenant signer with your keys before proceeding. ## 3. Install covenant emulator binary -Once you have the covenant signer running, you can install the covenant emulator -binary. +If you haven't already, download [Golang 1.23](https://go.dev/dl). + +Once installed run: + +```shell +go version +``` + +If you have not yet cloned the repository, run: ```shell git clone git@github.com:babylonlabs-io/covenant-emulator.git @@ -94,7 +101,7 @@ $ ls ### 4.2. Configure the covenant emulator As you have already set up the covenant signer, you can now configure the covenant -emulator to use it. +emulator to use it. Use the following parameters to configure the `covd.conf` file. diff --git a/docs/emulator-installation.md b/docs/emulator-installation.md new file mode 100644 index 0000000..bd77cdd --- /dev/null +++ b/docs/emulator-installation.md @@ -0,0 +1,175 @@ + +# Covenant Emulator Installation + +## Prerequisites + +This project requires Go version `1.23` or later. +Install Go by following the instructions on +the [official Go installation guide](https://golang.org/doc/install). + +### Download the code + +To get started, clone the repository to your local machine from Github: + +```bash +$ git clone git@github.com:babylonlabs-io/covenant-emulator.git +``` + +You can choose a specific version from +the [official releases page](https://github.com/babylonlabs-io/covenant-emulator/releases): + +```bash +$ cd covenant-emulator # cd into the project directory +$ git checkout +``` + +## Build and install the binary + +At the top-level directory of the project + +```bash +$ make install +``` + +The above command will build and install the covenant-emulator daemon (`covd`) +binary to `$GOPATH/bin`: + +If your shell cannot find the installed binaries, make sure `$GOPATH/bin` is in +the `$PATH` of your shell. Usually, these commands will do the job + +```bash +export PATH=$HOME/go/bin:$PATH +echo 'export PATH=$HOME/go/bin:$PATH' >> ~/.profile +``` + +To build without installing, + +```bash +$ make build +``` + +The above command will put the built binaries in a build directory with the +following structure: + +```bash +$ ls build + └── covd +``` + +Another common issue with compiling is that some of the dependencies have +components written in C. If a C toolchain is absent, the Go compiler will throw +errors. (Most likely it will complain about undefined names/types.) Make sure a +C toolchain (for example, GCC or Clang) is available. On Ubuntu, this can be +installed by running + +```bash +sudo apt install build-essential +``` + +## Setting up a covenant emulator + +### Configuration + +The `covd init` command initializes a home directory for the +finality provider daemon. +This directory is created in the default home location or in a +location specified by the `--home` flag. +If the home directory already exists, add `--force` to override the directory if +needed. + +```bash +$ covd init --home /path/to/covd/home/ +``` + +After initialization, the home directory will have the following structure + +```bash +$ ls /path/to/covd/home/ + ├── covd.conf # Covd-specific configuration file. + ├── logs # Covd logs +``` + +If the `--home` flag is not specified, then the default home directory +will be used. For different operating systems, those are: + +- **MacOS** `~/Users//Library/Application Support/Covd` +- **Linux** `~/.Covd` +- **Windows** `C:\Users\\AppData\Local\Covd` + +Below are some important parameters of the `covd.conf` file. + +**Note**: +The configuration below requires to point to the path where this keyring is +stored `KeyDirectory`. This `Key` field stores the key name used for interacting +with the Babylon chain and will be specified along with the `KeyringBackend` +field in the next [step](#generate-key-pairs). So we can ignore the setting of +the two fields in this step. + +```bash +# The interval between each query for pending BTC delegations +QueryInterval = 15s + +# The maximum number of delegations that the covd processes each time +DelegationLimit = 100 + +# Bitcoin network to run on +BitcoinNetwork = simnet + +# Babylon specific parameters + +# Babylon chain ID +ChainID = chain-test + +# Babylon node RPC endpoint +RPCAddr = http://127.0.0.1:26657 + +# Babylon node gRPC endpoint +GRPCAddr = https://127.0.0.1:9090 + +# Name of the key in the keyring to use for signing transactions +Key = + +# Type of keyring to use, +# supported backends - (os|file|kwallet|pass|test|memory) +# ref https://docs.cosmos.network/v0.46/run-node/keyring.html#available-backends-for-the-keyring +KeyringBackend = test + +# Directory where keys will be retrieved from and stored +KeyDirectory = /path/to/covd/home +``` + +To see the complete list of configuration options, check the `covd.conf` file. + +## Generate key pairs + +The covenant emulator daemon requires the existence of a keyring that signs +signatures and interacts with Babylon. Use the following command to generate the +key: + +```bash +$ covd create-key --key-name covenant-key --chain-id chain-test +{ + "name": "cov-key", + "public-key": "9bd5baaba3d3fb5a8bcb8c2995c51793e14a1e32f1665cade168f638e3b15538" +} +``` + +After executing the above command, the key name will be saved in the config file +created in [step](#configuration). +Note that the `public-key` in the output should be used as one of the inputs of +the genesis of the Babylon chain. +Also, this key will be used to pay for the fees due to the daemon submitting +signatures to Babylon. + +## Start the daemon + +You can start the covenant emulator daemon using the following command: + +```bash +$ covd start +2024-01-05T05:59:09.429615Z info Starting Covenant Emulator +2024-01-05T05:59:09.429713Z info Covenant Emulator Daemon is fully active! +``` + +All the available CLI options can be viewed using the `--help` flag. These +options can also be set in the configuration file. \ No newline at end of file From 79eb0a5558912f9ec4425c561d30eddbeddee0ec Mon Sep 17 00:00:00 2001 From: Sam Ricotta Date: Wed, 4 Dec 2024 12:30:41 +0200 Subject: [PATCH 22/40] Update transition-from-phase1.md --- .../docs/transition-from-phase1.md | 92 +++++++++++-------- 1 file changed, 53 insertions(+), 39 deletions(-) diff --git a/covenant-signer/docs/transition-from-phase1.md b/covenant-signer/docs/transition-from-phase1.md index 0514e74..8abef88 100644 --- a/covenant-signer/docs/transition-from-phase1.md +++ b/covenant-signer/docs/transition-from-phase1.md @@ -127,8 +127,11 @@ that we received previously. Each bitcoind wallet will by default have 6 differ Next, we are going to retrieve the `hdkeypath` of the Bitcoin address associated with our covenant key. + We do this through the usage of the `getaddresssinfo` command -which takes your covenant Bitcoin address as a parameter. +which takes your covenant Bitcoin address as a parameter. As mentioned above, +you will need access to the Bitcoin key you set up your covenant with. + ```shell bitcoin-cli getaddressinfo bcrt1qazasawj3ard0ffwj04zpxlw2pt9cp7kwmnqyvk | jq .hdkeypath "m/84h/1h/0h/0/0" @@ -147,16 +150,21 @@ we are going to retrieve the **base58-encoded master private key** from the Bitc This key will be used to derive the covenant private key, which can then be imported directly into the Cosmos keyring. -What we need you to do is replace the `` with the one you received -in step 2. +The command below will list all descriptors in the wallet with private keys. +This will provide you with the descriptor needed to derive the private key. + +Since Bitcoin wallets typically contain multiple descriptors +(usually 6 by default), we use `jq` to find the specific descriptor that +matches our previously saved `hdkeypath` in this example `(84h/1h/0h/0/0)` +and extract the master private key from it. -List all descriptors in the wallet with private keys included in the output. -This will provide the descriptor needed to derive the private key. +So, before you run this command you will need to replace the `` below +with the one you retrieved in step 2. ```shell bitcoin-cli listdescriptors true | jq -r ' .descriptors[] | - select(.desc | contains("/84h/1h/0h/0/")) | + select(.desc | contains("")) | .desc ' descriptors.json @@ -168,32 +176,22 @@ that we received previously. If so, this should be explained here and we can avoid being overly smart by simplifying the above command. --> +As you can see above there is a concatenated string of your private key and +part of your `hdkeypath`. To extract the private key: -Since Bitcoin wallets typically contain multiple descriptors -(usually 6 by default), we need to use `jq` to find the specific descriptor that - matches our previously saved `hdkeypath` (84h/1h/0h/0/0) and extract the master - private key from it. - -To extract the private key: 1. Remove everything outside the parentheses `wpkh(` and `)` -2. Remove the derivation path after the private key +2. Remove the `hdkeypath` after the private key (everything after and including `/`) -You'll be left with just the base58-encoded master private key: +You'll be left with just the **base58-encoded master private key**, similar to +below: ``` tprv8ZgxMBicQKsPe9aCeUQgMEMy2YMZ6PHnn2iCuG12y5E8oYhYNEvUqUkNy6sJ7ViBmFUMicikHSK2LBUNPx5do5EDJBjG7puwd6azci2wEdq ``` - -The above output contains two key pieces of information -as a concatenated string: -1. The **base58-encoded master private key** - `tprv8ZgxMBicQKsPe9aCeUQgMEMy2YMZ6PHnn2iCuG12y5E8oYhYNEvUqUkNy6sJ7ViBmFUMicikHSK2LBUNPx5do5EDJBjG7puwd6azci2wEdq` -2. The `hdkeypath` which should be exactly match the one you received - on step 2. - -We are going pass the above pieces to the `covenant-signer` binary -to derive the covenant private key from the master key using **BIP32 derivation**. +Now you have your **base58-encoded master private key**, will now pass the above +information to the `covenant-signer` binary to derive the covenant private key +from the master key using **BIP32 derivation**. @@ -202,6 +200,7 @@ why did we decide for the covenant-signer CLI to have two parameters instead of but part of it i.e it has /84h/1h/0h/0/* so the user still would need to provide the path under the * - it simplified a bit parsing on program side --> +Use the following command to derive the covenant private key: ```shell covenant-signer derive-child-key \ @@ -211,35 +210,50 @@ Derived private key: fe1c56c494c730f13739c0655bf06e615409870200047fc65cdf781837c Derived public key: 023a79b546c79d7f7c5ff20620d914b5cf7250631d12f6e26427ed9d3f98c5ccb1 ``` -The above output displays the derived private and public keys. +The above output displays the derived private and public keys. Please make note +of your private key for the next step. -You can verify your key derivation was successful by checking that the public -key matches the one shown earlier in both: -- The `getaddressinfo` command output -- The `derive-child-key` command output +Additionally, you can verify your key derivation was successful by checking that +the public key matches the one shown earlier in both: +- The `getaddressinfo` command output in step 2 +- The `derive-child-key` command output in this step -This verification ensures you've extracted the correct master private key from the descriptor. +This verification ensures you've extracted the correct master private key from +the descriptor. #### Step 4: Import the private key into a Cosmos Keyring -As mentioned above as a prerequesite, you will need access to a Babylon node, or -one setup on your machine. The reason for this is that we need to access the -`babylond` binary to import the private key into the Cosmos keyring. Currently -the `covenant-signer` does not have support for importing keys. If you need a -guide on how to set up a Babylon node, you can refer to the -[Babylon Node Setup Guide](https://github.com/babylonlabs-io/networks/bbn-test-5/babylon-node/README.md). +Now that we have the derived private key, we need to import it into the Cosmos keyring. +This requires access to the `babylond` binary, which is part of your Babylon node +installation. Navigate to your Babylon node directory and run: +As mentioned in the prerequisites, you need access to a Babylon node +(either remote or on your machine) because we need the `babylond` binary to +import the private key into the Cosmos keyring. The `covenant-signer` itself +does not currently support key imports. For help setting up a Babylon node, +refer to the +[Babylon Node Setup Guide](https://github.com/babylonlabs-io/networks/bbn-test-5/babylon-node/README.md). -Next, navigate to where you have the babylon node running and import the derived -private key into the Cosmos keyring using the following command: +Now that we have the derived private key, we'll use the `babylond` binary from +your Babylon node installation to import it into the Cosmos keyring. Navigate to +your Babylon node directory and run: ```shell babylond keys import-hex cov fe1c56c494c730f13739c0655bf06e615409870200047fc65cdf781837cf7f06 --keyring-backend file ``` +This command: +- Uses `import-hex` to import the raw private key +- Names the key `cov` in the keyring +- Uses the secure `file` backend which encrypts the key on disk +- Will prompt you for a passphrase to encrypt the key + +The passphrase you set here will be needed later when unlocking the signer to +perform signing operations. + > ⚡ Note: Use the `file` backend to store the private key in encrypted form on disk. When running `import-hex` with the encrypted file backend, you will be prompted for a passphrase. This passphrase will be required to unlock the signer @@ -266,7 +280,7 @@ Congratulations! You have successfully imported your key. ## 4. Operation ### 4.1. Configuration -Next, we can return to the terminal where you have the covenant signer directory +Next, we can return to the covenant signer directory and create your own configuration file. Use the example configuration [file](../example/config.toml) to create your own From 8e22d54b8bdd60c86015a62b31f8e92d592f38aa Mon Sep 17 00:00:00 2001 From: Sam Ricotta Date: Fri, 6 Dec 2024 13:47:46 +0200 Subject: [PATCH 23/40] Update transition-from-phase1.md --- covenant-signer/docs/transition-from-phase1.md | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/covenant-signer/docs/transition-from-phase1.md b/covenant-signer/docs/transition-from-phase1.md index 8abef88..0155a0e 100644 --- a/covenant-signer/docs/transition-from-phase1.md +++ b/covenant-signer/docs/transition-from-phase1.md @@ -32,9 +32,9 @@ are transitioning their phase-1 set up to the phase-2 one. This guide requires that: -1. you have a Bitcoin node setup for the Bitcoin -network you intend to operate your covenant signer on and -2. you have access to the private Bitcoin key you +1. You have a Bitcoin node setup for the Bitcoin +network you intend to operate your covenant signer on. +2. You have access to the private Bitcoin key you set up your covenant with. 3. A connection to a Babylon node. To run your own node, please refer to the [Babylon Node Setup Guide](https://github.com/babylonlabs-io/networks/blob/sam/bbn-test-5/bbn-test-5/babylon-node/README.md). @@ -167,8 +167,9 @@ bitcoin-cli listdescriptors true | jq -r ' select(.desc | contains("")) | .desc ' descriptors.json - -wpkh(tprv8ZgxMBicQKsPe9aCeUQgMEMy2YMZ6PHnn2iCuG12y5E8oYhYNEvUqUkNy6sJ7ViBmFUMicikHSK2LBUNPx5do5EDJBjG7puwd6azci2wEdq/84h/1h/0h/0/*)#sachkrde +{ + wpkh(tprv8ZgxMBicQKsPe9aCeUQgMEMy2YMZ6PHnn2iCuG12y5E8oYhYNEvUqUkNy6sJ7ViBmFUMicikHSK2LBUNPx5do5EDJBjG7puwd6azci2wEdq/84h/1h/0h/0/*)#sachkrde +} ``` - Next, we are going to retrieve the `hdkeypath` of the Bitcoin address associated with our covenant key. @@ -171,12 +167,7 @@ bitcoin-cli listdescriptors true | jq -r ' wpkh(tprv8ZgxMBicQKsPe9aCeUQgMEMy2YMZ6PHnn2iCuG12y5E8oYhYNEvUqUkNy6sJ7ViBmFUMicikHSK2LBUNPx5do5EDJBjG7puwd6azci2wEdq/84h/1h/0h/0/*)#sachkrde } ``` - - As you can see above there is a concatenated string of your private key and part of your `hdkeypath`. To extract the private key: @@ -190,17 +181,10 @@ below: ``` tprv8ZgxMBicQKsPe9aCeUQgMEMy2YMZ6PHnn2iCuG12y5E8oYhYNEvUqUkNy6sJ7ViBmFUMicikHSK2LBUNPx5do5EDJBjG7puwd6azci2wEdq ``` -Now you have your **base58-encoded master private key**, will now pass the above -information to the `covenant-signer` binary to derive the covenant private key -from the master key using **BIP32 derivation**. - - - +Now you have your **base58-encoded master private key**. +You can now pass the above information to the `covenant-signer` binary to +derive the covenant private key from the master key using **BIP32 derivation**. + Use the following command to derive the covenant private key: ```shell @@ -213,36 +197,32 @@ covenant-signer derive-child-key \ } ``` -The above output displays the derived private and public keys. Please make note -of your private key for the next step. +Parameters: +- ``: The base58-encoded master private key from your +Bitcoin wallet (first parameter) +- ``: The HD derivation path that specifies how to derive +the child key (second parameter) - - -Additionally, you can verify your key derivation was successful by checking that -the public key matches the one shown earlier in both: -- The `getaddressinfo` command output in step 2 -- The `derive-child-key` command output in this step +To verify, you can execute the following -This verification ensures you've extracted the correct master private key from -the descriptor. +```shell +bitdoind getaddressinfo
| jq .publickey +``` -#### Step 4: Import the private key into a Cosmos Keyring +If the public key matches the derived_public_key output from the +`derive-child-key` command, the verification is successful. -Now that we have the derived private key, we need to import it into the Cosmos keyring. -This requires access to the `babylond` binary, which is part of your Babylon node -installation. Navigate to your Babylon node directory and run: +#### Step 4: Import the private key into a Cosmos Keyring -As mentioned in the prerequisites, you need access to a Babylon node -(either remote or on your machine) because we need the `babylond` binary to -import the private key into the Cosmos keyring. The `covenant-signer` itself -does not currently support key imports. For help setting up a Babylon node, -refer to the -[Babylon Node Setup Guide](https://github.com/babylonlabs-io/networks/bbn-test-5/babylon-node/README.md). +Next, we are going to import the derived private key into the Cosmos keyring. +At the moment, the `covenant-signer` has not implemented functionality +for Cosmos key imports. To overcome this, we are going to utilize +the Babylon node binary `babylond` which has support for them. +You can install the binary by following the first section of the +[Babylon Node Setup Guide](https://github.com/babylonlabs-io/networks/blob/main/bbn-test-5/babylon-node/README.md). -Now that we have the derived private key, we'll use the `babylond` binary from -your Babylon node installation to import it into the Cosmos keyring. Navigate to -your Babylon node directory and run: +One you have the `babylond` binary installed, +navigate to the directory you want to set up your keyring and run: ```shell babylond keys import-hex cov fe1c56c494c730f13739c0655bf06e615409870200047fc65cdf781837cf7f06 --keyring-backend file @@ -254,13 +234,12 @@ This command: - Uses the secure `file` backend which encrypts the key on disk - Will prompt you for a passphrase to encrypt the key -The passphrase you set here will be needed later when unlocking the signer to -perform signing operations. +The passphrase you set here will be needed later on, keep this in mind. > ⚡ Note: Use the `file` backend to store the private key in encrypted form on -disk. When running `import-hex` with the encrypted file backend, you will be -prompted for a passphrase. This passphrase will be required to unlock the signer -later. +> disk. When running `import-hex` with the encrypted file backend, you will be +> prompted for a passphrase. This passphrase will be required to unlock the signer +> later. To confirm that the import was successful, run: @@ -275,7 +254,6 @@ The output will display the details of the imported key: name: cov pubkey: '{"@type":"/cosmos.crypto.secp256k1.PubKey","key":"Ajp5tUbHnX98X/IGINkUtc9yUGMdEvbiZCftnT+Yxcyx"}' type: local - ``` Congratulations! You have successfully imported your key. @@ -322,11 +300,11 @@ port = 2113 Below are brief explanations of the configuration entries: -- `keystore-type`: Type of keystore used, which is "cosmos" +- `keystore-type`: Type of keystore used. Should be set to `"cosmos"` - `key-directory`: Path where keys are stored on the filesystem. - `keyring-backend`: Backend system for key management, e.g., "file", "os". - `key-name`: Name of the key used for signing transactions. -- `chain-id`: Identifier of the blockchain network. +- `chain-id`: The Chain ID of the Babylon network you connect to. - `host` (server-config): IP address where the server listens, typically "127.0.0.1" for local access. - `port` (server-config): TCP port number for the server. - `host` (metrics): IP address for the Prometheus metrics server, typically "127.0.0.1". @@ -334,7 +312,7 @@ Below are brief explanations of the configuration entries: ### 4.2. Starting the daemon -We then will run the following command to start the daemon from the +We will then run the following command to start the daemon from the `covenant-signer` directory: ```shell @@ -395,8 +373,3 @@ the covenant key. Congratulations! You have successfully set up the covenant signer and are now able to sign transactions with the covenant key. - - - \ No newline at end of file diff --git a/docs/configure-with-signer.md b/docs/covenant-emulator-setup.md similarity index 77% rename from docs/configure-with-signer.md rename to docs/covenant-emulator-setup.md index b02e910..e75511b 100644 --- a/docs/configure-with-signer.md +++ b/docs/covenant-emulator-setup.md @@ -1,4 +1,4 @@ -# Configuring the Covenant Emulator with covenant Signer +# Covenant Emulator Setup ## Table of Contents @@ -13,16 +13,15 @@ ## 1. Purpose of this guide -This guide outlines the transition from solely using the covenant signer to an -integrated setup that includes the covenant emulator. +This guide outlines the transition from solely using the phase-1 covenant signer +to the phase-2 covenant emulator full setup. -Previously, the [covenant signer](https://github.com/babylonlabs-io/covenant-signer), -was limited to signing unbonding signatures. In this transition we are introducing -the [covenant emulator](https://github.com/babylonlabs-io/covenant-emulator), which +The [phase-1 covenant signer](https://github.com/babylonlabs-io/covenant-signer), +was limited to signing unbonding signatures. Phase-2 requires additional +functionality that is covered by the +[covenant emulator](https://github.com/babylonlabs-io/covenant-emulator), which retrieves delegations from Babylon chain and signs them by communicating with the -updated [covenant signer](https://github.com/babylonlabs-io/covenant-emulator/tree/main/covenant-signer). -This means that the covenant emulator can now generate both unbonding signatures -unbonding signatures and adaptor signatures. +a new [covenant signer daemon](https://github.com/babylonlabs-io/covenant-emulator/tree/main/covenant-signer), specifically focused on phase-2 functionality. In this guide, we will cover exporting the key from the Bitcoin node and importing it into the new integrated keyring in the covenant signer. @@ -32,12 +31,11 @@ it into the new integrated keyring in the covenant signer. To successfully complete this guide, you will need: 1. A running instance of the [covenant signer](../covenant-signer) -with the url that you configured it to. + with the url that you configured it to. Please follow the + [covenant signer setup guide](covenant-signer/README.md) to + complete the setup of the covenant signer with your keys before proceeding. 2. A connection to a Babylon node. To run your own node, please refer to the -[Babylon Node Setup Guide](https://github.com/babylonlabs-io/networks/blob/sam/bbn-test-5/bbn-test-5/babylon-node/README.md). - -Please follow the [covenant signer setup guide](covenant-signer/README.md) to -complete the setup of the covenant signer with your keys before proceeding. + [Babylon Node Setup Guide](https://github.com/babylonlabs-io/networks/blob/sam/bbn-test-5/bbn-test-5/babylon-node/README.md). ## 3. Install covenant emulator binary @@ -54,9 +52,9 @@ If you have not yet cloned the repository, run: ```shell git clone git@github.com:babylonlabs-io/covenant-emulator.git cd covenant-emulator -git checkout v0.10.0 +git checkout ``` - + Run the following command to build the binaries and install them to your `$GOPATH/bin` directory: @@ -169,7 +167,7 @@ signs signatures and interacts with Babylon. Use the following command to genera the key: ```bash -$ covd create-key --key-name covenant-key --chain-id bbn-test-5 +$ covd create-key --key-name --chain-id bbn-test-5 --keyring-backend { "name": "covenant-key", "public-key": "9bd5baaba3d3fb5a8bcb8c2995c51793e14a1e32f1665cade168f638e3b15538" @@ -184,13 +182,10 @@ the genesis of the Babylon chain. Also, this key will be used to pay for the fees due to the daemon submitting signatures to Babylon. -To check your balance, you will need to use the `babylond` CLI. +To check your balance, View your account on the +[Babylon Explorer](https://babylon-testnet.l2scan.co) by searching for your +address. -```shell -babylond query bank balances -``` - -This will return the balance of the key provided. ## 6. Start the emulator daemon @@ -203,9 +198,4 @@ $ covd start ``` All the available CLI options can be viewed using the `--help` flag. These -options can also be set in the configuration file. - -Next you will need to unlock the key and sign transactions. Please refer to the -[covenant signer setup guide](covenant-signer/README.md#using-the-covenant-signer-for-signing-transactions) -to unlock the key and sign any transactions that are needed. - +options can also be set in the configuration file. \ No newline at end of file From 9b5aa4e2e609cda152a7e22526d0d91cf0350097 Mon Sep 17 00:00:00 2001 From: Sam Ricotta Date: Wed, 11 Dec 2024 13:00:56 +0200 Subject: [PATCH 25/40] comments --- covenant-signer/docs/transition-from-phase1.md | 17 ++++++++++------- docs/covenant-emulator-setup.md | 4 ++-- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/covenant-signer/docs/transition-from-phase1.md b/covenant-signer/docs/transition-from-phase1.md index d28f15f..3a56d7a 100644 --- a/covenant-signer/docs/transition-from-phase1.md +++ b/covenant-signer/docs/transition-from-phase1.md @@ -225,7 +225,9 @@ One you have the `babylond` binary installed, navigate to the directory you want to set up your keyring and run: ```shell -babylond keys import-hex cov fe1c56c494c730f13739c0655bf06e615409870200047fc65cdf781837cf7f06 --keyring-backend file +babylond keys import-hex cov fe1c56c494c730f13739c0655bf06e615409870200047fc65cdf781837cf7f06 \ + --keyring-backend file \ + --keyring-dir /path/to/your/keyring/directory ``` This command: @@ -236,10 +238,12 @@ This command: The passphrase you set here will be needed later on, keep this in mind. -> ⚡ Note: Use the `file` backend to store the private key in encrypted form on -> disk. When running `import-hex` with the encrypted file backend, you will be -> prompted for a passphrase. This passphrase will be required to unlock the signer -> later. +> ⚡ Note: While both `os` and `file` backends are supported, we recommend +using the `file` backend as it has been thoroughly tested across different +environments. The `file` backend stores the private key in encrypted form +on disk. When running `import-hex` with the `file` backend, you will be +prompted for a passphrase. This passphrase will be required to unlock the +signer later. To confirm that the import was successful, run: @@ -312,8 +316,7 @@ Below are brief explanations of the configuration entries: ### 4.2. Starting the daemon -We will then run the following command to start the daemon from the -`covenant-signer` directory: +We will then run the following command to start the daemon: ```shell covenant-signer start --config ./path/to/config.toml diff --git a/docs/covenant-emulator-setup.md b/docs/covenant-emulator-setup.md index e75511b..f13ded5 100644 --- a/docs/covenant-emulator-setup.md +++ b/docs/covenant-emulator-setup.md @@ -167,7 +167,7 @@ signs signatures and interacts with Babylon. Use the following command to genera the key: ```bash -$ covd create-key --key-name --chain-id bbn-test-5 --keyring-backend +covd create-key --key-name --chain-id bbn-test-5 --keyring-backend { "name": "covenant-key", "public-key": "9bd5baaba3d3fb5a8bcb8c2995c51793e14a1e32f1665cade168f638e3b15538" @@ -192,7 +192,7 @@ address. You can start the covenant emulator daemon using the following command: ```bash -$ covd start +covd start 2024-01-05T05:59:09.429615Z info Starting Covenant Emulator 2024-01-05T05:59:09.429713Z info Covenant Emulator Daemon is fully active! ``` From 2db34cab81cb7463cc69e613c29a2201a2521f29 Mon Sep 17 00:00:00 2001 From: RafilxTenfen Date: Fri, 29 Nov 2024 00:51:39 -0300 Subject: [PATCH 26/40] chore: add show key command that prints the pub key (#49) * chore: add show key command that prints the pub key * chore: address pr comments * chore: add #49 to changelog --- CHANGELOG.md | 1 + cmd/covd/key.go | 72 +++++++++++++++++++++++++++++++++++++++++++++++- cmd/covd/main.go | 2 +- 3 files changed, 73 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index afca93c..c331a55 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -49,6 +49,7 @@ with encrypted file keyring usage through API * [#48](https://github.com/babylonlabs-io/covenant-emulator/pull/48) Add covenant signer version that requires unlocking +* [#49](https://github.com/babylonlabs-io/covenant-emulator/pull/49) Add show-key command ## v0.9.0 diff --git a/cmd/covd/key.go b/cmd/covd/key.go index 84e92f2..b2511e4 100644 --- a/cmd/covd/key.go +++ b/cmd/covd/key.go @@ -5,7 +5,9 @@ import ( "fmt" "github.com/babylonlabs-io/babylon/types" + "github.com/btcsuite/btcd/btcec/v2" "github.com/jessevdk/go-flags" + "github.com/urfave/cli" covcfg "github.com/babylonlabs-io/covenant-emulator/config" @@ -29,7 +31,7 @@ var createKeyCommand = cli.Command{ }, cli.StringFlag{ Name: keyNameFlag, - Usage: "The unique name of the Covenant key", + Usage: "The unique name of the covenant key", Required: true, }, cli.StringFlag{ @@ -99,6 +101,74 @@ func createKey(ctx *cli.Context) error { return flags.NewIniParser(fileParser).WriteFile(covcfg.ConfigFile(homePath), flags.IniIncludeComments|flags.IniIncludeDefaults) } +var showKeyCommand = cli.Command{ + Name: "show-key", + ShortName: "sk", + Usage: "Show a Covenant account in the keyring.", + Flags: []cli.Flag{ + cli.StringFlag{ + Name: chainIdFlag, + Usage: "The chainID of the consumer chain", + Value: defaultChainID, + }, + cli.StringFlag{ + Name: keyNameFlag, + Usage: "The name of the covenant key", + Required: true, + }, + cli.StringFlag{ + Name: passphraseFlag, + Usage: "The pass phrase used to decrypt the key", + Value: defaultPassphrase, + }, + cli.StringFlag{ + Name: keyringBackendFlag, + Usage: "Select keyring's backend", + Value: defaultKeyringBackend, + }, + cli.StringFlag{ + Name: homeFlag, + Usage: "The home directory for the covenant", + Value: covcfg.DefaultCovenantDir, + }, + }, + Action: showKey, +} + +func showKey(ctx *cli.Context) error { + homePath := ctx.String(homeFlag) + chainID := ctx.String(chainIdFlag) + keyName := ctx.String(keyNameFlag) + backend := ctx.String(keyringBackendFlag) + passphrase := ctx.String(passphraseFlag) + + sdkCtx, err := keyring.CreateClientCtx(homePath, chainID) + if err != nil { + return err + } + + krController, err := keyring.NewChainKeyringController(sdkCtx, keyName, backend) + if err != nil { + return err + } + + privKey, err := krController.GetChainPrivKey(passphrase) + if err != nil { + return err + } + + _, pk := btcec.PrivKeyFromBytes(privKey.Key) + bip340Key := types.NewBIP340PubKeyFromBTCPK(pk) + printRespJSON( + &covenantKey{ + Name: ctx.String(keyNameFlag), + PublicKey: bip340Key.MarshalHex(), + }, + ) + + return nil +} + func printRespJSON(resp interface{}) { jsonBytes, err := json.MarshalIndent(resp, "", " ") if err != nil { diff --git a/cmd/covd/main.go b/cmd/covd/main.go index d14fce5..752fcc4 100644 --- a/cmd/covd/main.go +++ b/cmd/covd/main.go @@ -16,7 +16,7 @@ func main() { app := cli.NewApp() app.Name = "covd" app.Usage = "Covenant Emulator Daemon (covd)." - app.Commands = append(app.Commands, startCommand, initCommand, createKeyCommand) + app.Commands = append(app.Commands, startCommand, initCommand, createKeyCommand, showKeyCommand) if err := app.Run(os.Args); err != nil { fatal(err) From 6dd0c8cde1bc1215474f06df4012a98273bec311 Mon Sep 17 00:00:00 2001 From: maiquanghiep Date: Tue, 3 Dec 2024 16:59:09 +0700 Subject: [PATCH 27/40] feat: Add docker workflows for covenant_signer (#51) --- .github/workflows/ci.yml | 14 ++++++++++++-- .github/workflows/publish.yml | 20 ++++++++++++++++++-- 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 59cc85a..97b9830 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -7,7 +7,7 @@ on: jobs: lint_test: - uses: babylonlabs-io/.github/.github/workflows/reusable_go_lint_test.yml@v0.7.0 + uses: babylonlabs-io/.github/.github/workflows/reusable_go_lint_test.yml@v0.11.1 with: go-version: '1.23' go-lint-version: 'v1.60.2' @@ -19,12 +19,13 @@ jobs: gosec-args: "-exclude-generated -exclude-dir=itest -exclude-dir=testutil -exclude-dir=covenant-signer ./..." docker_pipeline: - uses: babylonlabs-io/.github/.github/workflows/reusable_docker_pipeline.yml@v0.7.0 + uses: babylonlabs-io/.github/.github/workflows/reusable_docker_pipeline.yml@v0.11.1 secrets: inherit with: publish: false dockerfile: ./Dockerfile repoName: covenant-emulator + docker_scan: true go_sec_covenant_signer: runs-on: ubuntu-24.04 @@ -45,3 +46,12 @@ jobs: working-directory: ./covenant-signer run: gosec ./... + docker_pipeline_covenant_signer: + uses: babylonlabs-io/.github/.github/workflows/reusable_docker_pipeline.yml@v0.11.1 + secrets: inherit + with: + publish: false + dockerfile: ./covenant-signer/Dockerfile + dockerContext: ./covenant-signer + repoName: covenant-signer + docker_scan: true \ No newline at end of file diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 67926fc..9f61760 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -9,7 +9,7 @@ on: jobs: lint_test: - uses: babylonlabs-io/.github/.github/workflows/reusable_go_lint_test.yml@v0.7.0 + uses: babylonlabs-io/.github/.github/workflows/reusable_go_lint_test.yml@v0.11.1 with: go-version: '1.23' go-lint-version: 'v1.60.2' @@ -22,7 +22,7 @@ jobs: docker_pipeline: needs: ["lint_test"] - uses: babylonlabs-io/.github/.github/workflows/reusable_docker_pipeline.yml@v0.10.2 + uses: babylonlabs-io/.github/.github/workflows/reusable_docker_pipeline.yml@v0.11.1 secrets: inherit with: publish: true @@ -53,3 +53,19 @@ jobs: - name: Run Gosec (covenant-signer) working-directory: ./covenant-signer run: gosec ./... + + docker_pipeline_covenant_signer: + needs: ["go_sec_covenant_signer"] + uses: babylonlabs-io/.github/.github/workflows/reusable_docker_pipeline.yml@v0.11.1 + secrets: inherit + with: + publish: true + dockerfile: ./covenant-signer/Dockerfile + dockerContext: ./covenant-signer + repoName: covenant-signer + docker_scan: true + permissions: + # required for all workflows + security-events: write + # required to fetch internal or private CodeQL packs + packages: read \ No newline at end of file From cce0e5d31a1e94c8ba817f13b21ea4afca994e23 Mon Sep 17 00:00:00 2001 From: maiquanghiep Date: Tue, 3 Dec 2024 16:59:32 +0700 Subject: [PATCH 28/40] Add cosmos tag for CosmosKeyStoreConfig (#52) --- CHANGELOG.md | 1 + covenant-signer/config/config.go | 2 ++ covenant-signer/config/keystore.go | 4 ++-- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c331a55..331666e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -50,6 +50,7 @@ through API * [#48](https://github.com/babylonlabs-io/covenant-emulator/pull/48) Add covenant signer version that requires unlocking * [#49](https://github.com/babylonlabs-io/covenant-emulator/pull/49) Add show-key command +* [#52](https://github.com/babylonlabs-io/covenant-emulator/pull/52) Fix CosmosKeyStoreConfig ## v0.9.0 diff --git a/covenant-signer/config/config.go b/covenant-signer/config/config.go index 7b3456d..36b5bb1 100644 --- a/covenant-signer/config/config.go +++ b/covenant-signer/config/config.go @@ -66,6 +66,8 @@ const defaultConfigTemplate = `# This is a TOML config file. keystore-type = "{{ .KeyStore.KeyStoreType }}" [keystore.cosmos] +# The chain id of the chain to connect to +chain-id = "{{ .KeyStore.CosmosKeyStore.ChainID }}" # The directory to store the keys in key-directory = "{{ .KeyStore.CosmosKeyStore.KeyDirectory }}" # The keyring backend to use diff --git a/covenant-signer/config/keystore.go b/covenant-signer/config/keystore.go index e38faee..12c8d65 100644 --- a/covenant-signer/config/keystore.go +++ b/covenant-signer/config/keystore.go @@ -34,8 +34,8 @@ type CosmosKeyStoreConfig struct { } type KeyStoreConfig struct { - KeyStoreType string `mapstructure:"keystore-type"` - CosmosKeyStore *CosmosKeyStoreConfig + KeyStoreType string `mapstructure:"keystore-type"` + CosmosKeyStore *CosmosKeyStoreConfig `mapstructure:"cosmos"` } func DefaultKeyStoreConfig() *KeyStoreConfig { From 7f4c9fe7843481d71495ffbffc8ada11806e3ef4 Mon Sep 17 00:00:00 2001 From: maiquanghiep Date: Thu, 5 Dec 2024 09:46:25 +0700 Subject: [PATCH 29/40] chore: bump workflows version (#56) --- .github/workflows/ci.yml | 8 ++++---- .github/workflows/publish.yml | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 97b9830..eb6034f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -7,7 +7,7 @@ on: jobs: lint_test: - uses: babylonlabs-io/.github/.github/workflows/reusable_go_lint_test.yml@v0.11.1 + uses: babylonlabs-io/.github/.github/workflows/reusable_go_lint_test.yml@v0.11.2 with: go-version: '1.23' go-lint-version: 'v1.60.2' @@ -19,7 +19,7 @@ jobs: gosec-args: "-exclude-generated -exclude-dir=itest -exclude-dir=testutil -exclude-dir=covenant-signer ./..." docker_pipeline: - uses: babylonlabs-io/.github/.github/workflows/reusable_docker_pipeline.yml@v0.11.1 + uses: babylonlabs-io/.github/.github/workflows/reusable_docker_pipeline.yml@v0.11.2 secrets: inherit with: publish: false @@ -47,11 +47,11 @@ jobs: run: gosec ./... docker_pipeline_covenant_signer: - uses: babylonlabs-io/.github/.github/workflows/reusable_docker_pipeline.yml@v0.11.1 + uses: babylonlabs-io/.github/.github/workflows/reusable_docker_pipeline.yml@v0.11.2 secrets: inherit with: publish: false dockerfile: ./covenant-signer/Dockerfile dockerContext: ./covenant-signer repoName: covenant-signer - docker_scan: true \ No newline at end of file + docker_scan: true diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 9f61760..a142810 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -9,7 +9,7 @@ on: jobs: lint_test: - uses: babylonlabs-io/.github/.github/workflows/reusable_go_lint_test.yml@v0.11.1 + uses: babylonlabs-io/.github/.github/workflows/reusable_go_lint_test.yml@v0.11.2 with: go-version: '1.23' go-lint-version: 'v1.60.2' @@ -22,7 +22,7 @@ jobs: docker_pipeline: needs: ["lint_test"] - uses: babylonlabs-io/.github/.github/workflows/reusable_docker_pipeline.yml@v0.11.1 + uses: babylonlabs-io/.github/.github/workflows/reusable_docker_pipeline.yml@v0.11.2 secrets: inherit with: publish: true @@ -56,7 +56,7 @@ jobs: docker_pipeline_covenant_signer: needs: ["go_sec_covenant_signer"] - uses: babylonlabs-io/.github/.github/workflows/reusable_docker_pipeline.yml@v0.11.1 + uses: babylonlabs-io/.github/.github/workflows/reusable_docker_pipeline.yml@v0.11.2 secrets: inherit with: publish: true @@ -68,4 +68,4 @@ jobs: # required for all workflows security-events: write # required to fetch internal or private CodeQL packs - packages: read \ No newline at end of file + packages: read From 17b8e01a839aea09548422ecd4755297e69710d1 Mon Sep 17 00:00:00 2001 From: RafilxTenfen Date: Thu, 5 Dec 2024 13:09:56 -0300 Subject: [PATCH 30/40] chore: bump babylon to v0.18.0 and update min unbonding time blocks (#57) * chore: bump babylon to v0.18.0 and update min unbonding time blocks to just unbonding time blocks, affected one check from '<' to '!=' * chore: add #57 to changelog * chore: bump bbn v018 in covenant-signer * fix: flag --min-unbonding-time * chore: move to UnbondingTimeBlocks higher than ComfirmationTimeBlocks --- CHANGELOG.md | 1 + clientcontroller/babylon.go | 2 +- covenant-signer/go.mod | 154 +++++++------- covenant-signer/go.sum | 377 +++++++++++++++------------------- covenant/covenant.go | 6 +- covenant/covenant_test.go | 2 +- go.mod | 2 +- go.sum | 4 +- itest/babylon_node_handler.go | 2 +- itest/test_manager.go | 2 +- testutil/datagen.go | 2 +- tools/go.mod | 2 +- tools/go.sum | 4 +- types/params.go | 4 +- 14 files changed, 258 insertions(+), 306 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 331666e..cff279c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -51,6 +51,7 @@ through API signer version that requires unlocking * [#49](https://github.com/babylonlabs-io/covenant-emulator/pull/49) Add show-key command * [#52](https://github.com/babylonlabs-io/covenant-emulator/pull/52) Fix CosmosKeyStoreConfig +* [#57](https://github.com/babylonlabs-io/covenant-emulator/pull/57) Bump babylon to v0.18.0 ## v0.9.0 diff --git a/clientcontroller/babylon.go b/clientcontroller/babylon.go index 7ec9812..19adb0d 100644 --- a/clientcontroller/babylon.go +++ b/clientcontroller/babylon.go @@ -134,7 +134,7 @@ func (bc *BabylonController) QueryStakingParamsByVersion(version uint32) (*types CovenantQuorum: stakingParamRes.Params.CovenantQuorum, SlashingRate: stakingParamRes.Params.SlashingRate, MinComissionRate: stakingParamRes.Params.MinCommissionRate, - MinUnbondingTime: stakingParamRes.Params.MinUnbondingTimeBlocks, + UnbondingTimeBlocks: stakingParamRes.Params.UnbondingTimeBlocks, UnbondingFee: btcutil.Amount(stakingParamRes.Params.UnbondingFeeSat), MinStakingTime: minStakingTimeBlocksUint16, MaxStakingTime: maxStakingTimeBlocksUint16, diff --git a/covenant-signer/go.mod b/covenant-signer/go.mod index d92a81b..d2a245c 100644 --- a/covenant-signer/go.mod +++ b/covenant-signer/go.mod @@ -5,15 +5,15 @@ go 1.23.1 require ( github.com/btcsuite/btcd v0.24.2 github.com/btcsuite/btcd/btcec/v2 v2.3.2 - github.com/btcsuite/btcd/btcutil v1.1.5 + github.com/btcsuite/btcd/btcutil v1.1.6 github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect - github.com/klauspost/compress v1.17.7 // indirect + github.com/klauspost/compress v1.17.9 // indirect github.com/ory/dockertest/v3 v3.10.0 - github.com/spf13/viper v1.18.2 + github.com/spf13/viper v1.19.0 github.com/stretchr/testify v1.9.0 - golang.org/x/crypto v0.23.0 // indirect - golang.org/x/sync v0.7.0 // indirect + golang.org/x/crypto v0.28.0 // indirect + golang.org/x/sync v0.8.0 // indirect ) require ( @@ -21,63 +21,62 @@ require ( github.com/hashicorp/hcl v1.0.0 // indirect github.com/magiconair/properties v1.8.7 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect - github.com/pelletier/go-toml/v2 v2.1.0 // indirect + github.com/pelletier/go-toml/v2 v2.2.2 // indirect github.com/sagikazarmark/locafero v0.4.0 // indirect github.com/sagikazarmark/slog-shim v0.1.0 // indirect github.com/sourcegraph/conc v0.3.0 // indirect github.com/spf13/afero v1.11.0 // indirect - github.com/spf13/cast v1.6.0 // indirect - github.com/spf13/cobra v1.8.0 + github.com/spf13/cast v1.7.0 // indirect + github.com/spf13/cobra v1.8.1 github.com/spf13/pflag v1.0.5 // indirect github.com/subosito/gotenv v1.6.0 // indirect go.uber.org/multierr v1.11.0 // indirect golang.org/x/exp v0.0.0-20240404231335-c0f41cb1a7a0 // indirect - golang.org/x/sys v0.20.0 // indirect - golang.org/x/text v0.15.0 // indirect + golang.org/x/sys v0.26.0 // indirect + golang.org/x/text v0.19.0 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) require ( - cosmossdk.io/math v1.3.0 - github.com/babylonlabs-io/babylon v0.12.1 + cosmossdk.io/math v1.4.0 + github.com/babylonlabs-io/babylon v0.18.0 github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0 - github.com/cosmos/cosmos-sdk v0.50.6 + github.com/cosmos/cosmos-sdk v0.50.9 github.com/cosmos/go-bip39 v1.0.0 github.com/go-chi/chi/v5 v5.0.12 github.com/golang/mock v1.6.0 github.com/google/uuid v1.6.0 - github.com/prometheus/client_golang v1.19.0 - github.com/rs/zerolog v1.32.0 + github.com/prometheus/client_golang v1.20.5 + github.com/rs/zerolog v1.33.0 ) require ( - cloud.google.com/go v0.112.0 // indirect - cloud.google.com/go/compute v1.24.0 // indirect - cloud.google.com/go/compute/metadata v0.2.3 // indirect + cloud.google.com/go v0.112.1 // indirect + cloud.google.com/go/compute/metadata v0.5.0 // indirect cloud.google.com/go/iam v1.1.6 // indirect - cloud.google.com/go/storage v1.36.0 // indirect - cosmossdk.io/api v0.7.4 // indirect + cloud.google.com/go/storage v1.38.0 // indirect + cosmossdk.io/api v0.7.5 // indirect cosmossdk.io/client/v2 v2.0.0-beta.1 // indirect cosmossdk.io/collections v0.4.0 // indirect - cosmossdk.io/core v0.11.0 // indirect - cosmossdk.io/depinject v1.0.0-alpha.4 // indirect + cosmossdk.io/core v0.11.1 // indirect + cosmossdk.io/depinject v1.0.0 // indirect cosmossdk.io/errors v1.0.1 // indirect - cosmossdk.io/log v1.3.1 // indirect + cosmossdk.io/log v1.4.1 // indirect cosmossdk.io/store v1.1.0 // indirect - cosmossdk.io/x/circuit v0.1.0 // indirect - cosmossdk.io/x/evidence v0.1.0 // indirect - cosmossdk.io/x/feegrant v0.1.0 // indirect - cosmossdk.io/x/nft v0.1.0 // indirect - cosmossdk.io/x/tx v0.13.3 // indirect - cosmossdk.io/x/upgrade v0.1.1 // indirect + cosmossdk.io/x/circuit v0.1.1 // indirect + cosmossdk.io/x/evidence v0.1.1 // indirect + cosmossdk.io/x/feegrant v0.1.1 // indirect + cosmossdk.io/x/nft v0.1.1 // indirect + cosmossdk.io/x/tx v0.13.4 // indirect + cosmossdk.io/x/upgrade v0.1.4 // indirect dario.cat/mergo v1.0.0 // indirect filippo.io/edwards25519 v1.0.0 // indirect github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect github.com/99designs/keyring v1.2.1 // indirect github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 // indirect - github.com/CosmWasm/wasmd v0.51.0 // indirect - github.com/CosmWasm/wasmvm/v2 v2.0.1 // indirect + github.com/CosmWasm/wasmd v0.53.0 // indirect + github.com/CosmWasm/wasmvm/v2 v2.1.3 // indirect github.com/DataDog/datadog-go v3.2.0+incompatible // indirect github.com/DataDog/zstd v1.5.5 // indirect github.com/Microsoft/go-winio v0.6.1 // indirect @@ -91,37 +90,37 @@ require ( github.com/boljen/go-bitmap v0.0.0-20151001105940-23cd2fb0ce7d // indirect github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f // indirect github.com/cenkalti/backoff/v4 v4.2.0 // indirect - github.com/cespare/xxhash v1.1.0 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/chzyer/readline v1.5.1 // indirect github.com/cockroachdb/apd/v2 v2.0.2 // indirect - github.com/cockroachdb/errors v1.11.1 // indirect + github.com/cockroachdb/errors v1.11.3 // indirect + github.com/cockroachdb/fifo v0.0.0-20240606204812-0bbfbd93a7ce // indirect github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect - github.com/cockroachdb/pebble v1.1.0 // indirect + github.com/cockroachdb/pebble v1.1.2 // indirect github.com/cockroachdb/redact v1.1.5 // indirect github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect - github.com/cometbft/cometbft v0.38.7 // indirect - github.com/cometbft/cometbft-db v0.9.1 // indirect + github.com/cometbft/cometbft v0.38.15 // indirect + github.com/cometbft/cometbft-db v0.15.0 // indirect github.com/containerd/continuity v0.3.0 // indirect github.com/cosmos/btcutil v1.0.5 // indirect github.com/cosmos/cosmos-db v1.0.2 // indirect github.com/cosmos/cosmos-proto v1.0.0-beta.5 // indirect github.com/cosmos/gogogateway v1.2.0 // indirect - github.com/cosmos/gogoproto v1.4.12 // indirect - github.com/cosmos/iavl v1.1.2 // indirect - github.com/cosmos/ibc-go/modules/capability v1.0.0 // indirect + github.com/cosmos/gogoproto v1.7.0 // indirect + github.com/cosmos/iavl v1.2.0 // indirect + github.com/cosmos/ibc-go/modules/apps/callbacks v0.2.1-0.20231113120333-342c00b0f8bd // indirect + github.com/cosmos/ibc-go/modules/capability v1.0.1 // indirect github.com/cosmos/ibc-go/modules/light-clients/08-wasm v0.0.0-20240429153234-e1e6da7e4ead // indirect - github.com/cosmos/ibc-go/v8 v8.3.0 // indirect + github.com/cosmos/ibc-go/v8 v8.4.0 // indirect github.com/cosmos/ics23/go v0.10.0 // indirect github.com/cosmos/ledger-cosmos-go v0.13.3 // indirect github.com/danieljoos/wincred v1.1.2 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/decred/dcrd/crypto/blake256 v1.0.1 // indirect - github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect + github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 // indirect github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f // indirect - github.com/dgraph-io/badger/v2 v2.2007.4 // indirect - github.com/dgraph-io/ristretto v0.1.1 // indirect - github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect + github.com/dgraph-io/badger/v4 v4.3.0 // indirect + github.com/dgraph-io/ristretto v0.1.2-0.20240116140435-c67e07994f91 // indirect github.com/distribution/reference v0.5.0 // indirect github.com/docker/cli v25.0.6+incompatible // indirect github.com/docker/docker v25.0.6+incompatible // indirect @@ -133,7 +132,7 @@ require ( github.com/fatih/color v1.15.0 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/getsentry/sentry-go v0.27.0 // indirect - github.com/go-kit/kit v0.12.0 // indirect + github.com/go-kit/kit v0.13.0 // indirect github.com/go-kit/log v0.2.1 // indirect github.com/go-logfmt/logfmt v0.6.0 // indirect github.com/go-logr/logr v1.4.1 // indirect @@ -141,25 +140,25 @@ require ( github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect github.com/gogo/googleapis v1.4.1 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang/glog v1.2.0 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.4 // indirect - github.com/google/btree v1.1.2 // indirect + github.com/google/btree v1.1.3 // indirect + github.com/google/flatbuffers v1.12.1 // indirect github.com/google/go-cmp v0.6.0 // indirect github.com/google/gofuzz v1.2.0 // indirect github.com/google/orderedcode v0.0.1 // indirect github.com/google/s2a-go v0.1.7 // indirect github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect - github.com/googleapis/gax-go/v2 v2.12.0 // indirect + github.com/googleapis/gax-go/v2 v2.12.3 // indirect github.com/gorilla/handlers v1.5.2 // indirect github.com/gorilla/mux v1.8.1 // indirect - github.com/gorilla/websocket v1.5.1 // indirect + github.com/gorilla/websocket v1.5.3 // indirect github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 // indirect github.com/grpc-ecosystem/grpc-gateway v1.16.0 // indirect github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect - github.com/hashicorp/go-getter v1.7.3 // indirect + github.com/hashicorp/go-getter v1.7.5 // indirect github.com/hashicorp/go-hclog v1.5.0 // indirect github.com/hashicorp/go-immutable-radix v1.3.1 // indirect github.com/hashicorp/go-metrics v0.5.3 // indirect @@ -167,6 +166,7 @@ require ( github.com/hashicorp/go-safetemp v1.0.0 // indirect github.com/hashicorp/go-version v1.6.0 // indirect github.com/hashicorp/golang-lru v1.0.2 // indirect + github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect github.com/hashicorp/yamux v0.1.1 // indirect github.com/hdevalence/ed25519consensus v0.1.0 // indirect github.com/huandu/skiplist v1.2.0 // indirect @@ -178,33 +178,34 @@ require ( github.com/kkdai/bstream v1.0.0 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect - github.com/lib/pq v1.10.7 // indirect - github.com/libp2p/go-buffer-pool v0.1.0 // indirect - github.com/linxGnu/grocksdb v1.8.14 // indirect + github.com/lib/pq v1.10.9 // indirect + github.com/linxGnu/grocksdb v1.9.3 // indirect github.com/manifoldco/promptui v0.9.0 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect - github.com/minio/highwayhash v1.0.2 // indirect + github.com/minio/highwayhash v1.0.3 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/mitchellh/go-testing-interface v1.14.1 // indirect github.com/moby/term v0.0.0-20221205130635-1aeaba878587 // indirect github.com/mtibben/percent v0.2.1 // indirect + github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/oasisprotocol/curve25519-voi v0.0.0-20230904125328-1f23a7beb09a // indirect github.com/oklog/run v1.1.0 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect github.com/opencontainers/image-spec v1.1.0-rc2 // indirect - github.com/opencontainers/runc v1.1.5 // indirect - github.com/petermattis/goid v0.0.0-20231207134359-e60b3f734c67 // indirect + github.com/opencontainers/runc v1.1.12 // indirect + github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/prometheus/client_model v0.6.1 // indirect - github.com/prometheus/common v0.52.2 // indirect - github.com/prometheus/procfs v0.13.0 // indirect + github.com/prometheus/common v0.60.1 // indirect + github.com/prometheus/procfs v0.15.1 // indirect github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect github.com/rogpeppe/go-internal v1.12.0 // indirect - github.com/rs/cors v1.8.3 // indirect - github.com/sasha-s/go-deadlock v0.3.1 // indirect - github.com/sirupsen/logrus v1.9.0 // indirect + github.com/rs/cors v1.11.1 // indirect + github.com/sasha-s/go-deadlock v0.3.5 // indirect + github.com/shamaton/msgpack/v2 v2.2.0 // indirect + github.com/sirupsen/logrus v1.9.3 // indirect github.com/stretchr/objx v0.5.2 // indirect github.com/supranational/blst v0.3.11 // indirect github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect @@ -216,26 +217,25 @@ require ( github.com/xeipuuv/gojsonschema v1.2.0 // indirect github.com/zondax/hid v0.9.2 // indirect github.com/zondax/ledger-go v0.14.3 // indirect - go.etcd.io/bbolt v1.3.8 // indirect + go.etcd.io/bbolt v1.4.0-alpha.0.0.20240404170359-43604f3112c5 // indirect go.opencensus.io v0.24.0 // indirect - go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.47.0 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.47.0 // indirect - go.opentelemetry.io/otel v1.22.0 // indirect - go.opentelemetry.io/otel/metric v1.22.0 // indirect - go.opentelemetry.io/otel/trace v1.22.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect + go.opentelemetry.io/otel v1.24.0 // indirect + go.opentelemetry.io/otel/metric v1.24.0 // indirect + go.opentelemetry.io/otel/trace v1.24.0 // indirect golang.org/x/mod v0.17.0 // indirect - golang.org/x/net v0.24.0 // indirect - golang.org/x/oauth2 v0.18.0 // indirect - golang.org/x/term v0.20.0 // indirect + golang.org/x/net v0.30.0 // indirect + golang.org/x/oauth2 v0.23.0 // indirect + golang.org/x/term v0.25.0 // indirect golang.org/x/time v0.5.0 // indirect - golang.org/x/tools v0.20.0 // indirect - google.golang.org/api v0.162.0 // indirect - google.golang.org/appengine v1.6.8 // indirect + golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d // indirect + google.golang.org/api v0.171.0 // indirect google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda // indirect - google.golang.org/grpc v1.63.2 // indirect - google.golang.org/protobuf v1.33.0 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142 // indirect + google.golang.org/grpc v1.67.1 // indirect + google.golang.org/protobuf v1.35.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gotest.tools/v3 v3.5.1 // indirect nhooyr.io/websocket v1.8.6 // indirect diff --git a/covenant-signer/go.sum b/covenant-signer/go.sum index 87817c1..130f129 100644 --- a/covenant-signer/go.sum +++ b/covenant-signer/go.sum @@ -30,8 +30,8 @@ cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w9 cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= -cloud.google.com/go v0.112.0 h1:tpFCD7hpHFlQ8yPwT3x+QeXqc2T6+n6T+hmABHfDUSM= -cloud.google.com/go v0.112.0/go.mod h1:3jEEVwZ/MHU4djK5t5RHuKOA/GbLddgTdVubX1qnPD4= +cloud.google.com/go v0.112.1 h1:uJSeirPke5UNZHIb4SxfZklVSiWWVqW4oXlETwZziwM= +cloud.google.com/go v0.112.1/go.mod h1:+Vbu+Y1UU+I1rjmzeMOb/8RfkKJK2Gyxi1X6jJCZLo4= cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= @@ -68,10 +68,8 @@ cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= -cloud.google.com/go/compute v1.24.0 h1:phWcR2eWzRJaL/kOiJwfFsPs4BaKq1j6vnpZrc1YlVg= -cloud.google.com/go/compute v1.24.0/go.mod h1:kw1/T+h/+tK2LJK0wiPPx1intgdAM3j/g3hFDlscY40= -cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= -cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= +cloud.google.com/go/compute/metadata v0.5.0 h1:Zr0eK8JbFv6+Wi4ilXAR8FJ3wyNdpxHKJNPos6LTZOY= +cloud.google.com/go/compute/metadata v0.5.0/go.mod h1:aHnloV2TPI38yx4s9+wAZhHykWvVCfu7hQbF+9CWoiY= cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= cloud.google.com/go/containeranalysis v0.6.0/go.mod h1:HEJoiEIu+lEXM+k7+qLCci0h33lX3ZqoYFdmPcoO7s4= cloud.google.com/go/datacatalog v1.3.0/go.mod h1:g9svFY6tuR+j+hrTw3J2dNcmI0dzmSiyOzm8kpLq0a0= @@ -171,8 +169,8 @@ cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9 cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc= cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s= -cloud.google.com/go/storage v1.36.0 h1:P0mOkAcaJxhCTvAkMhxMfrTKiNcub4YmmPBtlhAyTr8= -cloud.google.com/go/storage v1.36.0/go.mod h1:M6M/3V/D3KpzMTJyPOR/HU6n2Si5QdaXYEsng2xgOs8= +cloud.google.com/go/storage v1.38.0 h1:Az68ZRGlnNTpIBbLjSMIV2BDcwwXYlRlQzis0llkpJg= +cloud.google.com/go/storage v1.38.0/go.mod h1:tlUADB0mAb9BgYls9lq+8MGkfzOXuLrnHXlpHmvFJoY= cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw= cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g= cloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU= @@ -184,36 +182,36 @@ cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xX cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg= cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0= cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= -cosmossdk.io/api v0.7.4 h1:sPo8wKwCty1lht8kgL3J7YL1voJywP3YWuA5JKkBz30= -cosmossdk.io/api v0.7.4/go.mod h1:IcxpYS5fMemZGqyYtErK7OqvdM0C8kdW3dq8Q/XIG38= +cosmossdk.io/api v0.7.5 h1:eMPTReoNmGUm8DeiQL9DyM8sYDjEhWzL1+nLbI9DqtQ= +cosmossdk.io/api v0.7.5/go.mod h1:IcxpYS5fMemZGqyYtErK7OqvdM0C8kdW3dq8Q/XIG38= cosmossdk.io/client/v2 v2.0.0-beta.1 h1:XkHh1lhrLYIT9zKl7cIOXUXg2hdhtjTPBUfqERNA1/Q= cosmossdk.io/client/v2 v2.0.0-beta.1/go.mod h1:JEUSu9moNZQ4kU3ir1DKD5eU4bllmAexrGWjmb9k8qU= cosmossdk.io/collections v0.4.0 h1:PFmwj2W8szgpD5nOd8GWH6AbYNi1f2J6akWXJ7P5t9s= cosmossdk.io/collections v0.4.0/go.mod h1:oa5lUING2dP+gdDquow+QjlF45eL1t4TJDypgGd+tv0= -cosmossdk.io/core v0.11.0 h1:vtIafqUi+1ZNAE/oxLOQQ7Oek2n4S48SWLG8h/+wdbo= -cosmossdk.io/core v0.11.0/go.mod h1:LaTtayWBSoacF5xNzoF8tmLhehqlA9z1SWiPuNC6X1w= -cosmossdk.io/depinject v1.0.0-alpha.4 h1:PLNp8ZYAMPTUKyG9IK2hsbciDWqna2z1Wsl98okJopc= -cosmossdk.io/depinject v1.0.0-alpha.4/go.mod h1:HeDk7IkR5ckZ3lMGs/o91AVUc7E596vMaOmslGFM3yU= +cosmossdk.io/core v0.11.1 h1:h9WfBey7NAiFfIcUhDVNS503I2P2HdZLebJlUIs8LPA= +cosmossdk.io/core v0.11.1/go.mod h1:OJzxcdC+RPrgGF8NJZR2uoQr56tc7gfBKhiKeDO7hH0= +cosmossdk.io/depinject v1.0.0 h1:dQaTu6+O6askNXO06+jyeUAnF2/ssKwrrszP9t5q050= +cosmossdk.io/depinject v1.0.0/go.mod h1:zxK/h3HgHoA/eJVtiSsoaRaRA2D5U4cJ5thIG4ssbB8= cosmossdk.io/errors v1.0.1 h1:bzu+Kcr0kS/1DuPBtUFdWjzLqyUuCiyHjyJB6srBV/0= cosmossdk.io/errors v1.0.1/go.mod h1:MeelVSZThMi4bEakzhhhE/CKqVv3nOJDA25bIqRDu/U= -cosmossdk.io/log v1.3.1 h1:UZx8nWIkfbbNEWusZqzAx3ZGvu54TZacWib3EzUYmGI= -cosmossdk.io/log v1.3.1/go.mod h1:2/dIomt8mKdk6vl3OWJcPk2be3pGOS8OQaLUM/3/tCM= -cosmossdk.io/math v1.3.0 h1:RC+jryuKeytIiictDslBP9i1fhkVm6ZDmZEoNP316zE= -cosmossdk.io/math v1.3.0/go.mod h1:vnRTxewy+M7BtXBNFybkuhSH4WfedVAAnERHgVFhp3k= +cosmossdk.io/log v1.4.1 h1:wKdjfDRbDyZRuWa8M+9nuvpVYxrEOwbD/CA8hvhU8QM= +cosmossdk.io/log v1.4.1/go.mod h1:k08v0Pyq+gCP6phvdI6RCGhLf/r425UT6Rk/m+o74rU= +cosmossdk.io/math v1.4.0 h1:XbgExXFnXmF/CccPPEto40gOO7FpWu9yWNAZPN3nkNQ= +cosmossdk.io/math v1.4.0/go.mod h1:O5PkD4apz2jZs4zqFdTr16e1dcaQCc5z6lkEnrrppuk= cosmossdk.io/store v1.1.0 h1:LnKwgYMc9BInn9PhpTFEQVbL9UK475G2H911CGGnWHk= cosmossdk.io/store v1.1.0/go.mod h1:oZfW/4Fc/zYqu3JmQcQdUJ3fqu5vnYTn3LZFFy8P8ng= -cosmossdk.io/x/circuit v0.1.0 h1:IAej8aRYeuOMritczqTlljbUVHq1E85CpBqaCTwYgXs= -cosmossdk.io/x/circuit v0.1.0/go.mod h1:YDzblVE8+E+urPYQq5kq5foRY/IzhXovSYXb4nwd39w= -cosmossdk.io/x/evidence v0.1.0 h1:J6OEyDl1rbykksdGynzPKG5R/zm6TacwW2fbLTW4nCk= -cosmossdk.io/x/evidence v0.1.0/go.mod h1:hTaiiXsoiJ3InMz1uptgF0BnGqROllAN8mwisOMMsfw= -cosmossdk.io/x/feegrant v0.1.0 h1:c7s3oAq/8/UO0EiN1H5BIjwVntujVTkYs35YPvvrdQk= -cosmossdk.io/x/feegrant v0.1.0/go.mod h1:4r+FsViJRpcZif/yhTn+E0E6OFfg4n0Lx+6cCtnZElU= -cosmossdk.io/x/nft v0.1.0 h1:VhcsFiEK33ODN27kxKLa0r/CeFd8laBfbDBwYqCyYCM= -cosmossdk.io/x/nft v0.1.0/go.mod h1:ec4j4QAO4mJZ+45jeYRnW7awLHby1JZANqe1hNZ4S3g= -cosmossdk.io/x/tx v0.13.3 h1:Ha4mNaHmxBc6RMun9aKuqul8yHiL78EKJQ8g23Zf73g= -cosmossdk.io/x/tx v0.13.3/go.mod h1:I8xaHv0rhUdIvIdptKIqzYy27+n2+zBVaxO6fscFhys= -cosmossdk.io/x/upgrade v0.1.1 h1:aoPe2gNvH+Gwt/Pgq3dOxxQVU3j5P6Xf+DaUJTDZATc= -cosmossdk.io/x/upgrade v0.1.1/go.mod h1:MNLptLPcIFK9CWt7Ra//8WUZAxweyRDNcbs5nkOcQy0= +cosmossdk.io/x/circuit v0.1.1 h1:KPJCnLChWrxD4jLwUiuQaf5mFD/1m7Omyo7oooefBVQ= +cosmossdk.io/x/circuit v0.1.1/go.mod h1:B6f/urRuQH8gjt4eLIXfZJucrbreuYrKh5CSjaOxr+Q= +cosmossdk.io/x/evidence v0.1.1 h1:Ks+BLTa3uftFpElLTDp9L76t2b58htjVbSZ86aoK/E4= +cosmossdk.io/x/evidence v0.1.1/go.mod h1:OoDsWlbtuyqS70LY51aX8FBTvguQqvFrt78qL7UzeNc= +cosmossdk.io/x/feegrant v0.1.1 h1:EKFWOeo/pup0yF0svDisWWKAA9Zags6Zd0P3nRvVvw8= +cosmossdk.io/x/feegrant v0.1.1/go.mod h1:2GjVVxX6G2fta8LWj7pC/ytHjryA6MHAJroBWHFNiEQ= +cosmossdk.io/x/nft v0.1.1 h1:pslAVS8P5NkW080+LWOamInjDcq+v2GSCo+BjN9sxZ8= +cosmossdk.io/x/nft v0.1.1/go.mod h1:Kac6F6y2gsKvoxU+fy8uvxRTi4BIhLOor2zgCNQwVgY= +cosmossdk.io/x/tx v0.13.4 h1:Eg0PbJgeO0gM8p5wx6xa0fKR7hIV6+8lC56UrsvSo0Y= +cosmossdk.io/x/tx v0.13.4/go.mod h1:BkFqrnGGgW50Y6cwTy+JvgAhiffbGEKW6KF9ufcDpvk= +cosmossdk.io/x/upgrade v0.1.4 h1:/BWJim24QHoXde8Bc64/2BSEB6W4eTydq0X/2f8+g38= +cosmossdk.io/x/upgrade v0.1.4/go.mod h1:9v0Aj+fs97O+Ztw+tG3/tp5JSlrmT7IcFhAebQHmOPo= dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= @@ -227,10 +225,10 @@ github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25 github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/CosmWasm/wasmd v0.51.0 h1:3A2o20RrdF7P1D3Xb+R7A/pHbbHWsYCDXrHLa7S0SC8= -github.com/CosmWasm/wasmd v0.51.0/go.mod h1:7TSaj5HoolghujuVWeExqmcUKgpcYWEySGLSODbnnwY= -github.com/CosmWasm/wasmvm/v2 v2.0.1 h1:0YCQ7MKGNri7NFeRp75erPJXrqyCtH4gdc9jMstyMzk= -github.com/CosmWasm/wasmvm/v2 v2.0.1/go.mod h1:su9lg5qLr7adV95eOfzjZWkGiky8WNaNIHDr7Fpu7Ck= +github.com/CosmWasm/wasmd v0.53.0 h1:kdaoAi20bIb4VCsxw9pRaT2g5PpIp82Wqrr9DRVN9ao= +github.com/CosmWasm/wasmd v0.53.0/go.mod h1:FJl/aWjdpGof3usAMFQpDe07Rkx77PUzp0cygFMOvtw= +github.com/CosmWasm/wasmvm/v2 v2.1.3 h1:CSJTauZqkHyb9yic6JVYCjiGUgxI2MJV2QzfSu8m49c= +github.com/CosmWasm/wasmvm/v2 v2.1.3/go.mod h1:bMhLQL4Yp9CzJi9A83aR7VO9wockOsSlZbT4ztOl6bg= github.com/DataDog/datadog-go v3.2.0+incompatible h1:qSG2N4FghB1He/r2mFrWKCaL7dXCilEuNEeAn20fdD4= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/DataDog/zstd v1.5.5 h1:oWf5W7GtOLgp6bciQYDmhHHjdhYkALu6S/5Ni9ZgSvQ= @@ -240,14 +238,13 @@ github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migc github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= -github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= -github.com/adlio/schema v1.3.3 h1:oBJn8I02PyTB466pZO1UZEn1TV5XLlifBSyMrmHl/1I= -github.com/adlio/schema v1.3.3/go.mod h1:1EsRssiv9/Ce2CMzq5DoL7RiMshhuigQxrR4DMV9fHg= +github.com/adlio/schema v1.3.6 h1:k1/zc2jNfeiZBA5aFTRy37jlBIuCkXCm0XmvpzCKI9I= +github.com/adlio/schema v1.3.6/go.mod h1:qkxwLgPBd1FgLRHYVCmQT/rrBr3JH38J9LjmVzWNudg= github.com/aead/siphash v1.0.1 h1:FwHfE/T45KPKYuuSAKyyvE+oPWcaQ+CUmFW0bPlM+kg= github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= @@ -260,7 +257,6 @@ github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kd github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= -github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= @@ -270,8 +266,8 @@ github.com/aws/aws-sdk-go v1.44.122/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX github.com/aws/aws-sdk-go v1.44.312 h1:llrElfzeqG/YOLFFKjg1xNpZCFJ2xraIi3PqSuP+95k= github.com/aws/aws-sdk-go v1.44.312/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= -github.com/babylonlabs-io/babylon v0.12.1 h1:Qfmrq3pdDEZGq6DtMXxwiQjx0HD+t+U0cXQzsJfX15U= -github.com/babylonlabs-io/babylon v0.12.1/go.mod h1:ZOrTde9vs2xoqGTFw4xhupu2CMulnpywiuk0eh4kPOw= +github.com/babylonlabs-io/babylon v0.18.0 h1:phMY/GiR9N5MpD3XCmvyPpZkc1I3kTM9yX+Cf0h3OnU= +github.com/babylonlabs-io/babylon v0.18.0/go.mod h1:sT+KG2U+M0tDMNZZ2L5CwlXX0OpagGEs56BiWXqaZFw= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= @@ -297,8 +293,9 @@ github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= github.com/btcsuite/btcd/btcutil v1.0.0/go.mod h1:Uoxwv0pqYWhD//tfTiipkxNfdhG9UrLwaeswfjfdF0A= github.com/btcsuite/btcd/btcutil v1.1.0/go.mod h1:5OapHB7A2hBBWLm48mmw4MOHNJCcUBTwmWH/0Jn8VHE= -github.com/btcsuite/btcd/btcutil v1.1.5 h1:+wER79R5670vs/ZusMTF1yTcRYE5GUsFbdjdisflzM8= github.com/btcsuite/btcd/btcutil v1.1.5/go.mod h1:PSZZ4UitpLBWzxGd5VGOrLnmOjtPP/a6HaFo12zMs00= +github.com/btcsuite/btcd/btcutil v1.1.6 h1:zFL2+c3Lb9gEgqKNzowKUPQNb8jV7v5Oaodi/AYFd6c= +github.com/btcsuite/btcd/btcutil v1.1.6/go.mod h1:9dFymx8HpuLqBnsPELrImQeTQfKBQqzqGbbV3jK55aE= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.0/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0 h1:59Kx4K6lzOW5w6nFlA0v5+lk/6sjybR934QNHSJZPTQ= @@ -322,12 +319,10 @@ github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInq github.com/cenkalti/backoff/v4 v4.2.0 h1:HN5dHm3WBOgndBH6E8V0q2jIYIR3s9yglV8k/+MN3u4= github.com/cenkalti/backoff/v4 v4.2.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/checkpoint-restore/go-criu/v5 v5.3.0/go.mod h1:E/eQpaFtUKGOOSEBZgmKAcn+zUUwWxqcaKZlF54wK8E= github.com/cheggaaa/pb v1.0.27/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/logex v1.2.1 h1:XHDu3E6q+gdHgsdTPH6ImJMIp436vR6MPtH8gP05QzM= @@ -338,7 +333,6 @@ github.com/chzyer/readline v1.5.1/go.mod h1:Eh+b79XXUwfKfcPLepksvw2tcLE/Ct21YObk github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/chzyer/test v1.0.0 h1:p3BQDXSxOhOG0P9z6/hGnII4LGiEPOYBhs8asl/fC04= github.com/chzyer/test v1.0.0/go.mod h1:2JlltgoNkt4TW/z9V/IzDdFaMTM2JPIi26O1pF38GC8= -github.com/cilium/ebpf v0.7.0/go.mod h1:/oI2+1shJiTGAMgl6/RgJr36Eo1jzrRcAWbcXO2usCA= github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= @@ -352,36 +346,32 @@ github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20231128003011-0fa0005c9caa h1:jQCWAUqqlij9Pgj2i/PB79y4KOPYVyFYdROxgaCwdTQ= -github.com/cncf/xds/go v0.0.0-20231128003011-0fa0005c9caa/go.mod h1:x/1Gn8zydmfq8dk6e9PdstVsDgu9RuyIIJqAaF//0IM= github.com/cockroachdb/apd/v2 v2.0.2 h1:weh8u7Cneje73dDh+2tEVLUvyBc89iwepWCD8b8034E= github.com/cockroachdb/apd/v2 v2.0.2/go.mod h1:DDxRlzC2lo3/vSlmSoS7JkqbbrARPuFOGr0B9pvN3Gw= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f h1:otljaYPt5hWxV3MUfO5dFPFiOXg9CyG5/kCfayTqsJ4= github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= -github.com/cockroachdb/errors v1.11.1 h1:xSEW75zKaKCWzR3OfxXUxgrk/NtT4G1MiOv5lWZazG8= -github.com/cockroachdb/errors v1.11.1/go.mod h1:8MUxA3Gi6b25tYlFEBGLf+D8aISL+M4MIpiWMSNRfxw= +github.com/cockroachdb/errors v1.11.3 h1:5bA+k2Y6r+oz/6Z/RFlNeVCesGARKuC6YymtcDrbC/I= +github.com/cockroachdb/errors v1.11.3/go.mod h1:m4UIW4CDjx+R5cybPsNrRbreomiFqt8o1h1wUVazSd8= +github.com/cockroachdb/fifo v0.0.0-20240606204812-0bbfbd93a7ce h1:giXvy4KSc/6g/esnpM7Geqxka4WSqI1SZc7sMJFd3y4= +github.com/cockroachdb/fifo v0.0.0-20240606204812-0bbfbd93a7ce/go.mod h1:9/y3cnZ5GKakj/H4y9r9GTjCvAFta7KLgSHPJJYc52M= github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= -github.com/cockroachdb/pebble v1.1.0 h1:pcFh8CdCIt2kmEpK0OIatq67Ln9uGDYY3d5XnE0LJG4= -github.com/cockroachdb/pebble v1.1.0/go.mod h1:sEHm5NOXxyiAoKWhoFxT8xMgd/f3RA6qUqQ1BXKrh2E= +github.com/cockroachdb/pebble v1.1.2 h1:CUh2IPtR4swHlEj48Rhfzw6l/d0qA31fItcIszQVIsA= +github.com/cockroachdb/pebble v1.1.2/go.mod h1:4exszw1r40423ZsmkG/09AFEG83I0uDgfujJdbL6kYU= github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwPJ30= github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= -github.com/cometbft/cometbft v0.38.7 h1:ULhIOJ9+LgSy6nLekhq9ae3juX3NnQUMMPyVdhZV6Hk= -github.com/cometbft/cometbft v0.38.7/go.mod h1:HIyf811dFMI73IE0F7RrnY/Fr+d1+HuJAgtkEpQjCMY= -github.com/cometbft/cometbft-db v0.9.1 h1:MIhVX5ja5bXNHF8EYrThkG9F7r9kSfv8BX4LWaxWJ4M= -github.com/cometbft/cometbft-db v0.9.1/go.mod h1:iliyWaoV0mRwBJoizElCwwRA9Tf7jZJOURcRZF9m60U= -github.com/containerd/console v1.0.3/go.mod h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkXar0TQ1gf3U= +github.com/cometbft/cometbft v0.38.15 h1:5veFd8k1uXM27PBg9sMO3hAfRJ3vbh4OmmLf6cVrqXg= +github.com/cometbft/cometbft v0.38.15/go.mod h1:+wh6ap6xctVG+JOHwbl8pPKZ0GeqdPYqISu7F4b43cQ= +github.com/cometbft/cometbft-db v0.15.0 h1:VLtsRt8udD4jHCyjvrsTBpgz83qne5hnL245AcPJVRk= +github.com/cometbft/cometbft-db v0.15.0/go.mod h1:EBrFs1GDRiTqrWXYi4v90Awf/gcdD5ExzdPbg4X8+mk= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= -github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cosmos/btcutil v1.0.5 h1:t+ZFcX77LpKtDBhjucvnOH8C2l2ioGsBNEQ3jef8xFk= @@ -390,35 +380,35 @@ github.com/cosmos/cosmos-db v1.0.2 h1:hwMjozuY1OlJs/uh6vddqnk9j7VamLv+0DBlbEXbAK github.com/cosmos/cosmos-db v1.0.2/go.mod h1:Z8IXcFJ9PqKK6BIsVOB3QXtkKoqUOp1vRvPT39kOXEA= github.com/cosmos/cosmos-proto v1.0.0-beta.5 h1:eNcayDLpip+zVLRLYafhzLvQlSmyab+RC5W7ZfmxJLA= github.com/cosmos/cosmos-proto v1.0.0-beta.5/go.mod h1:hQGLpiIUloJBMdQMMWb/4wRApmI9hjHH05nefC0Ojec= -github.com/cosmos/cosmos-sdk v0.50.6 h1:efR3MsvMHX5sxS3be+hOobGk87IzlZbSpsI2x/Vw3hk= -github.com/cosmos/cosmos-sdk v0.50.6/go.mod h1:lVkRY6cdMJ0fG3gp8y4hFrsKZqF4z7y0M2UXFb9Yt40= +github.com/cosmos/cosmos-sdk v0.50.9 h1:gt2usjz0H0qW6KwAxWw7ZJ3XU8uDwmhN+hYG3nTLeSg= +github.com/cosmos/cosmos-sdk v0.50.9/go.mod h1:TMH6wpoYBcg7Cp5BEg8fneLr+8XloNQkf2MRNF9V6JE= github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= github.com/cosmos/gogogateway v1.2.0 h1:Ae/OivNhp8DqBi/sh2A8a1D0y638GpL3tkmLQAiKxTE= github.com/cosmos/gogogateway v1.2.0/go.mod h1:iQpLkGWxYcnCdz5iAdLcRBSw3h7NXeOkZ4GUkT+tbFI= github.com/cosmos/gogoproto v1.4.2/go.mod h1:cLxOsn1ljAHSV527CHOtaIP91kK6cCrZETRBrkzItWU= -github.com/cosmos/gogoproto v1.4.12 h1:vB6Lbe/rtnYGjQuFxkPiPYiCybqFT8QvLipDZP8JpFE= -github.com/cosmos/gogoproto v1.4.12/go.mod h1:LnZob1bXRdUoqMMtwYlcR3wjiElmlC+FkjaZRv1/eLY= -github.com/cosmos/iavl v1.1.2 h1:zL9FK7C4L/P4IF1Dm5fIwz0WXCnn7Bp1M2FxH0ayM7Y= -github.com/cosmos/iavl v1.1.2/go.mod h1:jLeUvm6bGT1YutCaL2fIar/8vGUE8cPZvh/gXEWDaDM= -github.com/cosmos/ibc-go/modules/capability v1.0.0 h1:r/l++byFtn7jHYa09zlAdSeevo8ci1mVZNO9+V0xsLE= -github.com/cosmos/ibc-go/modules/capability v1.0.0/go.mod h1:D81ZxzjZAe0ZO5ambnvn1qedsFQ8lOwtqicG6liLBco= +github.com/cosmos/gogoproto v1.7.0 h1:79USr0oyXAbxg3rspGh/m4SWNyoz/GLaAh0QlCe2fro= +github.com/cosmos/gogoproto v1.7.0/go.mod h1:yWChEv5IUEYURQasfyBW5ffkMHR/90hiHgbNgrtp4j0= +github.com/cosmos/iavl v1.2.0 h1:kVxTmjTh4k0Dh1VNL046v6BXqKziqMDzxo93oh3kOfM= +github.com/cosmos/iavl v1.2.0/go.mod h1:HidWWLVAtODJqFD6Hbne2Y0q3SdxByJepHUOeoH4LiI= +github.com/cosmos/ibc-go/modules/apps/callbacks v0.2.1-0.20231113120333-342c00b0f8bd h1:Lx+/5dZ/nN6qPXP2Ofog6u1fmlkCFA1ElcOconnofEM= +github.com/cosmos/ibc-go/modules/apps/callbacks v0.2.1-0.20231113120333-342c00b0f8bd/go.mod h1:JWfpWVKJKiKtd53/KbRoKfxWl8FsT2GPcNezTOk0o5Q= +github.com/cosmos/ibc-go/modules/capability v1.0.1 h1:ibwhrpJ3SftEEZRxCRkH0fQZ9svjthrX2+oXdZvzgGI= +github.com/cosmos/ibc-go/modules/capability v1.0.1/go.mod h1:rquyOV262nGJplkumH+/LeYs04P3eV8oB7ZM4Ygqk4E= github.com/cosmos/ibc-go/modules/light-clients/08-wasm v0.0.0-20240429153234-e1e6da7e4ead h1:QB50+AmrEVqFr2hzvIxMkICziWQ/uuebze0vNYKMnBg= github.com/cosmos/ibc-go/modules/light-clients/08-wasm v0.0.0-20240429153234-e1e6da7e4ead/go.mod h1:AJeroAXnPKeFpD1AfEfjYBHGEWt5gBfzUjgs4SYn2ZY= -github.com/cosmos/ibc-go/v8 v8.3.0 h1:fdW2S7NjZYFhSwmCaFjjyDv80kI1ePOJDQmco4qrnD0= -github.com/cosmos/ibc-go/v8 v8.3.0/go.mod h1:izwHZvn9lKrBn8xWj0aXWut6HKcwHMPD3uyuvOJoPSA= +github.com/cosmos/ibc-go/v8 v8.4.0 h1:K2PfX0AZ+1XKZytHGEMuSjQXG/MZshPb83RSTQt2+cE= +github.com/cosmos/ibc-go/v8 v8.4.0/go.mod h1:zh6x1osR0hNvEcFrC/lhGD08sMfQmr9wHVvZ/mRWMCs= github.com/cosmos/ics23/go v0.10.0 h1:iXqLLgp2Lp+EdpIuwXTYIQU+AiHj9mOC2X9ab++bZDM= github.com/cosmos/ics23/go v0.10.0/go.mod h1:ZfJSmng/TBNTBkFemHHHj5YY7VAU/MBU980F4VU1NG0= github.com/cosmos/ledger-cosmos-go v0.13.3 h1:7ehuBGuyIytsXbd4MP43mLeoN2LTOEnk5nvue4rK+yM= github.com/cosmos/ledger-cosmos-go v0.13.3/go.mod h1:HENcEP+VtahZFw38HZ3+LS3Iv5XV6svsnkk9vdJtLr8= -github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= -github.com/cyphar/filepath-securejoin v0.2.3/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= github.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0= github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0= github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -430,18 +420,16 @@ github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn github.com/decred/dcrd/crypto/blake256 v1.0.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5ilcvdfma9wOH6Y= github.com/decred/dcrd/crypto/blake256 v1.0.1/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeCxkaw7y45JueMRL4DIyJDKs= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 h1:8UrgZ3GkP4i/CLijOJx79Yu+etlyjdBU4sfcs2WYQMs= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 h1:rpfIENRNNilwHwZeG5+P150SMrnNEcHYvcCuK6dPZSg= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0= github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f h1:U5y3Y5UE0w7amNe7Z5G/twsBW0KEalRQXZzf8ufSh9I= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f/go.mod h1:xH/i4TFMt8koVQZ6WFms69WAsDWr2XsYL3Hkl7jkoLE= -github.com/dgraph-io/badger/v2 v2.2007.4 h1:TRWBQg8UrlUhaFdco01nO2uXwzKS7zd+HVdwV/GHc4o= -github.com/dgraph-io/badger/v2 v2.2007.4/go.mod h1:vSw/ax2qojzbN6eXHIx6KPKtCSHJN/Uz0X0VPruTIhk= -github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= -github.com/dgraph-io/ristretto v0.1.1 h1:6CWw5tJNgpegArSHpNHJKldNeq03FQCwYvfMVWajOK8= -github.com/dgraph-io/ristretto v0.1.1/go.mod h1:S1GPSBCYCIhmVNfcth17y2zZtQT6wzkzgwUve0VDWWA= +github.com/dgraph-io/badger/v4 v4.3.0 h1:lcsCE1/1qrRhqP+zYx6xDZb8n7U+QlwNicpc676Ub40= +github.com/dgraph-io/badger/v4 v4.3.0/go.mod h1:Sc0T595g8zqAQRDf44n+z3wG4BOqLwceaFntt8KPxUM= +github.com/dgraph-io/ristretto v0.1.2-0.20240116140435-c67e07994f91 h1:Pux6+xANi0I7RRo5E1gflI4EZ2yx3BGZ75JkAIvGEOA= +github.com/dgraph-io/ristretto v0.1.2-0.20240116140435-c67e07994f91/go.mod h1:swkazRqnUf1N62d0Nutz7KIj2UKqsm/H8tD0nBJAXqM= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/distribution/reference v0.5.0 h1:/FUIFXtfc/x2gpa5/VGfiGLuOIdYa1t65IKK2OFGvA0= @@ -452,11 +440,9 @@ github.com/docker/docker v25.0.6+incompatible h1:5cPwbwriIcsua2REJe8HqQV+6WlWc1b github.com/docker/docker v25.0.6+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= -github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/dvsekhvalnov/jose2go v1.6.0 h1:Y9gnSnP4qEI0+/uQkHvFXeD2PLPJeXEL+ySMEA2EjTY= @@ -478,8 +464,6 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.m github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/envoyproxy/protoc-gen-validate v1.0.4 h1:gVPz/FMfvh57HdSJQyvBtF00j8JU4zdyUgIUNhlgg0A= -github.com/envoyproxy/protoc-gen-validate v1.0.4/go.mod h1:qys6tmnRsYrQqIhm2bvKZH4Blx/1gTIZ2UKVY1M+Yew= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs= @@ -490,7 +474,6 @@ github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8 github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= -github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= @@ -516,8 +499,8 @@ github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2 github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= -github.com/go-kit/kit v0.12.0 h1:e4o3o3IsBfAKQh5Qbbiqyfu97Ku7jrO/JbohvztANh4= -github.com/go-kit/kit v0.12.0/go.mod h1:lHd+EkCZPIwYItmGDDRdhinkzX2A1sj+M9biaEaizzs= +github.com/go-kit/kit v0.13.0 h1:OoneCcHKHQ03LfBpoQCUfCluwd2Vt3ohz+kvbJneZAU= +github.com/go-kit/kit v0.13.0/go.mod h1:phqEHMMUbyrCFCTgH48JueqrM3md2HcAZ8N3XE4FKDg= github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU= github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= @@ -559,7 +542,6 @@ github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MG github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/godbus/dbus/v5 v5.0.6/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= github.com/gogo/googleapis v1.4.1-0.20201022092350-68b0159b7869/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= github.com/gogo/googleapis v1.4.1 h1:1Yx4Myt7BxzvUr5ldGSbwYiZG6t9wGBZ+8/fX3Wvtq0= @@ -571,8 +553,6 @@ github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXP github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/glog v1.2.0 h1:uCdmnmatrKCgMBlM4rMuJZWOkPDqdbZPnrMXDY4gI68= -github.com/golang/glog v1.2.0/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -616,8 +596,10 @@ github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb h1:PBC98N2aIaM3XXi github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU= -github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= +github.com/google/btree v1.1.3 h1:CVpQJjYgC4VbzxeGVHfvZrv1ctoYCAI8vbl07Fcxlyg= +github.com/google/btree v1.1.3/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= +github.com/google/flatbuffers v1.12.1 h1:MVlul7pQNoDzWRLTw5imwYsl+usrS1TXG2H4jg6ImGw= +github.com/google/flatbuffers v1.12.1/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -687,8 +669,8 @@ github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99 github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo= github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY= -github.com/googleapis/gax-go/v2 v2.12.0 h1:A+gCJKdRfqXkr+BIRGtZLibNXf0m1f9E4HG56etFpas= -github.com/googleapis/gax-go/v2 v2.12.0/go.mod h1:y+aIqrI5eb1YGMVJfuV3185Ts/D7qKpsEkdD5+I6QGU= +github.com/googleapis/gax-go/v2 v2.12.3 h1:5/zPPDvw8Q1SuXjrqrZslrqT7dL/uJT2CQii/cLCKqA= +github.com/googleapis/gax-go/v2 v2.12.3/go.mod h1:AKloxT6GtNbaLm8QTNSidHUVsHYcBHwWRvkNFJUQcS4= github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= @@ -701,8 +683,8 @@ github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWS github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gorilla/websocket v1.5.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/QY= -github.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY= +github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= +github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI= github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 h1:UH//fgunKIs4JdUbpDl1VZCDaL56wXCB/5+wF6uHfaI= @@ -720,8 +702,8 @@ github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtng github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= -github.com/hashicorp/go-getter v1.7.3 h1:bN2+Fw9XPFvOCjB0UOevFIMICZ7G2XSQHzfvLUyOM5E= -github.com/hashicorp/go-getter v1.7.3/go.mod h1:W7TalhMmbPmsSMdNjD0ZskARur/9GJ17cfHTRtXV744= +github.com/hashicorp/go-getter v1.7.5 h1:dT58k9hQ/vbxNMwoI5+xFYAJuv6152UNvdHokfI5wE4= +github.com/hashicorp/go-getter v1.7.5/go.mod h1:W7TalhMmbPmsSMdNjD0ZskARur/9GJ17cfHTRtXV744= github.com/hashicorp/go-hclog v1.5.0 h1:bI2ocEMgcVlz55Oj1xZNBsVi900c7II+fWDyV9o+13c= github.com/hashicorp/go-hclog v1.5.0/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= @@ -751,6 +733,8 @@ github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c= github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= +github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= @@ -814,34 +798,31 @@ github.com/kkdai/bstream v1.0.0 h1:Se5gHwgp2VT2uHfDrkbbgbgEvV9cimLELwrPJctSjg8= github.com/kkdai/bstream v1.0.0/go.mod h1:FDnDOHt5Yx4p3FaHcioFT0QjDOtgUpvjeZqAs+NVZZA= github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= -github.com/klauspost/compress v1.17.7 h1:ehO88t2UGzQK66LMdE8tibEd1ErmzZjNEqWkjLAKQQg= -github.com/klauspost/compress v1.17.7/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= +github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= +github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= +github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= -github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw= -github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8= -github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg= +github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= +github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= -github.com/linxGnu/grocksdb v1.8.14 h1:HTgyYalNwBSG/1qCQUIott44wU5b2Y9Kr3z7SK5OfGQ= -github.com/linxGnu/grocksdb v1.8.14/go.mod h1:QYiYypR2d4v63Wj1adOOfzglnoII0gLj3PNh4fZkcFA= +github.com/linxGnu/grocksdb v1.9.3 h1:s1cbPcOd0cU2SKXRG1nEqCOWYAELQjdqg3RVI2MH9ik= +github.com/linxGnu/grocksdb v1.9.3/go.mod h1:QYiYypR2d4v63Wj1adOOfzglnoII0gLj3PNh4fZkcFA= github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= -github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= github.com/manifoldco/promptui v0.9.0 h1:3V4HzJk1TtXW1MTZMP7mdlwbBpIinw3HztaIlYthEiA= @@ -863,8 +844,8 @@ github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzp github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g= -github.com/minio/highwayhash v1.0.2/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= +github.com/minio/highwayhash v1.0.3 h1:kbnuUMoHYyVl7szWjSxJnxw11k2U709jqFPPmIUyD6Q= +github.com/minio/highwayhash v1.0.3/go.mod h1:GGYsuwP/fPD6Y9hMiXuapVvlIUEhFhMTh0rxU3ik1LQ= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= @@ -878,7 +859,6 @@ github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:F github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/moby/sys/mountinfo v0.5.0/go.mod h1:3bMD3Rg+zkqx8MRYPi7Pyb0Ie97QEBmdxbhnCLlSvSU= github.com/moby/term v0.0.0-20221205130635-1aeaba878587 h1:HfkjXDfhgVaN5rmueG8cL8KKeFNecRCXFhaJ2qZ5SKA= github.com/moby/term v0.0.0-20221205130635-1aeaba878587/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -888,9 +868,10 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= -github.com/mrunalp/fileutils v0.5.0/go.mod h1:M1WthSahJixYnrXQl/DFQuteStB1weuxD2QJNHXfbSQ= github.com/mtibben/percent v0.2.1 h1:5gssi8Nqo8QU/r2pynCm+hBQHpkB/uNK7BJCFogWdzs= github.com/mtibben/percent v0.2.1/go.mod h1:KG9uO+SZkUp+VkRHsCdYQV3XSZrrSpR3O9ibNBTZrns= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= @@ -934,10 +915,8 @@ github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8 github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.1.0-rc2 h1:2zx/Stx4Wc5pIPDvIxHXvXtQFW/7XWJGmnM7r3wg034= github.com/opencontainers/image-spec v1.1.0-rc2/go.mod h1:3OVijpioIKYWTqjiG0zfF6wvoJ4fAXGbjdZuI2NgsRQ= -github.com/opencontainers/runc v1.1.5 h1:L44KXEpKmfWDcS02aeGm8QNTFXTo2D+8MYGDIJ/GDEs= -github.com/opencontainers/runc v1.1.5/go.mod h1:1J5XiS+vdZ3wCyZybsuxXZWGrgSr8fFJHLXuG2PsnNg= -github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/selinux v1.10.0/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI= +github.com/opencontainers/runc v1.1.12 h1:BOIssBaW1La0/qbNZHXOOa71dZfZEQOzW7dqQf3phss= +github.com/opencontainers/runc v1.1.12/go.mod h1:S+lQwSfncpBha7XTy/5lBwWgm5+y5Ma/O44Ekby9FK8= github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= @@ -955,13 +934,11 @@ github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FI github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= -github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/pelletier/go-toml/v2 v2.1.0 h1:FnwAJ4oYMvbT/34k9zzHuZNrhlz48GB3/s6at6/MHO4= -github.com/pelletier/go-toml/v2 v2.1.0/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc= +github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM= +github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs= github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= -github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= -github.com/petermattis/goid v0.0.0-20231207134359-e60b3f734c67 h1:jik8PHtAIsPlCRJjJzl4udgEf7hawInF9texMeO2jrU= -github.com/petermattis/goid v0.0.0-20231207134359-e60b3f734c67/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= +github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7 h1:Dx7Ovyv/SFnMFw3fD4oEoeorXc6saIiQ23LrGLth0Gw= +github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= @@ -982,8 +959,8 @@ github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5Fsn github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= -github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU= -github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k= +github.com/prometheus/client_golang v1.20.5 h1:cxppBPuYhUnsO6yo/aoRol4L7q7UFfdm+bR9r+8l63Y= +github.com/prometheus/client_golang v1.20.5/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= @@ -998,16 +975,16 @@ github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt2 github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= -github.com/prometheus/common v0.52.2 h1:LW8Vk7BccEdONfrJBDffQGRtpSzi5CQaRZGtboOO2ck= -github.com/prometheus/common v0.52.2/go.mod h1:lrWtQx+iDfn2mbH5GUzlH9TSHyfZpHkSiG1W7y3sF2Q= +github.com/prometheus/common v0.60.1 h1:FUas6GcOw66yB/73KC+BOZoFJmbo/1pojoILArPAaSc= +github.com/prometheus/common v0.60.1/go.mod h1:h0LYf1R1deLSKtD4Vdg8gy4RuOvENW2J/h19V5NADQw= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.3.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.13.0 h1:GqzLlQyfsPbaEHaQkO7tbDlriv/4o5Hudv6OXHGKX7o= -github.com/prometheus/procfs v0.13.0/go.mod h1:cd4PFCR54QLnGKPaKGA6l+cfuNXtht43ZKY6tow0Y1g= +github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= +github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= @@ -1018,12 +995,11 @@ github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/f github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= -github.com/rs/cors v1.8.3 h1:O+qNyWn7Z+F9M0ILBHgMVPuB1xTOucVd5gtaYyXBpRo= -github.com/rs/cors v1.8.3/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= +github.com/rs/cors v1.11.1 h1:eU3gRzXLRK57F5rKMGMZURNdIG4EoAmX8k94r9wXWHA= +github.com/rs/cors v1.11.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= -github.com/rs/zerolog v1.32.0 h1:keLypqrlIjaFsbmJOBdB/qvyF8KEtCWHwobLp5l/mQ0= -github.com/rs/zerolog v1.32.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= -github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= +github.com/rs/zerolog v1.33.0 h1:1cU2KZkvPxNyfgEmhHAz/1A9Bz+llsdYzklWFzgp0r8= +github.com/rs/zerolog v1.33.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= @@ -1032,18 +1008,18 @@ github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgY github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE= github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ= github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= -github.com/sasha-s/go-deadlock v0.3.1 h1:sqv7fDNShgjcaxkO0JNcOAlr8B9+cV5Ey/OB71efZx0= -github.com/sasha-s/go-deadlock v0.3.1/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= +github.com/sasha-s/go-deadlock v0.3.5 h1:tNCOEEDG6tBqrNDOX35j/7hL5FcFViG6awUGROb2NsU= +github.com/sasha-s/go-deadlock v0.3.5/go.mod h1:bugP6EGbdGYObIlx7pUZtWqlvo8k9H6vCBBsiChJQ5U= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/seccomp/libseccomp-golang v0.9.2-0.20220502022130-f33da4d89646/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg= +github.com/shamaton/msgpack/v2 v2.2.0 h1:IP1m01pHwCrMa6ZccP9B3bqxEMKMSmMVAVKk54g3L/Y= +github.com/shamaton/msgpack/v2 v2.2.0/go.mod h1:6khjYnkx73f7VQU7wjcFS9DFjs+59naVWJv1TB7qdOI= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= -github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= +github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= @@ -1051,26 +1027,18 @@ github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJ github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= -github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8= github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY= -github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0= -github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= +github.com/spf13/cast v1.7.0 h1:ntdiHjuueXFgm5nzDRdOS4yfT43P5Fnud6DH50rz/7w= +github.com/spf13/cast v1.7.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= -github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0= -github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho= -github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM= +github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y= github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= -github.com/spf13/viper v1.18.2 h1:LUXCnvUvSM6FXAsj6nnfc8Q2tp1dIgUfY9Kc8GsSOiQ= -github.com/spf13/viper v1.18.2/go.mod h1:EKmWIqdnk5lOcmR72yw6hS+8OPYcwD0jteitLMVB+yk= +github.com/spf13/viper v1.19.0 h1:RWq5SEjt8o25SROyN3z2OrDB9l7RPd3lwTWU8EcEdcI= +github.com/spf13/viper v1.19.0/go.mod h1:GQUN9bilAbhU/jgc1bKs99f/suXKeUMct8Adx5+Ntkg= github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= @@ -1097,7 +1065,6 @@ github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8 github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= github.com/supranational/blst v0.3.11 h1:LyU6FolezeWAhvQk0k6O/d49jqgO52MSDDfYgbeoEm4= github.com/supranational/blst v0.3.11/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= -github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d h1:vfofYNRScrDdvS342BElfbETmL1Aiz3i2t0zfRj16Hs= github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d/go.mod h1:RRCYJbIwD5jmqPI9XoAFR0OcDxqUctll6zUj/+B4S48= @@ -1109,7 +1076,6 @@ github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1 github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo= github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= -github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU= github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= @@ -1118,8 +1084,6 @@ github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8= github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE= -github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU= github.com/vulpine-io/io-test v1.0.0 h1:Ot8vMh+ssm1VWDAwJ3U4C5qG9aRnr5YfQFZPNZBAUGI= github.com/vulpine-io/io-test v1.0.0/go.mod h1:X1I+p5GCxVX9m4nFd1HBtr2bVX9v1ZE6x8w+Obt36AU= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= @@ -1130,7 +1094,6 @@ github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1: github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74= github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= -github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -1142,8 +1105,8 @@ github.com/zondax/hid v0.9.2/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWp github.com/zondax/ledger-go v0.14.3 h1:wEpJt2CEcBJ428md/5MgSLsXLBos98sBOyxNmCjfUCw= github.com/zondax/ledger-go v0.14.3/go.mod h1:IKKaoxupuB43g4NxeQmbLXv7T9AlQyie1UpHb342ycI= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.8 h1:xs88BrvEv273UsB79e0hcVrlUWmS0a8upikMFhSyAtA= -go.etcd.io/bbolt v1.3.8/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= +go.etcd.io/bbolt v1.4.0-alpha.0.0.20240404170359-43604f3112c5 h1:qxen9oVGzDdIRP6ejyAJc760RwW4SnVDiTYTzwnXuxo= +go.etcd.io/bbolt v1.4.0-alpha.0.0.20240404170359-43604f3112c5/go.mod h1:eW0HG9/oHQhvRCvb1/pIXW4cOvtDqeQK+XSi3TnwaXY= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= @@ -1156,18 +1119,18 @@ go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.47.0 h1:UNQQKPfTDe1J81ViolILjTKPr9WetKW6uei2hFgJmFs= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.47.0/go.mod h1:r9vWsPS/3AQItv3OSlEJ/E4mbrhUbbw18meOjArPtKQ= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.47.0 h1:sv9kVfal0MK0wBMCOGr+HeJm9v803BkJxGrk2au7j08= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.47.0/go.mod h1:SK2UL73Zy1quvRPonmOmRDiWk1KBV3LyIeeIxcEApWw= -go.opentelemetry.io/otel v1.22.0 h1:xS7Ku+7yTFvDfDraDIJVpw7XPyuHlB9MCiqqX5mcJ6Y= -go.opentelemetry.io/otel v1.22.0/go.mod h1:eoV4iAi3Ea8LkAEI9+GFT44O6T/D0GWAVFyZVCC6pMI= -go.opentelemetry.io/otel/metric v1.22.0 h1:lypMQnGyJYeuYPhOM/bgjbFM6WE44W1/T45er4d8Hhg= -go.opentelemetry.io/otel/metric v1.22.0/go.mod h1:evJGjVpZv0mQ5QBRJoBF64yMuOf4xCWdXjK8pzFvliY= -go.opentelemetry.io/otel/sdk v1.21.0 h1:FTt8qirL1EysG6sTQRZ5TokkU8d0ugCj8htOgThZXQ8= -go.opentelemetry.io/otel/sdk v1.21.0/go.mod h1:Nna6Yv7PWTdgJHVRD9hIYywQBRx7pbox6nwBnZIxl/E= -go.opentelemetry.io/otel/trace v1.22.0 h1:Hg6pPujv0XG9QaVbGOBVHunyuLcCC3jN7WEhPx83XD0= -go.opentelemetry.io/otel/trace v1.22.0/go.mod h1:RbbHXVqKES9QhzZq/fE5UnOSILqRt40a21sPw2He1xo= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 h1:4Pp6oUg3+e/6M4C0A/3kJ2VYa++dsWVTtGgLVj5xtHg= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0/go.mod h1:Mjt1i1INqiaoZOMGR1RIUJN+i3ChKoFRqzrRQhlkbs0= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw= +go.opentelemetry.io/otel v1.24.0 h1:0LAOdjNmQeSTzGBzduGe/rU4tZhMwL5rWgtp9Ku5Jfo= +go.opentelemetry.io/otel v1.24.0/go.mod h1:W7b9Ozg4nkF5tWI5zsXkaKKDjdVjpD4oAt9Qi/MArHo= +go.opentelemetry.io/otel/metric v1.24.0 h1:6EhoGWWK28x1fbpA4tYTOWBkPefTDQnb8WSGXlc88kI= +go.opentelemetry.io/otel/metric v1.24.0/go.mod h1:VYhLe1rFfxuTXLgj4CBiyz+9WYBA8pNGJgDcSFRKBco= +go.opentelemetry.io/otel/sdk v1.22.0 h1:6coWHw9xw7EfClIC/+O31R8IY3/+EiRFHevmHafB2Gw= +go.opentelemetry.io/otel/sdk v1.22.0/go.mod h1:iu7luyVGYovrRpe2fmj3CVKouQNdTOkxtLzPvPz1DOc= +go.opentelemetry.io/otel/trace v1.24.0 h1:CsKnnL4dUAr/0llH9FKuc698G04IrpWV0MQA/Y1YELI= +go.opentelemetry.io/otel/trace v1.24.0/go.mod h1:HPc3Xr/cOApsBI154IU0OI0HJexz+aw5uPdbs3UCjNU= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= @@ -1186,7 +1149,6 @@ go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= @@ -1195,8 +1157,8 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.23.0 h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI= -golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= +golang.org/x/crypto v0.28.0 h1:GBDwsMXVQi34v5CCYUm2jkJvu4cbtru2U4TN2PSyQnw= +golang.org/x/crypto v0.28.0/go.mod h1:rmgy+3RHxRZMyY0jjAJShp2zgEdOqj2AO7U0pYmeQ7U= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -1280,7 +1242,6 @@ golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwY golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= @@ -1300,8 +1261,8 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= -golang.org/x/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w= -golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8= +golang.org/x/net v0.30.0 h1:AcW1SDZMkb8IpzCdQUaIq2sP4sZ4zw+55h6ynffypl4= +golang.org/x/net v0.30.0/go.mod h1:2wGyMJ5iFasEhkwi13ChkO/t1ECNC4X4eBKkVFyYFlU= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1327,8 +1288,8 @@ golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= -golang.org/x/oauth2 v0.18.0 h1:09qnuIAgzdx1XplqJvW6CQqMCtGZykZWcXzPMPUusvI= -golang.org/x/oauth2 v0.18.0/go.mod h1:Wf7knwG0MPoWIMMBgFlEaSUDaKskp0dCfrlJRJXbBi8= +golang.org/x/oauth2 v0.23.0 h1:PbgcYx2W7i4LvjJWEbf0ngHV6qJYr86PkAV3bXdLEbs= +golang.org/x/oauth2 v0.23.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1343,8 +1304,8 @@ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= -golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= +golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1353,8 +1314,6 @@ golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190130150945-aca44879d564/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1362,16 +1321,13 @@ golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191115151921-52ab43148777/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1403,7 +1359,6 @@ golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1420,11 +1375,9 @@ golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210819135213-f52c844e1c1c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210906170528-6f6e22806c34/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211116061358-0a5406a5449c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1445,17 +1398,17 @@ golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y= -golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo= +golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.20.0 h1:VnkxpohqXaOBYJtBmEppKUG6mXpi+4O6purfc2+sMhw= -golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= +golang.org/x/term v0.25.0 h1:WtHI/ltw4NvSUig5KARz9h521QvRC8RmF/cuYqifU24= +golang.org/x/term v0.25.0/go.mod h1:RPyXicDX+6vLxogjjRxjgD2TKtmAO6NZBsBRfrOLu7M= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1465,10 +1418,9 @@ golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk= -golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.19.0 h1:kTxAhCbGbxhK0IwgSKiMO5awPoDQ0RpfiVYBfK860YM= +golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1538,8 +1490,8 @@ golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.20.0 h1:hz/CVckiOxybQvFw6h7b/q80NTr9IUQb4s1IIzW7KNY= -golang.org/x/tools v0.20.0/go.mod h1:WvitBU7JJf6A4jOdg4S1tviW9bhUxkgeCui/0JHctQg= +golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d h1:vU5i/LfpvrRCpgM/VPfJLg5KjxD3E+hfT1SH+d9zLwg= +golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1547,8 +1499,9 @@ golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= -golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk= golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 h1:+cNy6SZtPcJQH3LJVLOSmiC7MMxXNOb3PU/VUEz+EhU= +golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90= google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= @@ -1598,8 +1551,8 @@ google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= -google.golang.org/api v0.162.0 h1:Vhs54HkaEpkMBdgGdOT2P6F0csGG/vxDS0hWHJzmmps= -google.golang.org/api v0.162.0/go.mod h1:6SulDkfoBIg4NFmCuZ39XeeAgSHCPecfSUuDyYlAHs0= +google.golang.org/api v0.171.0 h1:w174hnBPqut76FzW5Qaupt7zY8Kql6fiVjgys4f58sU= +google.golang.org/api v0.171.0/go.mod h1:Hnq5AHm4OTMt2BUVjael2CWZFD6vksJdWCWiUAmjC9o= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1608,8 +1561,6 @@ google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= -google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= @@ -1718,10 +1669,10 @@ google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de h1:F6qOa9AZTYJXOUEr4jDysRDLrm4PHePlge4v4TGAlxY= google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:VUhTRKeHn9wwcdrk73nvdC9gF178Tzhmt/qyaFcPLSo= -google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de h1:jFNzHPIeuzhdRwVhbZdiym9q0ory/xY3sA+v2wPg8I0= -google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:5iCWqnniDlqZHrd3neWVTOwvh/v6s3232omMecelax8= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda h1:LI5DOvAxUPMv/50agcLLoo+AdWc1irS9Rzz4vPuD1V4= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= +google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142 h1:wKguEg1hsxI2/L3hUYrpo1RVi48K+uTyzKqprwLXsb8= +google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142/go.mod h1:d6be+8HhtEtucleCbxpPW9PA9XwISACu8nvpPqF0BVo= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142 h1:e7S5W7MGGLaSu8j3YjdezkZ+m1/Nm0uRVRMEMGk26Xs= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= @@ -1763,8 +1714,8 @@ google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACu google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.63.2 h1:MUeiw1B2maTVZthpU5xvASfTh3LDbxHd6IJ6QQVU+xM= -google.golang.org/grpc v1.63.2/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA= +google.golang.org/grpc v1.67.1 h1:zWnc1Vrcno+lHZCOofnIMvycFcc0QRGIzm9dhnDX68E= +google.golang.org/grpc v1.67.1/go.mod h1:1gLDyUQU7CTLJI90u3nXZ9ekeghjeM7pTDZlqFNg2AA= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= @@ -1781,8 +1732,8 @@ google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= -google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +google.golang.org/protobuf v1.35.1 h1:m3LfL6/Ca+fqnjnlqQXNpFPABW1UD7mjh8KO2mKFytA= +google.golang.org/protobuf v1.35.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/covenant/covenant.go b/covenant/covenant.go index 1661725..cc1c02b 100644 --- a/covenant/covenant.go +++ b/covenant/covenant.go @@ -117,10 +117,10 @@ func (ce *CovenantEmulator) AddCovenantSignatures(btcDels []*types.Delegation) ( // 3. check unbonding time (staking time from unbonding tx) is larger or equal // to the minimum unbonding time in Babylon node parameters unbondingTime := btcDel.UnbondingTime - minUnbondingTime := params.MinUnbondingTime - if uint32(unbondingTime) < minUnbondingTime { + unbondingTimeBlocks := params.UnbondingTimeBlocks + if uint32(unbondingTime) != unbondingTimeBlocks { ce.logger.Error("invalid unbonding time", - zap.Uint32("min_unbonding_time", minUnbondingTime), + zap.Uint32("expected_unbonding_time", unbondingTimeBlocks), zap.Uint16("got_unbonding_time", unbondingTime), ) continue diff --git a/covenant/covenant_test.go b/covenant/covenant_test.go index 4240a85..62ad46d 100644 --- a/covenant/covenant_test.go +++ b/covenant/covenant_test.go @@ -69,7 +69,7 @@ func FuzzAddCovenantSig(f *testing.F) { require.NoError(t, err) stakingTimeBlocks := uint32(testutil.RandRange(r, int(params.MinStakingTime), int(params.MaxStakingTime))) stakingValue := int64(testutil.RandRange(r, int(params.MinStakingValue), int(params.MaxStakingValue))) - unbondingTime := uint16(params.MinUnbondingTime) + unbondingTime := uint16(params.UnbondingTimeBlocks) fpNum := datagen.RandomInt(r, 5) + 1 fpPks := testutil.GenBtcPublicKeys(r, t, int(fpNum)) testInfo := datagen.GenBTCStakingSlashingInfo( diff --git a/go.mod b/go.mod index 79a677b..dbde6a5 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( cosmossdk.io/errors v1.0.1 cosmossdk.io/math v1.4.0 github.com/avast/retry-go/v4 v4.5.1 - github.com/babylonlabs-io/babylon v0.17.1 + github.com/babylonlabs-io/babylon v0.18.0 github.com/babylonlabs-io/covenant-emulator/covenant-signer v0.2.0 github.com/btcsuite/btcd v0.24.2 github.com/btcsuite/btcd/btcec/v2 v2.3.2 diff --git a/go.sum b/go.sum index ed6cfde..a06d918 100644 --- a/go.sum +++ b/go.sum @@ -1419,8 +1419,8 @@ github.com/aws/aws-sdk-go v1.44.122/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX github.com/aws/aws-sdk-go v1.44.312 h1:llrElfzeqG/YOLFFKjg1xNpZCFJ2xraIi3PqSuP+95k= github.com/aws/aws-sdk-go v1.44.312/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= -github.com/babylonlabs-io/babylon v0.17.1 h1:lyWGdR7B49qDw5pllLyTW/HAM5uQWXXPZefjFzy/Xy0= -github.com/babylonlabs-io/babylon v0.17.1/go.mod h1:sT+KG2U+M0tDMNZZ2L5CwlXX0OpagGEs56BiWXqaZFw= +github.com/babylonlabs-io/babylon v0.18.0 h1:phMY/GiR9N5MpD3XCmvyPpZkc1I3kTM9yX+Cf0h3OnU= +github.com/babylonlabs-io/babylon v0.18.0/go.mod h1:sT+KG2U+M0tDMNZZ2L5CwlXX0OpagGEs56BiWXqaZFw= github.com/babylonlabs-io/covenant-emulator/covenant-signer v0.2.0 h1:bIosLYR/HUDN4gtUMqbPZjDKapcTHVJHFs0o9AGJt+U= github.com/babylonlabs-io/covenant-emulator/covenant-signer v0.2.0/go.mod h1:9lAyEcdpfS21bMLMEa8WjTyLVfwHJABRh5TmoxC9LKU= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= diff --git a/itest/babylon_node_handler.go b/itest/babylon_node_handler.go index a829dd6..7f7e5bf 100644 --- a/itest/babylon_node_handler.go +++ b/itest/babylon_node_handler.go @@ -143,7 +143,7 @@ func NewBabylonNodeHandler(t *testing.T, covenantPk *types.BIP340PubKey) *Babylo "--min-staking-amount-sat=10000", // default checkpoint finalization timeout is 20, so we set min unbonding time // to be 1 block more - "--min-unbonding-time=21", + "--unbonding-time=21", fmt.Sprintf("--slashing-pk-script=%s", hex.EncodeToString(pkScript)), fmt.Sprintf("--covenant-pks=%s", covenantPk.MarshalHex()), "--covenant-quorum=1", diff --git a/itest/test_manager.go b/itest/test_manager.go index 0ae78b9..7158277 100644 --- a/itest/test_manager.go +++ b/itest/test_manager.go @@ -337,7 +337,7 @@ func (tm *TestManager) InsertBTCDelegation( delBtcPrivKey, delBtcPubKey, err := datagen.GenRandomBTCKeyPair(r) require.NoError(t, err) - unbondingTime := uint16(tm.StakingParams.MinUnbondingTime) + unbondingTime := uint16(tm.StakingParams.UnbondingTimeBlocks) testStakingInfo := testutil.GenBTCStakingSlashingInfo( r, t, diff --git a/testutil/datagen.go b/testutil/datagen.go index 7cb330a..b1feca1 100644 --- a/testutil/datagen.go +++ b/testutil/datagen.go @@ -73,7 +73,7 @@ func GenRandomParams(r *rand.Rand, t *testing.T) *types.StakingParams { return &types.StakingParams{ ComfirmationTimeBlocks: 10, FinalizationTimeoutBlocks: 100, - MinUnbondingTime: 100, + UnbondingTimeBlocks: 101, MinSlashingTxFeeSat: 1, CovenantPks: covenantPks, SlashingPkScript: slashingPkScript, diff --git a/tools/go.mod b/tools/go.mod index 5b0a959..e3b0c4c 100644 --- a/tools/go.mod +++ b/tools/go.mod @@ -4,7 +4,7 @@ go 1.23.1 toolchain go1.23.3 -require github.com/babylonlabs-io/babylon v0.17.1 +require github.com/babylonlabs-io/babylon v0.18.0 require ( cloud.google.com/go v0.112.1 // indirect diff --git a/tools/go.sum b/tools/go.sum index 6ff4902..dd977b5 100644 --- a/tools/go.sum +++ b/tools/go.sum @@ -264,8 +264,8 @@ github.com/aws/aws-sdk-go v1.44.122/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX github.com/aws/aws-sdk-go v1.44.312 h1:llrElfzeqG/YOLFFKjg1xNpZCFJ2xraIi3PqSuP+95k= github.com/aws/aws-sdk-go v1.44.312/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= -github.com/babylonlabs-io/babylon v0.17.1 h1:lyWGdR7B49qDw5pllLyTW/HAM5uQWXXPZefjFzy/Xy0= -github.com/babylonlabs-io/babylon v0.17.1/go.mod h1:sT+KG2U+M0tDMNZZ2L5CwlXX0OpagGEs56BiWXqaZFw= +github.com/babylonlabs-io/babylon v0.18.0 h1:phMY/GiR9N5MpD3XCmvyPpZkc1I3kTM9yX+Cf0h3OnU= +github.com/babylonlabs-io/babylon v0.18.0/go.mod h1:sT+KG2U+M0tDMNZZ2L5CwlXX0OpagGEs56BiWXqaZFw= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= diff --git a/types/params.go b/types/params.go index 231c15c..383b48f 100644 --- a/types/params.go +++ b/types/params.go @@ -30,8 +30,8 @@ type StakingParams struct { // Minimum commission rate MinComissionRate sdkmath.LegacyDec - // The minimum time for unbonding transaction timelock in BTC blocks - MinUnbondingTime uint32 + // The time for unbonding transaction timelock in BTC blocks + UnbondingTimeBlocks uint32 // Fee required by unbonding transaction UnbondingFee btcutil.Amount From 3a9ca04e51b813a8552a553da20c10686df8531c Mon Sep 17 00:00:00 2001 From: RafilxTenfen Date: Mon, 9 Dec 2024 12:56:14 -0300 Subject: [PATCH 31/40] chore: add release to changelog (#58) (#59) (#64) --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index cff279c..becfe47 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -37,6 +37,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) ## Unreleased +## v0.10.0 + ### Improvements * [#43](https://github.com/babylonlabs-io/covenant-emulator/pull/43) Test importing From 0627fc2a6f561a8e40acffb786b03777ea9e9288 Mon Sep 17 00:00:00 2001 From: RafilxTenfen Date: Mon, 9 Dec 2024 13:32:55 -0300 Subject: [PATCH 32/40] feat: add babylon address to keys output (#63) * feat: add babylon address to keys output and moved public-key to public-key-hex * fix: Casing on covenant-signer Dockerfile (#65) * chore: add #63 to changelog --------- Co-authored-by: Vitalis Salis --- CHANGELOG.md | 5 +++++ cmd/covd/key.go | 26 +++++++++++++++++++------- covenant-signer/Dockerfile | 2 +- keyring/keyringcontroller.go | 7 +------ types/chainkey.go | 22 ++++++++++++++++++++-- 5 files changed, 46 insertions(+), 16 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index becfe47..1a60ab0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -37,6 +37,11 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) ## Unreleased +### Improvements + +* [#63](https://github.com/babylonlabs-io/covenant-emulator/pull/63) Add babylon +address to keys command output and fix casing in dockerfile + ## v0.10.0 ### Improvements diff --git a/cmd/covd/key.go b/cmd/covd/key.go index b2511e4..379ce23 100644 --- a/cmd/covd/key.go +++ b/cmd/covd/key.go @@ -15,8 +15,9 @@ import ( ) type covenantKey struct { - Name string `json:"name"` - PublicKey string `json:"public-key"` + Name string `json:"name"` + PublicKey string `json:"public-key-hex"` + BabylonAddr string `json:"babylon-address"` } var createKeyCommand = cli.Command{ @@ -88,8 +89,9 @@ func createKey(ctx *cli.Context) error { bip340Key := types.NewBIP340PubKeyFromBTCPK(keyPair.PublicKey) printRespJSON( &covenantKey{ - Name: ctx.String(keyNameFlag), - PublicKey: bip340Key.MarshalHex(), + Name: ctx.String(keyNameFlag), + PublicKey: bip340Key.MarshalHex(), + BabylonAddr: keyPair.Address, }, ) @@ -157,15 +159,25 @@ func showKey(ctx *cli.Context) error { return err } + r, err := krController.KeyRecord() + if err != nil { + return err + } + + babylonAddr, err := r.GetAddress() + if err != nil { + return err + } + _, pk := btcec.PrivKeyFromBytes(privKey.Key) bip340Key := types.NewBIP340PubKeyFromBTCPK(pk) printRespJSON( &covenantKey{ - Name: ctx.String(keyNameFlag), - PublicKey: bip340Key.MarshalHex(), + Name: ctx.String(keyNameFlag), + PublicKey: bip340Key.MarshalHex(), + BabylonAddr: babylonAddr.String(), }, ) - return nil } diff --git a/covenant-signer/Dockerfile b/covenant-signer/Dockerfile index 8fc3e2f..08b5f03 100644 --- a/covenant-signer/Dockerfile +++ b/covenant-signer/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.23.1-alpine as builder +FROM golang:1.23.1-alpine AS builder # Use muslc for static libs ARG BUILD_TAGS="muslc" diff --git a/keyring/keyringcontroller.go b/keyring/keyringcontroller.go index 0852947..5654116 100644 --- a/keyring/keyringcontroller.go +++ b/keyring/keyringcontroller.go @@ -99,12 +99,7 @@ func (kc *ChainKeyringController) CreateChainKey(passphrase, hdPath string) (*ty switch v := privKey.(type) { case *sdksecp256k1.PrivKey: sk, pk := btcec.PrivKeyFromBytes(v.Key) - return &types.ChainKeyInfo{ - Name: kc.keyName, - PublicKey: pk, - PrivateKey: sk, - Mnemonic: mnemonic, - }, nil + return types.NewChainKeyInfo(record, pk, sk) default: return nil, fmt.Errorf("unsupported key type in keyring") } diff --git a/types/chainkey.go b/types/chainkey.go index 4e56c55..bb22d9d 100644 --- a/types/chainkey.go +++ b/types/chainkey.go @@ -2,11 +2,29 @@ package types import ( "github.com/btcsuite/btcd/btcec/v2" + "github.com/cosmos/cosmos-sdk/client/keys" + "github.com/cosmos/cosmos-sdk/crypto/keyring" + "github.com/decred/dcrd/dcrec/secp256k1/v4" ) type ChainKeyInfo struct { - Name string - Mnemonic string + keys.KeyOutput PublicKey *btcec.PublicKey PrivateKey *btcec.PrivateKey } + +func NewChainKeyInfo( + k *keyring.Record, + pk *secp256k1.PublicKey, + sk *secp256k1.PrivateKey, +) (*ChainKeyInfo, error) { + keyOut, err := keys.MkAccKeyOutput(k) + if err != nil { + return nil, err + } + return &ChainKeyInfo{ + KeyOutput: keyOut, + PublicKey: pk, + PrivateKey: sk, + }, nil +} From 928a690b7b6a9fcd05d14ba295210a8d7fd79cb2 Mon Sep 17 00:00:00 2001 From: Sam Ricotta Date: Wed, 11 Dec 2024 14:46:03 +0200 Subject: [PATCH 33/40] Update covenant-emulator-setup.md --- docs/covenant-emulator-setup.md | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/docs/covenant-emulator-setup.md b/docs/covenant-emulator-setup.md index f13ded5..815350d 100644 --- a/docs/covenant-emulator-setup.md +++ b/docs/covenant-emulator-setup.md @@ -167,16 +167,24 @@ signs signatures and interacts with Babylon. Use the following command to genera the key: ```bash -covd create-key --key-name --chain-id bbn-test-5 --keyring-backend +covd create-key --key-name --chain-id --keyring-backend { "name": "covenant-key", - "public-key": "9bd5baaba3d3fb5a8bcb8c2995c51793e14a1e32f1665cade168f638e3b15538" + "public-key-hex": "6dd4c9415a4091b74f45fdce71f5b8eebe743e5990b547009ff1dce8393d5df2", + "babylon-address": "bbn1gw5ns0kmcjj8y0edu5h4nkkw4aq263eyx2ynnp" } ``` +Parameters: +- `--key-name`: Name for the key in the keyring +- `--chain-id`: ID of the Babylon chain (e.g., bbn-test-5) +- `--keyring-backend`: Backend for key storage, we will use `file` as it is the + most secure option. + After executing the above command, the key name will be saved in the config file created in the last [step](#42-configure-the-covenant-emulator). -Note that the `public-key` in the output should be used as one of the inputs of + +**Note:** that the `public-key` in the output should be used as one of the inputs of the genesis of the Babylon chain. Also, this key will be used to pay for the fees due to the daemon submitting From 39dc75f661f40b8d8a6ef2cd3cc2869635370ce6 Mon Sep 17 00:00:00 2001 From: Sam Ricotta Date: Wed, 11 Dec 2024 14:51:53 +0200 Subject: [PATCH 34/40] Update covenant-emulator-setup.md --- docs/covenant-emulator-setup.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/covenant-emulator-setup.md b/docs/covenant-emulator-setup.md index 815350d..69162bc 100644 --- a/docs/covenant-emulator-setup.md +++ b/docs/covenant-emulator-setup.md @@ -169,7 +169,7 @@ the key: ```bash covd create-key --key-name --chain-id --keyring-backend { - "name": "covenant-key", + "name": "babylon-tx-key", "public-key-hex": "6dd4c9415a4091b74f45fdce71f5b8eebe743e5990b547009ff1dce8393d5df2", "babylon-address": "bbn1gw5ns0kmcjj8y0edu5h4nkkw4aq263eyx2ynnp" } @@ -184,8 +184,8 @@ Parameters: After executing the above command, the key name will be saved in the config file created in the last [step](#42-configure-the-covenant-emulator). -**Note:** that the `public-key` in the output should be used as one of the inputs of -the genesis of the Babylon chain. +**⚡ Note:** that the `public-key` in the output should be used as one of the +inputs of the genesis of the Babylon chain. Also, this key will be used to pay for the fees due to the daemon submitting signatures to Babylon. From 3af1b93ea74a3205cf840a09565941b486cd9313 Mon Sep 17 00:00:00 2001 From: Sam Ricotta Date: Wed, 11 Dec 2024 15:56:11 +0200 Subject: [PATCH 35/40] Delete emulator-installation.md --- docs/emulator-installation.md | 175 ---------------------------------- 1 file changed, 175 deletions(-) delete mode 100644 docs/emulator-installation.md diff --git a/docs/emulator-installation.md b/docs/emulator-installation.md deleted file mode 100644 index bd77cdd..0000000 --- a/docs/emulator-installation.md +++ /dev/null @@ -1,175 +0,0 @@ - -# Covenant Emulator Installation - -## Prerequisites - -This project requires Go version `1.23` or later. -Install Go by following the instructions on -the [official Go installation guide](https://golang.org/doc/install). - -### Download the code - -To get started, clone the repository to your local machine from Github: - -```bash -$ git clone git@github.com:babylonlabs-io/covenant-emulator.git -``` - -You can choose a specific version from -the [official releases page](https://github.com/babylonlabs-io/covenant-emulator/releases): - -```bash -$ cd covenant-emulator # cd into the project directory -$ git checkout -``` - -## Build and install the binary - -At the top-level directory of the project - -```bash -$ make install -``` - -The above command will build and install the covenant-emulator daemon (`covd`) -binary to `$GOPATH/bin`: - -If your shell cannot find the installed binaries, make sure `$GOPATH/bin` is in -the `$PATH` of your shell. Usually, these commands will do the job - -```bash -export PATH=$HOME/go/bin:$PATH -echo 'export PATH=$HOME/go/bin:$PATH' >> ~/.profile -``` - -To build without installing, - -```bash -$ make build -``` - -The above command will put the built binaries in a build directory with the -following structure: - -```bash -$ ls build - └── covd -``` - -Another common issue with compiling is that some of the dependencies have -components written in C. If a C toolchain is absent, the Go compiler will throw -errors. (Most likely it will complain about undefined names/types.) Make sure a -C toolchain (for example, GCC or Clang) is available. On Ubuntu, this can be -installed by running - -```bash -sudo apt install build-essential -``` - -## Setting up a covenant emulator - -### Configuration - -The `covd init` command initializes a home directory for the -finality provider daemon. -This directory is created in the default home location or in a -location specified by the `--home` flag. -If the home directory already exists, add `--force` to override the directory if -needed. - -```bash -$ covd init --home /path/to/covd/home/ -``` - -After initialization, the home directory will have the following structure - -```bash -$ ls /path/to/covd/home/ - ├── covd.conf # Covd-specific configuration file. - ├── logs # Covd logs -``` - -If the `--home` flag is not specified, then the default home directory -will be used. For different operating systems, those are: - -- **MacOS** `~/Users//Library/Application Support/Covd` -- **Linux** `~/.Covd` -- **Windows** `C:\Users\\AppData\Local\Covd` - -Below are some important parameters of the `covd.conf` file. - -**Note**: -The configuration below requires to point to the path where this keyring is -stored `KeyDirectory`. This `Key` field stores the key name used for interacting -with the Babylon chain and will be specified along with the `KeyringBackend` -field in the next [step](#generate-key-pairs). So we can ignore the setting of -the two fields in this step. - -```bash -# The interval between each query for pending BTC delegations -QueryInterval = 15s - -# The maximum number of delegations that the covd processes each time -DelegationLimit = 100 - -# Bitcoin network to run on -BitcoinNetwork = simnet - -# Babylon specific parameters - -# Babylon chain ID -ChainID = chain-test - -# Babylon node RPC endpoint -RPCAddr = http://127.0.0.1:26657 - -# Babylon node gRPC endpoint -GRPCAddr = https://127.0.0.1:9090 - -# Name of the key in the keyring to use for signing transactions -Key = - -# Type of keyring to use, -# supported backends - (os|file|kwallet|pass|test|memory) -# ref https://docs.cosmos.network/v0.46/run-node/keyring.html#available-backends-for-the-keyring -KeyringBackend = test - -# Directory where keys will be retrieved from and stored -KeyDirectory = /path/to/covd/home -``` - -To see the complete list of configuration options, check the `covd.conf` file. - -## Generate key pairs - -The covenant emulator daemon requires the existence of a keyring that signs -signatures and interacts with Babylon. Use the following command to generate the -key: - -```bash -$ covd create-key --key-name covenant-key --chain-id chain-test -{ - "name": "cov-key", - "public-key": "9bd5baaba3d3fb5a8bcb8c2995c51793e14a1e32f1665cade168f638e3b15538" -} -``` - -After executing the above command, the key name will be saved in the config file -created in [step](#configuration). -Note that the `public-key` in the output should be used as one of the inputs of -the genesis of the Babylon chain. -Also, this key will be used to pay for the fees due to the daemon submitting -signatures to Babylon. - -## Start the daemon - -You can start the covenant emulator daemon using the following command: - -```bash -$ covd start -2024-01-05T05:59:09.429615Z info Starting Covenant Emulator -2024-01-05T05:59:09.429713Z info Covenant Emulator Daemon is fully active! -``` - -All the available CLI options can be viewed using the `--help` flag. These -options can also be set in the configuration file. \ No newline at end of file From 6a5cfd225a981b8f4d31fb252c230240161d36ed Mon Sep 17 00:00:00 2001 From: Sam Ricotta Date: Thu, 12 Dec 2024 17:56:19 +0200 Subject: [PATCH 36/40] comments --- .../docs/transition-from-phase1.md | 29 ++++++++++++++----- docs/covenant-emulator-setup.md | 6 ++-- 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/covenant-signer/docs/transition-from-phase1.md b/covenant-signer/docs/transition-from-phase1.md index 3a56d7a..7c6a763 100644 --- a/covenant-signer/docs/transition-from-phase1.md +++ b/covenant-signer/docs/transition-from-phase1.md @@ -100,7 +100,7 @@ to the machine that holds your `bitcoind` wallet and know the Bitcoin address associated with your covenant's public key. If you need a refresher on the functionalities supported by your `bitcoind` wallet or how you previously set it up, you can refer -to the relevant phase-1 guide. +to the relevant [phase-1 guide](https://github.com/babylonlabs-io/covenant-signer/blob/main/docs/deployment.md#2-bitcoind-setup). In the following, we'll go through all the necessary steps to transition your wallet. @@ -129,8 +129,8 @@ which takes your covenant Bitcoin address as a parameter. As mentioned above, you will need access to the Bitcoin key you set up your covenant with. ```shell -bitcoin-cli getaddressinfo bcrt1qazasawj3ard0ffwj04zpxlw2pt9cp7kwmnqyvk | jq .hdkeypath -"m/84h/1h/0h/0/0" +bitcoin-cli -datadir=./1/ getaddressinfo bcrt1q3pxe327k2h3rzcq77w5y7dz7uwl6wve664n490 | \ +jq '.hdkeypath | sub("^m/"; "") | sub("/[^/]+$"; "")' ``` In the above command, we use the `jq` utility to extract only the relevant `hdkeypath` @@ -151,7 +151,7 @@ This will provide you with the descriptor needed to derive the private key. Since Bitcoin wallets typically contain multiple descriptors (usually 6 by default), we use `jq` to find the specific descriptor that -matches our previously saved `hdkeypath` in this example `(84h/1h/0h/0/0)` +matches our previously saved `hdkeypath` in this example `(84h/1h/0h/0)` and extract the master private key from it. So, before you run this command you will need to replace the `` below @@ -266,10 +266,17 @@ Congratulations! You have successfully imported your key. ### 4.1. Configuration Next, we can return to the covenant signer directory -and create your own configuration file. +and create your own configuration file. Use the +following command to dump the configuration template: -Use the example configuration [file](../example/config.toml) to create your own -configuration file. Then, replace the placeholder values with your own +```shell +covenant-signer dump-cfg --config +``` + +This will create a configuration file, from the example configuration, +in the specified path. + +Replace the placeholder values with your own configuration. This can be placed directly in the `covenant-signer` directory. ```toml @@ -305,7 +312,9 @@ port = 2113 Below are brief explanations of the configuration entries: - `keystore-type`: Type of keystore used. Should be set to `"cosmos"` -- `key-directory`: Path where keys are stored on the filesystem. +- `key-directory`: Path where keys are stored. Do not include the keyring + backend type in the path (e.g., use `/path/to/keys` not + `/path/to/keys/keyring-file`). - `keyring-backend`: Backend system for key management, e.g., "file", "os". - `key-name`: Name of the key used for signing transactions. - `chain-id`: The Chain ID of the Babylon network you connect to. @@ -341,6 +350,10 @@ the covenant keyring passphrase. curl -X POST http://127.0.0.1:9791/v1/unlock -d '{"passphrase": ""}' ``` +> ⚡ Note: Even if you provide the passphrase in the curl command to unlock the +> keyring, the CLI configuration for starting the service will still prompt you +> to enter the passphrase interactively. + You can sign transactions by invoking the `v1/sign-transactions` endpoint, which expects staking and unbonding transactions in hex format. diff --git a/docs/covenant-emulator-setup.md b/docs/covenant-emulator-setup.md index 69162bc..5fcd9b0 100644 --- a/docs/covenant-emulator-setup.md +++ b/docs/covenant-emulator-setup.md @@ -17,7 +17,7 @@ This guide outlines the transition from solely using the phase-1 covenant signer to the phase-2 covenant emulator full setup. The [phase-1 covenant signer](https://github.com/babylonlabs-io/covenant-signer), -was limited to signing unbonding signatures. Phase-2 requires additional +was limited to signing unbonding signatures. Phase-2 requires additional functionality that is covered by the [covenant emulator](https://github.com/babylonlabs-io/covenant-emulator), which retrieves delegations from Babylon chain and signs them by communicating with the @@ -178,8 +178,8 @@ covd create-key --key-name --chain-id --keyring-backend Date: Thu, 12 Dec 2024 18:04:08 +0200 Subject: [PATCH 37/40] Update transition-from-phase1.md --- covenant-signer/docs/transition-from-phase1.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/covenant-signer/docs/transition-from-phase1.md b/covenant-signer/docs/transition-from-phase1.md index 7c6a763..740d692 100644 --- a/covenant-signer/docs/transition-from-phase1.md +++ b/covenant-signer/docs/transition-from-phase1.md @@ -374,6 +374,8 @@ curl -X POST http://127.0.0.1:9791/v1/sign-transactions \ }' ``` + + The above command will generate a signature for the provided transactions and return it in JSON format. From 8bdbee4f6ea6035272fe66beec3d6f03ed4268c8 Mon Sep 17 00:00:00 2001 From: Vitalis Salis Date: Mon, 16 Dec 2024 13:16:03 +0200 Subject: [PATCH 38/40] restructuring --- README.md | 74 +++++++------------ covenant-signer/README.md | 14 ---- docs/covenant-emulator-setup.md | 49 +++++------- .../covenant-signer-setup.md | 13 +++- 4 files changed, 53 insertions(+), 97 deletions(-) delete mode 100644 covenant-signer/README.md rename covenant-signer/docs/transition-from-phase1.md => docs/covenant-signer-setup.md (95%) diff --git a/README.md b/README.md index fbb2065..1109912 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ The covenant emulation toolset is a set of programs operated by every member of the covenant committee of the BTC staking protocol. The role of the covenant committee is to protect PoS systems against attacks from the BTC stakers and -validators. It achieves this by representing itself as an M-out-of-N +finality providers. It achieves this by representing itself as an M-out-of-N multi-signature that co-signs BTC transactions with the BTC staker. More specifically, through co-signing, the covenant committee enforces the @@ -63,59 +63,35 @@ Changing the covenant committee requires a [governance proposal](https://docs.cosmos.network/v0.50/build/modules/gov). Each committee member runs two components: -1. The `covd` daemon (short for `covenant-emulator-daemon`), which constantly -monitors staking requests on the Babylon chain, verifies the validity of the -Bitcoin transactions that are involved with them, and sends the necessary -signatures if verification is passed. -2. The `covenant-signer` daemon, which securely manages the private key and -performs signing operations in an isolated environment. +1. **Covenant Signer**: The Covenant Signer operates in tandem with the Covenant Emulator and + is purpose-built to securely manage private keys for signing operations. + It prioritizes security through isolation, + ensuring that private key handling is confined to an instance with + minimal connectivity and simpler application logic compared to the + Covenant Emulator daemon. +2. **Covenant Emulator**: The covenant emulator constantly monitors staking + requests on the Babylon chain, verifies the validity of the + Bitcoin transactions that are involved with them, + and if verification is passed, + generates the necessary signatures through a connection to the + covenant-signer and sends them to the Babylon blockchain. Specifically, + it deals with the following signatures: + 1. **Slashing signature**. This signature is an [adaptor signature](https://bitcoinops.org/en/topics/adaptor-signatures/), + which signs over the slashing path of the staking transaction. Due to the + [recoverability](https://github.com/LLFourn/one-time-VES/blob/master/main.pdf) + of the adaptor signature, it also prevents a malicious finality provider from + irrationally slashing delegations. + 2. **Unbonding signature**. This signature is a [Schnorr signature](https://en.wikipedia.org/wiki/Schnorr_signature), + which is needed for the staker to unlock their funds before the original + staking time lock expires (on-demand unbonding). + 3. **Unbonding slashing signature**. This signature is also an adaptor + signature, which has similar usage to the **slashing signature** but signs over + the slashing path of the unbonding transaction. The staking requests can only become active and receive voting power if a sufficient quorum of covenant committee members have verified the validity of the transactions and sent corresponding signatures. - -## Covenant Emulator Daemon - -Upon a pending staking request being found, the covenant emulation daemon -(`covd`), validates it against the spending rules defined in -[Staking Script specification](https://github.com/babylonlabs-io/babylon/blob/dev/docs/staking-script.md), -and sends three types of signatures to the Babylon chain: - -1. **Slashing signature**. This signature is an [adaptor signature](https://bitcoinops.org/en/topics/adaptor-signatures/), -which signs over the slashing path of the staking transaction. Due to the -[recoverability](https://github.com/LLFourn/one-time-VES/blob/master/main.pdf) -of the adaptor signature, it also prevents a malicious finality provider from -irrationally slashing delegations. -2. **Unbonding signature**. This signature is a [Schnorr signature](https://en.wikipedia.org/wiki/Schnorr_signature), -which is needed for the staker to unlock their funds before the original -staking time lock expires (on-demand unbonding). -3. **Unbonding slashing signature**. This signature is also an adaptor -signature, which has similar usage to the **slashing signature** but signs over -the slashing path of the unbonding transaction. - -For instructions on how to run the Covenant Emulator, please refer to the -[Covenant Emulator](./docs/configure-emulator.md). - -## Covenant Signer - -The Covenant Signer operates in tandem with the Covenant Emulator and -is purpose-built to securely manage private keys for signing operations. -It prioritizes security through isolation, -ensuring that private key handling is confined to an instance with -minimal connectivity and simpler application logic compared to the -Covenant Emulator daemon. - -Previously, private keys were stored in the Bitcoin wallet using PSBT (Partially -Signed Bitcoin Transactions) for signing operations. The new design uses a -dedicated Covenant Signer that acts as a remote signing service, storing private -keys in an encrypted Cosmos SDK keyring. This approach not only improves security -through isolation but also enables the creation of both Schnorr signatures and -Schnorr adaptor signatures required for covenant operations. - -For instructions on how to run the Covenant Signer, please refer to the -[Covenant Signer](./covenant-signer/README.md). - ## Interaction Between Emulator and Signer The Covenant Emulator handles the application logic, including monitoring the diff --git a/covenant-signer/README.md b/covenant-signer/README.md deleted file mode 100644 index 20cd3fa..0000000 --- a/covenant-signer/README.md +++ /dev/null @@ -1,14 +0,0 @@ -# Covenant Signer - -The Covenant Signer is a daemon program in the Covenant Emulator toolset -that is responsible for securely managing the private key of the -covenant committee member and producing the necessary cryptographic -signatures. -It prioritizes security through isolation, -ensuring that private key handling is confined to an instance with -minimal connectivity and simpler application logic compared to the -Covenant Emulator daemon. - -If you participated in phase-1 as a covenant signer, read this -[document](docs/transition-from-phase1.md) in order to set up -your phase-2 covenant signer. \ No newline at end of file diff --git a/docs/covenant-emulator-setup.md b/docs/covenant-emulator-setup.md index 5fcd9b0..c25b39e 100644 --- a/docs/covenant-emulator-setup.md +++ b/docs/covenant-emulator-setup.md @@ -1,43 +1,30 @@ # Covenant Emulator Setup -## Table of Contents - -1. [Purpose of this guide](#1-purpose-of-this-guide) -2. [Prerequesites](#2-prerequisites) -3. [Install Covenant Emulator Binary](#3-install-covenant-emulator-binary) -4. [Setting up the Covenant Emulator Program](#4-setting-up-the-covenant-emulator-program) - 1. [Initialize directories](#41-initialize-directories) - 2. [Configure the covenant emulator](#42-configure-the-covenant-emulator) -5. [Generate key pairs](#5-generate-key-pairs) -6. [Start the emulator daemon](#6-start-the-emulator-daemon) - -## 1. Purpose of this guide +This document outlines the setup of the covenant-emulator +daemon program. -This guide outlines the transition from solely using the phase-1 covenant signer -to the phase-2 covenant emulator full setup. - -The [phase-1 covenant signer](https://github.com/babylonlabs-io/covenant-signer), -was limited to signing unbonding signatures. Phase-2 requires additional -functionality that is covered by the -[covenant emulator](https://github.com/babylonlabs-io/covenant-emulator), which -retrieves delegations from Babylon chain and signs them by communicating with the -a new [covenant signer daemon](https://github.com/babylonlabs-io/covenant-emulator/tree/main/covenant-signer), specifically focused on phase-2 functionality. +## Table of Contents -In this guide, we will cover exporting the key from the Bitcoin node and importing -it into the new integrated keyring in the covenant signer. +1. [Prerequesites](#1-prerequisites) +2. [Install Covenant Emulator Binary](#2-install-covenant-emulator-binary) +3. [Setting up the Covenant Emulator Program](#3-setting-up-the-covenant-emulator-program) + 1. [Initialize directories](#31-initialize-directories) + 2. [Configure the covenant emulator](#32-configure-the-covenant-emulator) +4. [Generate key pairs](#4-generate-key-pairs) +5. [Start the emulator daemon](#5-start-the-emulator-daemon) -## 2. Prerequisites +## 1. Prerequisites To successfully complete this guide, you will need: 1. A running instance of the [covenant signer](../covenant-signer) with the url that you configured it to. Please follow the - [covenant signer setup guide](covenant-signer/README.md) to + [covenant signer setup guide](./covenant-signer-setup.md) to complete the setup of the covenant signer with your keys before proceeding. 2. A connection to a Babylon node. To run your own node, please refer to the [Babylon Node Setup Guide](https://github.com/babylonlabs-io/networks/blob/sam/bbn-test-5/bbn-test-5/babylon-node/README.md). -## 3. Install covenant emulator binary +## 2. Install covenant emulator binary If you haven't already, download [Golang 1.23](https://go.dev/dl). @@ -76,9 +63,9 @@ export PATH=$HOME/go/bin:$PATH echo 'export PATH=$HOME/go/bin:$PATH' >> ~/.profile ``` -## 4. Setting up the covenant emulator program +## 3. Setting up the covenant emulator program -### 4.1. Initialize directories +### 3.1. Initialize directories Next, we initialize the node and home directory. It should generate all of the necessary files such as `covd.config`, these files will live in the `` @@ -96,7 +83,7 @@ $ ls ├── logs # Covd logs ``` -### 4.2. Configure the covenant emulator +### 3.2. Configure the covenant emulator As you have already set up the covenant signer, you can now configure the covenant emulator to use it. @@ -160,7 +147,7 @@ Below are brief explanations of the configuration entries: Ensure that the covenant signer is running and unlocked before proceeding otherwise you will be unable to run the emulator. -## 5. Generate key pairs +## 4. Generate key pairs The covenant emulator daemon requires the existence of a Babylon keyring that signs signatures and interacts with Babylon. Use the following command to generate @@ -195,7 +182,7 @@ To check your balance, View your account on the address. -## 6. Start the emulator daemon +## 5. Start the emulator daemon You can start the covenant emulator daemon using the following command: diff --git a/covenant-signer/docs/transition-from-phase1.md b/docs/covenant-signer-setup.md similarity index 95% rename from covenant-signer/docs/transition-from-phase1.md rename to docs/covenant-signer-setup.md index 740d692..a1ea28e 100644 --- a/covenant-signer/docs/transition-from-phase1.md +++ b/docs/covenant-signer-setup.md @@ -1,4 +1,7 @@ -# Covenant Signer +# Covenant Signer Setup + +> ⚡ Note: This document is intended for covenant committee members that +> are setting up a phase-2 stack based on an existing phase-1 stack. The Covenant Signer is a daemon program in the Covenant Emulator toolset that is responsible for securely managing the private key of the @@ -15,8 +18,12 @@ logic. > are required to transition their keys to this program to participate > in phase-2. -This document is intended for covenant committee members that -are transitioning their phase-1 setup to the phase-2 one. +Previously, private keys were stored in the Bitcoin wallet using PSBT (Partially +Signed Bitcoin Transactions) for signing operations. The new design uses a +dedicated Covenant Signer that acts as a remote signing service, storing private +keys in an encrypted Cosmos SDK keyring. This approach not only improves security +through isolation but also enables the creation of both Schnorr signatures and +Schnorr adaptor signatures required for covenant operations. ## Table of Contents From 4c1ed11c2f676193c676171f0d5a22d42b7979e7 Mon Sep 17 00:00:00 2001 From: Sam Ricotta Date: Mon, 16 Dec 2024 23:21:40 +1100 Subject: [PATCH 39/40] wip --- docs/covenant-emulator-setup.md | 4 +- docs/covenant-signer-setup.md | 80 +++++++++++++++++---------------- 2 files changed, 45 insertions(+), 39 deletions(-) diff --git a/docs/covenant-emulator-setup.md b/docs/covenant-emulator-setup.md index c25b39e..c2f370a 100644 --- a/docs/covenant-emulator-setup.md +++ b/docs/covenant-emulator-setup.md @@ -21,8 +21,10 @@ To successfully complete this guide, you will need: with the url that you configured it to. Please follow the [covenant signer setup guide](./covenant-signer-setup.md) to complete the setup of the covenant signer with your keys before proceeding. + Note that the phase-2 covenant-signer program is a different one than the one + used doing phase-1 2. A connection to a Babylon node. To run your own node, please refer to the - [Babylon Node Setup Guide](https://github.com/babylonlabs-io/networks/blob/sam/bbn-test-5/bbn-test-5/babylon-node/README.md). + [Babylon Node Setup Guide](https://github.com/babylonlabs-io/networks/blob/main/bbn-test-5/bbn-test-5/babylon-node/README.md). ## 2. Install covenant emulator binary diff --git a/docs/covenant-signer-setup.md b/docs/covenant-signer-setup.md index a1ea28e..7b8386a 100644 --- a/docs/covenant-signer-setup.md +++ b/docs/covenant-signer-setup.md @@ -1,6 +1,6 @@ # Covenant Signer Setup -> ⚡ Note: This document is intended for covenant committee members that +> **⚡ Note:** This document is intended for covenant committee members that > are setting up a phase-2 stack based on an existing phase-1 stack. The Covenant Signer is a daemon program in the Covenant Emulator toolset @@ -12,7 +12,7 @@ It prioritizes security through isolation, ensuring that private key handling is confined to an instance with minimal connectivity and simpler application logic. -> ⚡ Note: This program is a separate implementation from the +> **⚡ Note:** This program is a separate implementation from the > [covenant signer](https://github.com/babylonlabs-io/covenant-signer/) > program used for phase-1. All covenant committee members > are required to transition their keys to this program to participate @@ -44,7 +44,7 @@ network you intend to operate your covenant signer on. 2. You have access to the private Bitcoin key you set up your covenant with. 3. A connection to a Babylon node. To run your own node, please refer to the -[Babylon Node Setup Guide](https://github.com/babylonlabs-io/networks/blob/main/bbn-test-5/bbn-test-5/babylon-node/README.md). +[Babylon Node Setup Guide](https://github.com/babylonlabs-io/networks/blob/main/bbn-test-5/babylon-node/README.md). For a refresher on setting up the Bitcoin node, refer to the [deployment guide of your phase-1 covenant signer setup](https://github.com/babylonlabs-io/covenant-signer/blob/main/docs/deployment.md#2-bitcoind-setup). @@ -107,7 +107,8 @@ to the machine that holds your `bitcoind` wallet and know the Bitcoin address associated with your covenant's public key. If you need a refresher on the functionalities supported by your `bitcoind` wallet or how you previously set it up, you can refer -to the relevant [phase-1 guide](https://github.com/babylonlabs-io/covenant-signer/blob/main/docs/deployment.md#2-bitcoind-setup). +to the relevant +[phase-1 guide](https://github.com/babylonlabs-io/covenant-signer/blob/main/docs/deployment.md#2-bitcoind-setup). In the following, we'll go through all the necessary steps to transition your wallet. @@ -136,7 +137,7 @@ which takes your covenant Bitcoin address as a parameter. As mentioned above, you will need access to the Bitcoin key you set up your covenant with. ```shell -bitcoin-cli -datadir=./1/ getaddressinfo bcrt1q3pxe327k2h3rzcq77w5y7dz7uwl6wve664n490 | \ +bitcoin-cli -datadir=./1/ getaddressinfo
| \ jq '.hdkeypath | sub("^m/"; "") | sub("/[^/]+$"; "")' ``` @@ -169,9 +170,11 @@ bitcoin-cli listdescriptors true | jq -r ' .descriptors[] | select(.desc | contains("")) | .desc -' descriptors.json -{ - wpkh(tprv8ZgxMBicQKsPe9aCeUQgMEMy2YMZ6PHnn2iCuG12y5E8oYhYNEvUqUkNy6sJ7ViBmFUMicikHSK2LBUNPx5do5EDJBjG7puwd6azci2wEdq/84h/1h/0h/0/*)#sachkrde +' +The output will be: + +```shell +wpkh(tprv8ZgxMBicQKsPe9aCeUQgMEMy2YMZ6PHnn2iCuG12y5E8oYhYNEvUqUkNy6sJ7ViBmFUMicikHSK2LBUNPx5do5EDJBjG7puwd6azci2wEdq/84h/1h/0h/0/*)#sachkrde } ``` @@ -198,10 +201,13 @@ Use the following command to derive the covenant private key: covenant-signer derive-child-key \ tprv8ZgxMBicQKsPe9aCeUQgMEMy2YMZ6PHnn2iCuG12y5E8oYhYNEvUqUkNy6sJ7ViBmFUMicikHSK2LBUNPx5do5EDJBjG7puwd6azci2wEdq \ 84h/1h/0h/0/0 -{ - "derived_private_key": "fe1c56c494c730f13739c0655bf06e615409870200047fc65cdf781837cf7f06", - "derived_public_key": "023a79b546c79d7f7c5ff20620d914b5cf7250631d12f6e26427ed9d3f98c5ccb1" -} +``` + +The output will be: + +```shell +derived_private_key: fe1c56c494c730f13739c0655bf06e615409870200047fc65cdf781837cf7f06 +derived_public_key: 023a79b546c79d7f7c5ff20620d914b5cf7250631d12f6e26427ed9d3f98c5ccb1 ``` Parameters: @@ -210,29 +216,21 @@ Bitcoin wallet (first parameter) - ``: The HD derivation path that specifies how to derive the child key (second parameter) -To verify, you can execute the following +To verify, you can execute the following: ```shell bitdoind getaddressinfo
| jq .publickey ``` -If the public key matches the derived_public_key output from the +If the public key matches the `derived_public_key`s output from the `derive-child-key` command, the verification is successful. #### Step 4: Import the private key into a Cosmos Keyring Next, we are going to import the derived private key into the Cosmos keyring. -At the moment, the `covenant-signer` has not implemented functionality -for Cosmos key imports. To overcome this, we are going to utilize -the Babylon node binary `babylond` which has support for them. -You can install the binary by following the first section of the -[Babylon Node Setup Guide](https://github.com/babylonlabs-io/networks/blob/main/bbn-test-5/babylon-node/README.md). - -One you have the `babylond` binary installed, -navigate to the directory you want to set up your keyring and run: ```shell -babylond keys import-hex cov fe1c56c494c730f13739c0655bf06e615409870200047fc65cdf781837cf7f06 \ +covenant-signer keys import-hex cov fe1c56c494c730f13739c0655bf06e615409870200047fc65cdf781837cf7f06 \ --keyring-backend file \ --keyring-dir /path/to/your/keyring/directory ``` @@ -243,25 +241,27 @@ This command: - Uses the secure `file` backend which encrypts the key on disk - Will prompt you for a passphrase to encrypt the key -The passphrase you set here will be needed later on, keep this in mind. +Note that the passphrase you set here will be needed later on +to unlock the keyring. -> ⚡ Note: While both `os` and `file` backends are supported, we recommend -using the `file` backend as it has been thoroughly tested across different -environments. The `file` backend stores the private key in encrypted form -on disk. When running `import-hex` with the `file` backend, you will be -prompted for a passphrase. This passphrase will be required to unlock the -signer later. +> **⚡ Note:** While both `os` and `file` backends are supported, the authors +> of the docs have more thoroughly tested the `file` backend across +> different environments. +> The `file` backend stores the private key in encrypted form +> on disk. When running `import-hex` with the `file` backend, you will be +> prompted for a passphrase. This passphrase will be required to unlock the +> signer later. To confirm that the import was successful, run: ```shell -babylond keys show cov +covenant-signer keys show cov ``` The output will display the details of the imported key: ```shell - address: bbn1azasawj3ard0ffwj04zpxlw2pt9cp7kwjcdqmc + - address: bbn1azasawj3ard0ffwj04zpxlw2pt9cp7kwjcdqmc name: cov pubkey: '{"@type":"/cosmos.crypto.secp256k1.PubKey","key":"Ajp5tUbHnX98X/IGINkUtc9yUGMdEvbiZCftnT+Yxcyx"}' type: local @@ -284,24 +284,28 @@ This will create a configuration file, from the example configuration, in the specified path. Replace the placeholder values with your own -configuration. This can be placed directly in the `covenant-signer` directory. +configuration. This configuration can be placed directly in the +`covenant-signer` directory. ```toml [keystore] +# Type of keystore to use for managing private keys. Currently only +# "cosmos" is supported, which uses the Cosmos SDK keyring system for +# secure key storage. keystore-type = "cosmos" [keystore.cosmos] # pointing to the directory where the key is stored, unless specified otherwise key-directory = "/path/to/keydir" -# the backend to be used for storing the key, in this case file +# the backend to be used for storing the key, in this case `file` keyring-backend = "file" -# the name of the key you used when importing the key +# the key name you specified when importing your covenant key key-name = "your-key-name" -# the chain id of the chain to be used -chain-id = "your-chain-id" +# the chain id of the chain the covenant will connect to +chain-id = "network-chain-id" [server-config] # The IP address where the covenant-signer server will listen @@ -312,7 +316,7 @@ port = 9791 [metrics] # The IP address where the Prometheus metrics server will listen host = "127.0.0.1" -# This port is used to expose metrics that can be scraped by Prometheus +# The TCP port number where the Prometheus metrics server will listen port = 2113 ``` From c0e65a979762b4dfe2488ac72635c275cc531412 Mon Sep 17 00:00:00 2001 From: Sam Ricotta Date: Tue, 17 Dec 2024 17:31:54 +1100 Subject: [PATCH 40/40] small changes --- README.md | 7 +++++++ docs/covenant-signer-setup.md | 19 ++++++++++--------- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 5efa787..dcacdd0 100644 --- a/README.md +++ b/README.md @@ -111,3 +111,10 @@ secure Covenant Signer while the emulator handles the blockchain interaction and validation logic. ![Covenant Architecture](./static/covenant.png) + +## Covenant Emulator Stack Setup +To set up your covenant emulator stack, +please follow the instructions in the following documents +(in sequence): +1. [Covenant Signer Setup](./docs/covenant-signer-setup.md) +2. [Covenant Emulator Setup](./docs/covenant-emulator-setup.md) diff --git a/docs/covenant-signer-setup.md b/docs/covenant-signer-setup.md index 7b8386a..65a2d54 100644 --- a/docs/covenant-signer-setup.md +++ b/docs/covenant-signer-setup.md @@ -40,11 +40,11 @@ Schnorr adaptor signatures required for covenant operations. This guide requires that: 1. You have a Bitcoin node setup for the Bitcoin -network you intend to operate your covenant signer on. + network you intend to operate your covenant signer on. 2. You have access to the private Bitcoin key you -set up your covenant with. + set up your covenant with. 3. A connection to a Babylon node. To run your own node, please refer to the -[Babylon Node Setup Guide](https://github.com/babylonlabs-io/networks/blob/main/bbn-test-5/babylon-node/README.md). + [Babylon Node Setup Guide](https://github.com/babylonlabs-io/networks/blob/main/bbn-test-5/babylon-node/README.md). For a refresher on setting up the Bitcoin node, refer to the [deployment guide of your phase-1 covenant signer setup](https://github.com/babylonlabs-io/covenant-signer/blob/main/docs/deployment.md#2-bitcoind-setup). @@ -141,8 +141,9 @@ bitcoin-cli -datadir=./1/ getaddressinfo
| \ jq '.hdkeypath | sub("^m/"; "") | sub("/[^/]+$"; "")' ``` -In the above command, we use the `jq` utility to extract only the relevant `hdkeypath` -information, which in this example is `84h/1h/0h/0/0` (the initial `m/` can be ignored). +In the above command, we use the `jq` utility to extract only the relevant +`hdkeypath` information, which in this example is `84h/1h/0h/0/0` +(the initial `m/` can be ignored). Make note of the `hdkeypath` information - you'll need it later when deriving the covenant private key from the master key for verification purposes. @@ -150,9 +151,9 @@ deriving the covenant private key from the master key for verification purposes. #### Step 3: Retrieve the master private key In this step, -we are going to retrieve the **base58-encoded master private key** from the Bitcoin wallet. -This key will be used to derive the covenant private key, which can then be -imported directly into the Cosmos keyring. +we are going to retrieve the **base58-encoded master private key** from the +Bitcoin wallet. This key will be used to derive the covenant private key, +which can then be imported directly into the Cosmos keyring. The command below will list all descriptors in the wallet with private keys. This will provide you with the descriptor needed to derive the private key. @@ -219,7 +220,7 @@ the child key (second parameter) To verify, you can execute the following: ```shell -bitdoind getaddressinfo
| jq .publickey +bitcoin-cli getaddressinfo
| jq .publickey ``` If the public key matches the `derived_public_key`s output from the