From 40ab7fc31dcb15f96cdf4c70a93e372a22ace78b Mon Sep 17 00:00:00 2001
From: CalDescent <>
Date: Sun, 8 May 2022 11:07:52 +0100
Subject: [PATCH] Added Pirate Chain to the trade portal (trading not
functional yet)
---
.../core/trade-portal/trade-portal.src.js | 109 +++++++++++++++++-
1 file changed, 108 insertions(+), 1 deletion(-)
diff --git a/qortal-ui-plugins/plugins/core/trade-portal/trade-portal.src.js b/qortal-ui-plugins/plugins/core/trade-portal/trade-portal.src.js
index 5ef9ef91..867effff 100644
--- a/qortal-ui-plugins/plugins/core/trade-portal/trade-portal.src.js
+++ b/qortal-ui-plugins/plugins/core/trade-portal/trade-portal.src.js
@@ -40,7 +40,8 @@ class TradePortal extends LitElement {
isLoadingHistoricTrades: { type: Boolean },
isLoadingOpenTrades: { type: Boolean },
isLoadingMyOpenOrders: { type: Boolean },
- theme: { type: String, reflect: true }
+ theme: { type: String, reflect: true },
+ arrrWalletAddress: { type: String },
}
}
@@ -354,6 +355,10 @@ class TradePortal extends LitElement {
background-image: url('/img/qortrvn.png');
}
+ .arrr.coinName:before {
+ background-image: url('/img/qortarrr.png');
+ }
+
.coinName {
display: inline-block;
height: 26px;
@@ -487,12 +492,29 @@ class TradePortal extends LitElement {
tradeFee: "~0.006"
}
+ let piratechain = {
+ name: "PIRATECHAIN",
+ balance: "0",
+ coinCode: "ARRR",
+ openOrders: [],
+ openFilteredOrders: [],
+ historicTrades: [],
+ myOrders: [],
+ myHistoricTrades: [],
+ myOfferingOrders: [],
+ openTradeOrders: null,
+ tradeOffersSocketCounter: 1,
+ coinAmount: this.amountString,
+ tradeFee: "~0.0002"
+ }
+
this.listedCoins = new Map()
this.listedCoins.set("QORTAL", qortal)
this.listedCoins.set("LITECOIN", litecoin)
this.listedCoins.set("DOGECOIN", dogecoin)
this.listedCoins.set("DIGIBYTE", digibyte)
this.listedCoins.set("RAVENCOIN", ravencoin)
+ this.listedCoins.set("PIRATECHAIN", piratechain)
workers.set("QORTAL", {
tradesConnectedWorker: null,
@@ -519,6 +541,11 @@ class TradePortal extends LitElement {
handleStuckTradesConnectedWorker: null
})
+ workers.set("PIRATECHAIN", {
+ tradesConnectedWorker: null,
+ handleStuckTradesConnectedWorker: null
+ })
+
this.selectedCoin = "LITECOIN"
this.selectedAddress = {}
this.config = {}
@@ -533,6 +560,7 @@ class TradePortal extends LitElement {
this.isLoadingOpenTrades = true
this.isLoadingMyOpenOrders = false
this.theme = localStorage.getItem('qortalTheme') ? localStorage.getItem('qortalTheme') : 'light'
+ this.arrrWalletAddress = ''
}
// TODO: Move each template to a separate components! Maybe
@@ -905,6 +933,7 @@ class TradePortal extends LitElement {
QORT / DOGE
QORT / DGB
QORT / RVN
+ QORT / ARRR
@@ -945,6 +974,7 @@ class TradePortal extends LitElement {
this.changeTheme()
this.changeLanguage()
this.updateWalletBalance()
+ this.fetchWalletAddress(this.selectedCoin)
setTimeout(() => {
this.displayTabContent('buy')
@@ -1075,6 +1105,10 @@ class TradePortal extends LitElement {
_url = `/crosschain/rvn/walletbalance?apiKey=${this.getApiKey()}`
_body = window.parent.reduxStore.getState().app.selectedAddress.rvnWallet.derivedMasterPublicKey
break
+ case 'PIRATECHAIN':
+ _url = `/crosschain/arrr/walletbalance?apiKey=${this.getApiKey()}`
+ _body = window.parent.reduxStore.getState().app.selectedAddress.arrrWallet.seed58
+ break
default:
break
}
@@ -1094,6 +1128,26 @@ class TradePortal extends LitElement {
})
}
+ async fetchWalletAddress(coin) {
+ console.log("fetchWalletAddress: " + coin)
+ switch (coin) {
+ case 'PIRATECHAIN':
+ let res = await parentEpml.request('apiCall', {
+ url: `/crosschain/arrr/walletaddress?apiKey=${this.getApiKey()}`,
+ method: 'POST',
+ body: `${window.parent.reduxStore.getState().app.selectedAddress.arrrWallet.seed58}`,
+ })
+ if (res != null) {
+ this.arrrWalletAddress = res
+ }
+ break
+
+ default:
+ // Not used for other coins yet
+ break
+ }
+ }
+
setForeignCoin(coin) {
let _this = this
this.selectedCoin = coin
@@ -1107,6 +1161,7 @@ class TradePortal extends LitElement {
this.clearSellForm()
this.clearBuyForm()
this.updateWalletBalance()
+ this.fetchWalletAddress(coin)
}
displayTabContent(tab) {
@@ -1538,6 +1593,49 @@ class TradePortal extends LitElement {
})
}
+ /**
+ * PirateChainACCTv1 TRADEBOT STATES
+ * - BOB_WAITING_FOR_AT_CONFIRM
+ * - BOB_WAITING_FOR_MESSAGE
+ * - BOB_WAITING_FOR_AT_REDEEM
+ * - BOB_DONE
+ * - BOB_REFUNDED
+ * - ALICE_WAITING_FOR_AT_LOCK
+ * - ALICE_DONE
+ * - ALICE_REFUNDING_A
+ * - ALICE_REFUNDED
+ *
+ * @param {[{}]} states
+ */
+
+ const PirateChainACCTv1 = (states) => {
+ // Reverse the states
+ states.reverse()
+ states.forEach((state) => {
+ if (state.creatorAddress === this.selectedAddress.address) {
+ if (state.tradeState == 'BOB_WAITING_FOR_AT_CONFIRM') {
+ this.changeTradeBotState(state, 'PENDING')
+ } else if (state.tradeState == 'BOB_WAITING_FOR_MESSAGE') {
+ this.changeTradeBotState(state, 'LISTED')
+ } else if (state.tradeState == 'BOB_WAITING_FOR_AT_REDEEM') {
+ this.changeTradeBotState(state, 'TRADING')
+ } else if (state.tradeState == 'BOB_DONE') {
+ this.handleCompletedState(state)
+ } else if (state.tradeState == 'BOB_REFUNDED') {
+ this.handleCompletedState(state)
+ } else if (state.tradeState == 'ALICE_WAITING_FOR_AT_LOCK') {
+ this.changeTradeBotState(state, 'BUYING')
+ } else if (state.tradeState == 'ALICE_DONE') {
+ this.handleCompletedState(state)
+ } else if (state.tradeState == 'ALICE_REFUNDING_A') {
+ this.changeTradeBotState(state, 'REFUNDING')
+ } else if (state.tradeState == 'ALICE_REFUNDED') {
+ this.handleCompletedState(state)
+ }
+ }
+ })
+ }
+
switch (this.selectedCoin) {
case 'BITCOIN':
BitcoinACCTv1(tradeStates)
@@ -1554,6 +1652,9 @@ class TradePortal extends LitElement {
case 'RAVENCOIN':
RavencoinACCTv1(tradeStates)
break
+ case 'PIRATECHAIN':
+ PirateChainACCTv1(tradeStates)
+ break
default:
break
}
@@ -1849,6 +1950,9 @@ class TradePortal extends LitElement {
case 'RAVENCOIN':
_receivingAddress = this.selectedAddress.rvnWallet.address
break
+ case 'PIRATECHAIN':
+ _receivingAddress = this.arrrWalletAddress
+ break
default:
break
}
@@ -1915,6 +2019,9 @@ class TradePortal extends LitElement {
case 'RAVENCOIN':
_foreignKey = this.selectedAddress.rvnWallet.derivedMasterPrivateKey
break
+ case 'PIRATECHAIN':
+ _foreignKey = this.selectedAddress.arrrWallet.seed58
+ break
default:
break
}