From dad6f06e9592701ce6214142b57d7bf11b27396d Mon Sep 17 00:00:00 2001 From: QuickMythril Date: Thu, 21 Apr 2022 11:32:05 -0400 Subject: [PATCH 1/3] add RVN wallet --- qortal-ui-core/src/plugins/routes.js | 14 + qortal-ui-crypto/api/PhraseWallet.js | 16 + qortal-ui-crypto/api/api.js | 2 +- qortal-ui-crypto/api/tradeRequest.js | 14 + .../plugins/core/wallet/wallet-app.src.js | 335 +++++++++++++++++- 5 files changed, 379 insertions(+), 2 deletions(-) diff --git a/qortal-ui-core/src/plugins/routes.js b/qortal-ui-core/src/plugins/routes.js index 37e68f98..8794da24 100644 --- a/qortal-ui-core/src/plugins/routes.js +++ b/qortal-ui-core/src/plugins/routes.js @@ -20,6 +20,7 @@ const cancelAllOffers = api.cancelAllOffers const sendBtc = api.sendBtc const sendLtc = api.sendLtc const sendDoge = api.sendDoge +const sendRvn = api.sendRvn export const routes = { hello: async (req) => { @@ -333,4 +334,17 @@ export const routes = { } return response }, + + sendRvn: async (req) => { + let response + try { + const res = await sendRvn(req.data) + response = res + } catch (e) { + console.error(e) + console.error(e.message) + response = e.message + } + return response + }, } diff --git a/qortal-ui-crypto/api/PhraseWallet.js b/qortal-ui-crypto/api/PhraseWallet.js index 86aaca35..4f2bd7e2 100644 --- a/qortal-ui-crypto/api/PhraseWallet.js +++ b/qortal-ui-crypto/api/PhraseWallet.js @@ -138,11 +138,27 @@ export default class PhraseWallet { } }).createWallet(new Uint8Array(dogeSeed), false, 'DOGE'); + // Create Ravencoin HD Wallet + const rvnSeed = [...addrSeed]; + const rvnWallet = new AltcoinHDWallet({ + mainnet: { + private: 0x0488ADE4, + public: 0x0488B21E, + prefix: 0x3C + }, + testnet: { + private: 0x04358394, + public: 0x043587CF, + prefix: 0x6F + } + }).createWallet(new Uint8Array(rvnSeed), false, 'RVN'); + this._addresses[nonce] = { address, btcWallet, ltcWallet, dogeWallet, + rvnWallet, qoraAddress, keyPair: { publicKey: addrKeyPair.publicKey, diff --git a/qortal-ui-crypto/api/api.js b/qortal-ui-crypto/api/api.js index 3fc50db4..2eb99bed 100644 --- a/qortal-ui-crypto/api/api.js +++ b/qortal-ui-crypto/api/api.js @@ -4,6 +4,6 @@ export { transactionTypes as transactions } from './transactions/transactions.js export { processTransaction, createTransaction, computeChatNonce, signChatTransaction, signArbitraryTransaction } from './createTransaction.js' -export { tradeBotCreateRequest, tradeBotRespondRequest, signTradeBotTxn, deleteTradeOffer, sendBtc, sendLtc, sendDoge } from './tradeRequest.js' +export { tradeBotCreateRequest, tradeBotRespondRequest, signTradeBotTxn, deleteTradeOffer, sendBtc, sendLtc, sendDoge, sendRvn } from './tradeRequest.js' export { cancelAllOffers } from './transactions/trade-portal/tradeoffer/cancelAllOffers.js' diff --git a/qortal-ui-crypto/api/tradeRequest.js b/qortal-ui-crypto/api/tradeRequest.js index 8eab79a6..49529287 100644 --- a/qortal-ui-crypto/api/tradeRequest.js +++ b/qortal-ui-crypto/api/tradeRequest.js @@ -101,3 +101,17 @@ export const sendDoge = (requestObject) => { body: JSON.stringify(requestObject) }) } + +// Send RVN +export const sendRvn = (requestObject) => { + const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node]; + + return request(`/crosschain/rvn/send?apiKey=${myNode.apiKey}`, { + method: 'POST', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json' + }, + body: JSON.stringify(requestObject) + }) +} diff --git a/qortal-ui-plugins/plugins/core/wallet/wallet-app.src.js b/qortal-ui-plugins/plugins/core/wallet/wallet-app.src.js index a5df9107..65444625 100644 --- a/qortal-ui-plugins/plugins/core/wallet/wallet-app.src.js +++ b/qortal-ui-plugins/plugins/core/wallet/wallet-app.src.js @@ -25,7 +25,7 @@ import '@github/time-elements' const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }) -const coinsNames = ['qort', 'btc', 'ltc', 'doge'] +const coinsNames = ['qort', 'btc', 'ltc', 'doge', 'rvn'] class MultiWallet extends LitElement { static get properties() { @@ -46,6 +46,8 @@ class MultiWallet extends LitElement { ltcAmount: { type: Number }, dogeRecipient: { type: String }, dogeAmount: { type: Number }, + rvnRecipient: { type: String }, + rvnAmount: { type: Number }, errorMessage: { type: String }, successMessage: { type: String }, sendMoneyLoading: { type: Boolean }, @@ -55,6 +57,7 @@ class MultiWallet extends LitElement { btcFeePerByte: { type: Number }, ltcFeePerByte: { type: Number }, dogeFeePerByte: { type: Number }, + rvnFeePerByte: { type: Number }, balanceString: { type: String } } } @@ -421,6 +424,10 @@ class MultiWallet extends LitElement { background-image: url('/img/doge.png'); } + .rvn .currency-image { + background-image: url('/img/rvn.png'); + } + .card-list { margin-top: 20px; } @@ -553,6 +560,7 @@ class MultiWallet extends LitElement { this.btcRecipient = '' this.ltcRecipient = '' this.dogeRecipient = '' + this.rvnRecipient = '' this.errorMessage = '' this.successMessage = '' this.sendMoneyLoading = false @@ -563,6 +571,7 @@ class MultiWallet extends LitElement { this.btcAmount = 0 this.ltcAmount = 0 this.dogeAmount = 0 + this.rvnAmount = 0 this.btcFeePerByte = 100 this.btcSatMinFee = 20 this.btcSatMaxFee = 150 @@ -572,6 +581,9 @@ class MultiWallet extends LitElement { this.dogeFeePerByte = 1000 this.dogeSatMinFee = 100 this.dogeSatMaxFee = 10000 + this.rvnFeePerByte = 1125 + this.rvnSatMinFee = 1000 + this.rvnSatMaxFee = 10000 this.wallets = new Map() @@ -591,6 +603,7 @@ class MultiWallet extends LitElement { this.wallets.get('btc').wallet = window.parent.reduxStore.getState().app.selectedAddress.btcWallet this.wallets.get('ltc').wallet = window.parent.reduxStore.getState().app.selectedAddress.ltcWallet this.wallets.get('doge').wallet = window.parent.reduxStore.getState().app.selectedAddress.dogeWallet + this.wallets.get('rvn').wallet = window.parent.reduxStore.getState().app.selectedAddress.rvnWallet this._selectedWallet = 'qort' @@ -603,6 +616,7 @@ class MultiWallet extends LitElement { this.wallets.get('btc').wallet = window.parent.reduxStore.getState().app.selectedAddress.btcWallet this.wallets.get('ltc').wallet = window.parent.reduxStore.getState().app.selectedAddress.ltcWallet this.wallets.get('doge').wallet = window.parent.reduxStore.getState().app.selectedAddress.dogeWallet + this.wallets.get('rvn').wallet = window.parent.reduxStore.getState().app.selectedAddress.rvnWallet }) parentEpml.subscribe('copy_menu_switch', async (value) => { @@ -636,6 +650,10 @@ class MultiWallet extends LitElement {
Dogecoin
+
+
+
Ravencoin
+
@@ -862,6 +880,56 @@ class MultiWallet extends LitElement { + +
+

${translate("walletpage.wchange5")}

+
+
+
+ ${translate("walletpage.wchange6")} +
+
+ ${translate("walletpage.wchange40")} + ${this.selectedTransaction.rvnTxnFlow === 'OUT' ? html`${translate("walletpage.wchange7")}` : html`${translate("walletpage.wchange8")}`} +
+ ${translate("walletpage.wchange9")} +
+
+ ${this.selectedTransaction.rvnSender} +
+ ${translate("walletpage.wchange10")} +
+
+ ${this.selectedTransaction.rvnReceiver} +
+ ${translate("walletpage.wchange12")} +
+
+ ${(this.selectedTransaction.feeAmount / 1e8).toFixed(8)} RVN +
+ ${translate("walletpage.wchange37")} +
+
+ ${(this.selectedTransaction.totalAmount / 1e8).toFixed(8)} RVN +
+ ${translate("walletpage.wchange14")} +
+
${new Date(this.selectedTransaction.timestamp).toString()}
+ ${translate("walletpage.wchange16")} +
+
+ ${this.selectedTransaction.txHash} +
+
+ + ${translate("general.close")} + +
+
@@ -1148,6 +1216,82 @@ class MultiWallet extends LitElement { ${translate("general.close")} + + +
+
+ +

${translate("walletpage.wchange17")} RVN

+
+
+

+ ${translate("walletpage.wchange18")}:
+ ${this.getSelectedWalletAddress()} +

+

+ ${translate("walletpage.wchange19")}:
+ ${this.balanceString} +

+

+ + +

+

+ + +

+
+

+ ${translate("walletpage.wchange24")}: ${(this.rvnFeePerByte / 1e8).toFixed(8)} RVN
L${translate("walletpage.wchange25")} +

+ + +
+

${this.errorMessage}

+

${this.successMessage}

+ ${this.sendMoneyLoading ? html` ` : ''} +
+
+ this.sendRvn()}> + + ${translate("walletpage.wchange17")} RVN + +
+
+
+ + ${translate("general.close")} + +
` } @@ -1389,6 +1533,52 @@ class MultiWallet extends LitElement { } checkSelectedTextAndShowMenu() }) + + this.shadowRoot.getElementById('rvnAmountInput').addEventListener('contextmenu', (event) => { + const getSelectedText = () => { + var text = '' + if (typeof window.getSelection != 'undefined') { + text = window.getSelection().toString() + } else if (typeof this.shadowRoot.selection != 'undefined' && this.shadowRoot.selection.type == 'Text') { + text = this.shadowRoot.selection.createRange().text + } + return text + } + const checkSelectedTextAndShowMenu = () => { + let selectedText = getSelectedText() + if (selectedText && typeof selectedText === 'string') { + } else { + this.pasteMenu(event, 'rvnAmountInput') + this.isPasteMenuOpen = true + event.preventDefault() + event.stopPropagation() + } + } + checkSelectedTextAndShowMenu() + }) + + this.shadowRoot.getElementById('rvnRecipient').addEventListener('contextmenu', (event) => { + const getSelectedText = () => { + var text = '' + if (typeof window.getSelection != 'undefined') { + text = window.getSelection().toString() + } else if (typeof this.shadowRoot.selection != 'undefined' && this.shadowRoot.selection.type == 'Text') { + text = this.shadowRoot.selection.createRange().text + } + return text + } + const checkSelectedTextAndShowMenu = () => { + let selectedText = getSelectedText() + if (selectedText && typeof selectedText === 'string') { + } else { + this.pasteMenu(event, 'rvnRecipient') + this.isPasteMenuOpen = true + event.preventDefault() + event.stopPropagation() + } + } + checkSelectedTextAndShowMenu() + }) } renderFetchText() { @@ -1766,6 +1956,52 @@ class MultiWallet extends LitElement { this.showWallet() } + async sendRvn() { + const rvnAmount = this.shadowRoot.getElementById('rvnAmountInput').value + let rvnRecipient = this.shadowRoot.getElementById('rvnRecipient').value + const xprv58 = this.wallets.get(this._selectedWallet).wallet.derivedMasterPrivateKey + + this.sendMoneyLoading = true + this.btnDisable = true + + const makeRequest = async () => { + const opts = { + xprv58: xprv58, + receivingAddress: rvnRecipient, + ravencoinAmount: rvnAmount, + feePerByte: (this.rvnFeePerByte / 1e8).toFixed(8), + } + const response = await parentEpml.request('sendRvn', opts) + return response + } + + const manageResponse = (response) => { + if (response.length === 64) { + this.shadowRoot.getElementById('rvnAmountInput').value = 0 + this.shadowRoot.getElementById('rvnRecipient').value = '' + this.errorMessage = '' + this.rvnRecipient = '' + this.rvnAmount = 0 + this.successMessage = this.renderSuccessText() + this.sendMoneyLoading = false + this.btnDisable = false + } else if (response === false) { + this.errorMessage = this.renderFailText() + this.sendMoneyLoading = false + this.btnDisable = false + throw new Error(txnResponse) + } else { + this.errorMessage = response.message + this.sendMoneyLoading = false + this.btnDisable = false + throw new Error(response) + } + } + const res = await makeRequest() + manageResponse(res) + this.showWallet() + } + async showWallet() { this.transactionsDOM.hidden = true this.loading = true @@ -1816,6 +2052,7 @@ class MultiWallet extends LitElement { case 'btc': case 'ltc': case 'doge': + case 'rvn': const walletName = `${coin}Wallet` parentEpml.request('apiCall', { url: `/crosschain/${coin}/walletbalance?apiKey=${this.getApiKey()}`, @@ -1866,6 +2103,8 @@ class MultiWallet extends LitElement { return html` this.openSendLtc()}> ${translate("walletpage.wchange17")} LTC` } else if ( this._selectedWallet === "doge" ) { return html` this.openSendDoge()}> ${translate("walletpage.wchange17")} DOGE` + } else if ( this._selectedWallet === "rvn" ) { + return html` this.openSendRvn()}> ${translate("walletpage.wchange17")} RVN` } else { return html`` } @@ -1887,6 +2126,10 @@ class MultiWallet extends LitElement { this.shadowRoot.querySelector("#sendDogeDialog").show(); } + openSendRvn() { + this.shadowRoot.querySelector("#sendRvnDialog").show(); + } + changeTheme() { const checkTheme = localStorage.getItem('qortalTheme') if (checkTheme === 'dark') { @@ -1952,6 +2195,15 @@ class MultiWallet extends LitElement { }, { passive: true } ) + } else if (coin === 'rvn') { + this.transactionsGrid.addEventListener( + 'click', + (e) => { + let rvnItem = this.transactionsGrid.getEventContext(e).item + this.showRvnTransactionDetails(rvnItem, this.wallets.get(this._selectedWallet).transactions) + }, + { passive: true } + ) } this.pagesControl = this.shadowRoot.querySelector('#pages') @@ -1967,6 +2219,8 @@ class MultiWallet extends LitElement { render(this.renderLtcTransactions(this.wallets.get(this._selectedWallet).transactions, this._selectedWallet), this.transactionsDOM) } else if (this._selectedWallet === 'doge') { render(this.renderDogeTransactions(this.wallets.get(this._selectedWallet).transactions, this._selectedWallet), this.transactionsDOM) + } else if (this._selectedWallet === 'rvn') { + render(this.renderRvnTransactions(this.wallets.get(this._selectedWallet).transactions, this._selectedWallet), this.transactionsDOM) } } @@ -2222,6 +2476,71 @@ class MultiWallet extends LitElement { ` } + renderRvnTransactions(transactions, coin) { + return html` +
${translate("walletpage.wchange38")}
+ + { + render(html`check`, root) + }} + > + + { + render(html` ${translate("walletpage.wchange40")} ${data.item.inputs[0].address === this.wallets.get(this._selectedWallet).wallet.address ? html`${translate("walletpage.wchange7")}` : html`${translate("walletpage.wchange8")}`} `, root) + }} + > + + { + render(html`${data.item.inputs[0].address}`, root) + }} + > + + { + render(html`${data.item.outputs[0].address}`, root) + }} + > + + + { + const amount = (Number(data.item.totalAmount) / 1e8).toFixed(8) + render(html`${amount}`, root) + }} + > + + { + const time = new Date(data.item.timestamp * 1000) + render(html` `, root) + }} + > + + +
+ ` + } + async updateItemsFromPage(page, changeWallet = false) { if (page === undefined) { return @@ -2394,6 +2713,20 @@ class MultiWallet extends LitElement { }) } + showRvnTransactionDetails(myTransaction, allTransactions) { + allTransactions.forEach((transaction) => { + if (myTransaction.txHash === transaction.txHash) { + let rvnTxnFlow = myTransaction.inputs[0].address === this.wallets.get(this._selectedWallet).wallet.address ? 'OUT' : 'IN' + let rvnSender = myTransaction.inputs[0].address + let rvnReceiver = myTransaction.outputs[0].address + this.selectedTransaction = { ...transaction, rvnTxnFlow, rvnSender, rvnReceiver } + if (this.selectedTransaction.txHash.length != 0) { + this.shadowRoot.querySelector('#showRvnTransactionDetailsDialog').show() + } + } + }) + } + isEmptyArray(arr) { if (!arr) { return true From 5474b6bff1782491567889cfe430dfc4c209ce05 Mon Sep 17 00:00:00 2001 From: QuickMythril Date: Tue, 26 Apr 2022 13:43:13 -0400 Subject: [PATCH 2/3] add QORT/RVN icon --- img/qortrvn.png | Bin 0 -> 2876 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 img/qortrvn.png diff --git a/img/qortrvn.png b/img/qortrvn.png new file mode 100644 index 0000000000000000000000000000000000000000..be052ac1cb283e8b5e97eaa700a6b18234e060ea GIT binary patch literal 2876 zcmaJ@XH-*L8Vx#vAVr!=QDW#N6_60B5SkLCN*>Y@awQ?8kOYZT73oS*P!S#|%|a0= z3L+f`%Yz3hqGBv`q(}sjCQh)u`7zF2>)dm{v-aL!J!{=0XD2%eF-0*D2qfWPk98I7 zP{C5%EG&4d0)1(MO^EGkX9cS0R-OeNi4%G~@cikfxk8=iFGgtuF2!@0PAP@+!kui)!AQA$IL_IJHfkMI&25_VS6oJ6# z8)FO%z&{>{z#kZF$|4=cxMFR8_!C%W5Hg3u#K7TUVPUW^eHeok2uB(l8^aMOI0^+7 zAfW7{bPjEK)f z6OM!-)^qy_#Nqxwlt%l7W^-JDe}ev>!ff}WOaSf*uoW|zJqRokiL|js+n^A}h`mO(`Y04q-`MCU7t06;r2%x#PcG>nF7mhBZ(Uk%nW?~? zAOI}Dq8tH8wk!q>{4I41<#!>WZEb!l`-4mRT}WtK+uw8HKY}uauebTX+Wvi{zMTqY zN?@77e@*nd_3Ksubiq|%31&WQC*vguBogm{-Rq9GE5}oV<@)8<4lfwKKHuoujEL^J z(BY4`Eb7#ziz_sMsLe}XuQL$U)~R_|=ppB^vt)~)E@N6xL{S=Em28bUDQ=CQ$7o&{8BH$`rZN= ze@k7qfMHd&dxk~5IAEez--xT?-I|{Mx3#QH?SS$wt=IJi*fZg%rI8mlF*%F-2MasI z=#?!XK7tRG`I1fEeWAc;PoHjx1n%Q_k8mKzb@WD;@Hu(*k^vN7)d>rj>&9K_dyx!- z&{fT?GwTWG$h+6#J3ikW&)?J6M-A{y)0S<2?M)0kF>-BfFkM;8yLZ+5YrS{DWYS8K z;h^?T#V^{Ize)$|=M>8w$3uAqJC5lJh@K#=p6qbx)N2 z-Qn2!%IKnH2Cpk7uu+10+xLO-Kmxb>6Sg9K~z+hWK}G0SeMi$noqf zSH>gi{JZYm7x?$v!>mp_6&5{D@Ne0Yf1s7h*wv9*67vRpp>^`ab`BB4;hCM=n*WR; zsiO2GwS67!!CKl2L$3kD z$^qI_PnmxI%btjRD#T5@+?p^o?>cX6U%~alw|+CDflv>Xj+f(Gss>XA5@!p z%{#r^99FpWD5TJ%^D{N_`Jm@JSItxBa)z4Xm)c?g2bpK7SCOZDa@y`*Cl)3c=Dsh= zEyDk8^(Zkd>7cLzzjxp+^Q=nF_zo97cM>S0HJzN>C_Uf99*T(Ka{b^=k+R5eq4I?8 zv6?EZl?uLbtM3g+BkA!XyB)xwK=^%!v5{lC8 z$@tp~u%QQvkDrpHQ+!J-yoOSGwTSP~&)}k$Vz=?!hEWzp_a4kt7hm4&kPMl&zCNyN zSJGjqG}qNc{8yezhb^fkAl-}patUV`z>U!B`GM@zK zvajasDchOU(R1{&ikIa6Srhy`5P{q(>6y6U5Nb*#D;-OhOOas>0LQMEAlu!~S! zZnXmHSN!CnRBuPo-wKi?kq$dvO zOS?rX1}~IPc)T_r4F7V@|LJybahi|Mz9wApxcJojJMpJ8wa1(vD_rK9;fjMiV&D%= z4)C^~AthIQ_z)#}{Fn&OES4L(veI^^dQ(iQm+xF!OcQ$EJxE>%F5{MQ@(DVGF=nV& zd}=YGYE4bvRinTiz4OYZ2TI3}_ZXDa>lCd;d1P%CsYBhzh62t-GaJ8RP6ztEJi7mc zf=divj?p|-5s9)N?FQue8;PUJ>>ZFt{c_q|z(e$|+RW{I$wB1=)3rJUXY$PCOY;zC zp%~uV@QmRWP1<(WomR(0-u@S_ilK1v+##F5TAr7asimIufeC+V@^(cpEnTl;+pSb- zx2?YRPd}?}wCn2klDNM+J+Atme(UA*QTxQ&ZILJI3MTW+RGO+s+FWi)en8W^Dlm%{ zH8=mX`s3c?(XkZ=MDu|wS;bHIW`lDbB8l1eLdCq*Yo)`|pC9bC>Pg%B^r`d)`B`tN zL(xHscs)DO@*YzwG@!h@=$RX=S7V#Brwl`Lo6HigKaqzupG5C>JVU-Sj Date: Tue, 26 Apr 2022 13:45:21 -0400 Subject: [PATCH 3/3] add RVN to Trade Portal --- .../core/trade-portal/trade-portal.src.js | 108 +++++++++++++++--- 1 file changed, 95 insertions(+), 13 deletions(-) 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 fb7e8c1c..5bbbb3cf 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 @@ -346,6 +346,10 @@ class TradePortal extends LitElement { background-image: url('/img/qortdoge.png'); } + .rvn.coinName:before { + background-image: url('/img/qortrvn.png'); + } + .coinName { display: inline-block; height: 26px; @@ -444,10 +448,26 @@ class TradePortal extends LitElement { coinAmount: this.amountString } + let ravencoin = { + name: "RAVENCOIN", + balance: "0", + coinCode: "RVN", + openOrders: [], + openFilteredOrders: [], + historicTrades: [], + myOrders: [], + myHistoricTrades: [], + myOfferingOrders: [], + openTradeOrders: null, + tradeOffersSocketCounter: 1, + coinAmount: this.amountString + } + this.listedCoins = new Map() this.listedCoins.set("QORTAL", qortal) this.listedCoins.set("LITECOIN", litecoin) this.listedCoins.set("DOGECOIN", dogecoin) + this.listedCoins.set("RAVENCOIN", ravencoin) workers.set("QORTAL", { tradesConnectedWorker: null, @@ -464,6 +484,11 @@ class TradePortal extends LitElement { handleStuckTradesConnectedWorker: null }) + workers.set("RAVENCOIN", { + tradesConnectedWorker: null, + handleStuckTradesConnectedWorker: null + }) + this.selectedCoin = "LITECOIN" this.selectedAddress = {} this.config = {} @@ -846,6 +871,7 @@ class TradePortal extends LitElement { QORT / LTC QORT / DOGE + QORT / RVN
@@ -1008,6 +1034,10 @@ class TradePortal extends LitElement { _url = `/crosschain/doge/walletbalance?apiKey=${this.getApiKey()}` _body = window.parent.reduxStore.getState().app.selectedAddress.dogeWallet.derivedMasterPublicKey break + case 'RAVENCOIN': + _url = `/crosschain/rvn/walletbalance?apiKey=${this.getApiKey()}` + _body = window.parent.reduxStore.getState().app.selectedAddress.rvnWallet.derivedMasterPublicKey + break default: break } @@ -1020,7 +1050,7 @@ class TradePortal extends LitElement { .then((res) => { if (isNaN(Number(res))) { let snack1string = get("tradepage.tchange30") - parentEpml.request('showSnackBar', `${snack1tring}`) + parentEpml.request('showSnackBar', `${snack1string}`) } else { this.listedCoins.get(this.selectedCoin).balance = (Number(res) / 1e8).toFixed(8) } @@ -1385,6 +1415,49 @@ class TradePortal extends LitElement { }) } + /** + * RavencoinACCTv1 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 RavencoinACCTv1 = (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) @@ -1395,6 +1468,9 @@ class TradePortal extends LitElement { case 'DOGECOIN': DogecoinACCTv1(tradeStates) break + case 'RAVENCOIN': + RavencoinACCTv1(tradeStates) + break default: break } @@ -1640,19 +1716,19 @@ class TradePortal extends LitElement { } const restartPresenceWebSocket = () => { - setTimeout(() => initPresenceWebSocket(true), 3000) + setTimeout(() => initPresenceWebSocket(true), 5000) } const restartTradePresenceWebSocket = () => { - setTimeout(() => initTradePresenceWebSocket(true), 3000) + setTimeout(() => initTradePresenceWebSocket(true), 5000) } const restartTradeOffersWebSocket = () => { - setTimeout(() => initTradeOffersWebSocket(true), 3000) + setTimeout(() => initTradeOffersWebSocket(true), 5000) } const restartTradeBotWebSocket = () => { - setTimeout(() => initTradeBotWebSocket(true), 3000) + setTimeout(() => initTradeBotWebSocket(true), 5000) } // Start TradeOffersWebSocket @@ -1684,6 +1760,9 @@ class TradePortal extends LitElement { case 'DOGECOIN': _receivingAddress = this.selectedAddress.dogeWallet.address break + case 'RAVENCOIN': + _receivingAddress = this.selectedAddress.rvnWallet.address + break default: break } @@ -1710,12 +1789,12 @@ class TradePortal extends LitElement { this.isSellLoading = false this.sellBtnDisable = false let snack2string = get("tradepage.tchange20") - parentEpml.request('showSnackBar', `${snack2tring}`) + parentEpml.request('showSnackBar', `${snack2string}`) } else { this.isSellLoading = false this.sellBtnDisable = false let snack3string = get("tradepage.tchange21") - parentEpml.request('showSnackBar', `${snack3tring}: ${response.message}`) + parentEpml.request('showSnackBar', `${snack3string}: ${response.message}`) } } @@ -1723,7 +1802,7 @@ class TradePortal extends LitElement { this.isSellLoading = false this.sellBtnDisable = false let snack4string = get("tradepage.tchange22") - parentEpml.request('showSnackBar', `${snack4tring}`) + parentEpml.request('showSnackBar', `${snack4string}`) return false } else { const res = await makeRequest() @@ -1744,6 +1823,9 @@ class TradePortal extends LitElement { case 'DOGECOIN': _foreignKey = this.selectedAddress.dogeWallet.derivedMasterPrivateKey break + case 'RAVENCOIN': + _foreignKey = this.selectedAddress.rvnWallet.derivedMasterPrivateKey + break default: break } @@ -1766,17 +1848,17 @@ class TradePortal extends LitElement { this.shadowRoot.getElementById('buyTotalInput').value = this.initialAmount this.shadowRoot.getElementById('qortalAtAddress').value = '' let snack5string = get("tradepage.tchange23") - parentEpml.request('showSnackBar', `${snack5tring}`) + parentEpml.request('showSnackBar', `${snack5string}`) } else if (response === false) { this.isBuyLoading = false this.buyBtnDisable = false let snack6string = get("tradepage.tchange24") - parentEpml.request('showSnackBar', `${snack6tring}`) + parentEpml.request('showSnackBar', `${snack6string}`) } else { this.isBuyLoading = false this.buyBtnDisable = false let snack7string = get("tradepage.tchange25") - parentEpml.request('showSnackBar', `${snack7tring}: ${response.message}`) + parentEpml.request('showSnackBar', `${snack7string}: ${response.message}`) } } @@ -1803,12 +1885,12 @@ class TradePortal extends LitElement { button.remove() this.cancelBtnDisable = false let snack8string = get("tradepage.tchange26") - parentEpml.request('showSnackBar', `${snack8tring}`) + parentEpml.request('showSnackBar', `${snack8string}`) } else if (response === false) { button.innerHTML = 'CANCEL' this.cancelBtnDisable = false let snack9string = get("tradepage.tchange27") - parentEpml.request('showSnackBar', `${snack9tring}`) + parentEpml.request('showSnackBar', `${snack9string}`) } else { button.innerHTML = 'CANCEL' this.cancelBtnDisable = false