Skip to content

Commit

Permalink
wip
Browse files Browse the repository at this point in the history
  • Loading branch information
samricotta committed Dec 16, 2024
1 parent 8bdbee4 commit 4c1ed11
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 39 deletions.
4 changes: 3 additions & 1 deletion docs/covenant-emulator-setup.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
80 changes: 42 additions & 38 deletions docs/covenant-signer-setup.md
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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).
Expand Down Expand Up @@ -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.
Expand Down Expand Up @@ -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 <address> | \
jq '.hdkeypath | sub("^m/"; "") | sub("/[^/]+$"; "")'
```

Expand Down Expand Up @@ -169,9 +170,11 @@ bitcoin-cli listdescriptors true | jq -r '
.descriptors[] |
select(.desc | contains("<hdkeypath>")) |
.desc
' descriptors.json
{
wpkh(tprv8ZgxMBicQKsPe9aCeUQgMEMy2YMZ6PHnn2iCuG12y5E8oYhYNEvUqUkNy6sJ7ViBmFUMicikHSK2LBUNPx5do5EDJBjG7puwd6azci2wEdq/84h/1h/0h/0/*)#sachkrde
'
The output will be:

```shell
wpkh(tprv8ZgxMBicQKsPe9aCeUQgMEMy2YMZ6PHnn2iCuG12y5E8oYhYNEvUqUkNy6sJ7ViBmFUMicikHSK2LBUNPx5do5EDJBjG7puwd6azci2wEdq/84h/1h/0h/0/*)#sachkrde
}
```

Expand All @@ -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:
Expand All @@ -210,29 +216,21 @@ Bitcoin wallet (first parameter)
- `<derivation-path>`: 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 <address> | 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
```
Expand All @@ -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
Expand All @@ -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
Expand All @@ -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
```
Expand Down

0 comments on commit 4c1ed11

Please sign in to comment.