Custody Tool
Intro
Chia's internal custody tool enables multisig, clawback, and rekeying. These features allow you to store assets on Chia's blockchain in one of the most secure setups ever devised.
This page includes a comprehensive list of Chia's Command Line Interface commands for using the custody tool.
For more info, see the following:
- Basic description of how the custody tool works
- Flow chart to visualize how the custody tool works
- User guide to help you get up and running
Reference
audit
Functionality: Export a history of the singleton to a CSV
Usage: cic audit [OPTIONS]
Options:
Short Command | Long Command | Type | Required | Description |
---|---|---|---|---|
-db | --db-path | TEXT | True | The file path to the sync DB (default: ./sync (******).sqlite) |
-f | --filepath | TEXT | False | The file path the dump the audit log |
-d | --diff | TEXT | False | A previous audit log to diff against this one |
-h | --help | None | False | Show a help message and exit |
Example
Request:
cic audit -db './sync (b43314).sqlite'
Response:
[
{
"time": 1665430389,
"action": "HANDLE_PAYMENT",
"params": {
"out_amount": 1000000000,
"recipient_ph": "3377e81d20ad9a3028ffe7e77360c03df48c412f2525aac58035738888adb83d",
"in_amount": 1000000000000,
"completed": true,
"spent_at_height": 1645707
}
},
{
"time": 1665449184,
"action": "HANDLE_PAYMENT",
"params": {
"out_amount": 1000000000,
"recipient_ph": "3377e81d20ad9a3028ffe7e77360c03df48c412f2525aac58035738888adb83d",
"completed": false,
"spent_at_height": 1645981,
"clawback_pubkey": "bls12381jjh08qx6hvucdrkgn8mrkafqrrp4j6sm4azndk0wz3precaa0teeyeamwtltxv435tsmx2tyayrwg8jy3x4"
}
},
{
"time": 1665980779,
"action": "START_REKEY",
"params": {
"from_root": "74905b06591f9d2e615d313d18cfbcbeffcaabe2e70ccdeafda783bacaae52ef",
"to_root": "90ba2a1ce4ca7f094aa1d2c64b7281b18a4e211e704b43ed45bf39f61cdd67d2",
"completed": true,
"spent_at_height": 1674754
}
},
{
"time": 1665986686,
"action": "START_REKEY",
"params": {
"from_root": "90ba2a1ce4ca7f094aa1d2c64b7281b18a4e211e704b43ed45bf39f61cdd67d2",
"to_root": "c330a8f9ed6a3fd50953f0b6365019246ea08d854ddbed0da3149dd4006abf1f",
"completed": true,
"spent_at_height": 1674940
}
}
]
clawback
Functionality: Clawback a withdrawal or rekey attempt (will be prompted which one)
Usage: cic clawback [OPTIONS]
Options:
Short Command | Long Command | Type | Required | Description |
---|---|---|---|---|
-db | --db-path | TEXT | True | The file path to the sync DB (default: ./sync (******).sqlite) |
-f | --filename | TEXT | False | The filepath to dump the spend bundle into |
-pks | --pubkeys | TEXT | True | A comma separated list of pubkeys that will be signing this spend |
-h | --help | None | False | Show a help message and exit |
Example
Request:
cic clawback -f clawback.unsigned -pks "1.pk,2.pk"
Response:
None
complete
Functionality: Complete a withdrawal or rekey attempt (will be prompted which one)
Usage: cic complete [OPTIONS]
Options:
Short Command | Long Command | Type | Required | Description |
---|---|---|---|---|
-db | --db-path | TEXT | True | The file path to the sync DB (default: ./sync (******).sqlite) |
-f | --filename | TEXT | False | The filepath to dump the spend bundle into |
-h | --help | None | False | Show a help message and exit |
Example -- complete a withdrawal
Request:
cic complete -f complete.signed
Response:
Which actions would you like to complete?:
1) PAYMENT to xch1xdm7s8fq4kdrq28lulnhxcxq8h6gcsf0y5j643vqx4ec3z9dhq7sqxsa9j of amount 1000000000
(Enter index of action to complete): 1
Successfully wrote spend to complete.signed
derive_root
Functionality: Take an existing configuration and pubkey set to derive a puzzle root
Usage: cic derive_root [OPTIONS]
Options:
Short Command | Long Command | Type | Required | Description |
---|---|---|---|---|
-c | --configuration | TEXT | False | The configuration file with which to derive the root (or the filepath to create it at if using --db-path) [default: ./Configuration (needs derivation).txt] |
-db | --db-path | TEXT | False | Optionally specify a DB path to find the configuration from |
-pks | --pubkeys | TEXT | True | A comma separated list of pubkey files that will control this money |
-m | --initial-lock-level | TEXT | True | The initial number of pubkeys required to do a withdrawal or standard rekey |
-n | --maximum-lock-level | TEXT | False | The maximum number of pubkeys required to do a withdrawal or standard rekey |
-min | --minimum-pks | INTEGER | False | The minimum number of pubkeys required to initiate a slow rekey [default: 1] |
-va | --validate-against | TEXT | False | Specify a configuration file to check whether it matches the specified parameters |
-h | --help | None | False | Show a help message and exit |
Example -- set up a 2-of-3 root config
Request:
cic derive_root -pks "1.pk,2.pk,3.pk" -m 2 -n 3
Response:
Custody rules successfully added to configuration
examine_spend
Functionality: Examine an unsigned spend bundle to see the details before you sign it
Usage: cic examine_spend [OPTIONS] SPEND_FILE
Options:
Short Command | Long Command | Type | Required | Description |
---|---|---|---|---|
--qr-density | INTEGER | False | The amount of bytes to pack into a single QR code [default: 250] | |
-va | --validate-against | TEXT | False | A new configuration file to check against requests for rekeys |
-h | --help | None | False | Show a help message and exit |
SPEND_FILE
is an unsigned spend bundle. This command will convert the spend bundle into a QR code and open it into a web browser for printing. You can then scan this QR code, for example using an HSM's QR scanner, for easier signing.
Example -- examine a rekey spend bundle
Request:
cic examine_spend ./rekey.unsigned
Response:
Type: Rekey
From: 74905b06591f9d2e615d313d18cfbcbeffcaabe2e70ccdeafda783bacaae52ef
To: 90ba2a1ce4ca7f094aa1d2c64b7281b18a4e211e704b43ed45bf39f61cdd67d2
Slow factor: 1
Spenders: bls12381jjh08qx6hvucdrkgn8mrkafqrrp4j6sm4azndk0wz3precaa0teeyeamwtltxv435tsmx2tyayrwg8jy3x4
Press Enter to exit
export_config
Functionality: Export a copy of the current DB's config
Usage: cic export_config [OPTIONS]
Options:
Short Command | Long Command | Type | Required | Description |
---|---|---|---|---|
-f | --filename | TEXT | False | The file path to export the config to (default: ./Configuration Export (******).sqlite) |
-db | --db-path | TEXT | True | The file path to initialize/find the sync database at (default: ./sync (******).sqlite) |
-p | --public | None | False | Enable to export the public information only (default: disabled) |
-h | --help | None | False | Show a help message and exit |
Example -- export the config to export.bin
Request:
cic export_config -p -f export.bin
Response:
Config successfully exported to export.bin
increase_security_level
Functionality: Initiate an increase of the number of keys required for withdrawal
Usage: cic increase_security_level [OPTIONS]
Options:
Short Command | Long Command | Type | Required | Description |
---|---|---|---|---|
-db | --db-path | TEXT | True | The file path to the sync DB (default: ./sync (******).sqlite) |
-pks | --pubkeys | TEXT | True | A comma separated list of pubkeys that will be signing this spend |
-f | --filename | TEXT | False | The filepath to dump the spend bundle into |
-h | --help | None | False | Show a help message and exit |
Example -- move to a 4-of-5 config
Request:
cic increase_security_level -db './sync (b43314).sqlite' -pks "1_new.pk,2_new.pk,3_new.pk,4_new.pk" -f lock.unsigned
Response:
Successfully wrote spend to lock.unsigned
init
Functionality: Create a configuration file for the prefarm. The arguments from this command will be committed to forever.
Usage: cic init [OPTIONS]
Options:
Short Command | Long Command | Type | Required | Description |
---|---|---|---|---|
-d | --directory | TEXT | False | The directory in which to create the configuration file [default: .] |
-wt | --withdrawal-timelock | TEXT | True | The amount of time where nothing has happened before a withdrawal can be made (in seconds) |
-pc | --payment-clawback | TEXT | True | The amount of time to clawback a payment before it's completed (in seconds) |
-rc | --rekey-cancel | TEXT | True | The amount of time to cancel a rekey before it's completed (in seconds) |
-rt | --rekey-timelock | TEXT | True | The amount of time where nothing has happened before a standard rekey can be initiated (in seconds) |
-sp | --slow-penalty | TEXT | True | The time penalty for performing a slow rekey (in seconds) |
-h | --help | None | False | Show a help message and exit |
Example
Request:
cic init -d . -wt 600 -pc 1200 -rt 300 -rc 600 -sp 900
Response:
A binary file called Configuration (needs derivation).txt
will be created in the -d
location.
launch_singleton
Functionality: Use 1 mojo to launch the singleton that will control the funds
Note: This is one of the two commands (along with push_tx) that interacts directly with the blockchain
Usage: cic launch_singleton [OPTIONS]
Options:
Short Command | Long Command | Type | Required | Description |
---|---|---|---|---|
-c | --configuration | TEXT | True | The configuration file with which to launch the singleton |
-db | --db-path | TEXT | True | The file path to initialize the sync database at |
-wp | --wallet-rpc-port | INTEGER | False | Set the port where the Wallet is hosting the RPC interface. See the rpc_port under wallet in config.yaml |
-f | --fingerprint | INTEGER | False | Set the fingerprint to specify which wallet to use |
-np | --node-rpc-port | INTEGER | False | Set the port where the Node is hosting the RPC interface. See the rpc_port under full_node in config.yaml |
--fee | INTEGER | False | Fee to use for the launch transaction (in mojos) [default: 0] | |
-h | --help | None | False | Show a help message and exit |
Example
Request:
cic launch_singleton --fee 10000000
Response:
Singleton successfully launched
p2_address
Functionality: Print the address to pay to the singleton
Usage: cic p2_address [OPTIONS]
Options:
Short Command | Long Command | Type | Required | Description |
---|---|---|---|---|
-db | --db-path | TEXT | True | The file path to the sync DB (default: ./sync (******).sqlite) |
-p | --prefix | TEXT | False | The prefix to use when encoding the address (default: xch) |
-h | --help | None | False | Show a help message and exit |
Example
Request:
cic p2_address --prefix txch
Response:
An address beginning with txch
will be output
payment
Functionality: Absorb/Withdraw money into/from the singleton
Usage: cic payment [OPTIONS]
Options:
Short Command | Long Command | Type | Required | Description |
---|---|---|---|---|
-db | --db-path | TEXT | True | The file path to the sync DB (default: ./sync (******).sqlite) |
-f | --filename | TEXT | False | The filepath to dump the spend bundle into |
-pks | --pubkeys | TEXT | True | A comma separated list of pubkeys that will be signing this spend |
-a | --amount | INTEGER | False | The outgoing amount (in mojos) to pay [default: 0] |
-t | --recipient-address | TEXT | True | The address that can claim the money after the clawback period is over (must be supplied if amount is > 0) |
-ap | --absorb-available-payments | None | False | Look for any outstanding payments to the singleton and claim them while doing this spend (adds tx cost) [default: false] |
-mc | --maximum-extra-cost | INTEGER | False | The maximum extra tx cost to be taken on while absorbing payments (as an estimated percentage) [default: 50] |
-at | --amount-threshold | INTEGER | False | The minimum amount required of a payment in order for it to be absorbed [default: 1000000000000 or 1 XCH][0 means "absorb everything"] |
-h | --help | None | False | Show a help message and exit |
Example
Request:
cic payment -f withdrawal.unsigned -pks "1.pk,2.pk" -a 1000000000 -t <recipient address> -ap
Response:
Successfully wrote spend to withdrawal.unsigned
push_tx
Functionality: Push a signed spend bundle to the network
Note: This is one of the two commands (along with launch_singleton) that interacts directly with the blockchain
Usage: cic push_tx [OPTIONS]
Options:
Short Command | Long Command | Type | Required | Description |
---|---|---|---|---|
-b | --spend-bundle | TEXT | True | The signed spend bundle |
-wp | --wallet-rpc-port | INTEGER | False | Set the port where the Wallet is hosting the RPC interface. See the rpc_port under wallet in config.yaml |
-f | --fingerprint | INTEGER | False | Set the fingerprint to specify which wallet to use |
-np | --node-rpc-port | INTEGER | False | Set the port where the Node is hosting the RPC interface. See the rpc_port under full_node in config.yaml |
-m | --fee | INTEGER | False | The fee to attach to this spend (in mojos) |
-h | --help | None | False | Show a help message and exit |
Example
Request:
cic push_tx -b ./complete.signed -m 10000000
Response:
{'status': 'SUCCESS', 'success': True}
show
Functionality: Show the status of the singleton, payments, and rekeys
Usage: cic show [OPTIONS]
Options:
Short Command | Long Command | Type | Required | Description |
---|---|---|---|---|
-db | --db-path | TEXT | True | The file path to the sync DB (default: ./sync (**).sqlite) [required] |
-c | --config | None | False | Enable to display the details of the public config (default: disabled) |
-d | --derivation | None | False | Enable to display the private details of the private config (default: disabled) |
-h | --help | None | False | Show a help message and exit |
Example -- show the configuration and derivation
Request:
cic show -c -d
Response:
Current time: 1665072285 (10/07/2022, 00:04:45)
Config up to date: True
Singleton:
- launcher ID: b433146cc20ef0e3d962423ddb1c6868cd9691e099ae579ab2518d1cd983885c
- amount left: 0
- amount to claim: 0
Outstanding events:
PAYMENTS:
REKEYS:
Config:
- current root: 74905b06591f9d2e615d313d18cfbcbeffcaabe2e70ccdeafda783bacaae52ef
- withdrawal timelock: 600 seconds
- payment clawback period: 1200 seconds
- rekey cancellation period: 600 seconds
Derivation Info:
- lock level: 2
- max lock level: 3
- min keys to rekey: 1
- standard rekey timelock: 300 seconds
- slow rekey penalty: 900 seconds
- pubkeys:
- bls123813p8yljrhgskmgqeukg3x6mszh3xtqwwx35t4g6dt0mk2xecyj7elr0fhhrm8t3w7q5zhdelgjlgdspjqxvs
- bls123813uhsu0juw06z8vmtt5ncj6zcexmhtsfemvtj3jhv0vuxh9nqjdar59yh555muzrdpz2uflgzey3sgdnm8y9
- bls1238152jm50wh89tf70mwj4ncuukqcq6jqmf7pjgznm55c5qaggrvswzccwvsjgwmy9f4cvlx2j97kmh5uc2es6h
start_rekey
Functionality: Rekey the singleton to a new set of keys/options
Usage: cic start_rekey [OPTIONS]
Options:
Short Command | Long Command | Type | Required | Description |
---|---|---|---|---|
-db | --db-path | TEXT | True | The file path to the sync DB (default: ./sync (******).sqlite) |
-f | --filename | TEXT | False | The filepath to dump the spend bundle into |
-pks | --pubkeys | TEXT | True | A comma separated list of pubkeys that will be signing this spend |
-new | --new-configuration | TEXT | True | The configuration you would like to rekey the singleton to |
-h | --help | None | False | Show a help message and exit |
Example
Request:
cic start_rekey -f rekey.unsigned -pks "1.pk,2.pk" -new './Configuration (after rekey).txt'
Response:
Successfully wrote spend to rekey.unsigned
sync
Functionality: Sync a singleton from an existing configuration
Usage: cic sync [OPTIONS]
Options:
Short Command | Long Command | Type | Required | Description |
---|---|---|---|---|
-c | --configuration | TEXT | False | The configuration file with which to initialize a sync database (default: ./Configuration (******).txt) |
-db | --db-path | TEXT | True | The file path to initialize/find the sync database at (default: ./sync (******).sqlite) |
-np | --node-rpc-port | INTEGER | False | Set the port where the Node is hosting the RPC interface. See the rpc_port under full_node in config.yaml |
-s | --show | None | False | Enable to show a summary of the singleton after sync is complete (default: disabled) |
-h | --help | None | False | Show a help message and exit |
Example -- sync and show the config
Request:
cic sync -s
Response:
Current time: 1665072029 (10/07/2022, 00:00:29)
Config up to date: True
Singleton:
- launcher ID: b433146cc20ef0e3d962423ddb1c6868cd9691e099ae579ab2518d1cd983885c
- amount left: 0
- amount to claim: 0
Outstanding events:
PAYMENTS:
REKEYS:
update_config
Functionality: Update an outdated config in a sync DB with a new config
Usage: cic update_config [OPTIONS]
Options:
Short Command | Long Command | Type | Required | Description |
---|---|---|---|---|
-c | --configuration | TEXT | False | The configuration file with which to initialize a sync database (default: ./Configuration (******).txt) |
-db | --db-path | TEXT | True | The file path to initialize/find the sync database at (default: ./sync (******).sqlite) |
-h | --help | None | False | Show a help message and exit |
Example -- update config after rekey
Request:
cic update_config -c './Configuration (after rekey).txt'
Response:
Configuration update successful