# ethdo commands ethdo provides features to manage wallets and accounts, as well as interacting with Ethereum consensus nodes and remote signers. Below are a list of all available commands. Note that the below provides a list of commands rather than a howto guide. Please follow the ### `wallet` commands #### `accounts` `ethdo wallet accounts` lists the accounts within a wallet. ```sh $ ethdo wallet accounts --wallet="Personal wallet" Auctions Operations Spending ``` With the `--verbose` flag this will provide the public key of the accounts. ```sh $ ethdo wallet accounts --wallet="Personal wallet" --verbose Auctions: 0x812f340269c315c1d882ae7c13cdaddf862dbdbd482b1836798b2070160dd1e194088cc6f39347782028d1e56bd18674 Operations: 0x8e2f9e8cc29658ff37ecc30e95a0807579b224586c185d128cb7a7490784c1ad9b0ab93dbe604ab075b40079931e6670 Spending: 0x85dfc6dcee4c9da36f6473ec02fda283d6c920c641fc8e3a76113c5c227d4aeeb100efcfec977b12d20d571907d05650 ``` #### `create` `ethdo wallet create` creates a new wallet with the given parameters. Options for creating a wallet include: - `wallet`: the name of the wallet to create - `type`: the type of wallet to create. This can be either "nd" for a non-deterministic wallet, where private keys are generated randomly, or "hd" for a hierarchical deterministic wallet, where private keys are generated from a seed and path as per [ERC-2333](https://github.com/CarlBeek/EIPs/blob/bls_path/EIPS/eip-2334.md) (defaults to "nd") - `wallet-passphrase`: the passphrase for of the wallet. This is required for hierarchical deterministic wallets, to protect the seed - `mnemonic`: for hierarchical deterministic wallets only, use a pre-defined 24-word [BIP-39 seed phrase](https://en.bitcoin.it/wiki/Seed_phrase) to create the wallet, along with an additional "seed extension" phrase if required. **Warning** The same mnemonic can be used to create multiple wallets, in which case they will generate the same keys. ```sh $ ethdo wallet create --wallet="Personal wallet" --type="hd" --wallet-passphrase="my wallet secret" ``` #### `delete` `ethdo wallet delete` deletes a wallet. Options for deleting a wallet include: - `wallet`: the name of the wallet to delete ```sh $ ethdo wallet delete --wallet="Old wallet" ``` **Warning** Deleting a wallet is permanent. Only use this command if you really don't want the wallet, or you have securely backed the wallet up using `wallet export`. #### `export` `ethdo wallet export` exports the wallet and all of its accounts. Options for exporting a wallet include: - `wallet`: the name of the wallet to export (defaults to "primary") - `passphrase`: the passphrase with which to encrypt the wallet backup ```sh $ ethdo wallet export --wallet="Personal wallet" --passphrase="my export secret" 0x01c7a27ad40d45b4ae5be5f... ``` The encrypted wallet export is written to the console; it can be redirected to store it in a file. ```sh $ ethdo wallet export --wallet="Personal wallet" --passphrase="my export secret" >export.dat ``` #### `import` `ethdo wallet import` imports a wallet and all of its accounts exported by `ethdo wallet export`. Options for importing a wallet include: - `data`: the data exported by `ethdo wallet export` - `passphrase`: the passphrase that was provided to `ethdo wallet export` to encrypt the data - `verify`: confirm information about the wallet import without importing it ```sh $ ethdo wallet import --data="0x01c7a27ad40d45b4ae5be5f..." --passphrase="my export secret" ``` The encrypted wallet export can be read from a file. For example with Unix systems: ```sh $ ethdo wallet import --data=`cat export.dat` --passphrase="my export secret" ``` #### `info` `ethdo wallet info` provides information about a given wallet. Options include: - `wallet`: the name of the wallet ```sh $ ethdo wallet info --wallet="Personal wallet" Type: hierarchical deterministic Accounts: 3 ``` #### `list` `ethdo wallet list` lists all wallets in the store. ```sh $ ethdo wallet list Personal wallet ``` **N.B.** encrypted wallets will not show up in this list unless the correct passphrase for the store is supplied. #### `sharedexport` `ethdo wallet sharedexport` exports the wallet and all of its accounts with shared keys. Options for exporting a wallet include: - `wallet`: the name of the wallet to export (defaults to "primary") - `participants`: the total number of participants that each hold a share - `threshold`: the number of participants necessary to provide their share to restore the wallet - `file`: the name of the file that stores the backup ```sh $ ethdo wallet sharedexport --wallet="Personal wallet" --participants=3 --threshold=2 --file=backup.dat 298a4efce34c7f46114b7c4ea4be3d3bef925dccb153dd00227b53c3be7dad668b326f2659b2375e708bb824b33f0e7364e0f21dd18e5f5f2d7d04de7c122a9189 10eabc645fd1633e2e874ffc486fcbe313b33c34fbcb30511a74517296e01f332c6e3c40757c39b4dc47f3a417d321c4c81c2115e53fca57797c975913b8bf5063 559c77b56d36cbd84f23669a376d389f8c6644933a1a4112512e4d063d0779489c6b6312e6c46def0ee33ce5b5aca0941a833f65e64b5d270c7224323f4e28b238 ``` Each line of the output is a share and should be provided to one of the participants, along with the backup file. #### `sharedimport` `ethdo wallet sharedimport` imports a wallet and all of its accounts exported by `ethdo wallet sharedexport`. Options for importing a wallet include: - `file`: the name of the file that stores the backup - `shares`: a number of shares, defined by _threshold_ during the export, separated by spaces ```sh $ ethdo wallet sharedimport --file=backup.dat --shares="298a…9189 10ea…5063" ``` ### `account` commands Account commands focus on information about local accounts, generally those used by Geth and Parity but also those from hardware devices. #### `create` `ethdo account create` creates a new account with the given parameters. Options for creating an account include: - `account`: the name of the account to create (in format "wallet/account") - `passphrase`: the passphrase for the account - `path`: the HD path for the account (only for hierarchical deterministic accounts) Note that for hierarchical deterministic wallets you will also need to supply `--wallet-passphrase` to unlock the wallet seed. For distributed accounts you will also need to supply `--participants` and `--signing-threshold`. ```sh $ ethdo account create --account="Personal wallet/Operations" --wallet-passphrase="my wallet secret" --passphrase="my account secret" ``` #### `derive` `ethdo account derive` provides the ability to derive an account's keys without creating either the wallet or the account. This allows users to quickly obtain or confirm keys without going through a relatively long process, and has the added security benefit of not writing any information to disk. Options for deriving the account include: - `mnemonic`: a pre-defined 24-word [BIP-39 seed phrase](https://en.bitcoin.it/wiki/Seed_phrase) to derive the account, along with an additional "seed extension" phrase if required supplied as the 25th word - `path`: the HD path used to derive the account - `show-private-key`: show the private of the derived account. **Warning** displaying private keys, especially those derived from seeds held on hardware wallets, can expose your Ether to risk of being stolen. Only use this option if you are sure you understand the risks involved - `show-withdrawal-credentials`: show the withdrawal credentials of the derived account ```sh $ ethdo account derive --mnemonic="abandon ... abandon art" --path="m/12381/3600/0/0" Public key: 0x99b1f1d84d76185466d86c34bde1101316afddae76217aa86cd066979b19858c2c9d9e56eebc1e067ac54277a61790db ``` #### `import` `ethdo account import` creates a new account by importing its private key. Options for creating the account include: - `account`: the name of the account to create (in format "wallet/account") - `passphrase`: the passphrase for the account - `key`: the private key to import ```sh $ ethdo account import --account=Validators/123 --key=6dd12d588d1c05ba40e80880ac7e894aa20babdbf16da52eae26b3f267d68032 --passphrase="my account secret" ``` You can also import from an existing keystore such as those generated by the deposit CLI. For this you need the keystore and the keystore passphrase. For example: ```sh $ ethdo account import --account=Validators/123 --keystore=/path/to/keystore.json --keystore-passphrase="the keystore secret" --passphrase="my account secret" ``` `--keystore` can either be the path to the keystore file, or the contents of the keystore file. #### `info` `ethdo account info` provides information about the given account. Options include: - `account`: the name of the account on which to obtain information (in format "wallet/account") ```sh $ ethdo account info --account="Personal wallet/Operations" Public key: 0x8e2f9e8cc29658ff37ecc30e95a0807579b224586c185d128cb7a7490784c1ad9b0ab93dbe604ab075b40079931e6670 ``` #### `key` `ethdo account key` provides the private key for an account. Options include: - `account`: the name of the account on which to obtain information (in format "wallet/account") - `passphrase`: the passphrase for the account ```sh $ ethdo account key --account=interop/00001 --passphrase=secret 0x51d0b65185db6989ab0b560d6deed19c7ead0e24b9b6372cbecb1f26bdfad000 ``` #### `lock` `ethdo account lock` manually locks an account on a remote signer. Locked accounts cannot carry out signing requests. Options include: - `account`: the name of the account to lock (in format "wallet/account") Note that this command only works with remote signers; it has no effect on local accounts. ```sh $ ethdo account lock --account=Validators/123 ``` #### `unlock` `ethdo account unlock` manually unlocks an account on a remote signer. Unlocked accounts cannot carry out signing requests. Options include: - `account`: the name of the account to unlock (in format "wallet/account") - `passphrase`: the passphrase for the account Note that this command only works with remote signers; it has no effect on local accounts. ```sh $ ethdo account unlock --account=Validators/123 --passphrase="my secret passphrase" ``` ### `signature` commands Signature commands focus on generation and verification of data signatures. #### `signature sign` `ethdo signature sign` signs provided data. Options include: - `data`: the data to sign, as a hex string - `domain`: the domain in which to sign the data. This is a 32-byte hex string - `account`: the account to sign the data (in format "wallet/account") - `passphrase`: the passphrase for the account ```sh $ ethdo signature sign --data="0x08140077a94642919041503caf5cc1c89c7744a2a08d43cec91df1795b23ecf2" --account="Personal wallet/Operations" --passphrase="my account secret" 0x87c83b31081744667406a11170c5585a11195621d0d3f796bd9006ac4cb5f61c10bf8c5b3014cd4f792b143a644cae100cb3155e8b00a961287bd9e7a5e18cb3b80930708bc9074d11ff47f1e8b9dd0b633e71bcea725fc3e550fdc259c3d130 ``` #### `signature verify` `ethdo signature verify` verifies signed data. Options include: - `data`: the data whose signature to verify, as a hex string - `signature`: the signature to verify, as a hex string - `account`: the account which signed the data (if available as an account, in format "wallet/account") - `signer`: the public key of the account which signed the data (if not available as an account) ```sh $ ethdo signature verify --data="0x08140077a94642919041503caf5cc1c89c7744a2a08d43cec91df1795b23ecf2" --signature="0x87c83b31081744667406a11170c5585a11195621d0d3f796bd9006ac4cb5f61c10bf8c5b3014cd4f792b143a644cae100cb3155e8b00a961287bd9e7a5e18cb3b80930708bc9074d11ff47f1e8b9dd0b633e71bcea725fc3e550fdc259c3d130" --account="Personal wallet/Operations" $ ethdo signature verify --data="0x08140077a94642919041503caf5cc1c89c7744a2a08d43cec91df1795b23ecf2" --signature="0x87c83b31081744667406a11170c5585a11195621d0d3f796bd9006ac4cb5f61c10bf8c5b3014cd4f792b143a644cae100cb3155e8b00a961287bd9e7a5e18cb3b80930708bc9074d11ff47f1e8b9dd0b633e71bcea725fc3e550fdc259c3d130" --account="Personal wallet/Auctions" Not verified $ ethdo signature verify --data="0x08140077a94642919041503caf5cc1c89c7744a2a08d43cec91df1795b23ecf2" --signature="0x89abe2e544ef3eafe397db036103b1d066ba86497f36ed4ab0264162eadc89c7744a2a08d43cec91df128660e70ecbbe11031b4c2e53682d2b91e67b886429bf8fac9bad8c7b63c5f231cc8d66b1377e06e27138b1ddc64b27c6e593e07ebb4b" --signer="0x8e2f9e8cc29658ff37ecc30e95a0807579b224586c185d128cb7a7490784c1ad9b0ab93dbe604ab075b40079931e6670" $ ethdo signature verify --data="0x08140077a94642919041503caf5cc1c89c7744a2a08d43cec91df1795b23ecf2" --signature="0x87c83b31081744667406a11170c5585a11195621d0d3f796bd9006ac4cb5f61c10bf8c5b3014cd4f792b143a644cae100cb3155e8b00a961287bd9e7a5e18cb3b80930708bc9074d11ff47f1e8b9dd0b633e71bcea725fc3e550fdc259c3d130" --signer="0xad1868210a0cff7aff22633c003c503d4c199c8dcca13bba5b3232fc784d39d3855936e94ce184c3ce27bf15d4347695" --verbose Verified ``` The same rules apply to `ethereal signature verify` as those in `ethereal signature sign` above. ### `version` `ethdo version` provides the current version of ethdo. For example: ```sh $ ethdo version 1.4.0 ``` ### `block` commands Block commands focus on providing information about Ethereum consensus blocks. #### `analyze` `ethdo block info` obtains information about a block in the Ethereum consensus chain. Options include: - `blockid`: the ID (slot, root, 'head') of the block to obtain ```sh $ ethdo block analyze --blockid=80 Value for block 80: 488.531 ``` Additional information is supplied when using `--verbose` ``` $ ethdo block analyze --blockid=80 --verbose Attestation 0: distance 1, 119/119/132 new/total/possible votes, score 0.844, value 100.406 Attestation 1: distance 1, 116/116/131 new/total/possible votes, score 0.844, value 97.875 Attestation 2: distance 1, 115/115/131 new/total/possible votes, score 0.844, value 97.031 Attestation 3: distance 1, 114/114/132 new/total/possible votes, score 0.844, value 96.188 Attestation 4: distance 1, 113/113/132 new/total/possible votes, score 0.844, value 95.344 Attestation 5: distance 1, 2/22/132 new/total/possible votes, score 0.844, value 1.688 Value for block 80: 488.531 ``` #### `info` `ethdo block info` obtains information about a block in the Ethereum consensus chain. Options include: - `blockid`: the ID (slot, root, 'head') of the block to obtain ```sh $ ethdo block info --blockid=80 Attestations: 1 Attester slashings: 0 Deposits: 0 Voluntary exits: 0 ``` Additional information is supplied when using `--verbose` ```sh $ ethdo block info --slot=80 --verbose Parent root: 0x9a08aab7d5bbc816a9d2c20c79895519da2045e99ac6782ab3d05323a395fe51 State root: 0xc6a2626ba5cb37f984bdc4da4dc93a5012be5b69fdcebc50be70a1181a290265 Ethereum 1 deposit count: 512 Ethereum 1 deposit root: 0x05b88acdde2092e1ecf35714dca0ccf82fb7e73180643f51d3139553136d125f Ethereum 1 block hash: 0x2b8d87e016376d83b2c04c1e626172a3f8bef3b4a37d7f2f3f76d0c62acdf573 Attestations: 1 0: Committee index: 0 Attesters: 17 Aggregation bits: ✓✓✓✓✓✓✓✓ ✓✓✓✓✓✓✓✓ ✕✕✕✕✕✕✕✓ Slot: 79 Beacon block root: 0x9a08aab7d5bbc816a9d2c20c79895519da2045e99ac6782ab3d05323a395fe51 Source epoch: 0 Source root: 0x0000000000000000000000000000000000000000000000000000000000000000 Target epoch: 2 Target root: 0xb93273c516fc817e64fab53ff4093f295e5da463582e85e1ca60800e9464faf2 Attester slashings: 0 Deposits: 0 Voluntary exits: 0 ``` ### `chain` commands Chain commands focus on providing information about Ethereum consensus chains. #### `eth1votes` `ethdo chain eth1votes` obtains information about the votes for the next Ethereum 1 block to be incorporated in to the chain for deposits. Options include: - `epoch` show the votes at the end of the given epoch - `json` provide JSON output ```sh $ ethdo chain eth1votes Voting period: 6 Slots through period: 1000 Votes this period: 959 Leading vote is for block 0x0ae5716ac1906592dbfb243ccadf90191f706d6f8c925b4f2712d2e24687553a with 356 votes ``` Additional information is supplied when using `--verbose` #### `info` `ethdo chain info` obtains information about an Ethereum consensus chain. ```sh $ ethdo chain info Genesis time: Thu Apr 16 08:02:43 BST 2020 ``` Additional information is supplied when using `--verbose` ```sh $ ethdo chain info --verbose Genesis time: Thu Apr 16 08:02:43 BST 2020 Genesis fork version: 00000000 Seconds per slot: 12 Slots per epoch: 32 ``` #### `queues` `ethdo chain queues` obtains the activation and exit queue lengths of an Ethereum chain from the node's point of view. Options include: - `epoch` show the queue length at a given epoch - `json` provide JSON output ```sh $ ethdo chain queues Activation queue: 14798 ``` #### `spec` `ethdo chain spec` obtains the specification of an Ethereum consensus chain from the nod. ```sh $ ethdo chain spec ALTAIR_FORK_EPOCH: 74240 ALTAIR_FORK_VERSION: 0x01000000 BASE_REWARD_FACTOR: 64 ... ``` #### `status` `ethdo chain status` obtains the status of an Ethereum consensus chain from the node's point of view. Options include: - `slot` show output in terms of slots rather than epochs ```sh $ ethdo chain status Current epoch: 5 Justified epoch: 4 Finalized epoch: 3 ``` Additional information is supplied when using `--verbose` ```sh $ ethdo chain status --verbose Current epoch: 5 Justified epoch: 4 Justified epoch distance 1 Finalized epoch: 3 Finalized epoch distance: 2 Prior justified epoch: 3 Prior justified epoch distance: 4 ``` #### `time` `ethdo chain time` calculates the time period of Ethereum consensus epochs and slots. Options include: - `epoch` show epoch and slot times for the given epoch - `slot` show epoch and slot times for the given slot - `timestamp` show epoch and slot times for the given timestamp ```sh $ ethdo chain time --epoch=1234 Epoch 1234 Epoch start 2020-12-06 23:37:59 Epoch end 2020-12-06 23:44:23 Slot 39488 Slot start 2020-12-06 23:37:59 Slot end 2020-12-06 23:38:11 ``` ### `deposit` comands Deposit commands focus on information about deposit data information in a JSON file generated by the `ethdo validator depositdata` command. #### `verify` `ethdo deposit verify` verifies one or more deposit data information in a JSON file generated by the `ethdo validator depositdata` command. Options include: - `data`: either a path to the JSON file, the JSON itself, or a hex string representing a deposit transaction - `withdrawalpubkey`: the public key of the withdrawal for the deposit. If no value is supplied then withdrawal credentials for deposits will not be checked - `validatorpubkey`: the public key of the validator for the deposit. If no value is supplied then validator public keys will not be checked - `depositvalue`: the value of the Ether being deposited. If no value is supplied then deposit values will not be checked. ```sh $ ethdo deposit verify --data=${HOME}/depositdata.json --withdrawalpubkey=0xad1868210a0cff7aff22633c003c503d4c199c8dcca13bba5b3232fc784d39d3855936e94ce184c3ce27bf15d4347695 --validatorpubkey=0xa951530887ae2494a8cc4f11cf186963b0051ac4f7942375585b9cf98324db1e532a67e521d0fcaab510edad1352394c --depositvalue=32Ether ``` ### `epoch` comands Epoch commands focus on information about a beacon chain epoch. #### `summary` `ethdo epoch summary` provides a summary of the given epoch. Options include: - `epoch`: the epoch for which to provide a summary; defaults to last complete epoch - `json`: provide JSON output ```sh $ ethdo epoch summary Epoch 380: Proposals: 31/32 (96.88%) Attestations: 1530/1572 (97.33%) Sync committees: 13086/15872 (82.45%) ``` More detailed information can be obtained with the `--verbose` flag: ```sh $ ethdo epoch summary --verbose Epoch 380: Proposals: 31/32 (96.88%) Slot 12188 (28/32) validator 1518 not proposed or not included Attestations: 1530/1572 (97.33%) Slot 12160 committee 0 validator 292 failed to participate Slot 12162 committee 0 validator 204 failed to participate Slot 12163 committee 0 validator 297 failed to participate Slot 12164 committee 0 validator 209 failed to participate ... ``` ### `exit` comands Exit commands focus on information about validator exits generated by the `ethdo validator exit` command. #### `verify` `ethdo exit verify` verifies the validator exit information in a JSON file generated by the `ethdo validator exit` command. Options include: - `signed-operation`: either a path to the JSON file or the JSON itself ```sh $ ethdo exit verify --signed-operation=${HOME}/exit.json ``` ### `node` commands Node commands focus on information from an Ethereum consensus node. #### `events` `ethdo node events` displays events emitted by an Ethereum consensus node. ```sh $ ethdo node events --topics=head,chain_reorg {"topic":"head","data":{"block":"0x3b98ccd8dbd39e0763a5e91ef754f4559f5f9b6b8014ff45c8abf2eaf236324a","current_duty_dependent_root":"0xdedb063fcc2f404c701fe05a5bfbc95881d23292239adc1c4fc49d409beea7be","epoch_transition":false,"previous_duty_dependent_root":"0x626037a43b204b88d1911510d2717669ee2839b3227f5642832c36e5e6fc5e2f","slot":"231380","state":"0x009630f55970fa73b61cc97b0ed83b2faaf9103c8db722705e1b4376f240e415"}} {"topic":"head","data":{"block":"0x41e4c09da2ddbca777fbdae5b0cdd2823df630fb74e1d3f6837586046737b414","current_duty_dependent_root":"0xdedb063fcc2f404c701fe05a5bfbc95881d23292239adc1c4fc49d409beea7be","epoch_transition":false,"previous_duty_dependent_root":"0x626037a43b204b88d1911510d2717669ee2839b3227f5642832c36e5e6fc5e2f","slot":"231381","state":"0xd2ce52483df1add63df441c15d4aef291be8a41d6d1d3ce7e9d6d619f7c911de"}} ... ``` #### `info` `ethdo node info` obtains the information about an Ethereum consensus node. ```sh $ ethdo node info Syncing: false Current slot: 178 Current epoch: 5 ``` Additional information is supplied when using `--verbose` ```sh $ ethdo node info --verbose Version: Prysm/Git commit: b0aa6e22455e4d9cb8720a259771fbbbd22dc3ec. Built at: 2020-04-16T08:02:43+01:00 Syncing: false Current slot: 178 Current epoch: 5 Genesis timestamp: 1587020563 ``` ### `slot` commands Slot commands focus on information about Ethereum consensus slots. #### `slottime` `ethdo slot time` provides information about the time of a slot. options include: - `slot` the slot for which to provide the time ```sh $ ethdo slot time --slot=5 2020-12-01 12:01:23 +0000 GMT ``` ### `synccommittee` commands Sync committee commands focus on information about sync committees. #### `inclusion` `ethdo synccommittee inclusion` provides information about the inclusion, or not, of a validator's sync committee messages. Options include: - `validator`: the index, public key or account of the validator in format "wallet/account" - `epoch` the specific epoch for which to print sync committee contributions. Defaults to the last complete epoch ```sh $ ethdo synccommittee inclusion --index=274946 --epoch=91592 Epoch: 91593 Expected: 32 Included: 30 Missed: 1 No block: 1 Per-slot result: ✓✓✓✓✓✓✓✓ ✓✓✕✓✓✓✓✓ ✓✓✓✓-✓✓✓ ✓✓✓✓✓✓✓✓ ``` #### `members` `ethdo synccommittee members` provides information about the members of a sync committee. Options include: - `epoch` the specific epoch for which to provide sync committee members. - `period` the period for which to provide sync committee members. Can be 'current' or 'next'; dfeaults to 'current' ```sh $ ethdo synccommittee members 138334,116317,231736,65706,60046,148162,274946,34724,18051,122841,269578,121110,89733,154887,202118,243459,267543,82793,59504,238929,55360,272874,93917,83116,264342,244312,264907,79193,15443,27997,127175,140965,64416,66399,173906,268885,67779,48139,215005,191435,107954,225228,148630,169357,61091,223319,40668,184307,95903,81179,237461,41723,119710,243333,248243,42757,228686,252749,17546,231625,132030,15934,108465,104302,93026,191946,63738,80996,90679,227542,75463,64581,242030,5429,61623,157314,145363,224733,232492,45357,80674,198583,221422,48665,154803,128608,172512,261074,102835,129935,255726,40846,218932,139874,194575,17346,171565,76413,237859,103170,95661,83018,73902,246680,35795,257792,23836,136624,45745,190990,124229,37281,23818,233435,253903,37502,8669,31151,267179,27954,181019,145719,112270,1899,184844,175014,121769,41717,218760,44813,255860,64865,31985,231664,134296,88114,185542,27557,1698,62470,79182,184325,80380,8865,218456,178979,243886,9466,221389,131476,160857,62916,195389,160182,99293,100263,242371,144594,227527,275978,65714,74350,60121,46642,219334,157142,99379,203508,84367,251808,276456,92563,199831,215312,193875,129690,104234,44290,227725,194780,163061,162328,176517,278620,137355,212826,131615,125734,151873,18977,147927,272759,160537,210675,180411,24203,37266,247527,128678,270287,90352,23043,169645,5304,183412,237387,79751,37635,275139,95857,185990,235565,49425,255836,254314,77582,104172,168556,143653,64173,64504,130363,216602,218107,181130,191845,56454,2040,270365,161952,222409,45097,51611,219190,154903,162311,257460,106337,110775,42928,275709,202352,54724,272295,274470,35220,19694,10347,169585,104938,35121,212982,190582,77999,110201,141519,239881,81263,84314,148883,254649,256309,270013,254179,134009,149660,177127,201926,30533,164789,154343,57437,28958,135169,186415,218514,171355,165247,213526,100044,184264,93278,269329,159634,4092,224671,217236,123946,80703,85444,247742,17959,146473,128231,167559,133899,181532,33378,79060,119785,249443,180469,43692,169679,154421,114047,87877,28337,59072,19807,204598,220293,99461,55272,227923,4503,12580,27044,68955,157373,61321,265034,106833,31534,69137,264783,129588,70433,88338,113528,226211,123003,118982,131549,60350,78896,165715,119736,52639,93274,164295,278837,186453,69910,36768,249533,106205,184057,253232,88155,121377,242589,148236,250065,191526,277249,157463,226527,93000,64784,176880,176380,144301,52061,169803,134291,96648,211716,223000,157911,256737,100938,50434,41075,114894,259888,116872,218201,83617,76348,256832,17113,50270,96468,128448,36987,127511,42397,10154,49234,193346,126352,57719,17029,213127,157942,187829,2353,62462,73637,29053,120324,108515,254684,35982,188131,217092,256206,85802,105907,21204,147562,188961,154541,131147,16000,225112,58362,170375,42239,188309,60280,125472,220119,268946,65736,274053,223569,60454,239552,4401,139357,279634,162711,112016,90295,170641,239770,212067,213770,78311,49057,256295,28666,167207,166783,213148,30689,72118,55912,197733,205116,106169,40570,225057,122079,126423,217781,212897,147499,201774,10616,157826,155954,258431,212151,255318,97138,151907,181491,40236,272993,104430,178068,56089,10067,185066,93669,124108,12785,230215,67995,196282,248285,215370,167715,186183,238147,164161,15068,127990,166146,244578,195912,199812,248435,135597,143024,225304,27045,238140,87008,272550,165234,218128,160038,17697,25332,23446,265921,201045,241106 ``` ### `validator` commands Validator commands focus on interaction with Ethereum consensus validators. #### `credentials get` `ethdo validator credentials get` provides information about the withdrawal credentials for the provided validator. Options include: - `validator` the account, public key or index for which to obtain the withdrawal credentials ```sh $ ethdo validator credentials get --validator=Validators/1 ``` #### `credentials set` `ethdo validator credentials set` updates withdrawal credentials from BLS "type 0" credentials to execution "type 1" credentials. Full information about using this command can be found in the [specific documentation](./changingwithdrawalcredentials.md). ```sh $ ethdo validator credentials set --validator=Validators/1 --withdrawal-address=0x8f…9F --private-key=0x3b…9c ``` #### `depositdata` `ethdo validator depositdata` generates the data required to deposit one or more Ethereum consensus validators. Options include: - `withdrawalaccount` specify the account to be used for the withdrawal credentials (if withdrawalpubkey is not supplied) - `withdrawaladdress` specify the Ethereum execution address to be used for the withdrawal credentials (if withdrawalpubkey is not supplied) - `withdrawalpubkey` specify the public key to be used for the withdrawal credentials (if withdrawalaccount is not supplied) - `validatoraccount` specify the account to be used for the validator - `depositvalue` specify the amount of the deposit - `forkversion` specify the fork version for the deposit signature; this defaults to mainnet. Note that supplying an incorrect value could result in the loss of your deposit, so only supply this value if you are sure you know what you are doing. You can find the value for other chains by fetching the value supplied in "Genesis fork version" of the `ethdo chain info` command - `raw` generate raw hex output that can be supplied as the data to an Ethereum 1 deposit transaction #### `exit` `ethdo validator exit` sends a transaction to the chain to tell an active validator to exit the validation queue. Options include: - `epoch` specify an epoch before which this exit is not valid - `json` generate JSON output rather than sending a transaction immediately - `exit` use JSON exit input created by the `--json` option rather than generate data from scratch ```sh $ ethdo validator exit --account=Validators/1 --passphrase="my validator secret" ``` To send a transaction when the account is not accessible to ethdo accout you can use the validator's private key instead: ```sh $ ethdo validator exit --key=0x01e748d098d3bcb477d636f19d510399ae18205fadf9814ee67052f88c1f88c0 ``` #### `info` `ethdo validator info` provides information for a given validator. ```sh $ ethdo validator info --validator=Validators/1 Status: Active Balance: 3.203823585 Ether Effective balance: 3.1 Ether ``` Additional information is supplied when using `--verbose` ```sh $ ethdo validator info --validator=Validators/1 --verbose Epoch of data: 3398 Index: 26913 Public key: 0xb3bb6b7a8d809e59544472853d219499765bf01d14de1e0549bd6fc2a86627ac9033264c84cd503b6339e3334726562f Status: Active Balance: 3.204026813 Ether Effective balance: 3.1 Ether Withdrawal credentials: 0x0033ef3cb10b36d0771ffe8a02bc5bfc7e64ea2f398ce77e25bb78989edbee36 ``` If the validator is not an account then `--validator` option can be supplied with a validator index or public key. ```sh $ ethdo validator info --validator=0x842dd66cfeaeff4397fc7c94f7350d2131ca0c4ad14ff727963be9a1edb4526604970df6010c3da6474a9820fa81642b Status: Active Balance: 3.201850307 Ether Effective balance: 3.1 Ether ``` #### `keycheck` `ethdo validator keycheck` checks if a given key matches a validator's withdrawal credentials. Options include: - `withdrawal-credentials` the withdrawal credentials against which to match - `privkey` the private key used to generat matching withdrawal credentials - `mnemonic` the mnemonic used to generate matching withdrawal credentials ```sh $ ethdo validator keycheck --withdrawal-credentials=0x007e28dcf9029e8d92ca4b5d01c66c934e7f3110606f34ae3052cbf67bd3fc02 --mnemonic='abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon art' Withdrawal credentials confirmed at path m/12381/3600/10/0 ``` #### `expectation` `ethdo validator expectation` calculates the times between expected actions. ```sh $ ethdo validator expectation Expected time between block proposals: 4 weeks 6 days Expected time between sync committees: 1 year 27 weeks ``` ### `attester` commands Attester commands focus on Ethereum consensus validators' actions as attesters. #### `duties` `ethdo attester duties` provides information on the duties that a given validator has in a given epoch. Options include: - `epoch` the epoch in which to obtain the duties (defaults to current epoch) - `validator` the validator for which to fetch the duties, as an index, publi key or account in the format "wallet/account" ```sh $ ethdo attester duties --validator=Validators/0 --epoch=5 Validator attesting in slot 186 committee 3 ``` #### `inclusion` `ethdo attester inclusion` finds the block with wihch an attestation is included on the chain. Options include: - `epoch` the epoch in which to obtain the inclusion information (defaults to previous epoch) - `validator` the validator for which to fetch the duties, as an index, publi key or account in the format "wallet/account" ```sh $ ethdo attester inclusion --validator=Validators/1 --epoch=6484 Attestation included in block 207492 (inclusion delay 1) ``` #### `withdrawal` `ethdo validator withdrawal` provides information about the next withdrawal for the given validator. Options include: - `validator`: the list of validators for which to provide a summary - `json`: provide JSON output ```sh $ ethdo validator withdrawal --validator=12345 Withdrawal expected at 2023-04-17T15:08:35 in block 6243041 ``` #### `yield` `ethdo validator yield` calculates the expected yield given the number of validators. Options include: - `validators` use a specified number of validators rather than the current number of active validators - `json` obtain detailed information in JSON format ```sh $ ethdo validator yield Yield: 4.64% ``` #### `summary` `ethdo validator summary` provides a summary of the given epoch for the given validators. Options include: - `epoch`: the epoch for which to provide a summary; defaults to last complete epoch - `validators`: the list of validators for which to provide a summary - `json`: provide JSON output ### `proposer` commands Proposer commands focus on Ethereum consensus validators' actions as proposers. #### `duties` `ethdo proposer duties` provides information on the proposal duties for a given epoch. Options include: - `epoch` the epoch in which to obtain the duties (defaults to current epoch) - `json` obtain detailed information in JSON format ```sh $ ethdo proposer duties --epoch=5 Epoch 5: Slot 160: validator 8221 Slot 161: validator 11193 Slot 162: validator 4116 Slot 163: validator 631 ... ``` ## Maintainers Jim McDonald: [@mcdee](https://github.com/mcdee). ## Contribute Contributions welcome. Please check out [the issues](https://github.com/wealdtech/ethdo/issues). ## License [Apache-2.0](LICENSE) © 2019, 2020 Weald Technology Trading Ltd