Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save MarcelKlammer/2e44e64a0f0a743ce7400c1b863ced93 to your computer and use it in GitHub Desktop.
Save MarcelKlammer/2e44e64a0f0a743ce7400c1b863ced93 to your computer and use it in GitHub Desktop.
0x_initialSetup_generateMnemonicWallet.sh
#!/usr/bin/env bash
# Add scripts to the PATH to be easily accessible.
export PATH="$PATH:/Applications/Daedalus Shelley Testnet v6.app/Contents/MacOS/"
CADDR=${CADDR:=$( which cardano-address )}
[[ -z "$CADDR" ]] && ( echo "cardano-address cannot be found, exiting..." >&2 ; exit 127 )
CCLI=${CCLI:=$( which cardano-cli )}
[[ -z "$CCLI" ]] && ( echo "cardano-cli cannot be found, exiting..." >&2 ; exit 127 )
TESTNET=0
MAINNET=1
NETWORK=$MAINNET
TESTNET_MAGIC="--testnet-magic 42"
MAINNET_MAGIC="--mainnet"
MAGIC="$MAINNET_MAGIC"
echo
which cardano-address
walletName="$1" # eg. wallet/name/name
if [ -f "${walletName}.phrase.txt" ]; then echo -e "\033[35mWARNING - ${walletName}.phrase.txt already present, delete it or use another name !\033[0m"; exit 2; fi
if [ -f "${walletName}.root.prv" ]; then echo -e "\033[35mWARNING - ${walletName}.root.prv already present, delete it or use another name !\033[0m"; exit 2; fi
if [ -f "${walletName}.payment.xprv" ]; then echo -e "\033[35mWARNING - ${walletName}.payment.xprv already present, delete it or use another name !\033[0m"; exit 2; fi
if [ -f "${walletName}.payment.xpub" ]; then echo -e "\033[35mWARNING - ${walletName}.payment.xpub already present, delete it or use another name !\033[0m"; exit 2; fi
if [ -f "${walletName}.staking.xprv" ]; then echo -e "\033[35mWARNING - ${walletName}.staking.xprv already present, delete it or use another name !\033[0m"; exit 2; fi
if [ -f "${walletName}.staking.xpub" ]; then echo -e "\033[35mWARNING - ${walletName}.staking.xpub already present, delete it or use another name !\033[0m"; exit 2; fi
if [ -f "${walletName}.staking.xpub" ]; then echo -e "\033[35mWARNING - ${walletName}.staking.xpub already present, delete it or use another name !\033[0m"; exit 2; fi
echo
echo "Generate Recovery Phrase: ${walletName}"
echo
cardano-address recovery-phrase generate --size 24 > ${walletName}.phrase.txt
echo
echo "Generate Root Key: ${walletName}"
cat ${walletName}.phrase.txt | cardano-address key from-recovery-phrase Shelley > ${walletName}.root.prv
echo
echo "Generate Private Keys: ${walletName}"
cat ${walletName}.root.prv | cardano-address key child 1852H/1815H/0H/0/0 > ${walletName}.payment.xprv
cat ${walletName}.payment.xprv | cardano-address key public > ${walletName}.payment.xpub
cat ${walletName}.root.prv | cardano-address key child 1852H/1815H/0H/2/0 > ${walletName}.staking.xprv
cat ${walletName}.staking.xprv | cardano-address key public > ${walletName}.staking.xpub
echo
echo "Generate Payment Address: ${walletName}"
cat ${walletName}.payment.xpub | cardano-address address payment --network-tag $NETWORK > ${walletName}.candidate.addr
echo
echo "Generate Staking Address: ${walletName}"
cat ${walletName}.candidate.addr | cardano-address address delegation $(cat ${walletName}.staking.xpub) > ${walletName}.payment.candidate.addr
echo
echo "$(cat ${walletName}.candidate.addr)"
echo "$(cat ${walletName}.payment.candidate.addr)"
echo
cat ${walletName}.payment.xprv | cardano-address key inspect
cat ${walletName}.payment.xpub | cardano-address key inspect
cat ${walletName}.staking.xprv | cardano-address key inspect
cat ${walletName}.staking.xpub | cardano-address key inspect
cat ${walletName}.candidate.addr | cardano-address address inspect
cat ${walletName}.payment.candidate.addr | cardano-address address inspect
# XPrv/XPub conversion to normal private and public key, keep in mind the
# keypars are not a valid Ed25519 signing keypairs.
TESTNET_MAGIC="--testnet-magic 42"
MAINNET_MAGIC="--mainnet"
MAGIC="$MAINNET_MAGIC"
SESKEY=$(cat ${walletName}.staking.xprv | bech32 | cut -b -128 )$(cat ${walletName}.staking.xpub | bech32)
PESKEY=$(cat ${walletName}.payment.xprv | bech32 | cut -b -128 )$(cat ${walletName}.payment.xpub | bech32)
cat << EOF > ${walletName}.staking.skey
{
"type": "StakeExtendedSigningKeyShelley_ed25519_bip32",
"description": "",
"cborHex": "5880$SESKEY"
}
EOF
cat << EOF > ${walletName}.payment.skey
{
"type": "PaymentExtendedSigningKeyShelley_ed25519_bip32",
"description": "Payment Signing Key",
"cborHex": "5880$PESKEY"
}
EOF
echo
echo "Checking whether cardano-address and cardano-cli outputs match after conversion."
"$CCLI" shelley key verification-key --signing-key-file ${walletName}.staking.skey --verification-key-file ${walletName}.staking.evkey
"$CCLI" shelley key verification-key --signing-key-file ${walletName}.payment.skey --verification-key-file ${walletName}.payment.evkey
"$CCLI" shelley key non-extended-key --extended-verification-key-file ${walletName}.staking.evkey --verification-key-file ${walletName}.staking.vkey
"$CCLI" shelley key non-extended-key --extended-verification-key-file ${walletName}.payment.evkey --verification-key-file ${walletName}.payment.vkey
"$CCLI" shelley stake-address build --stake-verification-key-file ${walletName}.staking.vkey $MAGIC > ${walletName}.staking.addr
"$CCLI" shelley address build --payment-verification-key-file ${walletName}.payment.vkey $MAGIC > ${walletName}.addr
"$CCLI" shelley address build \
--payment-verification-key-file ${walletName}.payment.vkey \
--stake-verification-key-file ${walletName}.staking.vkey \
$MAGIC > ${walletName}.payment.addr
echo
echo "Important the base.addr and the base.addr_candidate must be the same"
diff ${walletName}.payment.addr ${walletName}.payment.candidate.addr
echo
echo
echo $(cat ${walletName}.candidate.addr)
echo $(cat ${walletName}.addr)
echo
echo
echo $(cat ${walletName}.payment.candidate.addr)
echo $(cat ${walletName}.payment.addr)
echo
if [[ "$(cat ${walletName}.payment.candidate.addr)" != "$(cat ${walletName}.payment.addr)" ]]; then
echo -e "\033[35mWARNING - ${walletName}.payment.candidate.addr doesn't match ${walletName}.payment.addr! Serious ERROR!!!!\033[0m"; exit 2;
fi
if [[ "$(cat ${walletName}.candidate.addr)" != "$(cat ${walletName}.addr)" ]]; then
echo -e "\033[35mWARNING - ${walletName}.candidate.addr doesn't match ${walletName}.addr! Serious ERROR!!!!\033[0m"; exit 2;
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment