decred.org/dcrdex@v1.0.5/dex/testing/firo/electrum.sh (about)

     1  #!/usr/bin/env bash
     2  #
     3  # Set up Electrum-Firo (electrum) regtest client wallet for testing.
     4  # - Expects the firo regtest chain server harness to be running. 
     5  # - Expects an ElectrumX_Firo server runing on top of the chain server
     6  # - Connects to the ElectrumX server over SSL at localhost:EX_PORT
     7  # - Exposes electrum RPC at localhost:RPC_PORT - Dex connects here
     8  #
     9  # Requires:
    10  # - python3  - tested python3.10 and minimal testing python3.7
    11  # - pip3     - for boostrap loading pip
    12  # - git
    13  #
    14  # See Also: README_ELECTRUM_HARNESSES.md and README_HARNESS.md
    15  
    16  set -ex
    17  
    18  # https://github.com/spesmilo/electrum/issues/7833 (fixed in 4.3)
    19  # possible alt workaround: python3 -m pip install "protobuf>=3.12,<4"
    20  export PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python
    21  
    22  SCRIPT_DIR=$(pwd)
    23  
    24  # Electrum-Firo Version 4.1.5.2
    25  # COMMIT=a3f64386efc9069cae83e23c241331de6f418b2f
    26  
    27  # Electrum-Firo Version 4.1.5.5
    28  COMMIT=b99e9594bddeecba82a2531bbf0769bd589f3a34
    29  
    30  GENESIS=a42b98f04cc2916e8adfb5d9db8a2227c4629bc205748ed2f33180b636ee885b # regtest
    31  RPCPORT=8001
    32  EX_PORT=50002
    33  
    34  ASSET_DIR=~/dextest/electrum/firo
    35  ELECTRUM_DIR=${ASSET_DIR}/client
    36  REPO_DIR=${ELECTRUM_DIR}/electrum-repo
    37  WALLET_DIR=${ELECTRUM_DIR}/wallet
    38  NET_DIR=${WALLET_DIR}/regtest
    39  HARNESS_DIR=~/dextest/firo/harness-ctl
    40  
    41  # startup options
    42  # CLI, DAEMON, GUI  (Default start as CLI)
    43  # To change the mode, run with e.g.
    44  #   STARTUP=DAEMON ./electrum.sh
    45  ELECTRUM_REGTEST_ARGS="--regtest --dir=${WALLET_DIR}"
    46  WALLET_PASSWORD="abc"
    47  
    48  rm -rf ${NET_DIR}/blockchain_headers ${NET_DIR}/forks ${NET_DIR}/certs ${NET_DIR}/wallets/default_wallet
    49  mkdir -p ${NET_DIR}/regtest
    50  mkdir -p ${NET_DIR}/wallets
    51  mkdir -p ${REPO_DIR}
    52  
    53  cd ${REPO_DIR}
    54  
    55  if [ ! -d "${REPO_DIR}/.git" ]; then
    56      git init
    57      git remote add origin https://github.com/firoorg/electrum-firo.git
    58  fi
    59  
    60  git remote -v
    61  
    62  git fetch --depth 1 origin ${COMMIT}
    63  git reset --hard FETCH_HEAD
    64  
    65  if [ ! -d "${ELECTRUM_DIR}/venv" ]; then
    66      # The venv interpreter will be this python version, e.g. python3.10
    67      python3.7 -m venv ${ELECTRUM_DIR}/venv
    68  fi
    69  source ${ELECTRUM_DIR}/venv/bin/activate
    70  python --version
    71  python -m pip install --upgrade pip # can support more versions than ensurepip
    72  pip install -e .
    73  pip install requests cryptography pycryptodomex
    74  if [ "${STARTUP}" == "GUI" ];
    75  then
    76      pip install pyqt5
    77  fi
    78  
    79  cp "${SCRIPT_DIR}/electrum_regtest_wallet" "${NET_DIR}/wallets/default_wallet"
    80  
    81  cat > "${NET_DIR}/config" <<EOF
    82  {
    83      "auto_connect": false,
    84      "tor_auto_on": false,
    85      "detect_proxy": false,
    86      "blockchain_preferred_block": {
    87          "hash": "${GENESIS}",
    88          "height": 0
    89      },
    90      "check_updates": false,
    91      "config_version": 3,
    92      "decimal_point": 8,
    93      "dont_show_testnet_warning": true,
    94      "gui_last_wallet": "${NET_DIR}/wallets/default_wallet",
    95      "is_maximized": false,
    96      "oneserver": false,
    97      "recently_open": [
    98          "${NET_DIR}/wallets/default_wallet"
    99      ],
   100      "rpchost": "127.0.0.1",
   101      "rpcpassword": "pass",
   102      "rpcport": ${RPCPORT},
   103      "rpcuser": "user",
   104      "server": "127.0.0.1:${EX_PORT}:s",
   105      "show_addresses_tab": true,
   106      "show_console_tab": true,
   107      "show_utxo_tab": true,
   108      "use_rbf": false
   109  }
   110  EOF
   111  
   112  cat > "${ASSET_DIR}/client-config.ini" <<EOF
   113  rpcuser=user
   114  rpcpassword=pass
   115  rpcbind=127.0.0.1:${RPCPORT}
   116  EOF
   117  
   118  cat > "${HARNESS_DIR}/electrum-cli" <<EOF
   119  source ${ELECTRUM_DIR}/venv/bin/activate
   120  PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python ${REPO_DIR}/electrum-firo ${ELECTRUM_REGTEST_ARGS} "\$@" --password=${WALLET_PASSWORD}
   121  deactivate
   122  EOF
   123  chmod +x "${HARNESS_DIR}/electrum-cli"
   124  
   125  if [  "${STARTUP}" == "GUI" ];
   126  then
   127      echo "Starting GUI wallet"
   128      ./electrum-firo ${ELECTRUM_REGTEST_ARGS}    
   129  else
   130      if [  "${STARTUP}" == "DAEMON" ];
   131      then
   132          echo "Starting wallet as a DAEMON"
   133          ./electrum-firo ${ELECTRUM_REGTEST_ARGS} daemon --detach
   134          ./electrum-firo ${ELECTRUM_REGTEST_ARGS} load_wallet --password=${WALLET_PASSWORD}
   135          ./electrum-firo ${ELECTRUM_REGTEST_ARGS} list_wallets
   136          ./electrum-firo ${ELECTRUM_REGTEST_ARGS} getinfo
   137          echo "use 'stop-daemon' to stop the daemon"
   138      else
   139          echo "Starting CLI wallet"
   140          ./electrum-firo ${ELECTRUM_REGTEST_ARGS} -v daemon
   141          # Run
   142          #    ./electrum-cli load_wallet
   143          # from the firo harness-ctl directory.
   144      fi
   145  fi