Fix addcoin decred.

This commit is contained in:
tecnovert 2024-05-30 12:46:59 +02:00
parent 5f6819afcb
commit ebdbe115dd
11 changed files with 141 additions and 16 deletions

View file

@ -1071,8 +1071,6 @@ class BasicSwap(BaseApp):
key_str = 'main_wallet_seedid_alt_' + db_key_coin_name key_str = 'main_wallet_seedid_alt_' + db_key_coin_name
self.setStringKV(key_str, legacy_root_hash.hex(), session) self.setStringKV(key_str, legacy_root_hash.hex(), session)
session.commit() # else get error database is locked!?
# Clear any saved addresses # Clear any saved addresses
self.clearStringKV('receive_addr_' + db_key_coin_name, session) self.clearStringKV('receive_addr_' + db_key_coin_name, session)
self.clearStringKV('stealth_addr_' + db_key_coin_name, session) self.clearStringKV('stealth_addr_' + db_key_coin_name, session)
@ -1140,12 +1138,13 @@ class BasicSwap(BaseApp):
if session is None: if session is None:
self.closeSession(use_session, commit=False) self.closeSession(use_session, commit=False)
def clearStringKV(self, str_key: str, str_val: str) -> None: def clearStringKV(self, str_key: str, session=None) -> None:
try: try:
session = self.openSession() use_session = self.openSession(session)
session.execute('DELETE FROM kv_string WHERE key = :key', {'key': str_key}) use_session.execute('DELETE FROM kv_string WHERE key = :key', {'key': str_key})
finally: finally:
self.closeSession(session) if session is None:
self.closeSession(use_session)
def getPreFundedTx(self, linked_type: int, linked_id: bytes, tx_type: int, session=None) -> Optional[bytes]: def getPreFundedTx(self, linked_type: int, linked_id: bytes, tx_type: int, session=None) -> Optional[bytes]:
try: try:

View file

