Seda: Generate Address
Requirements
-
For ALL tamper proofed hardware used in the ceremony, both operators MUST print photographic evidence from digital cameras which is stored in a PGP signed repository. The photographs should be of the top and underside of the vacuum sealed object.
- The operators should verify the commit signatures of the photographs they are printing against a list of permitted PGP keys found in the "ceremonies" repo
-
- Provided by Air-Gapped Bundle
- Alternative: Create your own from documentation in AirgapOS Repository
-
AirgapOS Laptop
- Provided by Air-Gapped Bundle
- Alternative: Computer that can load AirgapOS (compatibility reference)
-
Minimum of 1 Operator and 1 Witness
- Personal PGP key pair for each operator
-
Tamper-proofing equipment
-
Linux Workstation (online machine)
- Any internet connected computer with a Linux shell will suffice
-
High Visibility Storage: plastic container or bag that's used to keep items while not in use in a visible location like the middle of a desk.
Procedure
-
Enter the designated location with the quorum of operators and all required equipment
-
Lock access to the location - there should be no inflow or outflow of people during the ceremony
-
Place Ceremony SD card in High Visibility Storage
-
Retrieve sealed Air-Gapped bundle, polaroid of tamper evidence, and online laptop from locked storage
a. Retrieve digital/physical photographs of both sides of sealed bundle
b. Compare all photographs to object for differences
c. Proceed with unsealing the object if no differences are detected
-
Place all contents except for the laptop into High Visibility Storage
Offline Machine: Generate Address
-
Retrieve AirgapOS SD card and plug it into the air-gapped machine
-
Turn on air-gapped machine
-
Unplug the AirgapOS SD card and place it in High Visibility Storage
-
Retrieve Ceremony SD card from High Visibility Storage and plug it into the air-gapped machine
-
Copy the
vaults
repository to the machine and switch to it$ cp -r /media/vaults /root/ $ cd /root/vaults
-
Start Keyfork using the relevant Shardfile:
$ keyfork recover shard --daemon <namespace>/shardfile.asc
- Follow on screen prompts
-
If the desired
<coin>
directory doesn't exist for the namespace, create it:$ mkdir -p <namespace>/<coin>
-
Connect to the appropriate coin directory:
$ cd <namespace>/<coin>/
-
Check what the latest address account is:
$ ls -la .
-
Find what the latest number for the address is, and add 1 to it. This will be the new address account.
-
For example if the latest address file is 42, the new account_id would be 43. The addresses should start at
0
-
Set an environment variable with the new account_id:
$ account_id=<num>
-
-
Generate a new address:
icepick workflow cosmos generate-address --chain-name seda --account $account_id > $account_id.json
The option
--chain-name
can useseda
orseda-devnet
. -
Sign the file using:
-
Import OpenPGP keys:
gpg --import /media/vaults/keys/all/*.asc
-
gpg --detach-sign $account_id.json
-
-
You may repeat the previous steps, starting at the step where the
account_id
is set. -
Once finished, copy the updated repository back to the Ceremony SD card:
cp -rf /root/vaults /media/
-
Shut down the air gapped machine
-
Unplug the Ceremony SD card and place it into High Visibility Storage
Online Machine: Updating Vaults Repository
-
Turn on online linux workstation
-
Connect SD card to online linux workstation
-
Look for your SD card device name (
<device_name>
) in the output of thelsblk
command. It will typically be listed as/dev/sdX
or/dev/mmcblk<num>
, where X is a letter (e.g.,/dev/sdb
,/dev/sdc
). You can identify it by its size or by checking if it has a partition (like/dev/sdX1
)- Mount the device using:
sudo mount /dev/<your_device> /media
- Mount the device using:
-
If the
~/vaults/
repository already exists, ensure it doesn't have any changes that haven't been committed, then remove it usingsudo rm -rf ~/vaults
before re-running the previous step -
Copy the repository with updated files to an online linux workstation, sign, commit and push to the
vaults
repository:$ cp -r /media/vaults ~/vaults/ $ cd ~/vaults $ git add . $ git commit -S -m "<message>" $ git push origin HEAD