Seda: Sign and Broadcast Transaction
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
Online Machine: Acquire Nonce
-
Turn on online linux workstation
-
Retrieve the Ceremony SD card from High Visibility Storage and plug it into the computer
-
Get the nonce address for the address you are sending from by checking the appropriate <namespace>/<coin>/ directory.
-
e.g
vaults/<namespace>/<coin>/0-na.txt
-
Set the nonce address variable:
$ nonce_address="$(cat vaults/<namespace>/<coin>/<account_id>-na.txt)"
-
-
Set
ICEPICK_DATA_DIRECTORY
: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
$ export ICEPICK_DATA_DIRECTORY=/media/external/
- Mount the device using:
-
set
ICEPICK_CONFIG_FILE
$ export ICEPICK_CONFIG_FILE=<path_to_icepick_repo>/icepick.toml`
-
Run the command:
$ icepick workflow cosmos broadcast --chain-name seda --nonce-address=$nonce_address
The option
--chain-name
can useseda
orseda-devnet
.-
Await completion message before removing Ceremony SD card
-
This command will set the computer into "awaiting mode", which will broadcast the signed transaction from the SD card once it's plugged back in after the workflow payloads are signed on the offline machine
-
Offline Machine: Create and Sign Transaction
-
Retrieve AirgapOS SD card and plug it into the air-gapped machine
-
Boot the computer
-
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
-
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:
-
Start Keyfork using the relevant Shardfile:
$ keyfork recover shard --daemon /media/<device_name>/vaults/<namespace>/shardfile.asc
- The Shardfile may be named something else. Use
find /media/<device_name>/vaults -type f -name '*shardfile*.asc'
to list all files.
- The Shardfile may be named something else. Use
-
Follow on screen prompts
-
Set
ICEPICK_DATA_DIRECTORY
:$ export ICEPICK_DATA_DIRECTORY=/media/<device_name>
-
Run the
icepick
command with the transaction payload- The payload is located in the appropriate vault location (e.g /media/<device_name>/vaults/
/ceremonies/ ...)
$ icepick workflow --run-quorum <payload>.json --shardfile /media/<device_name>/vaults/<namespace>/shardfile.asc
- Follow on screen prompts
- The payload is located in the appropriate vault location (e.g /media/<device_name>/vaults/
-
Unplug the Ceremony SD card and place it in High Visibility Storage
Broadcast Transaction: Online Machine
-
Retrieve Ceremony SD from High Visibility Storage and plug it into online machine
-
The still running broadcast command on the online machine will broadcast the transaction automatically
-
The url that's found in the response after a successful broadcast should be reviewed and committed to the ceremony repository
-
Remove the transaction files in
ICEPICK_DATA_DIRECTORY
$ rm $ICEPICK_DATA_DIRECTORY/transaction.json $ rm $ICEPICK_DATA_DIRECTORY/account_info.json
-
Unplug the Ceremony SD card and place it in High Visibility Storage
Repeat
- You may repeat previous steps as many times as necessary to process all workflow payloads
Finalization
-
Shut down online linux workstation
-
Shut down the air gapped machine
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.