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 }