From 326185d2267f2fc02805990b964981dff97c9990 Mon Sep 17 00:00:00 2001 From: QuickMythril Date: Thu, 21 Apr 2022 11:30:05 -0400 Subject: [PATCH] add DGB wallet --- img/dgb.png | Bin 0 -> 4917 bytes img/dgb_transparent.png | Bin 0 -> 5011 bytes 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 +++++++++++++++++- 7 files changed, 379 insertions(+), 2 deletions(-) create mode 100644 img/dgb.png create mode 100644 img/dgb_transparent.png diff --git a/img/dgb.png b/img/dgb.png new file mode 100644 index 0000000000000000000000000000000000000000..6950158b56d73dcce67b8fece5cc1d1817b6b51c GIT binary patch literal 4917 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 literal 0 HcmV?d00001 diff --git a/img/dgb_transparent.png b/img/dgb_transparent.png new file mode 100644 index 0000000000000000000000000000000000000000..94e96ee185df6547138226843c1e130ece5ed50a GIT binary patch literal 5011 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 literal 0 HcmV?d00001 diff --git a/qortal-ui-core/src/plugins/routes.js b/qortal-ui-core/src/plugins/routes.js index 37e68f98..4310ad09 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 sendDgb = api.sendDgb export const routes = { hello: async (req) => { @@ -333,4 +334,17 @@ export const routes = { } return response }, + + sendDgb: async (req) => { + let response + try { + const res = await sendDgb(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..00e6fd14 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 Digibyte HD Wallet + const dgbSeed = [...addrSeed]; + const dgbWallet = new AltcoinHDWallet({ + mainnet: { + private: 0x0488ADE4, + public: 0x0488B21E, + prefix: 0x1E + }, + testnet: { + private: 0x04358394, + public: 0x043587CF, + prefix: 0x7E + } + }).createWallet(new Uint8Array(dgbSeed), false, 'DGB'); + this._addresses[nonce] = { address, btcWallet, ltcWallet, dogeWallet, + dgbWallet, qoraAddress, keyPair: { publicKey: addrKeyPair.publicKey, diff --git a/qortal-ui-crypto/api/api.js b/qortal-ui-crypto/api/api.js index 3fc50db4..d9c469e1 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, sendDgb } 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..bef31a07 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 DGB +export const sendDgb = (requestObject) => { + const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node]; + + return request(`/crosschain/dgb/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..56a7e108 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', 'dgb'] class MultiWallet extends LitElement { static get properties() { @@ -46,6 +46,8 @@ class MultiWallet extends LitElement { ltcAmount: { type: Number }, dogeRecipient: { type: String }, dogeAmount: { type: Number }, + dgbRecipient: { type: String }, + dgbAmount: { 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 }, + dgbFeePerByte: { type: Number }, balanceString: { type: String } } } @@ -421,6 +424,10 @@ class MultiWallet extends LitElement { background-image: url('/img/doge.png'); } + .dgb .currency-image { + background-image: url('/img/dgb.png'); + } + .card-list { margin-top: 20px; } @@ -553,6 +560,7 @@ class MultiWallet extends LitElement { this.btcRecipient = '' this.ltcRecipient = '' this.dogeRecipient = '' + this.dgbRecipient = '' 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.dgbAmount = 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.dgbFeePerByte = 100 + this.dgbSatMinFee = 10 + this.dgbSatMaxFee = 1000 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('dgb').wallet = window.parent.reduxStore.getState().app.selectedAddress.dgbWallet 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('dgb').wallet = window.parent.reduxStore.getState().app.selectedAddress.dgbWallet }) parentEpml.subscribe('copy_menu_switch', async (value) => { @@ -636,6 +650,10 @@ class MultiWallet extends LitElement {
Dogecoin
+
+
+
Digibyte
+
@@ -862,6 +880,56 @@ class MultiWallet extends LitElement { + +
+

${translate("walletpage.wchange5")}

+
+
+
+ ${translate("walletpage.wchange6")} +
+
+ ${translate("walletpage.wchange40")} + ${this.selectedTransaction.dgbTxnFlow === 'OUT' ? html`${translate("walletpage.wchange7")}` : html`${translate("walletpage.wchange8")}`} +
+ ${translate("walletpage.wchange9")} +
+
+ ${this.selectedTransaction.dgbSender} +
+ ${translate("walletpage.wchange10")} +
+
+ ${this.selectedTransaction.dgbReceiver} +
+ ${translate("walletpage.wchange12")} +
+
+ ${(this.selectedTransaction.feeAmount / 1e8).toFixed(8)} DGB +
+ ${translate("walletpage.wchange37")} +
+
+ ${(this.selectedTransaction.totalAmount / 1e8).toFixed(8)} DGB +
+ ${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")} DGB

+
+
+

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

+

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

+

+ + +

+

+ + +

+
+

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

+ + +
+

${this.errorMessage}

+

${this.successMessage}

+ ${this.sendMoneyLoading ? html` ` : ''} +
+
+ this.sendDgb()}> + + ${translate("walletpage.wchange17")} DGB + +
+
+
+ + ${translate("general.close")} + +
` } @@ -1389,6 +1533,52 @@ class MultiWallet extends LitElement { } checkSelectedTextAndShowMenu() }) + + this.shadowRoot.getElementById('dgbAmountInput').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, 'dgbAmountInput') + this.isPasteMenuOpen = true + event.preventDefault() + event.stopPropagation() + } + } + checkSelectedTextAndShowMenu() + }) + + this.shadowRoot.getElementById('dgbRecipient').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, 'dgbRecipient') + this.isPasteMenuOpen = true + event.preventDefault() + event.stopPropagation() + } + } + checkSelectedTextAndShowMenu() + }) } renderFetchText() { @@ -1766,6 +1956,52 @@ class MultiWallet extends LitElement { this.showWallet() } + async sendDgb() { + const dgbAmount = this.shadowRoot.getElementById('dgbAmountInput').value + let dgbRecipient = this.shadowRoot.getElementById('dgbRecipient').value + const xprv58 = this.wallets.get(this._selectedWallet).wallet.derivedMasterPrivateKey + + this.sendMoneyLoading = true + this.btnDisable = true + + const makeRequest = async () => { + const opts = { + xprv58: xprv58, + receivingAddress: dgbRecipient, + digibyteAmount: dgbAmount, + feePerByte: (this.dgbFeePerByte / 1e8).toFixed(8), + } + const response = await parentEpml.request('sendDgb', opts) + return response + } + + const manageResponse = (response) => { + if (response.length === 64) { + this.shadowRoot.getElementById('dgbAmountInput').value = 0 + this.shadowRoot.getElementById('dgbRecipient').value = '' + this.errorMessage = '' + this.dgbRecipient = '' + this.dgbAmount = 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 'dgb': 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 === "dgb" ) { + return html` this.openSendDgb()}> ${translate("walletpage.wchange17")} DGB` } else { return html`` } @@ -1887,6 +2126,10 @@ class MultiWallet extends LitElement { this.shadowRoot.querySelector("#sendDogeDialog").show(); } + openSendDgb() { + this.shadowRoot.querySelector("#sendDgbDialog").show(); + } + changeTheme() { const checkTheme = localStorage.getItem('qortalTheme') if (checkTheme === 'dark') { @@ -1952,6 +2195,15 @@ class MultiWallet extends LitElement { }, { passive: true } ) + } else if (coin === 'dgb') { + this.transactionsGrid.addEventListener( + 'click', + (e) => { + let dgbItem = this.transactionsGrid.getEventContext(e).item + this.showDgbTransactionDetails(dgbItem, 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 === 'dgb') { + render(this.renderDgbTransactions(this.wallets.get(this._selectedWallet).transactions, this._selectedWallet), this.transactionsDOM) } } @@ -2222,6 +2476,71 @@ class MultiWallet extends LitElement { ` } + renderDgbTransactions(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 { }) } + showDgbTransactionDetails(myTransaction, allTransactions) { + allTransactions.forEach((transaction) => { + if (myTransaction.txHash === transaction.txHash) { + let dgbTxnFlow = myTransaction.inputs[0].address === this.wallets.get(this._selectedWallet).wallet.address ? 'OUT' : 'IN' + let dgbSender = myTransaction.inputs[0].address + let dgbReceiver = myTransaction.outputs[0].address + this.selectedTransaction = { ...transaction, dgbTxnFlow, dgbSender, dgbReceiver } + if (this.selectedTransaction.txHash.length != 0) { + this.shadowRoot.querySelector('#showDgbTransactionDetailsDialog').show() + } + } + }) + } + isEmptyArray(arr) { if (!arr) { return true