mirror of
https://github.com/basicswap/basicswap.git
synced 2025-11-05 10:28:10 +01:00
nmc: Add to test_xmr_persistent.
This commit is contained in:
@@ -117,7 +117,9 @@ known_coins = {
|
|||||||
"dogecoin": (DOGECOIN_VERSION, DOGECOIN_VERSION_TAG, ("tecnovert",)),
|
"dogecoin": (DOGECOIN_VERSION, DOGECOIN_VERSION_TAG, ("tecnovert",)),
|
||||||
}
|
}
|
||||||
|
|
||||||
disabled_coins = ["navcoin"]
|
disabled_coins = [
|
||||||
|
"navcoin",
|
||||||
|
]
|
||||||
|
|
||||||
expected_key_ids = {
|
expected_key_ids = {
|
||||||
"tecnovert": ("13F13651C9CF0D6B",),
|
"tecnovert": ("13F13651C9CF0D6B",),
|
||||||
@@ -207,6 +209,7 @@ DCR_RPC_PWD = os.getenv("DCR_RPC_PWD", random.randbytes(random.randint(14, 18)).
|
|||||||
|
|
||||||
NMC_RPC_HOST = os.getenv("NMC_RPC_HOST", "127.0.0.1")
|
NMC_RPC_HOST = os.getenv("NMC_RPC_HOST", "127.0.0.1")
|
||||||
NMC_RPC_PORT = int(os.getenv("NMC_RPC_PORT", 19698))
|
NMC_RPC_PORT = int(os.getenv("NMC_RPC_PORT", 19698))
|
||||||
|
NMC_PORT = int(os.getenv("NMC_PORT", 8134))
|
||||||
NMC_ONION_PORT = int(os.getenv("NMC_ONION_PORT", 9698))
|
NMC_ONION_PORT = int(os.getenv("NMC_ONION_PORT", 9698))
|
||||||
NMC_RPC_USER = os.getenv("NMC_RPC_USER", "")
|
NMC_RPC_USER = os.getenv("NMC_RPC_USER", "")
|
||||||
NMC_RPC_PWD = os.getenv("NMC_RPC_PWD", "")
|
NMC_RPC_PWD = os.getenv("NMC_RPC_PWD", "")
|
||||||
@@ -1349,6 +1352,8 @@ def prepareDataDir(coin, settings, chain, particl_mnemonic, extra_opts={}):
|
|||||||
fp.write("printtoconsole=0\n")
|
fp.write("printtoconsole=0\n")
|
||||||
fp.write("daemon=0\n")
|
fp.write("daemon=0\n")
|
||||||
fp.write(f"wallet={wallet_name}\n")
|
fp.write(f"wallet={wallet_name}\n")
|
||||||
|
if "watch_wallet_name" in core_settings:
|
||||||
|
fp.write("wallet={}\n".format(core_settings["watch_wallet_name"]))
|
||||||
|
|
||||||
if tor_control_password is not None:
|
if tor_control_password is not None:
|
||||||
writeTorSettings(fp, coin, core_settings, tor_control_password)
|
writeTorSettings(fp, coin, core_settings, tor_control_password)
|
||||||
@@ -1408,6 +1413,7 @@ def prepareDataDir(coin, settings, chain, particl_mnemonic, extra_opts={}):
|
|||||||
fp.write("deprecatedrpc=create_bdb\n")
|
fp.write("deprecatedrpc=create_bdb\n")
|
||||||
fp.write("addresstype=bech32\n")
|
fp.write("addresstype=bech32\n")
|
||||||
fp.write("changetype=bech32\n")
|
fp.write("changetype=bech32\n")
|
||||||
|
fp.write("fallbackfee=0.001\n") # minrelaytxfee
|
||||||
elif coin == "pivx":
|
elif coin == "pivx":
|
||||||
params_dir = os.path.join(data_dir, "pivx-params")
|
params_dir = os.path.join(data_dir, "pivx-params")
|
||||||
downloadPIVXParams(params_dir)
|
downloadPIVXParams(params_dir)
|
||||||
@@ -2391,22 +2397,6 @@ def main():
|
|||||||
"core_version_no": getKnownVersion("bitcoin"),
|
"core_version_no": getKnownVersion("bitcoin"),
|
||||||
"core_version_group": 28,
|
"core_version_group": 28,
|
||||||
},
|
},
|
||||||
"bitcoincash": {
|
|
||||||
"connection_type": "rpc",
|
|
||||||
"manage_daemon": shouldManageDaemon("BCH"),
|
|
||||||
"rpchost": BCH_RPC_HOST,
|
|
||||||
"rpcport": BCH_RPC_PORT + port_offset,
|
|
||||||
"onionport": BCH_ONION_PORT + port_offset,
|
|
||||||
"datadir": os.getenv("BCH_DATA_DIR", os.path.join(data_dir, "bitcoincash")),
|
|
||||||
"bindir": os.path.join(bin_dir, "bitcoincash"),
|
|
||||||
"port": BCH_PORT + port_offset,
|
|
||||||
"config_filename": "bitcoin.conf",
|
|
||||||
"use_segwit": False,
|
|
||||||
"blocks_confirmed": 1,
|
|
||||||
"conf_target": 2,
|
|
||||||
"core_version_no": getKnownVersion("bitcoincash"),
|
|
||||||
"core_version_group": 22,
|
|
||||||
},
|
|
||||||
"litecoin": {
|
"litecoin": {
|
||||||
"connection_type": "rpc",
|
"connection_type": "rpc",
|
||||||
"manage_daemon": shouldManageDaemon("LTC"),
|
"manage_daemon": shouldManageDaemon("LTC"),
|
||||||
@@ -2422,22 +2412,6 @@ def main():
|
|||||||
"core_version_group": 20,
|
"core_version_group": 20,
|
||||||
"min_relay_fee": 0.00001,
|
"min_relay_fee": 0.00001,
|
||||||
},
|
},
|
||||||
"dogecoin": {
|
|
||||||
"connection_type": "rpc",
|
|
||||||
"manage_daemon": shouldManageDaemon("DOGE"),
|
|
||||||
"rpchost": DOGE_RPC_HOST,
|
|
||||||
"rpcport": DOGE_RPC_PORT + port_offset,
|
|
||||||
"onionport": DOGE_ONION_PORT + port_offset,
|
|
||||||
"datadir": os.getenv("DOGE_DATA_DIR", os.path.join(data_dir, "dogecoin")),
|
|
||||||
"bindir": os.path.join(bin_dir, "dogecoin"),
|
|
||||||
"use_segwit": False,
|
|
||||||
"use_csv": False,
|
|
||||||
"blocks_confirmed": 2,
|
|
||||||
"conf_target": 2,
|
|
||||||
"core_version_no": getKnownVersion("dogecoin"),
|
|
||||||
"core_version_group": 23,
|
|
||||||
"min_relay_fee": 0.01, # RECOMMENDED_MIN_TX_FEE
|
|
||||||
},
|
|
||||||
"decred": {
|
"decred": {
|
||||||
"connection_type": "rpc",
|
"connection_type": "rpc",
|
||||||
"manage_daemon": shouldManageDaemon("DCR"),
|
"manage_daemon": shouldManageDaemon("DCR"),
|
||||||
@@ -2468,6 +2442,7 @@ def main():
|
|||||||
"onionport": NMC_ONION_PORT + port_offset,
|
"onionport": NMC_ONION_PORT + port_offset,
|
||||||
"datadir": os.getenv("NMC_DATA_DIR", os.path.join(data_dir, "namecoin")),
|
"datadir": os.getenv("NMC_DATA_DIR", os.path.join(data_dir, "namecoin")),
|
||||||
"bindir": os.path.join(bin_dir, "namecoin"),
|
"bindir": os.path.join(bin_dir, "namecoin"),
|
||||||
|
"port": NMC_PORT + port_offset,
|
||||||
"use_segwit": True,
|
"use_segwit": True,
|
||||||
"use_csv": True,
|
"use_csv": True,
|
||||||
"blocks_confirmed": 1,
|
"blocks_confirmed": 1,
|
||||||
@@ -2499,6 +2474,28 @@ def main():
|
|||||||
"core_version_no": getKnownVersion("monero"),
|
"core_version_no": getKnownVersion("monero"),
|
||||||
"core_type_group": "xmr",
|
"core_type_group": "xmr",
|
||||||
},
|
},
|
||||||
|
"wownero": {
|
||||||
|
"connection_type": "rpc",
|
||||||
|
"manage_daemon": shouldManageDaemon("WOW"),
|
||||||
|
"manage_wallet_daemon": shouldManageDaemon("WOW_WALLET"),
|
||||||
|
"rpcport": WOW_RPC_PORT + port_offset,
|
||||||
|
"zmqport": WOW_ZMQ_PORT + port_offset,
|
||||||
|
"walletrpcport": WOW_WALLET_RPC_PORT + port_offset,
|
||||||
|
"rpchost": WOW_RPC_HOST,
|
||||||
|
"trusted_daemon": extra_opts.get("trust_remote_node", "auto"),
|
||||||
|
"walletrpchost": WOW_WALLET_RPC_HOST,
|
||||||
|
"walletrpcuser": WOW_WALLET_RPC_USER,
|
||||||
|
"walletrpcpassword": WOW_WALLET_RPC_PWD,
|
||||||
|
"datadir": os.getenv("WOW_DATA_DIR", os.path.join(data_dir, "wownero")),
|
||||||
|
"bindir": os.path.join(bin_dir, "wownero"),
|
||||||
|
"restore_height": wow_restore_height,
|
||||||
|
"blocks_confirmed": 2,
|
||||||
|
"rpctimeout": 60,
|
||||||
|
"walletrpctimeout": 120,
|
||||||
|
"walletrpctimeoutlong": 300,
|
||||||
|
"core_version_no": getKnownVersion("wownero"),
|
||||||
|
"core_type_group": "xmr",
|
||||||
|
},
|
||||||
"pivx": {
|
"pivx": {
|
||||||
"connection_type": "rpc",
|
"connection_type": "rpc",
|
||||||
"manage_daemon": shouldManageDaemon("PIVX"),
|
"manage_daemon": shouldManageDaemon("PIVX"),
|
||||||
@@ -2562,27 +2559,37 @@ def main():
|
|||||||
"chain_lookups": "local",
|
"chain_lookups": "local",
|
||||||
"startup_tries": 40,
|
"startup_tries": 40,
|
||||||
},
|
},
|
||||||
"wownero": {
|
"bitcoincash": {
|
||||||
"connection_type": "rpc",
|
"connection_type": "rpc",
|
||||||
"manage_daemon": shouldManageDaemon("WOW"),
|
"manage_daemon": shouldManageDaemon("BCH"),
|
||||||
"manage_wallet_daemon": shouldManageDaemon("WOW_WALLET"),
|
"rpchost": BCH_RPC_HOST,
|
||||||
"rpcport": WOW_RPC_PORT + port_offset,
|
"rpcport": BCH_RPC_PORT + port_offset,
|
||||||
"zmqport": WOW_ZMQ_PORT + port_offset,
|
"onionport": BCH_ONION_PORT + port_offset,
|
||||||
"walletrpcport": WOW_WALLET_RPC_PORT + port_offset,
|
"datadir": os.getenv("BCH_DATA_DIR", os.path.join(data_dir, "bitcoincash")),
|
||||||
"rpchost": WOW_RPC_HOST,
|
"bindir": os.path.join(bin_dir, "bitcoincash"),
|
||||||
"trusted_daemon": extra_opts.get("trust_remote_node", "auto"),
|
"port": BCH_PORT + port_offset,
|
||||||
"walletrpchost": WOW_WALLET_RPC_HOST,
|
"config_filename": "bitcoin.conf",
|
||||||
"walletrpcuser": WOW_WALLET_RPC_USER,
|
"use_segwit": False,
|
||||||
"walletrpcpassword": WOW_WALLET_RPC_PWD,
|
"blocks_confirmed": 1,
|
||||||
"datadir": os.getenv("WOW_DATA_DIR", os.path.join(data_dir, "wownero")),
|
"conf_target": 2,
|
||||||
"bindir": os.path.join(bin_dir, "wownero"),
|
"core_version_no": getKnownVersion("bitcoincash"),
|
||||||
"restore_height": wow_restore_height,
|
"core_version_group": 22,
|
||||||
|
},
|
||||||
|
"dogecoin": {
|
||||||
|
"connection_type": "rpc",
|
||||||
|
"manage_daemon": shouldManageDaemon("DOGE"),
|
||||||
|
"rpchost": DOGE_RPC_HOST,
|
||||||
|
"rpcport": DOGE_RPC_PORT + port_offset,
|
||||||
|
"onionport": DOGE_ONION_PORT + port_offset,
|
||||||
|
"datadir": os.getenv("DOGE_DATA_DIR", os.path.join(data_dir, "dogecoin")),
|
||||||
|
"bindir": os.path.join(bin_dir, "dogecoin"),
|
||||||
|
"use_segwit": False,
|
||||||
|
"use_csv": False,
|
||||||
"blocks_confirmed": 2,
|
"blocks_confirmed": 2,
|
||||||
"rpctimeout": 60,
|
"conf_target": 2,
|
||||||
"walletrpctimeout": 120,
|
"core_version_no": getKnownVersion("dogecoin"),
|
||||||
"walletrpctimeoutlong": 300,
|
"core_version_group": 23,
|
||||||
"core_version_no": getKnownVersion("wownero"),
|
"min_relay_fee": 0.01, # RECOMMENDED_MIN_TX_FEE
|
||||||
"core_type_group": "xmr",
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -265,7 +265,11 @@ def getCoreBinArgs(coin_id: int, coin_settings, prepare=False, use_tor_proxy=Fal
|
|||||||
# As BCH may use port 8334, disable it here.
|
# As BCH may use port 8334, disable it here.
|
||||||
# When tor is enabled a bind option for the onionport will be added to bitcoin.conf.
|
# When tor is enabled a bind option for the onionport will be added to bitcoin.conf.
|
||||||
# https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-28.0.md?plain=1#L84
|
# https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-28.0.md?plain=1#L84
|
||||||
if prepare is False and use_tor_proxy is False and coin_id == Coins.BTC:
|
if (
|
||||||
|
prepare is False
|
||||||
|
and use_tor_proxy is False
|
||||||
|
and coin_id in (Coins.BTC, Coins.NMC)
|
||||||
|
):
|
||||||
port: int = coin_settings.get("port", 8333)
|
port: int = coin_settings.get("port", 8333)
|
||||||
extra_args.append(f"--bind=0.0.0.0:{port}")
|
extra_args.append(f"--bind=0.0.0.0:{port}")
|
||||||
return extra_args
|
return extra_args
|
||||||
|
|||||||
BIN
basicswap/static/images/coins/Namecoin-20.png
Normal file
BIN
basicswap/static/images/coins/Namecoin-20.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 743 B |
BIN
basicswap/static/images/coins/Namecoin.png
Normal file
BIN
basicswap/static/images/coins/Namecoin.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.2 KiB |
@@ -10,6 +10,7 @@ const COIN_NAME_TO_SYMBOL = {
|
|||||||
'Firo': 'FIRO',
|
'Firo': 'FIRO',
|
||||||
'Dash': 'DASH',
|
'Dash': 'DASH',
|
||||||
'Decred': 'DCR',
|
'Decred': 'DCR',
|
||||||
|
'Namecoin': 'NMC',
|
||||||
'Wownero': 'WOW',
|
'Wownero': 'WOW',
|
||||||
'Bitcoin Cash': 'BCH',
|
'Bitcoin Cash': 'BCH',
|
||||||
'Dogecoin': 'DOGE'
|
'Dogecoin': 'DOGE'
|
||||||
@@ -335,13 +336,13 @@ const createBidTableRow = async (bid) => {
|
|||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="monospace text-xs text-gray-500 dark:text-gray-300">
|
<div class="monospace text-xs text-gray-500 dark:text-gray-300">
|
||||||
<span class="font-semibold">Offer ID:</span>
|
<span class="font-semibold">Offer ID:</span>
|
||||||
<a href="/offer/${bid.offer_id}" data-tooltip-target="tooltip-offer-${uniqueId}" class="hover:underline">
|
<a href="/offer/${bid.offer_id}" data-tooltip-target="tooltip-offer-${uniqueId}" class="hover:underline">
|
||||||
${formatAddress(bid.offer_id)}
|
${formatAddress(bid.offer_id)}
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="monospace text-xs text-gray-500 dark:text-gray-300">
|
<div class="monospace text-xs text-gray-500 dark:text-gray-300">
|
||||||
<span class="font-semibold">Bid ID:</span>
|
<span class="font-semibold">Bid ID:</span>
|
||||||
<a href="/bid/${bid.bid_id}" data-tooltip-target="tooltip-bid-${uniqueId}" class="hover:underline">
|
<a href="/bid/${bid.bid_id}" data-tooltip-target="tooltip-bid-${uniqueId}" class="hover:underline">
|
||||||
${formatAddress(bid.bid_id)}
|
${formatAddress(bid.bid_id)}
|
||||||
</a>
|
</a>
|
||||||
@@ -366,8 +367,8 @@ const createBidTableRow = async (bid) => {
|
|||||||
<div class="py-3 px-4 text-center">
|
<div class="py-3 px-4 text-center">
|
||||||
<div class="flex items-center justify-center">
|
<div class="flex items-center justify-center">
|
||||||
<span class="inline-flex mr-3 align-middle items-center justify-center w-18 h-20 rounded">
|
<span class="inline-flex mr-3 align-middle items-center justify-center w-18 h-20 rounded">
|
||||||
<img class="h-12"
|
<img class="h-12"
|
||||||
src="/static/images/coins/${bid.coin_from.replace(' ', '-')}.png"
|
src="/static/images/coins/${bid.coin_from.replace(' ', '-')}.png"
|
||||||
alt="${bid.coin_from}"
|
alt="${bid.coin_from}"
|
||||||
onerror="this.src='/static/images/coins/default.png'">
|
onerror="this.src='/static/images/coins/default.png'">
|
||||||
</span>
|
</span>
|
||||||
@@ -375,15 +376,14 @@ const createBidTableRow = async (bid) => {
|
|||||||
<path fill-rule="evenodd" d="M12.293 5.293a1 1 0 011.414 0l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-2.293-2.293a1 1 0 010-1.414z"></path>
|
<path fill-rule="evenodd" d="M12.293 5.293a1 1 0 011.414 0l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-2.293-2.293a1 1 0 010-1.414z"></path>
|
||||||
</svg>
|
</svg>
|
||||||
<span class="inline-flex ml-3 align-middle items-center justify-center w-18 h-20 rounded">
|
<span class="inline-flex ml-3 align-middle items-center justify-center w-18 h-20 rounded">
|
||||||
<img class="h-12"
|
<img class="h-12"
|
||||||
src="/static/images/coins/${bid.coin_to.replace(' ', '-')}.png"
|
src="/static/images/coins/${bid.coin_to.replace(' ', '-')}.png"
|
||||||
alt="${bid.coin_to}"
|
alt="${bid.coin_to}"
|
||||||
onerror="this.src='/static/images/coins/default.png'">
|
onerror="this.src='/static/images/coins/default.png'">
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
|
|
||||||
<!-- You Get Column -->
|
<!-- You Get Column -->
|
||||||
<td class="py-0">
|
<td class="py-0">
|
||||||
<div class="py-3 px-4 text-right">
|
<div class="py-3 px-4 text-right">
|
||||||
@@ -410,7 +410,7 @@ const createBidTableRow = async (bid) => {
|
|||||||
|
|
||||||
<!-- Actions Column -->
|
<!-- Actions Column -->
|
||||||
<td class="py-3 px-4 text-center">
|
<td class="py-3 px-4 text-center">
|
||||||
<a href="/bid/${bid.bid_id}/accept"
|
<a href="/bid/${bid.bid_id}/accept"
|
||||||
class="inline-block w-20 py-1 px-2 font-medium text-center text-sm rounded-md bg-blue-500 text-white border border-blue-500 hover:bg-blue-600 transition duration-200">
|
class="inline-block w-20 py-1 px-2 font-medium text-center text-sm rounded-md bg-blue-500 text-white border border-blue-500 hover:bg-blue-600 transition duration-200">
|
||||||
Accept
|
Accept
|
||||||
</a>
|
</a>
|
||||||
@@ -506,13 +506,13 @@ const createDetailsColumn = (bid, identity, uniqueId) => `
|
|||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="monospace text-xs text-gray-500 dark:text-gray-300">
|
<div class="monospace text-xs text-gray-500 dark:text-gray-300">
|
||||||
<span class="font-semibold">Offer ID:</span>
|
<span class="font-semibold">Offer ID:</span>
|
||||||
<a href="/offer/${bid.offer_id}" data-tooltip-target="tooltip-offer-${uniqueId}" class="hover:underline">
|
<a href="/offer/${bid.offer_id}" data-tooltip-target="tooltip-offer-${uniqueId}" class="hover:underline">
|
||||||
${formatAddress(bid.offer_id)}
|
${formatAddress(bid.offer_id)}
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="monospace text-xs text-gray-500 dark:text-gray-300">
|
<div class="monospace text-xs text-gray-500 dark:text-gray-300">
|
||||||
<span class="font-semibold">Bid ID:</span>
|
<span class="font-semibold">Bid ID:</span>
|
||||||
<a href="/bid/${bid.bid_id}" data-tooltip-target="tooltip-bid-${uniqueId}" class="hover:underline">
|
<a href="/bid/${bid.bid_id}" data-tooltip-target="tooltip-bid-${uniqueId}" class="hover:underline">
|
||||||
${formatAddress(bid.bid_id)}
|
${formatAddress(bid.bid_id)}
|
||||||
</a>
|
</a>
|
||||||
|
|||||||
@@ -220,7 +220,7 @@ const ApiManager = (function() {
|
|||||||
.filter(coin => coin.usesCoinGecko)
|
.filter(coin => coin.usesCoinGecko)
|
||||||
.map(coin => coin.name)
|
.map(coin => coin.name)
|
||||||
.join(',') :
|
.join(',') :
|
||||||
'bitcoin,monero,particl,bitcoincash,pivx,firo,dash,litecoin,dogecoin,decred';
|
'bitcoin,monero,particl,bitcoincash,pivx,firo,dash,litecoin,dogecoin,decred,namecoin';
|
||||||
|
|
||||||
//console.log('Fetching coin prices for:', coins);
|
//console.log('Fetching coin prices for:', coins);
|
||||||
const response = await this.fetchCoinPrices(coins);
|
const response = await this.fetchCoinPrices(coins);
|
||||||
@@ -254,7 +254,7 @@ const ApiManager = (function() {
|
|||||||
.filter(coin => coin.usesCoinGecko)
|
.filter(coin => coin.usesCoinGecko)
|
||||||
.map(coin => getCoinBackendId ? getCoinBackendId(coin.name) : coin.name)
|
.map(coin => getCoinBackendId ? getCoinBackendId(coin.name) : coin.name)
|
||||||
.join(',') :
|
.join(',') :
|
||||||
'bitcoin,monero,particl,bitcoin-cash,pivx,firo,dash,litecoin,dogecoin,decred';
|
'bitcoin,monero,particl,bitcoin-cash,pivx,firo,dash,litecoin,dogecoin,decred,namecoin';
|
||||||
|
|
||||||
const url = `https://api.coingecko.com/api/v3/simple/price?ids=${coins}&vs_currencies=usd&include_24hr_vol=true&include_24hr_change=true`;
|
const url = `https://api.coingecko.com/api/v3/simple/price?ids=${coins}&vs_currencies=usd&include_24hr_vol=true&include_24hr_change=true`;
|
||||||
|
|
||||||
|
|||||||
@@ -504,13 +504,14 @@ const CacheManager = (function() {
|
|||||||
'bitcoin': 'BTC',
|
'bitcoin': 'BTC',
|
||||||
'litecoin': 'LTC',
|
'litecoin': 'LTC',
|
||||||
'monero': 'XMR',
|
'monero': 'XMR',
|
||||||
|
'wownero': 'WOW',
|
||||||
'particl': 'PART',
|
'particl': 'PART',
|
||||||
'pivx': 'PIVX',
|
'pivx': 'PIVX',
|
||||||
'firo': 'FIRO',
|
'firo': 'FIRO',
|
||||||
'zcoin': 'FIRO',
|
'zcoin': 'FIRO',
|
||||||
'dash': 'DASH',
|
'dash': 'DASH',
|
||||||
'decred': 'DCR',
|
'decred': 'DCR',
|
||||||
'wownero': 'WOW',
|
'namecoin': 'NMR',
|
||||||
'bitcoin-cash': 'BCH',
|
'bitcoin-cash': 'BCH',
|
||||||
'dogecoin': 'DOGE'
|
'dogecoin': 'DOGE'
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -72,6 +72,7 @@ const ConfigManager = (function() {
|
|||||||
{ symbol: 'LTC', name: 'litecoin', usesCryptoCompare: true, usesCoinGecko: true, historicalDays: 30 },
|
{ symbol: 'LTC', name: 'litecoin', usesCryptoCompare: true, usesCoinGecko: true, historicalDays: 30 },
|
||||||
{ symbol: 'DOGE', name: 'dogecoin', usesCryptoCompare: true, usesCoinGecko: true, historicalDays: 30 },
|
{ symbol: 'DOGE', name: 'dogecoin', usesCryptoCompare: true, usesCoinGecko: true, historicalDays: 30 },
|
||||||
{ symbol: 'DCR', name: 'decred', usesCryptoCompare: true, usesCoinGecko: true, historicalDays: 30 },
|
{ symbol: 'DCR', name: 'decred', usesCryptoCompare: true, usesCoinGecko: true, historicalDays: 30 },
|
||||||
|
{ symbol: 'NMC', name: 'namecoin', usesCryptoCompare: true, usesCoinGecko: true, historicalDays: 30 },
|
||||||
{ symbol: 'WOW', name: 'wownero', usesCryptoCompare: false, usesCoinGecko: true, historicalDays: 30 }
|
{ symbol: 'WOW', name: 'wownero', usesCryptoCompare: false, usesCoinGecko: true, historicalDays: 30 }
|
||||||
],
|
],
|
||||||
|
|
||||||
@@ -88,6 +89,7 @@ const ConfigManager = (function() {
|
|||||||
'Zcoin': 'FIRO',
|
'Zcoin': 'FIRO',
|
||||||
'Dash': 'DASH',
|
'Dash': 'DASH',
|
||||||
'Decred': 'DCR',
|
'Decred': 'DCR',
|
||||||
|
'Namecoin': 'NMC',
|
||||||
'Wownero': 'WOW',
|
'Wownero': 'WOW',
|
||||||
'Bitcoin Cash': 'BCH',
|
'Bitcoin Cash': 'BCH',
|
||||||
'Dogecoin': 'DOGE'
|
'Dogecoin': 'DOGE'
|
||||||
@@ -105,13 +107,14 @@ const ConfigManager = (function() {
|
|||||||
'Zcoin': 'Firo',
|
'Zcoin': 'Firo',
|
||||||
'Dash': 'Dash',
|
'Dash': 'Dash',
|
||||||
'Decred': 'Decred',
|
'Decred': 'Decred',
|
||||||
|
'Namecoin': 'Namecoin',
|
||||||
'Wownero': 'Wownero',
|
'Wownero': 'Wownero',
|
||||||
'Bitcoin Cash': 'Bitcoin Cash',
|
'Bitcoin Cash': 'Bitcoin Cash',
|
||||||
'Dogecoin': 'Dogecoin'
|
'Dogecoin': 'Dogecoin'
|
||||||
},
|
},
|
||||||
|
|
||||||
idToName: {
|
idToName: {
|
||||||
1: 'particl', 2: 'bitcoin', 3: 'litecoin', 4: 'decred',
|
1: 'particl', 2: 'bitcoin', 3: 'litecoin', 4: 'decred', 5: 'namecoin',
|
||||||
6: 'monero', 7: 'particl blind', 8: 'particl anon',
|
6: 'monero', 7: 'particl blind', 8: 'particl anon',
|
||||||
9: 'wownero', 11: 'pivx', 13: 'firo', 17: 'bitcoincash',
|
9: 'wownero', 11: 'pivx', 13: 'firo', 17: 'bitcoincash',
|
||||||
18: 'dogecoin'
|
18: 'dogecoin'
|
||||||
@@ -130,6 +133,7 @@ const ConfigManager = (function() {
|
|||||||
'litecoin': 'litecoin',
|
'litecoin': 'litecoin',
|
||||||
'dogecoin': 'dogecoin',
|
'dogecoin': 'dogecoin',
|
||||||
'decred': 'decred',
|
'decred': 'decred',
|
||||||
|
'namecoin': 'namecoin',
|
||||||
'wownero': 'wownero'
|
'wownero': 'wownero'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -367,6 +371,7 @@ const ConfigManager = (function() {
|
|||||||
'dash': { usd: null, btc: null },
|
'dash': { usd: null, btc: null },
|
||||||
'dogecoin': { usd: null, btc: null },
|
'dogecoin': { usd: null, btc: null },
|
||||||
'decred': { usd: null, btc: null },
|
'decred': { usd: null, btc: null },
|
||||||
|
'namecoin': { usd: null, btc: null },
|
||||||
'litecoin': { usd: null, btc: null },
|
'litecoin': { usd: null, btc: null },
|
||||||
'particl': { usd: null, btc: null },
|
'particl': { usd: null, btc: null },
|
||||||
'pivx': { usd: null, btc: null },
|
'pivx': { usd: null, btc: null },
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ const WalletManager = (function() {
|
|||||||
'Dash': 'DASH',
|
'Dash': 'DASH',
|
||||||
'PIVX': 'PIVX',
|
'PIVX': 'PIVX',
|
||||||
'Decred': 'DCR',
|
'Decred': 'DCR',
|
||||||
|
'Namecoin': 'NMC',
|
||||||
'Bitcoin Cash': 'BCH'
|
'Bitcoin Cash': 'BCH'
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -49,6 +50,7 @@ const WalletManager = (function() {
|
|||||||
'DASH': 'dash',
|
'DASH': 'dash',
|
||||||
'PIVX': 'pivx',
|
'PIVX': 'pivx',
|
||||||
'DCR': 'dcr',
|
'DCR': 'dcr',
|
||||||
|
'NMC': 'nmc',
|
||||||
'BCH': 'bch'
|
'BCH': 'bch'
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -63,6 +65,7 @@ const WalletManager = (function() {
|
|||||||
'Dash': 'DASH',
|
'Dash': 'DASH',
|
||||||
'PIVX': 'PIVX',
|
'PIVX': 'PIVX',
|
||||||
'Decred': 'DCR',
|
'Decred': 'DCR',
|
||||||
|
'Namecoin': 'NMC',
|
||||||
'Bitcoin Cash': 'BCH',
|
'Bitcoin Cash': 'BCH',
|
||||||
'Dogecoin': 'DOGE'
|
'Dogecoin': 'DOGE'
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ window.tableRateModule = {
|
|||||||
'Dash': 'DASH',
|
'Dash': 'DASH',
|
||||||
'PIVX': 'PIVX',
|
'PIVX': 'PIVX',
|
||||||
'Decred': 'DCR',
|
'Decred': 'DCR',
|
||||||
|
'Namecoin': 'NMC',
|
||||||
'Zano': 'ZANO',
|
'Zano': 'ZANO',
|
||||||
'Bitcoin Cash': 'BCH',
|
'Bitcoin Cash': 'BCH',
|
||||||
'Dogecoin': 'DOGE'
|
'Dogecoin': 'DOGE'
|
||||||
@@ -56,9 +57,9 @@ window.tableRateModule = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
setCachedValue(key, value, resourceType = null) {
|
setCachedValue(key, value, resourceType = null) {
|
||||||
const ttl = resourceType ?
|
const ttl = resourceType ?
|
||||||
window.config.cacheConfig.ttlSettings[resourceType] ||
|
window.config.cacheConfig.ttlSettings[resourceType] ||
|
||||||
window.config.cacheConfig.defaultTTL :
|
window.config.cacheConfig.defaultTTL :
|
||||||
900000;
|
900000;
|
||||||
|
|
||||||
const item = {
|
const item = {
|
||||||
@@ -306,13 +307,14 @@ async function calculateProfitLoss(fromCoin, toCoin, fromAmount, toAmount, isOwn
|
|||||||
'ltc': 'litecoin',
|
'ltc': 'litecoin',
|
||||||
'doge': 'dogecoin',
|
'doge': 'dogecoin',
|
||||||
'dcr': 'decred',
|
'dcr': 'decred',
|
||||||
|
'nmc': 'namecoin',
|
||||||
'wow': 'wownero'
|
'wow': 'wownero'
|
||||||
};
|
};
|
||||||
|
|
||||||
if (lowerCoin === 'zcoin') return 'firo';
|
if (lowerCoin === 'zcoin') return 'firo';
|
||||||
if (lowerCoin === 'bitcoin cash') return 'bitcoin-cash';
|
if (lowerCoin === 'bitcoin cash') return 'bitcoin-cash';
|
||||||
if (lowerCoin === 'particl anon' || lowerCoin === 'particl blind') return 'particl';
|
if (lowerCoin === 'particl anon' || lowerCoin === 'particl blind') return 'particl';
|
||||||
|
|
||||||
return symbolToName[lowerCoin] || lowerCoin;
|
return symbolToName[lowerCoin] || lowerCoin;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -406,7 +408,7 @@ async function fetchLatestPrices() {
|
|||||||
const coinIds = [
|
const coinIds = [
|
||||||
'bitcoin', 'particl', 'monero', 'litecoin',
|
'bitcoin', 'particl', 'monero', 'litecoin',
|
||||||
'dogecoin', 'firo', 'dash', 'pivx',
|
'dogecoin', 'firo', 'dash', 'pivx',
|
||||||
'decred', 'bitcoincash'
|
'decred', 'namecoin', 'bitcoincash'
|
||||||
];
|
];
|
||||||
|
|
||||||
let processedData = {};
|
let processedData = {};
|
||||||
@@ -419,7 +421,7 @@ async function fetchLatestPrices() {
|
|||||||
if (mainResponse && mainResponse.rates) {
|
if (mainResponse && mainResponse.rates) {
|
||||||
Object.entries(mainResponse.rates).forEach(([coinId, price]) => {
|
Object.entries(mainResponse.rates).forEach(([coinId, price]) => {
|
||||||
const normalizedCoinId = coinId === 'bitcoincash' ? 'bitcoin-cash' : coinId.toLowerCase();
|
const normalizedCoinId = coinId === 'bitcoincash' ? 'bitcoin-cash' : coinId.toLowerCase();
|
||||||
|
|
||||||
processedData[normalizedCoinId] = {
|
processedData[normalizedCoinId] = {
|
||||||
usd: price,
|
usd: price,
|
||||||
btc: normalizedCoinId === 'bitcoin' ? 1 : price / (mainResponse.rates.bitcoin || 1)
|
btc: normalizedCoinId === 'bitcoin' ? 1 : price / (mainResponse.rates.bitcoin || 1)
|
||||||
@@ -453,7 +455,7 @@ async function fetchLatestPrices() {
|
|||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error(`Price fetch attempt ${attempt + 1} failed:`, error);
|
console.error(`Price fetch attempt ${attempt + 1} failed:`, error);
|
||||||
NetworkManager.handleNetworkError(error);
|
NetworkManager.handleNetworkError(error);
|
||||||
|
|
||||||
if (attempt < MAX_RETRIES - 1) {
|
if (attempt < MAX_RETRIES - 1) {
|
||||||
const delay = Math.min(500 * Math.pow(2, attempt), 5000);
|
const delay = Math.min(500 * Math.pow(2, attempt), 5000);
|
||||||
await new Promise(resolve => setTimeout(resolve, delay));
|
await new Promise(resolve => setTimeout(resolve, delay));
|
||||||
@@ -520,7 +522,7 @@ async function fetchOffers() {
|
|||||||
originalJsonData = [...jsonData];
|
originalJsonData = [...jsonData];
|
||||||
|
|
||||||
latestPrices = pricesData || getEmptyPriceData();
|
latestPrices = pricesData || getEmptyPriceData();
|
||||||
|
|
||||||
CacheManager.set('offers_cached', jsonData, 'offers');
|
CacheManager.set('offers_cached', jsonData, 'offers');
|
||||||
|
|
||||||
await updateOffersTable();
|
await updateOffersTable();
|
||||||
@@ -1353,7 +1355,7 @@ function createRateColumn(offer, coinFrom, coinTo) {
|
|||||||
|
|
||||||
const getPriceKey = (coin) => {
|
const getPriceKey = (coin) => {
|
||||||
const lowerCoin = coin.toLowerCase();
|
const lowerCoin = coin.toLowerCase();
|
||||||
|
|
||||||
const symbolToName = {
|
const symbolToName = {
|
||||||
'btc': 'bitcoin',
|
'btc': 'bitcoin',
|
||||||
'xmr': 'monero',
|
'xmr': 'monero',
|
||||||
@@ -1365,13 +1367,14 @@ function createRateColumn(offer, coinFrom, coinTo) {
|
|||||||
'ltc': 'litecoin',
|
'ltc': 'litecoin',
|
||||||
'doge': 'dogecoin',
|
'doge': 'dogecoin',
|
||||||
'dcr': 'decred',
|
'dcr': 'decred',
|
||||||
|
'nmc': 'namecoin',
|
||||||
'wow': 'wownero'
|
'wow': 'wownero'
|
||||||
};
|
};
|
||||||
|
|
||||||
if (lowerCoin === 'zcoin') return 'firo';
|
if (lowerCoin === 'zcoin') return 'firo';
|
||||||
if (lowerCoin === 'bitcoin cash') return 'bitcoin-cash';
|
if (lowerCoin === 'bitcoin cash') return 'bitcoin-cash';
|
||||||
if (lowerCoin === 'particl anon' || lowerCoin === 'particl blind') return 'particl';
|
if (lowerCoin === 'particl anon' || lowerCoin === 'particl blind') return 'particl';
|
||||||
|
|
||||||
return symbolToName[lowerCoin] || lowerCoin;
|
return symbolToName[lowerCoin] || lowerCoin;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1655,23 +1658,24 @@ function createTooltipContent(isSentOffers, coinFrom, coinTo, fromAmount, toAmou
|
|||||||
'ltc': 'litecoin',
|
'ltc': 'litecoin',
|
||||||
'doge': 'dogecoin',
|
'doge': 'dogecoin',
|
||||||
'dcr': 'decred',
|
'dcr': 'decred',
|
||||||
|
'nmc': 'namecoin',
|
||||||
'wow': 'wownero'
|
'wow': 'wownero'
|
||||||
};
|
};
|
||||||
|
|
||||||
if (lowerCoin === 'zcoin') return 'firo';
|
if (lowerCoin === 'zcoin') return 'firo';
|
||||||
if (lowerCoin === 'bitcoin cash') return 'bitcoin-cash';
|
if (lowerCoin === 'bitcoin cash') return 'bitcoin-cash';
|
||||||
if (lowerCoin === 'particl anon' || lowerCoin === 'particl blind') return 'particl';
|
if (lowerCoin === 'particl anon' || lowerCoin === 'particl blind') return 'particl';
|
||||||
|
|
||||||
return symbolToName[lowerCoin] || lowerCoin;
|
return symbolToName[lowerCoin] || lowerCoin;
|
||||||
};
|
};
|
||||||
|
|
||||||
if (latestPrices && latestPrices['firo'] && !latestPrices['zcoin']) {
|
if (latestPrices && latestPrices['firo'] && !latestPrices['zcoin']) {
|
||||||
latestPrices['zcoin'] = JSON.parse(JSON.stringify(latestPrices['firo']));
|
latestPrices['zcoin'] = JSON.parse(JSON.stringify(latestPrices['firo']));
|
||||||
}
|
}
|
||||||
|
|
||||||
const fromSymbol = getPriceKey(coinFrom);
|
const fromSymbol = getPriceKey(coinFrom);
|
||||||
const toSymbol = getPriceKey(coinTo);
|
const toSymbol = getPriceKey(coinTo);
|
||||||
|
|
||||||
let fromPriceUSD = latestPrices && latestPrices[fromSymbol] ? latestPrices[fromSymbol].usd : null;
|
let fromPriceUSD = latestPrices && latestPrices[fromSymbol] ? latestPrices[fromSymbol].usd : null;
|
||||||
let toPriceUSD = latestPrices && latestPrices[toSymbol] ? latestPrices[toSymbol].usd : null;
|
let toPriceUSD = latestPrices && latestPrices[toSymbol] ? latestPrices[toSymbol].usd : null;
|
||||||
|
|
||||||
@@ -1685,7 +1689,7 @@ function createTooltipContent(isSentOffers, coinFrom, coinTo, fromAmount, toAmou
|
|||||||
isNaN(fromPriceUSD) || isNaN(toPriceUSD)) {
|
isNaN(fromPriceUSD) || isNaN(toPriceUSD)) {
|
||||||
return `<p class="font-bold mb-1">Price Information Unavailable</p>
|
return `<p class="font-bold mb-1">Price Information Unavailable</p>
|
||||||
<p>Current market prices are temporarily unavailable.</p>
|
<p>Current market prices are temporarily unavailable.</p>
|
||||||
<p class="mt-2">You are ${isSentOffers ? 'selling' : 'buying'} ${fromAmount.toFixed(8)} ${coinFrom}
|
<p class="mt-2">You are ${isSentOffers ? 'selling' : 'buying'} ${fromAmount.toFixed(8)} ${coinFrom}
|
||||||
for ${toAmount.toFixed(8)} ${coinTo}.</p>
|
for ${toAmount.toFixed(8)} ${coinTo}.</p>
|
||||||
<p class="font-bold mt-2">Note:</p>
|
<p class="font-bold mt-2">Note:</p>
|
||||||
<p>Profit/loss calculations will be available when price data is restored.</p>`;
|
<p>Profit/loss calculations will be available when price data is restored.</p>`;
|
||||||
@@ -1757,13 +1761,14 @@ function createCombinedRateTooltip(offer, coinFrom, coinTo, treatAsSentOffer) {
|
|||||||
'ltc': 'litecoin',
|
'ltc': 'litecoin',
|
||||||
'doge': 'dogecoin',
|
'doge': 'dogecoin',
|
||||||
'dcr': 'decred',
|
'dcr': 'decred',
|
||||||
|
'nmc': 'namecoin',
|
||||||
'wow': 'wownero'
|
'wow': 'wownero'
|
||||||
};
|
};
|
||||||
|
|
||||||
if (lowerCoin === 'zcoin') return 'firo';
|
if (lowerCoin === 'zcoin') return 'firo';
|
||||||
if (lowerCoin === 'bitcoin cash') return 'bitcoin-cash';
|
if (lowerCoin === 'bitcoin cash') return 'bitcoin-cash';
|
||||||
if (lowerCoin === 'particl anon' || lowerCoin === 'particl blind') return 'particl';
|
if (lowerCoin === 'particl anon' || lowerCoin === 'particl blind') return 'particl';
|
||||||
|
|
||||||
return symbolToName[lowerCoin] || lowerCoin;
|
return symbolToName[lowerCoin] || lowerCoin;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1876,7 +1881,7 @@ function clearFilters() {
|
|||||||
|
|
||||||
jsonData = [...originalJsonData];
|
jsonData = [...originalJsonData];
|
||||||
currentPage = 1;
|
currentPage = 1;
|
||||||
|
|
||||||
const storageKey = isSentOffers ? 'sentOffersTableSettings' : 'networkOffersTableSettings';
|
const storageKey = isSentOffers ? 'sentOffersTableSettings' : 'networkOffersTableSettings';
|
||||||
localStorage.removeItem(storageKey);
|
localStorage.removeItem(storageKey);
|
||||||
|
|
||||||
@@ -2194,7 +2199,7 @@ async function initializeTableAndData() {
|
|||||||
function loadSavedSettings() {
|
function loadSavedSettings() {
|
||||||
const storageKey = isSentOffers ? 'sentOffersTableSettings' : 'networkOffersTableSettings';
|
const storageKey = isSentOffers ? 'sentOffersTableSettings' : 'networkOffersTableSettings';
|
||||||
const saved = localStorage.getItem(storageKey);
|
const saved = localStorage.getItem(storageKey);
|
||||||
|
|
||||||
if (saved) {
|
if (saved) {
|
||||||
const settings = JSON.parse(saved);
|
const settings = JSON.parse(saved);
|
||||||
|
|
||||||
@@ -2229,7 +2234,7 @@ document.addEventListener('DOMContentLoaded', async () => {
|
|||||||
NetworkManager.initialize({
|
NetworkManager.initialize({
|
||||||
connectionTestEndpoint: '/json',
|
connectionTestEndpoint: '/json',
|
||||||
connectionTestTimeout: 3000,
|
connectionTestTimeout: 3000,
|
||||||
reconnectDelay: 5000,
|
reconnectDelay: 5000,
|
||||||
maxReconnectAttempts: 5
|
maxReconnectAttempts: 5
|
||||||
});
|
});
|
||||||
window.networkManagerInitialized = true;
|
window.networkManagerInitialized = true;
|
||||||
@@ -2252,7 +2257,7 @@ document.addEventListener('DOMContentLoaded', async () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
const tableLoadPromise = initializeTableAndData();
|
const tableLoadPromise = initializeTableAndData();
|
||||||
|
|
||||||
WebSocketManager.initialize({
|
WebSocketManager.initialize({
|
||||||
debug: false
|
debug: false
|
||||||
});
|
});
|
||||||
@@ -2262,7 +2267,7 @@ document.addEventListener('DOMContentLoaded', async () => {
|
|||||||
if (!NetworkManager.isOnline()) {
|
if (!NetworkManager.isOnline()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const endpoint = isSentOffers ? '/json/sentoffers' : '/json/offers';
|
const endpoint = isSentOffers ? '/json/sentoffers' : '/json/offers';
|
||||||
const response = await fetch(endpoint);
|
const response = await fetch(endpoint);
|
||||||
if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`);
|
if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`);
|
||||||
@@ -2349,7 +2354,7 @@ async function cleanup() {
|
|||||||
lastRefreshTime = null;
|
lastRefreshTime = null;
|
||||||
|
|
||||||
const domRefs = [
|
const domRefs = [
|
||||||
'offersBody', 'filterForm', 'prevPageButton', 'nextPageButton',
|
'offersBody', 'filterForm', 'prevPageButton', 'nextPageButton',
|
||||||
'currentPageSpan', 'totalPagesSpan', 'lastRefreshTimeSpan', 'newEntriesCountSpan'
|
'currentPageSpan', 'totalPagesSpan', 'lastRefreshTimeSpan', 'newEntriesCountSpan'
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|||||||
@@ -548,7 +548,7 @@ const ui = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
setActiveContainer: (containerId) => {
|
setActiveContainer: (containerId) => {
|
||||||
const containerIds = ['btc', 'xmr', 'part', 'pivx', 'firo', 'dash', 'ltc', 'doge', 'eth', 'dcr', 'zano', 'wow', 'bch'].map(id => `${id}-container`);
|
const containerIds = ['btc', 'xmr', 'part', 'pivx', 'firo', 'dash', 'ltc', 'doge', 'eth', 'dcr', 'nmc', 'zano', 'wow', 'bch'].map(id => `${id}-container`);
|
||||||
containerIds.forEach(id => {
|
containerIds.forEach(id => {
|
||||||
const container = document.getElementById(id);
|
const container = document.getElementById(id);
|
||||||
if (container) {
|
if (container) {
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ const COIN_NAME_TO_SYMBOL = {
|
|||||||
'Firo': 'FIRO',
|
'Firo': 'FIRO',
|
||||||
'Dash': 'DASH',
|
'Dash': 'DASH',
|
||||||
'Decred': 'DCR',
|
'Decred': 'DCR',
|
||||||
|
'Namecoin': 'NMC',
|
||||||
'Wownero': 'WOW',
|
'Wownero': 'WOW',
|
||||||
'Bitcoin Cash': 'BCH',
|
'Bitcoin Cash': 'BCH',
|
||||||
'Dogecoin': 'DOGE'
|
'Dogecoin': 'DOGE'
|
||||||
@@ -383,8 +384,8 @@ const createSwapTableRow = async (swap) => {
|
|||||||
<div class="py-3 px-4 text-center">
|
<div class="py-3 px-4 text-center">
|
||||||
<div class="flex items-center justify-center">
|
<div class="flex items-center justify-center">
|
||||||
<span class="inline-flex mr-3 align-middle items-center justify-center w-18 h-20 rounded">
|
<span class="inline-flex mr-3 align-middle items-center justify-center w-18 h-20 rounded">
|
||||||
<img class="h-12"
|
<img class="h-12"
|
||||||
src="/static/images/coins/${swap.coin_from.replace(' ', '-')}.png"
|
src="/static/images/coins/${swap.coin_from.replace(' ', '-')}.png"
|
||||||
alt="${swap.coin_from}"
|
alt="${swap.coin_from}"
|
||||||
onerror="this.src='/static/images/coins/default.png'">
|
onerror="this.src='/static/images/coins/default.png'">
|
||||||
</span>
|
</span>
|
||||||
@@ -392,8 +393,8 @@ const createSwapTableRow = async (swap) => {
|
|||||||
<path fill-rule="evenodd" d="M12.293 5.293a1 1 0 011.414 0l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-2.293-2.293a1 1 0 010-1.414z"></path>
|
<path fill-rule="evenodd" d="M12.293 5.293a1 1 0 011.414 0l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-2.293-2.293a1 1 0 010-1.414z"></path>
|
||||||
</svg>
|
</svg>
|
||||||
<span class="inline-flex ml-3 align-middle items-center justify-center w-18 h-20 rounded">
|
<span class="inline-flex ml-3 align-middle items-center justify-center w-18 h-20 rounded">
|
||||||
<img class="h-12"
|
<img class="h-12"
|
||||||
src="/static/images/coins/${swap.coin_to.replace(' ', '-')}.png"
|
src="/static/images/coins/${swap.coin_to.replace(' ', '-')}.png"
|
||||||
alt="${swap.coin_to}"
|
alt="${swap.coin_to}"
|
||||||
onerror="this.src='/static/images/coins/default.png'">
|
onerror="this.src='/static/images/coins/default.png'">
|
||||||
</span>
|
</span>
|
||||||
@@ -421,7 +422,7 @@ const createSwapTableRow = async (swap) => {
|
|||||||
|
|
||||||
<!-- Actions Column -->
|
<!-- Actions Column -->
|
||||||
<td class="py-3 px-4 text-center">
|
<td class="py-3 px-4 text-center">
|
||||||
<a href="/bid/${swap.bid_id}"
|
<a href="/bid/${swap.bid_id}"
|
||||||
class="inline-block w-20 py-1 px-2 font-medium text-center text-sm rounded-md bg-blue-500 text-white border border-blue-500 hover:bg-blue-600 transition duration-200">
|
class="inline-block w-20 py-1 px-2 font-medium text-center text-sm rounded-md bg-blue-500 text-white border border-blue-500 hover:bg-blue-600 transition duration-200">
|
||||||
Details
|
Details
|
||||||
</a>
|
</a>
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
<div class="relative py-8 px-8 bg-coolGray-900 dark:bg-gray-500 rounded-md overflow-hidden">
|
<div class="relative py-8 px-8 bg-coolGray-900 dark:bg-gray-500 rounded-md overflow-hidden">
|
||||||
<img class="absolute z-10 left-4 top-4" src="/static/images/elements/dots-red.svg" alt="">
|
<img class="absolute z-10 left-4 top-4" src="/static/images/elements/dots-red.svg" alt="">
|
||||||
<img class="absolute z-10 right-4 bottom-4" src="/static/images/elements/dots-red.svg" alt="">
|
<img class="absolute z-10 right-4 bottom-4" src="/static/images/elements/dots-red.svg" alt="">
|
||||||
<img class="absolute h-64 left-1/2 top-1/2 transform -translate-x-1/2 -translate-y-1/2 object-cover"
|
<img class="absolute h-64 left-1/2 top-1/2 transform -translate-x-1/2 -translate-y-1/2 object-cover"
|
||||||
src="/static/images/elements/wave.svg" alt="">
|
src="/static/images/elements/wave.svg" alt="">
|
||||||
<div class="relative z-20 flex flex-wrap items-center -m-3">
|
<div class="relative z-20 flex flex-wrap items-center -m-3">
|
||||||
<div class="w-full md:w-1/2 p-3">
|
<div class="w-full md:w-1/2 p-3">
|
||||||
@@ -21,7 +21,7 @@
|
|||||||
<p class="font-normal text-coolGray-200 dark:text-white">{{ page_type_description }}</p>
|
<p class="font-normal text-coolGray-200 dark:text-white">{{ page_type_description }}</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="w-full md:w-1/2 p-3 flex justify-end items-center hidden">
|
<div class="w-full md:w-1/2 p-3 flex justify-end items-center hidden">
|
||||||
<a id="refresh" href="/newoffer"
|
<a id="refresh" href="/newoffer"
|
||||||
class="rounded-full flex items-center justify-center px-4 py-2 bg-blue-500 hover:bg-green-600 hover:border-green-600 font-medium text-sm text-white border border-blue-500 rounded-md focus:ring-0 focus:outline-none">
|
class="rounded-full flex items-center justify-center px-4 py-2 bg-blue-500 hover:bg-green-600 hover:border-green-600 font-medium text-sm text-white border border-blue-500 rounded-md focus:ring-0 focus:outline-none">
|
||||||
{{ place_new_offer_svg | safe }}
|
{{ place_new_offer_svg | safe }}
|
||||||
<span>Place new Offer</span>
|
<span>Place new Offer</span>
|
||||||
@@ -136,12 +136,13 @@
|
|||||||
'ETH': {'name': 'Ethereum', 'symbol': 'ETH', 'image': 'Ethereum.png', 'show': false},
|
'ETH': {'name': 'Ethereum', 'symbol': 'ETH', 'image': 'Ethereum.png', 'show': false},
|
||||||
'DOGE': {'name': 'Dogecoin', 'symbol': 'DOGE', 'image': 'Dogecoin.png', 'show': true},
|
'DOGE': {'name': 'Dogecoin', 'symbol': 'DOGE', 'image': 'Dogecoin.png', 'show': true},
|
||||||
'DCR': {'name': 'Decred', 'symbol': 'DCR', 'image': 'Decred.png', 'show': true},
|
'DCR': {'name': 'Decred', 'symbol': 'DCR', 'image': 'Decred.png', 'show': true},
|
||||||
|
'NMC': {'name': 'Namecoin', 'symbol': 'NMC', 'image': 'Namecoin.png', 'show': true},
|
||||||
'ZANO': {'name': 'Zano', 'symbol': 'ZANO', 'image': 'Zano.png', 'show': false},
|
'ZANO': {'name': 'Zano', 'symbol': 'ZANO', 'image': 'Zano.png', 'show': false},
|
||||||
'WOW': {'name': 'Wownero', 'symbol': 'WOW', 'image': 'Wownero.png', 'show': true}
|
'WOW': {'name': 'Wownero', 'symbol': 'WOW', 'image': 'Wownero.png', 'show': true}
|
||||||
}
|
}
|
||||||
%}
|
%}
|
||||||
{% set custom_order = ['BTC', 'ETH', 'XMR', 'PART', 'LTC', 'BCH', 'FIRO', 'PIVX', 'DASH', 'DOGE', 'DCR', 'ZANO', 'WOW'] %}
|
{% set custom_order = ['BTC', 'ETH', 'XMR', 'PART', 'LTC', 'BCH', 'FIRO', 'PIVX', 'DASH', 'DOGE', 'DCR', 'NMC', 'ZANO', 'WOW'] %}
|
||||||
|
|
||||||
{% if enabled_chart_coins is string %}
|
{% if enabled_chart_coins is string %}
|
||||||
{% if enabled_chart_coins == "" %}
|
{% if enabled_chart_coins == "" %}
|
||||||
{% set display_coins = coin_data.keys()|list %}
|
{% set display_coins = coin_data.keys()|list %}
|
||||||
|
|||||||
@@ -34,6 +34,11 @@ from tests.basicswap.common import (
|
|||||||
PIVX_BASE_PORT,
|
PIVX_BASE_PORT,
|
||||||
BTC_USE_DESCRIPTORS,
|
BTC_USE_DESCRIPTORS,
|
||||||
)
|
)
|
||||||
|
from tests.basicswap.extended.test_nmc import (
|
||||||
|
NMC_BASE_PORT,
|
||||||
|
NMC_BASE_RPC_PORT,
|
||||||
|
NMC_BASE_TOR_PORT,
|
||||||
|
)
|
||||||
from tests.basicswap.extended.test_dcr import (
|
from tests.basicswap.extended.test_dcr import (
|
||||||
DCR_BASE_PORT,
|
DCR_BASE_PORT,
|
||||||
DCR_BASE_RPC_PORT,
|
DCR_BASE_RPC_PORT,
|
||||||
@@ -50,13 +55,6 @@ from tests.basicswap.extended.test_doge import (
|
|||||||
import basicswap.config as cfg
|
import basicswap.config as cfg
|
||||||
import basicswap.bin.run as runSystem
|
import basicswap.bin.run as runSystem
|
||||||
|
|
||||||
XMR_BASE_P2P_PORT = 17792
|
|
||||||
XMR_BASE_RPC_PORT = 29798
|
|
||||||
XMR_BASE_WALLET_RPC_PORT = 29998
|
|
||||||
|
|
||||||
FIRO_BASE_PORT = 34832
|
|
||||||
FIRO_BASE_RPC_PORT = 35832
|
|
||||||
FIRO_RPC_PORT_BASE = int(os.getenv("FIRO_RPC_PORT_BASE", FIRO_BASE_RPC_PORT))
|
|
||||||
|
|
||||||
TEST_PATH = os.path.expanduser(os.getenv("TEST_PATH", "~/test_basicswap1"))
|
TEST_PATH = os.path.expanduser(os.getenv("TEST_PATH", "~/test_basicswap1"))
|
||||||
|
|
||||||
@@ -68,7 +66,21 @@ BITCOIN_RPC_PORT_BASE = int(os.getenv("BITCOIN_RPC_PORT_BASE", BTC_BASE_RPC_PORT
|
|||||||
BITCOIN_TOR_PORT_BASE = int(os.getenv("BITCOIN_TOR_PORT_BASE", BTC_BASE_TOR_PORT))
|
BITCOIN_TOR_PORT_BASE = int(os.getenv("BITCOIN_TOR_PORT_BASE", BTC_BASE_TOR_PORT))
|
||||||
|
|
||||||
LITECOIN_RPC_PORT_BASE = int(os.getenv("LITECOIN_RPC_PORT_BASE", LTC_BASE_RPC_PORT))
|
LITECOIN_RPC_PORT_BASE = int(os.getenv("LITECOIN_RPC_PORT_BASE", LTC_BASE_RPC_PORT))
|
||||||
|
|
||||||
DECRED_RPC_PORT_BASE = int(os.getenv("DECRED_RPC_PORT_BASE", DCR_BASE_RPC_PORT))
|
DECRED_RPC_PORT_BASE = int(os.getenv("DECRED_RPC_PORT_BASE", DCR_BASE_RPC_PORT))
|
||||||
|
|
||||||
|
NAMECOIN_PORT_BASE = int(os.getenv("NAMECOIN_PORT_BASE", NMC_BASE_PORT))
|
||||||
|
NAMECOIN_RPC_PORT_BASE = int(os.getenv("NAMECOIN_RPC_PORT_BASE", NMC_BASE_RPC_PORT))
|
||||||
|
NAMECOIN_TOR_PORT_BASE = int(os.getenv("NAMECOIN_TOR_PORT_BASE", NMC_BASE_TOR_PORT))
|
||||||
|
|
||||||
|
XMR_BASE_P2P_PORT = 17792
|
||||||
|
XMR_BASE_RPC_PORT = 29798
|
||||||
|
XMR_BASE_WALLET_RPC_PORT = 29998
|
||||||
|
|
||||||
|
FIRO_BASE_PORT = 34832
|
||||||
|
FIRO_BASE_RPC_PORT = 35832
|
||||||
|
FIRO_RPC_PORT_BASE = int(os.getenv("FIRO_RPC_PORT_BASE", FIRO_BASE_RPC_PORT))
|
||||||
|
|
||||||
BITCOINCASH_RPC_PORT_BASE = int(
|
BITCOINCASH_RPC_PORT_BASE = int(
|
||||||
os.getenv("BITCOINCASH_RPC_PORT_BASE", BCH_BASE_RPC_PORT)
|
os.getenv("BITCOINCASH_RPC_PORT_BASE", BCH_BASE_RPC_PORT)
|
||||||
)
|
)
|
||||||
@@ -130,19 +142,21 @@ def run_prepare(
|
|||||||
os.environ["BTC_RPC_PORT"] = str(BITCOIN_RPC_PORT_BASE)
|
os.environ["BTC_RPC_PORT"] = str(BITCOIN_RPC_PORT_BASE)
|
||||||
os.environ["BTC_PORT"] = str(BITCOIN_PORT_BASE)
|
os.environ["BTC_PORT"] = str(BITCOIN_PORT_BASE)
|
||||||
os.environ["BTC_USE_DESCRIPTORS"] = str(BTC_USE_DESCRIPTORS)
|
os.environ["BTC_USE_DESCRIPTORS"] = str(BTC_USE_DESCRIPTORS)
|
||||||
|
os.environ["BTC_ONION_PORT"] = str(BITCOIN_TOR_PORT_BASE)
|
||||||
os.environ["LTC_RPC_PORT"] = str(LITECOIN_RPC_PORT_BASE)
|
os.environ["LTC_RPC_PORT"] = str(LITECOIN_RPC_PORT_BASE)
|
||||||
os.environ["DCR_RPC_PORT"] = str(DECRED_RPC_PORT_BASE)
|
os.environ["DCR_RPC_PORT"] = str(DECRED_RPC_PORT_BASE)
|
||||||
|
os.environ["DCR_RPC_PWD"] = "dcr_pwd"
|
||||||
|
os.environ["NMC_RPC_PORT"] = str(NAMECOIN_RPC_PORT_BASE)
|
||||||
|
os.environ["NMC_PORT"] = str(NMC_BASE_PORT)
|
||||||
|
os.environ["NMC_ONION_PORT"] = str(NAMECOIN_TOR_PORT_BASE)
|
||||||
|
os.environ["XMR_RPC_USER"] = "xmr_user"
|
||||||
|
os.environ["XMR_RPC_PWD"] = "xmr_pwd"
|
||||||
os.environ["FIRO_RPC_PORT"] = str(FIRO_RPC_PORT_BASE)
|
os.environ["FIRO_RPC_PORT"] = str(FIRO_RPC_PORT_BASE)
|
||||||
os.environ["BCH_PORT"] = str(BCH_BASE_PORT)
|
os.environ["BCH_PORT"] = str(BCH_BASE_PORT)
|
||||||
os.environ["BCH_RPC_PORT"] = str(BITCOINCASH_RPC_PORT_BASE)
|
os.environ["BCH_RPC_PORT"] = str(BITCOINCASH_RPC_PORT_BASE)
|
||||||
os.environ["DOGE_PORT"] = str(DOGE_BASE_PORT)
|
os.environ["DOGE_PORT"] = str(DOGE_BASE_PORT)
|
||||||
os.environ["DOGE_RPC_PORT"] = str(DOGECOIN_RPC_PORT_BASE)
|
os.environ["DOGE_RPC_PORT"] = str(DOGECOIN_RPC_PORT_BASE)
|
||||||
|
|
||||||
os.environ["XMR_RPC_USER"] = "xmr_user"
|
|
||||||
os.environ["XMR_RPC_PWD"] = "xmr_pwd"
|
|
||||||
|
|
||||||
os.environ["DCR_RPC_PWD"] = "dcr_pwd"
|
|
||||||
|
|
||||||
import basicswap.bin.prepare as prepareSystem
|
import basicswap.bin.prepare as prepareSystem
|
||||||
|
|
||||||
# Hack: Reload module to set env vars as the basicswap_prepare module is initialised if imported from elsewhere earlier
|
# Hack: Reload module to set env vars as the basicswap_prepare module is initialised if imported from elsewhere earlier
|
||||||
@@ -320,6 +334,62 @@ def run_prepare(
|
|||||||
with open(config_filename, "a") as fp:
|
with open(config_filename, "a") as fp:
|
||||||
fp.write("enablevoting=1\n")
|
fp.write("enablevoting=1\n")
|
||||||
|
|
||||||
|
if "namecoin" in coins_array:
|
||||||
|
# Pruned nodes don't provide blocks
|
||||||
|
config_filename = os.path.join(datadir_path, "namecoin", "namecoin.conf")
|
||||||
|
with open(config_filename, "r") as fp:
|
||||||
|
lines = fp.readlines()
|
||||||
|
with open(config_filename, "w") as fp:
|
||||||
|
for line in lines:
|
||||||
|
if not line.startswith("prune"):
|
||||||
|
fp.write(line)
|
||||||
|
# fp.write("bind=127.0.0.1\n") # Causes BTC v28 to try and bind to bind=127.0.0.1:8444, even with a bind...=onion present
|
||||||
|
# listenonion=0 does not stop the node from trying to bind to the tor port
|
||||||
|
# https://github.com/bitcoin/bitcoin/issues/22726
|
||||||
|
fp.write(
|
||||||
|
"bind=127.0.0.1:{}=onion\n".format(
|
||||||
|
NAMECOIN_TOR_PORT_BASE + node_id + port_ofs
|
||||||
|
)
|
||||||
|
)
|
||||||
|
fp.write("dnsseed=0\n")
|
||||||
|
fp.write("discover=0\n")
|
||||||
|
fp.write("listenonion=0\n")
|
||||||
|
fp.write("upnp=0\n")
|
||||||
|
if use_rpcauth:
|
||||||
|
salt = generate_salt(16)
|
||||||
|
rpc_user = "test_nmc_" + str(node_id)
|
||||||
|
rpc_pass = "test_nmc_pwd_" + str(node_id)
|
||||||
|
fp.write(
|
||||||
|
"rpcauth={}:{}${}\n".format(
|
||||||
|
rpc_user, salt, password_to_hmac(salt, rpc_pass)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
settings["chainclients"]["namecoin"]["rpcuser"] = rpc_user
|
||||||
|
settings["chainclients"]["namecoin"]["rpcpassword"] = rpc_pass
|
||||||
|
for ip in range(num_nodes):
|
||||||
|
if ip != node_id:
|
||||||
|
fp.write(
|
||||||
|
"connect=127.0.0.1:{}\n".format(
|
||||||
|
NAMECOIN_PORT_BASE + ip + port_ofs
|
||||||
|
)
|
||||||
|
)
|
||||||
|
for opt in EXTRA_CONFIG_JSON.get("ncm{}".format(node_id), []):
|
||||||
|
fp.write(opt + "\n")
|
||||||
|
|
||||||
|
if "monero" in coins_array:
|
||||||
|
with open(os.path.join(datadir_path, "monero", "monerod.conf"), "a") as fp:
|
||||||
|
fp.write("p2p-bind-ip=127.0.0.1\n")
|
||||||
|
fp.write(
|
||||||
|
"p2p-bind-port={}\n".format(XMR_BASE_P2P_PORT + node_id + port_ofs)
|
||||||
|
)
|
||||||
|
for ip in range(num_nodes):
|
||||||
|
if ip != node_id:
|
||||||
|
fp.write(
|
||||||
|
"add-exclusive-node=127.0.0.1:{}\n".format(
|
||||||
|
XMR_BASE_P2P_PORT + ip + port_ofs
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
if "pivx" in coins_array:
|
if "pivx" in coins_array:
|
||||||
# Pruned nodes don't provide blocks
|
# Pruned nodes don't provide blocks
|
||||||
config_filename = os.path.join(datadir_path, "pivx", "pivx.conf")
|
config_filename = os.path.join(datadir_path, "pivx", "pivx.conf")
|
||||||
@@ -388,20 +458,6 @@ def run_prepare(
|
|||||||
for opt in EXTRA_CONFIG_JSON.get("firo{}".format(node_id), []):
|
for opt in EXTRA_CONFIG_JSON.get("firo{}".format(node_id), []):
|
||||||
fp.write(opt + "\n")
|
fp.write(opt + "\n")
|
||||||
|
|
||||||
if "monero" in coins_array:
|
|
||||||
with open(os.path.join(datadir_path, "monero", "monerod.conf"), "a") as fp:
|
|
||||||
fp.write("p2p-bind-ip=127.0.0.1\n")
|
|
||||||
fp.write(
|
|
||||||
"p2p-bind-port={}\n".format(XMR_BASE_P2P_PORT + node_id + port_ofs)
|
|
||||||
)
|
|
||||||
for ip in range(num_nodes):
|
|
||||||
if ip != node_id:
|
|
||||||
fp.write(
|
|
||||||
"add-exclusive-node=127.0.0.1:{}\n".format(
|
|
||||||
XMR_BASE_P2P_PORT + ip + port_ofs
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
if "bitcoincash" in coins_array:
|
if "bitcoincash" in coins_array:
|
||||||
config_filename = os.path.join(datadir_path, "bitcoincash", "bitcoin.conf")
|
config_filename = os.path.join(datadir_path, "bitcoincash", "bitcoin.conf")
|
||||||
with open(config_filename, "r") as fp:
|
with open(config_filename, "r") as fp:
|
||||||
|
|||||||
@@ -58,6 +58,7 @@ NMC_USE_DESCRIPTORS = toBool(os.getenv("NMC_USE_DESCRIPTORS", True))
|
|||||||
|
|
||||||
NMC_BASE_PORT = 8136
|
NMC_BASE_PORT = 8136
|
||||||
NMC_BASE_RPC_PORT = 8146
|
NMC_BASE_RPC_PORT = 8146
|
||||||
|
NMC_BASE_TOR_PORT = 8156
|
||||||
|
|
||||||
|
|
||||||
def prepareNMCDataDir(datadir, nodeId, conf_file="namecoin.conf"):
|
def prepareNMCDataDir(datadir, nodeId, conf_file="namecoin.conf"):
|
||||||
|
|||||||
@@ -60,6 +60,7 @@ from tests.basicswap.common_xmr import (
|
|||||||
prepare_nodes,
|
prepare_nodes,
|
||||||
XMR_BASE_RPC_PORT,
|
XMR_BASE_RPC_PORT,
|
||||||
DOGE_BASE_RPC_PORT,
|
DOGE_BASE_RPC_PORT,
|
||||||
|
NMC_BASE_RPC_PORT,
|
||||||
)
|
)
|
||||||
from basicswap.interface.dcr.rpc import callrpc as callrpc_dcr
|
from basicswap.interface.dcr.rpc import callrpc as callrpc_dcr
|
||||||
import basicswap.bin.run as runSystem
|
import basicswap.bin.run as runSystem
|
||||||
@@ -73,12 +74,13 @@ UI_PORT = 12700 + PORT_OFS
|
|||||||
PARTICL_RPC_PORT_BASE = int(os.getenv("PARTICL_RPC_PORT_BASE", BASE_RPC_PORT))
|
PARTICL_RPC_PORT_BASE = int(os.getenv("PARTICL_RPC_PORT_BASE", BASE_RPC_PORT))
|
||||||
BITCOIN_RPC_PORT_BASE = int(os.getenv("BITCOIN_RPC_PORT_BASE", BTC_BASE_RPC_PORT))
|
BITCOIN_RPC_PORT_BASE = int(os.getenv("BITCOIN_RPC_PORT_BASE", BTC_BASE_RPC_PORT))
|
||||||
LITECOIN_RPC_PORT_BASE = int(os.getenv("LITECOIN_RPC_PORT_BASE", LTC_BASE_RPC_PORT))
|
LITECOIN_RPC_PORT_BASE = int(os.getenv("LITECOIN_RPC_PORT_BASE", LTC_BASE_RPC_PORT))
|
||||||
DOGECOIN_RPC_PORT_BASE = int(os.getenv("DOGECOIN_RPC_PORT_BASE", DOGE_BASE_RPC_PORT))
|
DECRED_WALLET_RPC_PORT_BASE = int(os.getenv("DECRED_WALLET_RPC_PORT_BASE", 9210))
|
||||||
|
NAMECOIN_RPC_PORT_BASE = int(os.getenv("NAMECOIN_RPC_PORT_BASE", NMC_BASE_RPC_PORT))
|
||||||
|
XMR_BASE_RPC_PORT = int(os.getenv("XMR_BASE_RPC_PORT", XMR_BASE_RPC_PORT))
|
||||||
BITCOINCASH_RPC_PORT_BASE = int(
|
BITCOINCASH_RPC_PORT_BASE = int(
|
||||||
os.getenv("BITCOINCASH_RPC_PORT_BASE", BCH_BASE_RPC_PORT)
|
os.getenv("BITCOINCASH_RPC_PORT_BASE", BCH_BASE_RPC_PORT)
|
||||||
)
|
)
|
||||||
DECRED_WALLET_RPC_PORT_BASE = int(os.getenv("DECRED_WALLET_RPC_PORT_BASE", 9210))
|
DOGECOIN_RPC_PORT_BASE = int(os.getenv("DOGECOIN_RPC_PORT_BASE", DOGE_BASE_RPC_PORT))
|
||||||
XMR_BASE_RPC_PORT = int(os.getenv("XMR_BASE_RPC_PORT", XMR_BASE_RPC_PORT))
|
|
||||||
TEST_COINS_LIST = os.getenv("TEST_COINS_LIST", "bitcoin,monero")
|
TEST_COINS_LIST = os.getenv("TEST_COINS_LIST", "bitcoin,monero")
|
||||||
|
|
||||||
NUM_NODES = int(os.getenv("NUM_NODES", 3))
|
NUM_NODES = int(os.getenv("NUM_NODES", 3))
|
||||||
@@ -130,6 +132,17 @@ def calldcrrpc(
|
|||||||
return callrpc_dcr(base_rpc_port + node_id, auth, method, params)
|
return callrpc_dcr(base_rpc_port + node_id, auth, method, params)
|
||||||
|
|
||||||
|
|
||||||
|
def callnmcrpc(
|
||||||
|
node_id,
|
||||||
|
method,
|
||||||
|
params=[],
|
||||||
|
wallet="wallet.dat",
|
||||||
|
base_rpc_port=NAMECOIN_RPC_PORT_BASE + PORT_OFS,
|
||||||
|
):
|
||||||
|
auth = "test_nmc_{0}:test_nmc_pwd_{0}".format(node_id)
|
||||||
|
return callrpc(base_rpc_port + node_id, auth, method, params, wallet)
|
||||||
|
|
||||||
|
|
||||||
def callbchrpc(
|
def callbchrpc(
|
||||||
node_id,
|
node_id,
|
||||||
method,
|
method,
|
||||||
@@ -163,6 +176,8 @@ def updateThread(cls):
|
|||||||
callbchrpc(0, "generatetoaddress", [1, cls.bch_addr])
|
callbchrpc(0, "generatetoaddress", [1, cls.bch_addr])
|
||||||
if cls.doge_addr is not None:
|
if cls.doge_addr is not None:
|
||||||
calldogerpc(0, "generatetoaddress", [1, cls.doge_addr])
|
calldogerpc(0, "generatetoaddress", [1, cls.doge_addr])
|
||||||
|
if cls.nmc_addr is not None:
|
||||||
|
callnmcrpc(0, "generatetoaddress", [1, cls.nmc_addr])
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print("updateThread error", str(e))
|
print("updateThread error", str(e))
|
||||||
cls.delay_event.wait(random.randrange(cls.update_min, cls.update_max))
|
cls.delay_event.wait(random.randrange(cls.update_min, cls.update_max))
|
||||||
@@ -388,6 +403,18 @@ def start_processes(self):
|
|||||||
0, "generatetoaddress", [num_blocks - have_blocks, self.doge_addr]
|
0, "generatetoaddress", [num_blocks - have_blocks, self.doge_addr]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if "namecoin" in TEST_COINS_LIST:
|
||||||
|
self.nmc_addr = callnmcrpc(0, "getnewaddress", ["mining_addr", "bech32"])
|
||||||
|
num_blocks: int = 500
|
||||||
|
have_blocks: int = callnmcrpc(0, "getblockcount")
|
||||||
|
if have_blocks < num_blocks:
|
||||||
|
logging.info(
|
||||||
|
f"Mining {num_blocks - have_blocks} Namecoin blocks to {self.nmc_addr}"
|
||||||
|
)
|
||||||
|
callnmcrpc(
|
||||||
|
0, "generatetoaddress", [num_blocks - have_blocks, self.nmc_addr]
|
||||||
|
)
|
||||||
|
|
||||||
if RESET_TEST:
|
if RESET_TEST:
|
||||||
# Lower output split threshold for more stakeable outputs
|
# Lower output split threshold for more stakeable outputs
|
||||||
for i in range(NUM_NODES):
|
for i in range(NUM_NODES):
|
||||||
@@ -444,6 +471,7 @@ class BaseTestWithPrepare(unittest.TestCase):
|
|||||||
dcr_addr = "SsYbXyjkKAEXXcGdFgr4u4bo4L8RkCxwQpH"
|
dcr_addr = "SsYbXyjkKAEXXcGdFgr4u4bo4L8RkCxwQpH"
|
||||||
dcr_acc = None
|
dcr_acc = None
|
||||||
doge_addr = None
|
doge_addr = None
|
||||||
|
nmc_addr = None
|
||||||
|
|
||||||
initialised = False
|
initialised = False
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user