Pyth: 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 sol generate-address --account $account_id > $account_id.json
-
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: Generate Nonce Account
-
Turn on online machine
-
Retrieve the Ceremony SD card from High Visibility Storage and plug it into the computer
-
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:
-
Copy the
vaults
repository from the Ceremony SD card:$ cp -r /media/vaults ~/
- 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
- If the
-
Ensure
icepick
is available on system- Follow steps from installation guide
-
Change directory into the desired <namespace>/<coin> directory:
$ cd ~/vaults/<namespace>/<coin>
-
Select which account you are creating the delegate address by viewing the appropriate <namespace>/<coin>/ directory:
$ ls -la .
-
Once you have selected the appropriate account, set the account_id variable:
$ account_id=<num>
-
Use
icepick
to generate nonce account:-
If using a non-
mainnet-beta
cluster, be sure to provide the--cluster
argument -
Set
icepick
config file:
$ export ICEPICK_CONFIG_FILE=<path_to_icepick_repositry>/icepick.toml`
$ icepick workflow sol generate-nonce-account --input-file $account_id.json > $account_id-na.json
- Repeat command if returned message is "The transaction was possibly not received by the cluster."
-
-
Fund the wallet displayed on-screen with 0.01 SOL
- Once the funding is done, the nonce account will be created
-
Stage, commit, sign and push the changes:
$ git add . $ git commit -m -S "<message>" $ git push origin HEAD
Sealing
-
Gather all the original items that were in the air-gapped bundle:
-
Air-gapped computer
-
AirgapOS SD card
-
-
Insert object(s) into plastic sealing bag
-
Fill bag with enough plastic beads that most of the object is surrounded
-
Use vacuum sealer to remove air from the bag until the beads are no longer able to move
-
Take photographs of both sides of the sealed object using both the digital and polaroid camera
-
Date and sign the polaroid photographs and store them in a local lock box
-
Take the SD card to an online connected device, ensuring continued dual custody, and commit the tamper evidence photographs to a repository. If two individuals are present, have one create a PR with a signed commit, and the other do a signed merge commit.