@ -1295,7 +1295,7 @@ def initialise_wallets(particl_wallet_mnemonic, with_coins, data_dir, settings,
if not swap_client.use_tor_proxy: if not swap_client.use_tor_proxy:
# Cannot set -bind or -whitebind together with -listen=0 # Cannot set -bind or -whitebind together with -listen=0
daemon_args.append('-nolisten') daemon_args.append('-nolisten')
coins_to_create_wallets_for = (Coins.PART, Coins.BTC, Coins.LTC, Coins.DASH) coins_to_create_wallets_for = (Coins.PART, Coins.BTC, Coins.LTC, Coins.DCR, Coins.DASH)
# Always start Particl, it must be running to initialise a wallet in addcoin mode # Always start Particl, it must be running to initialise a wallet in addcoin mode
# Particl must be loaded first as subsequent coins are initialised from the Particl mnemonic # Particl must be loaded first as subsequent coins are initialised from the Particl mnemonic
start_daemons = ['particl', ] + [c for c in with_coins if c != 'particl'] start_daemons = ['particl', ] + [c for c in with_coins if c != 'particl']
@ -1322,8 +1322,10 @@ def initialise_wallets(particl_wallet_mnemonic, with_coins, data_dir, settings,
swap_client.setCoinRunParams(c) swap_client.setCoinRunParams(c)
swap_client.createCoinInterface(c) swap_client.createCoinInterface(c)
if c == Coins.DCR: if c in coins_to_create_wallets_for:
if coin_settings['manage_wallet_daemon']: if c == Coins.DCR:
if coin_settings['manage_wallet_daemon'] is False:
continue
from basicswap.interface.dcr.util import createDCRWallet from basicswap.interface.dcr.util import createDCRWallet
dcr_password = coin_settings['wallet_pwd'] if WALLET_ENCRYPTION_PWD == '' else WALLET_ENCRYPTION_PWD dcr_password = coin_settings['wallet_pwd'] if WALLET_ENCRYPTION_PWD == '' else WALLET_ENCRYPTION_PWD
@ -1335,7 +1337,7 @@ def initialise_wallets(particl_wallet_mnemonic, with_coins, data_dir, settings,
args = [os.path.join(coin_settings['bindir'], filename), '--create'] + extra_opts args = [os.path.join(coin_settings['bindir'], filename), '--create'] + extra_opts
hex_seed = swap_client.getWalletKey(Coins.DCR, 1).hex() hex_seed = swap_client.getWalletKey(Coins.DCR, 1).hex()
createDCRWallet(args, hex_seed, logger, threading.Event()) createDCRWallet(args, hex_seed, logger, threading.Event())
if c in coins_to_create_wallets_for: continue
swap_client.waitForDaemonRPC(c, with_wallet=False) swap_client.waitForDaemonRPC(c, with_wallet=False)
# Create wallet if it doesn't exist yet # Create wallet if it doesn't exist yet
wallets = swap_client.callcoinrpc(c, 'listwallets') wallets = swap_client.callcoinrpc(c, 'listwallets')

View file

@ -0,0 +1,16 @@
monero_wallet:
image: i_decred_wallet
build:
context: decred_wallet
dockerfile: Dockerfile
container_name: decred_wallet
volumes:
- ${DATA_PATH}/decred_wallet:/data
expose:
- ${DCR_WALLET_RPC_PORT}
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
restart: unless-stopped

View file

@ -0,0 +1,16 @@
monero_daemon:
image: i_decred_daemon
build:
context: decred_daemon
dockerfile: Dockerfile
container_name: decred_daemon
volumes:
- ${DATA_PATH}/decred_daemon:/data
expose:
- ${DCR_RPC_PORT}
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
restart: unless-stopped

View file

@ -0,0 +1,25 @@
FROM i_swapclient as install_stage
RUN basicswap-prepare --preparebinonly --bindir=/coin_bin --withcoin=decred --withoutcoins=particl && \
find /coin_bin -name *.tar.gz -delete
FROM debian:bullseye-slim
COPY --from=install_stage /coin_bin .
ENV DCR_DATA /data
RUN groupadd -r decred && useradd -r -m -g decred decred \
&& apt-get update \
&& apt-get install -qq --no-install-recommends gosu \
&& rm -rf /var/lib/apt/lists/* \
&& mkdir "$DCR_DATA" \
&& chown -R decred:decred "$DCR_DATA" \
&& ln -sfn "$DECRED_DATA" /home/decred/decred \
&& chown -h decred:decred /home/decred/decred
VOLUME /data
COPY entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
EXPOSE 9108 9109
CMD ["/decred/dcrd", "--datadir=/data"]

View file

@ -0,0 +1,11 @@
#!/bin/bash
set -e
if [[ "$1" == "dcrctl" || "$1" == "dcrd" || "$1" == "dcrwallet" ]]; then
mkdir -p "$DECRED_DATA"
chown -h decred:decred /home/decred/decred
exec gosu decred "$@"
else
exec "$@"
fi

View file

@ -0,0 +1,19 @@
FROM i_decred_daemon
ENV DCR_DATA /data
RUN groupadd -r decred && useradd -r -m -g decred decred \
&& apt-get update \
&& apt-get install -qq --no-install-recommends gosu \
&& rm -rf /var/lib/apt/lists/* \
&& mkdir "$DCR_DATA" \
&& chown -R decred:decred "$DCR_DATA" \
&& ln -sfn "$DECRED_DATA" /home/decred/decred \
&& chown -h decred:decred /home/decred/decred
VOLUME /data
COPY entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
EXPOSE 9209
CMD ["/decred/dcrwallet", "--datadir=/data"]

View file

@ -0,0 +1,11 @@
#!/bin/bash
set -e
if [[ "$1" == "dcrctl" || "$1" == "dcrd" || "$1" == "dcrwallet" ]]; then
mkdir -p "$DECRED_DATA"
chown -h decred:decred /home/decred/decred
exec gosu decred "$@"
else
exec "$@"
fi

View file

@ -14,17 +14,25 @@ PART_ZMQ_PORT=20792
PART_RPC_USER=particl_user PART_RPC_USER=particl_user
PART_RPC_PWD=particl_pwd PART_RPC_PWD=particl_pwd
BTC_DATA_DIR=/data/bitcoin
BTC_RPC_HOST=bitcoin_core
BTC_RPC_PORT=19796
BTC_RPC_USER=bitcoin_user
BTC_RPC_PWD=bitcoin_pwd
LTC_DATA_DIR=/data/litecoin LTC_DATA_DIR=/data/litecoin
LTC_RPC_HOST=litecoin_core LTC_RPC_HOST=litecoin_core
LTC_RPC_PORT=19795 LTC_RPC_PORT=19795
LTC_RPC_USER=litecoin_user LTC_RPC_USER=litecoin_user
LTC_RPC_PWD=litecoin_pwd LTC_RPC_PWD=litecoin_pwd
BTC_DATA_DIR=/data/bitcoin DCR_DATA_DIR=/data/decred
BTC_RPC_HOST=bitcoin_core DCR_RPC_HOST=decred_daemon
BTC_RPC_PORT=19796 DCR_RPC_PORT=DCR_RPC_PORT
BTC_RPC_USER=bitcoin_user DCR_WALLET_RPC_HOST=decred_wallet
BTC_RPC_PWD=bitcoin_pwd DCR_WALLET_RPC_PORT=9209
DCR_RPC_USER=decred_user
DCR_RPC_PWD=decred_pass
XMR_DATA_DIR=/data/monero_daemon XMR_DATA_DIR=/data/monero_daemon
XMR_RPC_HOST=monero_daemon XMR_RPC_HOST=monero_daemon

View file

@ -3,6 +3,13 @@
This will setup Basicswap so that each coin runs in it's own container. This will setup Basicswap so that each coin runs in it's own container.
### Coin notes
- Decred is only partially supported, the wallet will need to be initialised manually.
## Setup
Install dependencies: Install dependencies:
sudo apt install basez docker-compose sudo apt install basez docker-compose
@ -33,13 +40,14 @@ Create docker-compose config:
# Using the helper script: # Using the helper script:
./scripts/build_yml_files.py -c bitcoin monero ./scripts/build_yml_files.py -c bitcoin monero
# Or # Or manually:
cat compose-fragments/0_start.yml > docker-compose.yml cat compose-fragments/0_start.yml > docker-compose.yml
# Add the relevant coin fragments # Add the relevant coin fragments
cat compose-fragments/1_bitcoin.yml >> docker-compose.yml cat compose-fragments/1_bitcoin.yml >> docker-compose.yml
cat compose-fragments/1_litecoin.yml >> docker-compose.yml cat compose-fragments/1_litecoin.yml >> docker-compose.yml
cat compose-fragments/1_decred-wallet.yml >> docker-compose.yml
cat compose-fragments/1_monero-wallet.yml >> docker-compose.yml cat compose-fragments/1_monero-wallet.yml >> docker-compose.yml
cat compose-fragments/1_pivx.yml >> docker-compose.yml cat compose-fragments/1_pivx.yml >> docker-compose.yml
cat compose-fragments/1_dash.yml >> docker-compose.yml cat compose-fragments/1_dash.yml >> docker-compose.yml
@ -121,6 +129,7 @@ Start BasicSwap:
popd popd
docker-compose build monero_daemon docker-compose build monero_daemon
docker-compose build decred_daemon
docker-compose build docker-compose build
docker-compose build --no-cache swapclient docker-compose build --no-cache swapclient

View file

@ -66,6 +66,15 @@ def main():
for line in fp_in: for line in fp_in:
fp.write(line) fp.write(line)
continue continue
if coin_name == 'decred':
with open(os.path.join(fragments_dir, '1_decred-wallet.yml'), 'rb') as fp_in:
for line in fp_in:
fp.write(line)
fpp.write(line)
with open(os.path.join(fragments_dir, '8_decred-daemon.yml'), 'rb') as fp_in:
for line in fp_in:
fp.write(line)
continue
with open(os.path.join(fragments_dir, f'1_{coin_name}.yml'), 'rb') as fp_in: with open(os.path.join(fragments_dir, f'1_{coin_name}.yml'), 'rb') as fp_in:
for line in fp_in: for line in fp_in:
fp.write(line) fp.write(line)