Skip to content

Instantly share code, notes, and snippets.

@rcmorano
Last active March 1, 2022 01:05
Show Gist options
  • Save rcmorano/f2174cd002648a1d115389fb489d64b6 to your computer and use it in GitHub Desktop.
Save rcmorano/f2174cd002648a1d115389fb489d64b6 to your computer and use it in GitHub Desktop.
cardano-addresses baids
#!/bin/bash
function cardano-address-init() {
WALLETS_DIR=${HOME}/.cardano/wallets
MNEMONICS_SIZE=24
}
function cardano-address-testnet-init() {
cardano-address-init
NETWORK_TAG=testnet
MAGIC="--testnet-magic 1097911063"
}
function cardano-address-mainnet-init() {
cardano-address-init
NETWORK_TAG=mainnet
MAGIC="--mainnet"
}
function cardano-address-create-testnet-wallet() {
cardano-address-testnet-init
WALLET_NAME=$1
WALLET_DIR=${WALLETS_DIR}/${WALLET_NAME}
mkdir -p ${WALLET_DIR}
ROOT_PRIV_KEY_FILE=${WALLET_DIR}/root.prv
MNEMONICS_PRIV_FILE=${WALLET_DIR}/mnemonics.prv
STAKE_XPRIV_KEY_FILE=${WALLET_DIR}/stake.xprv
STAKE_XPUB_KEY_FILE=${WALLET_DIR}/stake.xpub
STAKE_ADDRESS_FILE=${WALLET_DIR}/stake.addr
STAKE_SKEY_FILE=${WALLET_DIR}/stake.skey
STAKE_EVKEY_FILE=${WALLET_DIR}/stake.evkey
STAKE_VKEY_FILE=${WALLET_DIR}/stake.vkey
PAYMENT_XPRV_KEY_FILE=${WALLET_DIR}/payment.xprv
PAYMENT_XPUB_KEY_FILE=${WALLET_DIR}/payment.xpub
PAYMENT_ADDRESS_FILE=${WALLET_DIR}/payment.addr
PAYMENT_SKEY_FILE=${WALLET_DIR}/payment.skey
PAYMENT_EVKEY_FILE=${WALLET_DIR}/payment.evkey
PAYMENT_VKEY_FILE=${WALLET_DIR}/payment.vkey
DELEGATION_ADDRESS_FILE=${WALLET_DIR}/delegation.addr
BASE_ADDRESS_CANDIDATE_FILE=${WALLET_DIR}/base.addr_candidate
BASE_ADDRESS_FILE=${WALLET_DIR}/base.addr
# Generate mnemonics and root key
cardano-address recovery-phrase generate --size ${MNEMONICS_SIZE} | tee ${MNEMONICS_PRIV_FILE} | \
cardano-address key from-recovery-phrase Shelley > ${ROOT_PRIV_KEY_FILE}
# Generate account keys
cat ${ROOT_PRIV_KEY_FILE} | cardano-address key child 1852H/1815H/0H/0/0 > ${PAYMENT_XPRV_KEY_FILE}
cat ${PAYMENT_XPRV_KEY_FILE} | cardano-address key public --with-chain-code | tee ${PAYMENT_XPUB_KEY_FILE} | \
cardano-address address payment --network-tag ${NETWORK_TAG} > ${PAYMENT_ADDRESS_FILE}
cat ${PAYMENT_XPRV_KEY_FILE} | cardano-address key inspect > ${PAYMENT_SKEY_FILE}
# Generate stake keys
cat ${ROOT_PRIV_KEY_FILE} | cardano-address key child 1852H/1815H/0H/2/0 > ${STAKE_XPRIV_KEY_FILE}
cat ${STAKE_XPRIV_KEY_FILE} | \
cardano-address key public --with-chain-code | tee ${STAKE_XPUB_KEY_FILE} | \
cardano-address address stake --network-tag ${NETWORK_TAG} > ${STAKE_ADDRESS_FILE}
cat ${STAKE_XPRIV_KEY_FILE} | cardano-address key inspect > ${STAKE_SKEY_FILE}
cat ${PAYMENT_XPRV_KEY_FILE} | \
cardano-address key public --with-chain-code | \
cardano-address address payment --network-tag ${NETWORK_TAG} | \
cardano-address address delegation $(cat ${STAKE_XPRIV_KEY_FILE} | cardano-address key public --with-chain-code | tee ${STAKE_XPUB_KEY_FILE}) > ${BASE_ADDRESS_CANDIDATE_FILE}
# Inspired by https://gist.github.com/ilap/5af151351dcf30a2954685b6edc0039b#script
SESKEY=$( cat ${STAKE_XPRIV_KEY_FILE} | bech32 | cut -b -128 )$( cat ${STAKE_XPUB_KEY_FILE} | bech32)
PESKEY=$( cat ${PAYMENT_XPRV_KEY_FILE} | bech32 | cut -b -128 )$( cat ${PAYMENT_XPUB_KEY_FILE} | bech32)
cat << EOF2 > ${STAKE_SKEY_FILE}
{
"type": "StakeExtendedSigningKeyShelley_ed25519_bip32",
"description": "",
"cborHex": "5880$SESKEY"
}
EOF2
cat << EOF3 > ${PAYMENT_SKEY_FILE}
{
"type": "PaymentExtendedSigningKeyShelley_ed25519_bip32",
"description": "Payment Signing Key",
"cborHex": "5880$PESKEY"
}
EOF3
cardano-cli key verification-key --signing-key-file ${STAKE_SKEY_FILE} --verification-key-file ${STAKE_EVKEY_FILE}
cardano-cli key verification-key --signing-key-file ${PAYMENT_SKEY_FILE} --verification-key-file ${PAYMENT_EVKEY_FILE}
cardano-cli key non-extended-key --extended-verification-key-file ${STAKE_EVKEY_FILE} --verification-key-file ${STAKE_VKEY_FILE}
cardano-cli key non-extended-key --extended-verification-key-file ${PAYMENT_EVKEY_FILE} --verification-key-file ${PAYMENT_VKEY_FILE}
cardano-cli stake-address build --stake-verification-key-file ${STAKE_VKEY_FILE} $MAGIC > ${STAKE_ADDRESS_FILE}
cardano-cli address build --payment-verification-key-file ${PAYMENT_VKEY_FILE} $MAGIC > ${PAYMENT_ADDRESS_FILE}
cardano-cli address build \
--payment-verification-key-file ${PAYMENT_VKEY_FILE} \
--stake-verification-key-file ${STAKE_VKEY_FILE} \
$MAGIC > ${BASE_ADDRESS_FILE}
}
function cardano-address-create-extra-address() {
cardano-address-testnet-init
WALLET_NAME=$1
WALLET_DIR=${WALLETS_DIR}/${WALLET_NAME}
ACCOUNTS_DIR=${WALLET_DIR}/accounts
ACCOUNT_ID=$(( $(ls -1 ${ACCOUNTS_DIR}/ | grep ^[0-9] | sort -n | tail -n1) + 1 ))
ACCOUNT_DIR=${ACCOUNTS_DIR}/${ACCOUNT_ID}
mkdir -p ${ACCOUNT_DIR}
ROOT_PRIV_KEY_FILE=${WALLET_DIR}/root.prv
MNEMONICS_PRIV_FILE=${WALLET_DIR}/mnemonics.prv
PAYMENT_XPRV_KEY_FILE=${ACCOUNT_DIR}/payment.xprv
PAYMENT_XPUB_KEY_FILE=${ACCOUNT_DIR}/payment.xpub
PAYMENT_ADDRESS_FILE=${ACCOUNT_DIR}/payment.addr
PAYMENT_SKEY_FILE=${ACCOUNT_DIR}/payment.skey
PAYMENT_EVKEY_FILE=${ACCOUNT_DIR}/payment.evkey
PAYMENT_VKEY_FILE=${ACCOUNT_DIR}/payment.vkey
# TODO: Ask for mnemo
cat ${MNEMONICS_PRIV_FILE} | \
cardano-address key from-recovery-phrase Shelley | cardano-address key child 1852H/1815H/0H/0/${ACCOUNT_ID} > ${PAYMENT_XPRV_KEY_FILE}
cat ${PAYMENT_XPRV_KEY_FILE} | cardano-address key public --with-chain-code | tee ${PAYMENT_XPUB_KEY_FILE} | \
cardano-address address payment --network-tag ${NETWORK_TAG} > ${PAYMENT_ADDRESS_FILE}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment