diff --git a/qortal-ui-crypto/api.js b/qortal-ui-crypto/api.js index b2cfad3c..cc81dc9e 100644 --- a/qortal-ui-crypto/api.js +++ b/qortal-ui-crypto/api.js @@ -2,9 +2,8 @@ import { Sha256 } from 'asmcrypto.js' import Base58 from './api/deps/Base58' import { base58PublicKeyToAddress } from './api/wallet/base58PublicKeyToAddress' import { validateAddress } from './api/wallet/validateAddress' -import { decryptChatMessage } from './api/transactions/chat/decryptChatMessage'; -import _ from 'lodash'; - +import { decryptChatMessage } from './api/transactions/chat/decryptChatMessage' +import _ from 'lodash' window.Sha256 = Sha256 window.Base58 = Base58 @@ -14,7 +13,6 @@ window.validateAddress = validateAddress window.decryptChatMessage = decryptChatMessage export { initApi, store } from './api_deps.js' - export * from './api/deps/deps.js' export * from './api/api.js' export * from './api/registerUsername.js' diff --git a/qortal-ui-crypto/api/PhraseWallet.js b/qortal-ui-crypto/api/PhraseWallet.js index 64baa02b..41818a28 100644 --- a/qortal-ui-crypto/api/PhraseWallet.js +++ b/qortal-ui-crypto/api/PhraseWallet.js @@ -1,7 +1,7 @@ /* Copyright 2017-2018 @ irontiga and vbcs (original developer) */ -'use strict'; +'use strict' import Base58 from './deps/Base58.js' import { Sha256, Sha512 } from 'asmcrypto.js' import nacl from './deps/nacl-fast.js' @@ -10,200 +10,200 @@ import utils from './deps/utils.js' import { generateSaveWalletData } from './storeWallet.js' import publicKeyToAddress from './wallet/publicKeyToAddress.js' -import AltcoinHDWallet from "./bitcoin/AltcoinHDWallet"; +import AltcoinHDWallet from "./bitcoin/AltcoinHDWallet" export default class PhraseWallet { - constructor(seed, walletVersion) { + constructor(seed, walletVersion) { - this._walletVersion = walletVersion || 2 - this.seed = seed + this._walletVersion = walletVersion || 2 + this.seed = seed - this.savedSeedData = {} - this.hasBeenSaved = false - } + this.savedSeedData = {} + this.hasBeenSaved = false + } - set seed(seed) { - this._byteSeed = seed - this._base58Seed = Base58.encode(seed) + set seed(seed) { + this._byteSeed = seed + this._base58Seed = Base58.encode(seed) - this._addresses = [] + this._addresses = [] - this.genAddress(0) - } + this.genAddress(0) + } - getAddress(nonce) { - return this._addresses[nonce] - } + getAddress(nonce) { + return this._addresses[nonce] + } - get addresses() { - return this._addresses - } + get addresses() { + return this._addresses + } - get addressIDs() { - return this._addresses.map(addr => { - return addr.address - }) - } + get addressIDs() { + return this._addresses.map(addr => { + return addr.address + }) + } - get seed() { - return this._byteSeed - } + get seed() { + return this._byteSeed + } - addressExists(nonce) { - return this._addresses[nonce] != undefined - } + addressExists(nonce) { + return this._addresses[nonce] != undefined + } - _genAddressSeed(seed) { - let newSeed = new Sha512().process(seed).finish().result - newSeed = new Sha512().process(utils.appendBuffer(newSeed, seed)).finish().result - return newSeed - } + _genAddressSeed(seed) { + let newSeed = new Sha512().process(seed).finish().result + newSeed = new Sha512().process(utils.appendBuffer(newSeed, seed)).finish().result + return newSeed + } - genAddress(nonce) { - if (nonce >= this._addresses.length) { - this._addresses.length = nonce + 1 - } + genAddress(nonce) { + if (nonce >= this._addresses.length) { + this._addresses.length = nonce + 1 + } - if (this.addressExists(nonce)) { - return this.addresses[nonce] - } + if (this.addressExists(nonce)) { + return this.addresses[nonce] + } - const nonceBytes = utils.int32ToBytes(nonce) + const nonceBytes = utils.int32ToBytes(nonce) - let addrSeed = new Uint8Array() - addrSeed = utils.appendBuffer(addrSeed, nonceBytes) - addrSeed = utils.appendBuffer(addrSeed, this._byteSeed) - addrSeed = utils.appendBuffer(addrSeed, nonceBytes) + let addrSeed = new Uint8Array() + addrSeed = utils.appendBuffer(addrSeed, nonceBytes) + addrSeed = utils.appendBuffer(addrSeed, this._byteSeed) + addrSeed = utils.appendBuffer(addrSeed, nonceBytes) - if (this._walletVersion == 1) { - addrSeed = new Sha256().process( - new Sha256() - .process(addrSeed) - .finish() - .result - ).finish().result + if (this._walletVersion == 1) { + addrSeed = new Sha256().process( + new Sha256() + .process(addrSeed) + .finish() + .result + ).finish().result - addrSeed = this._byteSeed - } else { - addrSeed = this._genAddressSeed(addrSeed).slice(0, 32) - } + addrSeed = this._byteSeed + } else { + addrSeed = this._genAddressSeed(addrSeed).slice(0, 32) + } - const addrKeyPair = nacl.sign.keyPair.fromSeed(new Uint8Array(addrSeed)); + const addrKeyPair = nacl.sign.keyPair.fromSeed(new Uint8Array(addrSeed)); - const address = publicKeyToAddress(addrKeyPair.publicKey); - const qoraAddress = publicKeyToAddress(addrKeyPair.publicKey, true); + const address = publicKeyToAddress(addrKeyPair.publicKey); + const qoraAddress = publicKeyToAddress(addrKeyPair.publicKey, true); - // Create Bitcoin HD Wallet - const btcSeed = [...addrSeed]; - const btcWallet = new AltcoinHDWallet({ - mainnet: { - private: 0x0488ADE4, - public: 0x0488B21E, - prefix: 0 - }, - testnet: { - private: 0x04358394, - public: 0x043587CF, - prefix: 0x6F - } - }).createWallet(new Uint8Array(btcSeed), false); + // Create Bitcoin HD Wallet + const btcSeed = [...addrSeed]; + const btcWallet = new AltcoinHDWallet({ + mainnet: { + private: 0x0488ADE4, + public: 0x0488B21E, + prefix: 0 + }, + testnet: { + private: 0x04358394, + public: 0x043587CF, + prefix: 0x6F + } + }).createWallet(new Uint8Array(btcSeed), false); - // Create Litecoin HD Wallet - const ltcSeed = [...addrSeed]; - const ltcWallet = new AltcoinHDWallet({ - mainnet: { - private: 0x0488ADE4, - public: 0x0488B21E, - prefix: 0x30 - }, - testnet: { - private: 0x04358394, - public: 0x043587CF, - prefix: 0x6F - } - }).createWallet(new Uint8Array(ltcSeed), false, 'LTC'); + // Create Litecoin HD Wallet + const ltcSeed = [...addrSeed]; + const ltcWallet = new AltcoinHDWallet({ + mainnet: { + private: 0x0488ADE4, + public: 0x0488B21E, + prefix: 0x30 + }, + testnet: { + private: 0x04358394, + public: 0x043587CF, + prefix: 0x6F + } + }).createWallet(new Uint8Array(ltcSeed), false, 'LTC'); - // Create Dogecoin HD Wallet - const dogeSeed = [...addrSeed]; - const dogeWallet = new AltcoinHDWallet({ - mainnet: { - private: 0x02FAC398, - public: 0x02FACAFD, - prefix: 0x1E - }, - testnet: { - private: 0x04358394, - public: 0x043587CF, - prefix: 0x71 - } - }).createWallet(new Uint8Array(dogeSeed), false, 'DOGE'); + // Create Dogecoin HD Wallet + const dogeSeed = [...addrSeed]; + const dogeWallet = new AltcoinHDWallet({ + mainnet: { + private: 0x02FAC398, + public: 0x02FACAFD, + prefix: 0x1E + }, + testnet: { + private: 0x04358394, + public: 0x043587CF, + prefix: 0x71 + } + }).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'); + // 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'); // 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'); + 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'); - // Create Pirate Chain HD Wallet - const arrrSeed = [...addrSeed]; - const arrrWallet = new AltcoinHDWallet({ - mainnet: { - private: 0x0488ADE4, - public: 0x0488B21E, - prefix: [0x16, 0x9A] - }, - testnet: { - private: 0x04358394, - public: 0x043587CF, - prefix: [0x14, 0x51] - } - }).createWallet(new Uint8Array(arrrSeed), false, 'ARRR'); + // Create Pirate Chain HD Wallet + const arrrSeed = [...addrSeed]; + const arrrWallet = new AltcoinHDWallet({ + mainnet: { + private: 0x0488ADE4, + public: 0x0488B21E, + prefix: [0x16, 0x9A] + }, + testnet: { + private: 0x04358394, + public: 0x043587CF, + prefix: [0x14, 0x51] + } + }).createWallet(new Uint8Array(arrrSeed), false, 'ARRR'); - this._addresses[nonce] = { - address, - btcWallet, - ltcWallet, - dogeWallet, - dgbWallet, - rvnWallet, - arrrWallet, - qoraAddress, - keyPair: { - publicKey: addrKeyPair.publicKey, - privateKey: addrKeyPair.secretKey - }, - base58PublicKey: Base58.encode(addrKeyPair.publicKey), - seed: addrSeed, - nonce: nonce - } - return this._addresses[nonce] - } + this._addresses[nonce] = { + address, + btcWallet, + ltcWallet, + dogeWallet, + dgbWallet, + rvnWallet, + arrrWallet, + qoraAddress, + keyPair: { + publicKey: addrKeyPair.publicKey, + privateKey: addrKeyPair.secretKey + }, + base58PublicKey: Base58.encode(addrKeyPair.publicKey), + seed: addrSeed, + nonce: nonce + } + return this._addresses[nonce] + } - generateSaveWalletData(...args) { - return generateSaveWalletData(this, ...args) - } + generateSaveWalletData(...args) { + return generateSaveWalletData(this, ...args) + } } diff --git a/qortal-ui-crypto/api/api.js b/qortal-ui-crypto/api/api.js index bf40d58a..98da919b 100644 --- a/qortal-ui-crypto/api/api.js +++ b/qortal-ui-crypto/api/api.js @@ -1,9 +1,5 @@ export { request } from './fetch-request.js' - 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, sendDgb, sendRvn, sendArrr } from './tradeRequest.js' - export { cancelAllOffers } from './transactions/trade-portal/tradeoffer/cancelAllOffers.js' diff --git a/qortal-ui-crypto/api/bitcoin/AltcoinHDWallet.js b/qortal-ui-crypto/api/bitcoin/AltcoinHDWallet.js index 0d416d54..421d19fb 100644 --- a/qortal-ui-crypto/api/bitcoin/AltcoinHDWallet.js +++ b/qortal-ui-crypto/api/bitcoin/AltcoinHDWallet.js @@ -1,11 +1,10 @@ 'use strict'; import Base58 from '../deps/Base58.js' import { Sha256, Sha512 } from 'asmcrypto.js' -import jsSHA from "jssha"; +import jsSHA from 'jssha' import RIPEMD160 from '../deps/ripemd160.js' import utils from '../deps/utils.js' -import { EllipticCurve, BigInteger } from './ecbn.js'; - +import { EllipticCurve, BigInteger } from './ecbn.js' export default class AltcoinHDWallet { @@ -101,14 +100,10 @@ export default class AltcoinHDWallet { this._tmasterPublicKey = '' - - - /** * Child Keys Derivation from the Parent Keys */ - /** * Child Private Key - 32 bytes */ @@ -145,13 +140,10 @@ export default class AltcoinHDWallet { this.xPublicChildKey = '' - - /** * Grand Child Keys Derivation from the Child Keys */ - /** * Grand Child Private Key - 32 bytes */ @@ -200,7 +192,6 @@ export default class AltcoinHDWallet { this._tlitecoinLegacyAddress = '' - /** * Wallet - Wallet Object (keys...) */ @@ -250,76 +241,69 @@ export default class AltcoinHDWallet { generateSeedHash(seed, isBIP44, indicator = null) { - - let buffer; + let buffer if (isBIP44) { buffer = utils.appendBuffer(seed.reverse(), utils.int32ToBytes(indicator)) } else { if(indicator !== null) { - const indicatorString = utils.stringtoUTF8Array(indicator); - buffer = utils.appendBuffer(seed.reverse(), indicatorString); + const indicatorString = utils.stringtoUTF8Array(indicator) + buffer = utils.appendBuffer(seed.reverse(), indicatorString) } else { - buffer = seed.reverse(); + buffer = seed.reverse() } } - const _reverseSeedHash = new Sha256().process(buffer).finish().result; - this.seedHash = new Sha512().process(utils.appendBuffer(seed, _reverseSeedHash)).finish().result; + const _reverseSeedHash = new Sha256().process(buffer).finish().result + this.seedHash = new Sha512().process(utils.appendBuffer(seed, _reverseSeedHash)).finish().result } generatePrivateKey(seedHash) { + const SECP256K1_CURVE_ORDER = new BigInteger("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141") - const SECP256K1_CURVE_ORDER = new BigInteger("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141"); + const privateKeyHash = seedHash.slice(0, 32) - const privateKeyHash = seedHash.slice(0, 32); - - this.seed58 = Base58.encode(privateKeyHash); + this.seed58 = Base58.encode(privateKeyHash) const _privateKeyHash = [...privateKeyHash] - let privateKeyBigInt = BigInteger.fromByteArrayUnsigned(_privateKeyHash); + let privateKeyBigInt = BigInteger.fromByteArrayUnsigned(_privateKeyHash) const privateKey = (privateKeyBigInt.mod(SECP256K1_CURVE_ORDER.subtract(BigInteger.ONE))).add(BigInteger.ONE) this.privateKey = privateKey.toByteArrayUnsigned() } generateChainCode(seedHash) { - - this.chainCode = new Sha256().process(seedHash.slice(32, 64)).finish().result; + this.chainCode = new Sha256().process(seedHash.slice(32, 64)).finish().result } generatePublicKey(privateKey) { - const _privateKey = [...privateKey] - const privateKeyBigInt = BigInteger.fromByteArrayUnsigned(_privateKey); + const privateKeyBigInt = BigInteger.fromByteArrayUnsigned(_privateKey) - const epCurve = EllipticCurve.getSECCurveByName("secp256k1"); - const curvePoints = epCurve.getG().multiply(privateKeyBigInt); + const epCurve = EllipticCurve.getSECCurveByName("secp256k1") + const curvePoints = epCurve.getG().multiply(privateKeyBigInt) - const x = curvePoints.getX().toBigInteger(); - const y = curvePoints.getY().toBigInteger(); + const x = curvePoints.getX().toBigInteger() + const y = curvePoints.getY().toBigInteger() /** * Deriving Uncompressed Public Key (65 bytes) * - * const publicKeyBytes = EllipticCurve.integerToBytes(x, 32); - * this.publicKey = publicKeyBytes.concat(EllipticCurve.integerToBytes(y, 32)); - * this.publicKey.unshift(0x04); // append point indicator + * const publicKeyBytes = EllipticCurve.integerToBytes(x, 32) + * this.publicKey = publicKeyBytes.concat(EllipticCurve.integerToBytes(y, 32)) + * this.publicKey.unshift(0x04) // append point indicator */ - // Compressed Public Key (33 bytes) this.publicKey = EllipticCurve.integerToBytes(x, 32) if (y.isEven()) { - this.publicKey.unshift(0x02) // append point indicator } else { - this.publicKey.unshift(0x03) // append point indicator } @@ -330,7 +314,6 @@ export default class AltcoinHDWallet { } generateMainnetMasterPrivateKey() { - // Serialization Variable const s = [] @@ -375,7 +358,6 @@ export default class AltcoinHDWallet { } generateMainnetMasterPublicKey() { - // Serialization Variable const s = [] @@ -495,19 +477,19 @@ export default class AltcoinHDWallet { // TODO: Make this more better in the future const path = 'm/0/0' - // let p = path.split('/'); + // let p = path.split('/') // Get Public kEY const derivePublicChildKey = () => { const _privateKey = [...this.childPrivateKey] - const privateKeyBigInt = BigInteger.fromByteArrayUnsigned(_privateKey); + const privateKeyBigInt = BigInteger.fromByteArrayUnsigned(_privateKey) - const epCurve = EllipticCurve.getSECCurveByName("secp256k1"); - const curvePoints = epCurve.getG().multiply(privateKeyBigInt); + const epCurve = EllipticCurve.getSECCurveByName("secp256k1") + const curvePoints = epCurve.getG().multiply(privateKeyBigInt) - const x = curvePoints.getX().toBigInteger(); - const y = curvePoints.getY().toBigInteger(); + const x = curvePoints.getX().toBigInteger() + const y = curvePoints.getY().toBigInteger() // Compressed Public Key (33 bytes) this.childPublicKey = EllipticCurve.integerToBytes(x, 32) @@ -533,15 +515,15 @@ export default class AltcoinHDWallet { const derivePrivateChildKey = (cI) => { - let ib = []; - ib.push((cI >> 24) & 0xff); - ib.push((cI >> 16) & 0xff); - ib.push((cI >> 8) & 0xff); - ib.push(cI & 0xff); + let ib = [] + ib.push((cI >> 24) & 0xff) + ib.push((cI >> 16) & 0xff) + ib.push((cI >> 8) & 0xff) + ib.push(cI & 0xff) - const s = [...this.publicKey].concat(ib); + const s = [...this.publicKey].concat(ib) - const _hmacSha512 = new jsSHA("SHA-512", "UINT8ARRAY", { numRounds: 1, hmacKey: { value: this.chainCode, format: "UINT8ARRAY" } }); + const _hmacSha512 = new jsSHA("SHA-512", "UINT8ARRAY", { numRounds: 1, hmacKey: { value: this.chainCode, format: "UINT8ARRAY" } }) _hmacSha512.update(new Uint8Array(s)) @@ -550,10 +532,10 @@ export default class AltcoinHDWallet { // SECP256k1 init - const epCurve = EllipticCurve.getSECCurveByName("secp256k1"); + const epCurve = EllipticCurve.getSECCurveByName("secp256k1") - const ki = IL.add(BigInteger.fromByteArrayUnsigned(this.privateKey)).mod(epCurve.getN()); // parse256(IL) + kpar (mod n) ==> ki + const ki = IL.add(BigInteger.fromByteArrayUnsigned(this.privateKey)).mod(epCurve.getN()) // parse256(IL) + kpar (mod n) ==> ki this.childPrivateKey = ki.toByteArrayUnsigned() // Call deriveExtendedPrivateChildKey @@ -577,10 +559,10 @@ export default class AltcoinHDWallet { s.push(...(this.publicKeyHash.slice(0, 4))) // Append Child Index - s.push(childIndex >>> 24); - s.push((childIndex >>> 16) & 0xff); - s.push((childIndex >>> 8) & 0xff); - s.push(childIndex & 0xff); + s.push(childIndex >>> 24) + s.push((childIndex >>> 16) & 0xff) + s.push((childIndex >>> 8) & 0xff) + s.push(childIndex & 0xff) // Append Chain Code s.push(...this.childChainCode) @@ -619,10 +601,10 @@ export default class AltcoinHDWallet { s.push(...(this.publicKeyHash.slice(0, 4))) // Append Child Index - s.push(childIndex >>> 24); - s.push((childIndex >>> 16) & 0xff); - s.push((childIndex >>> 8) & 0xff); - s.push(childIndex & 0xff); + s.push(childIndex >>> 24) + s.push((childIndex >>> 16) & 0xff) + s.push((childIndex >>> 8) & 0xff) + s.push(childIndex & 0xff) // Append Chain Code s.push(...this.childChainCode) @@ -654,24 +636,22 @@ export default class AltcoinHDWallet { const derivePublicGrandChildKey = () => { const _privateKey = [...this.grandChildPrivateKey] - const privateKeyBigInt = BigInteger.fromByteArrayUnsigned(_privateKey); + const privateKeyBigInt = BigInteger.fromByteArrayUnsigned(_privateKey) - const epCurve = EllipticCurve.getSECCurveByName("secp256k1"); - const curvePoints = epCurve.getG().multiply(privateKeyBigInt); + const epCurve = EllipticCurve.getSECCurveByName("secp256k1") + const curvePoints = epCurve.getG().multiply(privateKeyBigInt) - const x = curvePoints.getX().toBigInteger(); - const y = curvePoints.getY().toBigInteger(); + const x = curvePoints.getX().toBigInteger() + const y = curvePoints.getY().toBigInteger() // Compressed Public Key (33 bytes) this.grandChildPublicKey = EllipticCurve.integerToBytes(x, 32) if (y.isEven()) { - this.grandChildPublicKey.unshift(0x02) // append point indicator } else { - this.grandChildPublicKey.unshift(0x03) // append point indicator } @@ -729,16 +709,16 @@ export default class AltcoinHDWallet { const derivePrivateGrandChildKey = (cI, i) => { - let ib = []; - ib.push((cI >> 24) & 0xff); - ib.push((cI >> 16) & 0xff); - ib.push((cI >> 8) & 0xff); - ib.push(cI & 0xff); + let ib = [] + ib.push((cI >> 24) & 0xff) + ib.push((cI >> 16) & 0xff) + ib.push((cI >> 8) & 0xff) + ib.push(cI & 0xff) - const s = [...this.childPublicKey].concat(ib); + const s = [...this.childPublicKey].concat(ib) - const _hmacSha512 = new jsSHA("SHA-512", "UINT8ARRAY", { numRounds: 1, hmacKey: { value: this.childChainCode, format: "UINT8ARRAY" } }); + const _hmacSha512 = new jsSHA("SHA-512", "UINT8ARRAY", { numRounds: 1, hmacKey: { value: this.childChainCode, format: "UINT8ARRAY" } }) _hmacSha512.update(new Uint8Array(s)) @@ -746,10 +726,10 @@ export default class AltcoinHDWallet { this.grandChildChainCode = _hmacSha512.getHMAC('UINT8ARRAY').slice(32, 64) // IR according to the SPEC // SECP256k1 init - const epCurve = EllipticCurve.getSECCurveByName("secp256k1"); + const epCurve = EllipticCurve.getSECCurveByName("secp256k1") - const ki = IL.add(BigInteger.fromByteArrayUnsigned(this.childPrivateKey)).mod(epCurve.getN()); // parse256(IL) + kpar (mod n) ==> ki + const ki = IL.add(BigInteger.fromByteArrayUnsigned(this.childPrivateKey)).mod(epCurve.getN()) // parse256(IL) + kpar (mod n) ==> ki this.grandChildPrivateKey = ki.toByteArrayUnsigned() @@ -774,10 +754,10 @@ export default class AltcoinHDWallet { s.push(...(this.childPublicKeyHash.slice(0, 4))) // Append Child Index - s.push(childIndex >>> 24); - s.push((childIndex >>> 16) & 0xff); - s.push((childIndex >>> 8) & 0xff); - s.push(childIndex & 0xff); + s.push(childIndex >>> 24) + s.push((childIndex >>> 16) & 0xff) + s.push((childIndex >>> 8) & 0xff) + s.push(childIndex & 0xff) // Append Chain Code s.push(...this.grandChildChainCode) @@ -816,10 +796,10 @@ export default class AltcoinHDWallet { s.push(...(this.childPublicKeyHash.slice(0, 4))) // Append Child Index - s.push(childIndex >>> 24); - s.push((childIndex >>> 16) & 0xff); - s.push((childIndex >>> 8) & 0xff); - s.push(childIndex & 0xff); + s.push(childIndex >>> 24) + s.push((childIndex >>> 16) & 0xff) + s.push((childIndex >>> 8) & 0xff) + s.push(childIndex & 0xff) // Append Chain Code s.push(...this.grandChildChainCode) diff --git a/qortal-ui-crypto/api/constants.js b/qortal-ui-crypto/api/constants.js index 511ab99e..2bbb349f 100644 --- a/qortal-ui-crypto/api/constants.js +++ b/qortal-ui-crypto/api/constants.js @@ -1,152 +1,152 @@ -"use strict"; +'use strict' // Qortal TX types const TX_TYPES = { - 1: "Genesis", - 2: "Payment", - 3: "Name registration", - 4: "Name update", - 5: "Sell name", - 6: "Cancel sell name", - 7: "Buy name", - 8: "Create poll", - 9: "Vote in poll", - 10: "Arbitrary", - 11: "Issue asset", - 12: "Transfer asset", - 13: "Create asset order", - 14: "Cancel asset order", - 15: "Multi-payment transaction", - 16: "Deploy AT", - 17: "Message", - 18: "Chat", - 19: "Publicize", - 20: "Airdrop", - 21: "AT", - 22: "Create group", - 23: "Update group", - 24: "Add group admin", - 25: "Remove group admin", - 26: "Group ban", - 27: "Cancel group ban", - 28: "Group kick", - 29: "Group invite", - 30: "Cancel group invite", - 31: "Join group", - 32: "Leave group", - 33: "Group approval", - 34: "Set group", - 35: "Update asset", - 36: "Account flags", - 37: "Enable forging", - 38: "Reward share", - 39: "Account level", - 40: "Transfer privs", - 41: "Presence" + 1: "Genesis", + 2: "Payment", + 3: "Name registration", + 4: "Name update", + 5: "Sell name", + 6: "Cancel sell name", + 7: "Buy name", + 8: "Create poll", + 9: "Vote in poll", + 10: "Arbitrary", + 11: "Issue asset", + 12: "Transfer asset", + 13: "Create asset order", + 14: "Cancel asset order", + 15: "Multi-payment transaction", + 16: "Deploy AT", + 17: "Message", + 18: "Chat", + 19: "Publicize", + 20: "Airdrop", + 21: "AT", + 22: "Create group", + 23: "Update group", + 24: "Add group admin", + 25: "Remove group admin", + 26: "Group ban", + 27: "Cancel group ban", + 28: "Group kick", + 29: "Group invite", + 30: "Cancel group invite", + 31: "Join group", + 32: "Leave group", + 33: "Group approval", + 34: "Set group", + 35: "Update asset", + 36: "Account flags", + 37: "Enable forging", + 38: "Reward share", + 39: "Account level", + 40: "Transfer privs", + 41: "Presence" } // Qortal error codes const ERROR_CODES = { - 1: "Valid OK", - 2: "Invalid address", - 3: "Negative amount", - 4: "Nagative fee", - 5: "No balance", - 6: "Invalid reference", - 7: "Invalid time length", - 8: "Invalid value length", - 9: "Name already registered", - 10: "Name does not exist", - 11: "Invalid name owner", - 12: "Name already for sale", - 13: "Name not for sale", - 14: "Name buyer already owner", - 15: "Invalid amount", - 16: "Invalid seller", - 17: "Name not lowercase", - 18: "Invalid description length", - 19: "Invalid options length", - 20: "Invalid option length", - 21: "Duplicate option", - 22: "Poll already created", - 23: "Poll already has votes", - 24: "Poll does not exist", - 25: "Option does not exist", - 26: "Already voted for that option", - 27: "Invalid data length", - 28: "Invalid quantity", - 29: "Asset does not exist", - 30: "Invalid return", - 31: "Have equals want", - 32: "Order does not exist", - 33: "Invalid order creator", - 34: "Invalid payments length", - 35: "Negative price", - 36: "Invalid creation bytes", - 37: "Invalid tags length", - 38: "Invalid type length", - 39: "Invalid AT transaction", - 40: "Insufficient fee", - 41: "Asset does not match AT", + 1: "Valid OK", + 2: "Invalid address", + 3: "Negative amount", + 4: "Nagative fee", + 5: "No balance", + 6: "Invalid reference", + 7: "Invalid time length", + 8: "Invalid value length", + 9: "Name already registered", + 10: "Name does not exist", + 11: "Invalid name owner", + 12: "Name already for sale", + 13: "Name not for sale", + 14: "Name buyer already owner", + 15: "Invalid amount", + 16: "Invalid seller", + 17: "Name not lowercase", + 18: "Invalid description length", + 19: "Invalid options length", + 20: "Invalid option length", + 21: "Duplicate option", + 22: "Poll already created", + 23: "Poll already has votes", + 24: "Poll does not exist", + 25: "Option does not exist", + 26: "Already voted for that option", + 27: "Invalid data length", + 28: "Invalid quantity", + 29: "Asset does not exist", + 30: "Invalid return", + 31: "Have equals want", + 32: "Order does not exist", + 33: "Invalid order creator", + 34: "Invalid payments length", + 35: "Negative price", + 36: "Invalid creation bytes", + 37: "Invalid tags length", + 38: "Invalid type length", + 39: "Invalid AT transaction", + 40: "Insufficient fee", + 41: "Asset does not match AT", - 43: "Asset already exists", - 44: "Missing creator", - 45: "Timestamp too old", - 46: "Timestamp too new", - 47: "Too many unconfirmed", - 48: "Group already exists", - 49: "Group does not exist", - 50: "Invalid group owner", - 51: "Already group memeber", - 52: "Group owner can not leave", - 53: "Not group member", - 54: "Already group admin", - 55: "Not group admin", - 56: "Invalid lifetime", - 57: "Invite unknown", - 58: "Ban exists", - 59: "Ban unknown", - 60: "Banned from group", - 61: "Join request", - 62: "Invalid group approval threshold", - 63: "Group ID mismatch", - 64: "Invalid group ID", - 65: "Transaction unknown", - 66: "Transaction already confirmed", - 67: "Invalid TX group", - 68: "TX group ID mismatch", - 69: "Multiple names forbidden", - 70: "Invalid asset owner", - 71: "AT is finished", - 72: "No flag permission", - 73: "Not minting accout", + 43: "Asset already exists", + 44: "Missing creator", + 45: "Timestamp too old", + 46: "Timestamp too new", + 47: "Too many unconfirmed", + 48: "Group already exists", + 49: "Group does not exist", + 50: "Invalid group owner", + 51: "Already group memeber", + 52: "Group owner can not leave", + 53: "Not group member", + 54: "Already group admin", + 55: "Not group admin", + 56: "Invalid lifetime", + 57: "Invite unknown", + 58: "Ban exists", + 59: "Ban unknown", + 60: "Banned from group", + 61: "Join request", + 62: "Invalid group approval threshold", + 63: "Group ID mismatch", + 64: "Invalid group ID", + 65: "Transaction unknown", + 66: "Transaction already confirmed", + 67: "Invalid TX group", + 68: "TX group ID mismatch", + 69: "Multiple names forbidden", + 70: "Invalid asset owner", + 71: "AT is finished", + 72: "No flag permission", + 73: "Not minting accout", - 77: "Invalid rewardshare percent", - 78: "Public key unknown", - 79: "Invalid public key", - 80: "AT unknown", - 81: "AT already exists", - 82: "Group approval not required", - 83: "Group approval decided", - 84: "Maximum reward shares", - 85: "Transaction already exists", - 86: "No blockchain lock", - 87: "Order already closed", - 88: "Clock not synced", - 89: "Asset not spendable", - 90: "Account can not reward share", - 91: "Self share exists", - 92: "Account already exists", - 93: "Invalid group block delay", - 94: "Incorrect nonce", - 95: "Ivalid timestamp signature", - 96: "Address blocked", - 97: "Name Blocked", - 98: "Group approval required", - 99: "Account not transferable", + 77: "Invalid rewardshare percent", + 78: "Public key unknown", + 79: "Invalid public key", + 80: "AT unknown", + 81: "AT already exists", + 82: "Group approval not required", + 83: "Group approval decided", + 84: "Maximum reward shares", + 85: "Transaction already exists", + 86: "No blockchain lock", + 87: "Order already closed", + 88: "Clock not synced", + 89: "Asset not spendable", + 90: "Account can not reward share", + 91: "Self share exists", + 92: "Account already exists", + 93: "Invalid group block delay", + 94: "Incorrect nonce", + 95: "Ivalid timestamp signature", + 96: "Address blocked", + 97: "Name Blocked", + 98: "Group approval required", + 99: "Account not transferable", - 999: "Ivalid but ok", - 1000: "Not yet released." + 999: "Ivalid but ok", + 1000: "Not yet released." } // Qortal 8 decimals @@ -158,6 +158,9 @@ const ADDRESS_VERSION = 58 // Proxy for api calls const PROXY_URL = "/proxy/" +// Chat reference timestamp +const CHAT_REFERENCE_FEATURE_TRIGGER_TIMESTAMP = 9999999999999 + // Used as a salt for all qora addresses. Salts used for storing your private keys in local storage will be randomly generated const STATIC_SALT = new Uint8Array([54, 190, 201, 206, 65, 29, 123, 129, 147, 231, 180, 166, 171, 45, 95, 165, 78, 200, 208, 194, 44, 207, 221, 146, 45, 238, 68, 68, 69, 102, 62, 6]) const BCRYPT_ROUNDS = 10 // Remember that the total work spent on key derivation is BCRYPT_ROUNDS * KDF_THREADS @@ -165,4 +168,4 @@ const BCRYPT_VERSION = "2a" const STATIC_BCRYPT_SALT = `$${BCRYPT_VERSION}$${BCRYPT_ROUNDS}$IxVE941tXVUD4cW0TNVm.O` const KDF_THREADS = 16 -export { TX_TYPES, ERROR_CODES, QORT_DECIMALS, PROXY_URL, STATIC_SALT, ADDRESS_VERSION, KDF_THREADS, STATIC_BCRYPT_SALT } +export { TX_TYPES, ERROR_CODES, QORT_DECIMALS, PROXY_URL, STATIC_SALT, ADDRESS_VERSION, KDF_THREADS, STATIC_BCRYPT_SALT, CHAT_REFERENCE_FEATURE_TRIGGER_TIMESTAMP } diff --git a/qortal-ui-crypto/api/createTransaction.js b/qortal-ui-crypto/api/createTransaction.js index d876b98a..2a56aa56 100644 --- a/qortal-ui-crypto/api/createTransaction.js +++ b/qortal-ui-crypto/api/createTransaction.js @@ -6,33 +6,33 @@ import signArbitrary from './transactions/arbitrary/signArbitrary.js' export const createTransaction = (type, keyPair, params) => { - const tx = new transactions[type]() - tx.keyPair = keyPair - Object.keys(params).forEach(param => { - tx[param] = params[param] - }) + const tx = new transactions[type]() + tx.keyPair = keyPair + Object.keys(params).forEach(param => { + tx[param] = params[param] + }) - return tx + return tx } // Compute Chat Nonce export const computeChatNonce = bytes => request('/chat/compute', { - method: 'POST', - body: Base58.encode(bytes) + method: 'POST', + body: Base58.encode(bytes) }) // Sign Chat Transactions export const signChatTransaction = (chatBytes, nonce, keyPair) => { - return signChat(chatBytes, nonce, keyPair) + return signChat(chatBytes, nonce, keyPair) } // Sign Arbitrary Transactions export const signArbitraryTransaction = (arbitraryBytesBase58, arbitraryBytesForSigningBase58, nonce, keyPair) => { - return signArbitrary(arbitraryBytesBase58, arbitraryBytesForSigningBase58, nonce, keyPair) + return signArbitrary(arbitraryBytesBase58, arbitraryBytesForSigningBase58, nonce, keyPair) } // Process Transactions export const processTransaction = bytes => request('/transactions/process', { - method: 'POST', - body: Base58.encode(bytes) + method: 'POST', + body: Base58.encode(bytes) }) diff --git a/qortal-ui-crypto/api/createWallet.js b/qortal-ui-crypto/api/createWallet.js index d342c7c3..ed978183 100644 --- a/qortal-ui-crypto/api/createWallet.js +++ b/qortal-ui-crypto/api/createWallet.js @@ -4,26 +4,26 @@ import Base58 from './deps/Base58.js' import { decryptStoredWallet } from './decryptStoredWallet.js' export const createWallet = async (sourceType, source, statusUpdateFn) => { - let version, seed + let version, seed - switch (sourceType) { - case 'phrase': - version = 2 - seed = await kdf(source.seedPhrase, void 0, statusUpdateFn) - break - case 'seed': - version = 1 - seed = Base58.decode(source.seed) - break - case 'storedWallet': - case 'backedUpSeed': - version = source.wallet.version - seed = await decryptStoredWallet(source.password, source.wallet, statusUpdateFn) - break - default: - throw 'sourceType ' + sourceType + ' not recognized' - } + switch (sourceType) { + case 'phrase': + version = 2 + seed = await kdf(source.seedPhrase, void 0, statusUpdateFn) + break + case 'seed': + version = 1 + seed = Base58.decode(source.seed) + break + case 'storedWallet': + case 'backedUpSeed': + version = source.wallet.version + seed = await decryptStoredWallet(source.password, source.wallet, statusUpdateFn) + break + default: + throw 'sourceType ' + sourceType + ' not recognized' + } - const wallet = new PhraseWallet(seed, version) - return wallet + const wallet = new PhraseWallet(seed, version) + return wallet } diff --git a/qortal-ui-crypto/api/decryptStoredWallet.js b/qortal-ui-crypto/api/decryptStoredWallet.js index e47a33b4..f98649cd 100644 --- a/qortal-ui-crypto/api/decryptStoredWallet.js +++ b/qortal-ui-crypto/api/decryptStoredWallet.js @@ -3,21 +3,21 @@ import { kdf } from './kdf.js' import { HmacSha512, AES_CBC } from 'asmcrypto.js' export const decryptStoredWallet = async (password, wallet, statusFn = () => { }) => { - statusFn('Decoding saved data') - const encryptedSeedBytes = Base58.decode(wallet.encryptedSeed) - const iv = Base58.decode(wallet.iv) - const salt = Base58.decode(wallet.salt) - statusFn('Generating decryption key') - const key = await kdf(password, salt, statusFn) - const encryptionKey = key.slice(0, 32) - const macKey = key.slice(32, 63) + statusFn('Decoding saved data') + const encryptedSeedBytes = Base58.decode(wallet.encryptedSeed) + const iv = Base58.decode(wallet.iv) + const salt = Base58.decode(wallet.salt) + statusFn('Generating decryption key') + const key = await kdf(password, salt, statusFn) + const encryptionKey = key.slice(0, 32) + const macKey = key.slice(32, 63) - statusFn('Checking key') - const mac = new HmacSha512(macKey).process(encryptedSeedBytes).finish().result - if (Base58.encode(mac) !== wallet.mac) { - throw new Error('Incorrect password') - } - statusFn('Decrypting') - const decryptedBytes = AES_CBC.decrypt(encryptedSeedBytes, encryptionKey, false, iv) - return decryptedBytes + statusFn('Checking key') + const mac = new HmacSha512(macKey).process(encryptedSeedBytes).finish().result + if (Base58.encode(mac) !== wallet.mac) { + throw new Error('Incorrect password') + } + statusFn('Decrypting') + const decryptedBytes = AES_CBC.decrypt(encryptedSeedBytes, encryptionKey, false, iv) + return decryptedBytes } diff --git a/qortal-ui-crypto/api/kdf.js b/qortal-ui-crypto/api/kdf.js index b94134ac..8c18888a 100644 --- a/qortal-ui-crypto/api/kdf.js +++ b/qortal-ui-crypto/api/kdf.js @@ -4,36 +4,36 @@ import { Sha512 } from 'asmcrypto.js' import utils from '../api/deps/utils.js' export const kdf = async (seed, salt, status = () => { }) => { - const state = store.getState() - const config = state.config - const workers = state.app.workers.workers - status('Waiting for workers to be ready') - await stateAwait(state => state.app.workers.ready) - status('Deriving key parts') - salt = new Uint8Array(salt) - const seedParts = await Promise.all(workers.map((worker, index) => { - const nonce = index - return worker.request('kdf', { - key: seed, - salt, - nonce, - staticSalt: config.crypto.staticSalt, - staticBcryptSalt: config.crypto.staticBcryptSalt - }).then(data => { - let jsonData - try { - jsonData = JSON.parse(data) - data = jsonData - } catch (e) { - // ... - } - if (seed !== data.key) throw new Error('Error, incorrect key. ' + seed + ' !== ' + data.key) - if (nonce !== data.nonce) throw new Error('Error, incorrect nonce') - return data.result - }) - })) - status('Combining key parts') - const result = new Sha512().process(utils.stringtoUTF8Array(config.crypto.staticSalt + seedParts.reduce((a, c) => a + c))).finish().result - status('Key is ready ') - return result + const state = store.getState() + const config = state.config + const workers = state.app.workers.workers + status('Waiting for workers to be ready') + await stateAwait(state => state.app.workers.ready) + status('Deriving key parts') + salt = new Uint8Array(salt) + const seedParts = await Promise.all(workers.map((worker, index) => { + const nonce = index + return worker.request('kdf', { + key: seed, + salt, + nonce, + staticSalt: config.crypto.staticSalt, + staticBcryptSalt: config.crypto.staticBcryptSalt + }).then(data => { + let jsonData + try { + jsonData = JSON.parse(data) + data = jsonData + } catch (e) { + // ... + } + if (seed !== data.key) throw new Error('Error, incorrect key. ' + seed + ' !== ' + data.key) + if (nonce !== data.nonce) throw new Error('Error, incorrect nonce') + return data.result + }) + })) + status('Combining key parts') + const result = new Sha512().process(utils.stringtoUTF8Array(config.crypto.staticSalt + seedParts.reduce((a, c) => a + c))).finish().result + status('Key is ready ') + return result } diff --git a/qortal-ui-crypto/api/registerUsername.js b/qortal-ui-crypto/api/registerUsername.js index c270c209..9715a078 100644 --- a/qortal-ui-crypto/api/registerUsername.js +++ b/qortal-ui-crypto/api/registerUsername.js @@ -8,39 +8,32 @@ const CHECK_LAST_REF_INTERVAL = 30 * 1000 // err 30 seconds const pendingAddresses = {} -// const config = store.getState().config -// const node = config.coin.node.api -// const baseUrl = node.url + node.tail - const checkLastRefs = () => { - Object.entries(pendingAddresses).forEach(([address, fn]) => { - // console.log(fn, address) - request('addresses/lastreference/' + address).then(res => { - if (res === 'false') return - fn(res) - delete pendingAddresses[address] - clearInterval(lastRefInterval) - }) - // fetch(baseUrl + 'addresses/lastreference/' + address) - // .then(async res => res.text()) - }) + Object.entries(pendingAddresses).forEach(([address, fn]) => { + request('addresses/lastreference/' + address).then(res => { + if (res === 'false') return + fn(res) + delete pendingAddresses[address] + clearInterval(lastRefInterval) + }) + }) } const lastRefInterval = setInterval(() => checkLastRefs(), CHECK_LAST_REF_INTERVAL) const callOnLastRef = (address, fn) => { - pendingAddresses[address] = fn + pendingAddresses[address] = fn } export const registerUsername = async ({ name, address, lastRef, keyPair }) => { - callOnLastRef(address, lastreference => { - const txBytes = createTransaction(TX_TYPE, keyPair, { - registrantPublicKey: keyPair.publicKey, - registrantAddress: address, - name, - value: address, - lastReference: lastreference - }) - processTransaction(txBytes).then(res => {}) - }) + callOnLastRef(address, lastreference => { + const txBytes = createTransaction(TX_TYPE, keyPair, { + registrantPublicKey: keyPair.publicKey, + registrantAddress: address, + name, + value: address, + lastReference: lastreference + }) + processTransaction(txBytes).then(res => { }) + }) } diff --git a/qortal-ui-crypto/api/storeWallet.js b/qortal-ui-crypto/api/storeWallet.js index eab5fa99..9d16c8af 100644 --- a/qortal-ui-crypto/api/storeWallet.js +++ b/qortal-ui-crypto/api/storeWallet.js @@ -1,33 +1,29 @@ import { HmacSha512, AES_CBC } from 'asmcrypto.js' import { kdf } from './kdf.js' -// import Base58 from '../qora/deps/Base58.js' import Base58 from './deps/Base58.js' const getRandomValues = window.crypto ? window.crypto.getRandomValues.bind(window.crypto) : window.msCrypto.getRandomValues.bind(window.msCrypto) export const generateSaveWalletData = async (wallet, password, kdfThreads, statusUpdateFn) => { - statusUpdateFn('Generating random values') - let iv = new Uint8Array(16) - getRandomValues(iv) - let salt = new Uint8Array(32) - getRandomValues(salt) // Can actually use a salt this time, as we can store the salt with the wallet - - // const key = PBKDF2_HMAC_SHA512.bytes(utils.stringtoUTF8Array(password), salt, PBKDF2_ROUNDS, 64) // 512bit key to be split in two for mac/encryption - const key = await kdf(password, salt, statusUpdateFn) - statusUpdateFn('Encrypting seed') - const encryptionKey = key.slice(0, 32) - const macKey = key.slice(32, 63) - const encryptedSeed = AES_CBC.encrypt(wallet._byteSeed, encryptionKey, false, iv) - // const mac = HmacSha512.bytes(encryptedSeed, macKey) - statusUpdateFn('Generating mac') - const mac = new HmacSha512(macKey).process(encryptedSeed).finish().result - return { - address0: wallet._addresses[0].address, - encryptedSeed: Base58.encode(encryptedSeed), - salt: Base58.encode(salt), - iv: Base58.encode(iv), - version: wallet._walletVersion, - mac: Base58.encode(mac), - kdfThreads - } + statusUpdateFn('Generating random values') + let iv = new Uint8Array(16) + getRandomValues(iv) + let salt = new Uint8Array(32) + getRandomValues(salt) + const key = await kdf(password, salt, statusUpdateFn) + statusUpdateFn('Encrypting seed') + const encryptionKey = key.slice(0, 32) + const macKey = key.slice(32, 63) + const encryptedSeed = AES_CBC.encrypt(wallet._byteSeed, encryptionKey, false, iv) + statusUpdateFn('Generating mac') + const mac = new HmacSha512(macKey).process(encryptedSeed).finish().result + return { + address0: wallet._addresses[0].address, + encryptedSeed: Base58.encode(encryptedSeed), + salt: Base58.encode(salt), + iv: Base58.encode(iv), + version: wallet._walletVersion, + mac: Base58.encode(mac), + kdfThreads + } } diff --git a/qortal-ui-crypto/api/tradeRequest.js b/qortal-ui-crypto/api/tradeRequest.js index f3ae00f0..797cbe5b 100644 --- a/qortal-ui-crypto/api/tradeRequest.js +++ b/qortal-ui-crypto/api/tradeRequest.js @@ -1,145 +1,140 @@ // Trade Bot -import TradeBotCreateRequest from './transactions/trade-portal/tradebot/TradeBotCreateRequest.js'; -import TradeBotRespondRequest from './transactions/trade-portal/tradebot/TradeBotRespondRequest.js'; +import TradeBotCreateRequest from './transactions/trade-portal/tradebot/TradeBotCreateRequest.js' +import TradeBotRespondRequest from './transactions/trade-portal/tradebot/TradeBotRespondRequest.js' import signTradeBotTransaction from './transactions/trade-portal/tradebot/signTradeBotTransaction.js' - -// Trade Offer -import DeleteTradeOffer from './transactions/trade-portal/tradeoffer/DeleteTradeOffer.js'; - +import DeleteTradeOffer from './transactions/trade-portal/tradeoffer/DeleteTradeOffer.js' import { request } from './fetch-request' - // TradeBotCreateRequest export const tradeBotCreateRequest = (requestObject) => { - const txn = new TradeBotCreateRequest().createTransaction(requestObject) - const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node]; + const txn = new TradeBotCreateRequest().createTransaction(requestObject) + const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] - return request(`/crosschain/tradebot/create?apiKey=${myNode.apiKey}`, { - method: 'POST', - headers: { - 'Accept': 'text/plain', - 'Content-Type': 'application/json' - }, - body: JSON.stringify(txn) - }) + return request(`/crosschain/tradebot/create?apiKey=${myNode.apiKey}`, { + method: 'POST', + headers: { + 'Accept': 'text/plain', + 'Content-Type': 'application/json' + }, + body: JSON.stringify(txn) + }) } // TradeBotRespondRequest export const tradeBotRespondRequest = (requestObject) => { - const txn = new TradeBotRespondRequest().createTransaction(requestObject) - const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node]; + const txn = new TradeBotRespondRequest().createTransaction(requestObject) + const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] - return request(`/crosschain/tradebot/respond?apiKey=${myNode.apiKey}`, { - method: 'POST', - headers: { - 'Accept': 'application/json', - 'Content-Type': 'application/json' - }, - body: JSON.stringify(txn) - }) + return request(`/crosschain/tradebot/respond?apiKey=${myNode.apiKey}`, { + method: 'POST', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json' + }, + body: JSON.stringify(txn) + }) } - // Sign Trade Transactions export const signTradeBotTxn = (unsignedTxn, keyPair) => { - return signTradeBotTransaction(unsignedTxn, keyPair) + return signTradeBotTransaction(unsignedTxn, keyPair) } // Delete Trade Offer export const deleteTradeOffer = (requestObject) => { - const txn = new DeleteTradeOffer().createTransaction(requestObject) - const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node]; + const txn = new DeleteTradeOffer().createTransaction(requestObject) + const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] - return request(`/crosschain/tradeoffer?apiKey=${myNode.apiKey}`, { - method: 'DELETE', - headers: { - 'Accept': 'application/json', - 'Content-Type': 'application/json' - }, - body: JSON.stringify(txn) - }) + return request(`/crosschain/tradeoffer?apiKey=${myNode.apiKey}`, { + method: 'DELETE', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json' + }, + body: JSON.stringify(txn) + }) } // Send BTC export const sendBtc = (requestObject) => { - const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node]; + const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] - return request(`/crosschain/btc/send?apiKey=${myNode.apiKey}`, { - method: 'POST', - headers: { - 'Accept': 'application/json', - 'Content-Type': 'application/json' - }, - body: JSON.stringify(requestObject) - }) + return request(`/crosschain/btc/send?apiKey=${myNode.apiKey}`, { + method: 'POST', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json' + }, + body: JSON.stringify(requestObject) + }) } // Send LTC export const sendLtc = (requestObject) => { - const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node]; + const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] - return request(`/crosschain/ltc/send?apiKey=${myNode.apiKey}`, { - method: 'POST', - headers: { - 'Accept': 'application/json', - 'Content-Type': 'application/json' - }, - body: JSON.stringify(requestObject) - }) + return request(`/crosschain/ltc/send?apiKey=${myNode.apiKey}`, { + method: 'POST', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json' + }, + body: JSON.stringify(requestObject) + }) } // Send DOGE export const sendDoge = (requestObject) => { - const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node]; + const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] - return request(`/crosschain/doge/send?apiKey=${myNode.apiKey}`, { - method: 'POST', - headers: { - 'Accept': 'application/json', - 'Content-Type': 'application/json' - }, - body: JSON.stringify(requestObject) - }) + return request(`/crosschain/doge/send?apiKey=${myNode.apiKey}`, { + method: 'POST', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json' + }, + 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]; + 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) - }) + return request(`/crosschain/dgb/send?apiKey=${myNode.apiKey}`, { + method: 'POST', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json' + }, + 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]; + 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) - }) + return request(`/crosschain/rvn/send?apiKey=${myNode.apiKey}`, { + method: 'POST', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json' + }, + body: JSON.stringify(requestObject) + }) } // Send ARRR export const sendArrr = (requestObject) => { - const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node]; + const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] - return request(`/crosschain/arrr/send?apiKey=${myNode.apiKey}`, { - method: 'POST', - headers: { - 'Accept': 'application/json', - 'Content-Type': 'application/json' - }, - body: JSON.stringify(requestObject) - }) + return request(`/crosschain/arrr/send?apiKey=${myNode.apiKey}`, { + method: 'POST', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json' + }, + body: JSON.stringify(requestObject) + }) } diff --git a/qortal-ui-crypto/api/transactions/AirdropTransaction.js b/qortal-ui-crypto/api/transactions/AirdropTransaction.js index 552e42e8..e23029a8 100644 --- a/qortal-ui-crypto/api/transactions/AirdropTransaction.js +++ b/qortal-ui-crypto/api/transactions/AirdropTransaction.js @@ -1,50 +1,35 @@ -'use strict'; +'use strict' import TransactionBase from './TransactionBase.js' import { QORT_DECIMALS } from '../constants.js' -// import { Sha256 } from 'asmcrypto.js/dist_es5/entry-export_all.js' export default class PaymentTransaction extends TransactionBase { - constructor () { - super() - this.type = 20 - this.amount = 42 * Math.pow(10, 8) - this.tests.push( - () => { - if (!(this._amount >= 0)) { - return 'Invalid amount ' + this._amount / QORT_DECIMALS - } - return true - }, - () => { - if (!(this._recipient instanceof Uint8Array && this._recipient.length == 25)) { - return 'Invalid recipient ' + Base58.encode(this._recipient) - } - return true - } - ) - } + constructor() { + super() + this.type = 20 + } - set recipient (recipient) { // Always Base58 encoded. Accepts Uint8Array or Base58 string. - this._recipient = recipient instanceof Uint8Array ? recipient : this.constructor.Base58.decode(recipient) - } - set amount (amount) { - this._amount = amount * QORT_DECIMALS - this._amountBytes = this.constructor.utils.int64ToBytes(amount) - } + set recipient(recipient) { + this._recipient = recipient instanceof Uint8Array ? recipient : this.constructor.Base58.decode(recipient) + } - set reference (seed) { - const sha = seed => new Sha512().process(seed).finish().result - let reference = sha(sha(seed)) - reference += reference - } + set amount(amount) { + this._amount = amount * QORT_DECIMALS + this._amountBytes = this.constructor.utils.int64ToBytes(amount) + } - get params () { - const params = super.params - params.push( - this._recipient, - this._amountBytes, - this._feeBytes - ) - return params - } + set reference(seed) { + const sha = seed => new Sha512().process(seed).finish().result + let reference = sha(sha(seed)) + reference += reference + } + + get params() { + const params = super.params + params.push( + this._recipient, + this._amountBytes, + this._feeBytes + ) + return params + } } diff --git a/qortal-ui-crypto/api/transactions/DelegationTransaction.js b/qortal-ui-crypto/api/transactions/DelegationTransaction.js index bc74502a..d2b670b8 100644 --- a/qortal-ui-crypto/api/transactions/DelegationTransaction.js +++ b/qortal-ui-crypto/api/transactions/DelegationTransaction.js @@ -1,31 +1,22 @@ -'use strict'; +'use strict' import TransactionBase from './TransactionBase.js' -// import { QORT_DECIMALS } from "../constants.js" // Not needed, no amount export default class DelegationTransaction extends TransactionBase { - constructor () { - super() - this.type = 18 - this.tests.push( - () => { - if (!(this._superNodeAddress instanceof Uint8Array && this._superNodeAddress.length == 25)) { - return 'Invalid recipient ' + Base58.encode(this._superNodeAddress) - } - return true - } - ) - } + constructor() { + super() + this.type = 18 + } - set superNodeAddress (superNodeAddress) { // Always Base58 encoded. Accepts Uint8Array or Base58 string. - this._superNodeAddress = superNodeAddress instanceof Uint8Array ? superNodeAddress : this.constructor.Base58.decode(superNodeAddress) - } + set superNodeAddress(superNodeAddress) { + this._superNodeAddress = superNodeAddress instanceof Uint8Array ? superNodeAddress : this.constructor.Base58.decode(superNodeAddress) + } - get params () { - const params = super.params - params.push( - this._superNodeAddress, - this._feeBytes - ) - return params - } + get params() { + const params = super.params + params.push( + this._superNodeAddress, + this._feeBytes + ) + return params + } } diff --git a/qortal-ui-crypto/api/transactions/MessageTransaction.js b/qortal-ui-crypto/api/transactions/MessageTransaction.js index f28a25fe..ea0e4079 100644 --- a/qortal-ui-crypto/api/transactions/MessageTransaction.js +++ b/qortal-ui-crypto/api/transactions/MessageTransaction.js @@ -1,95 +1,47 @@ -"use strict"; -import PaymentTransaction from "./PaymentTransaction.js" -import { QORT_DECIMALS } from "../constants.js" +'use strict' +import PaymentTransaction from './PaymentTransaction.js' +import { QORT_DECIMALS } from '../constants.js' -/* ==================================== -EXTEND THE PAYMENT TRANSACTION YOU CLOWN -====================================== */ +export default class MessageTransaction extends PaymentTransaction { + constructor() { + super() + this.type = 17 + this._key = this.constructor.utils.int64ToBytes(0); + this._isEncrypted = new Uint8Array(1); // Defaults to false + this._isText = new Uint8Array(1); // Defaults to false + } -export default class MessageTransaction extends PaymentTransaction{ - constructor(){ - super(); - this.type = 17 - this._key = this.constructor.utils.int64ToBytes(0); - this._isEncrypted = new Uint8Array(1); // Defaults to false - this._isText = new Uint8Array(1); // Defaults to false - } - - set message(message /* UTF8 String */){ - // ...yes? no? - this.messageText = message; - - // Not sure about encoding here... - //this._message = message instanceof Uint8Array ? message : this.constructor.Base58.decode(message); - this._message = this.constructor.utils.stringtoUTF8Array(message) - this._messageLength = this.constructor.utils.int64ToBytes(this._message.length) - } - set isEncrypted(isEncrypted){ - this._isEncrypted[0] = isEncrypted; - } - set isText(isText){ - this._isText[0] = isText; - } - get _params(){ - // dont extend super because paymentTrasaction is different - //const params = super.params; - return [ - this._typeBytes, - this._timestampBytes, - this._lastReference, - this._keyPair.publicKey, - this._recipient, - this._key, - this._amountBytes, - this._messageLength, - this._message, - this._isEncrypted, - this._isText, - this._feeBytes - ] - } + set message(message /* UTF8 String */) { + // ...yes? no? + this.messageText = message + + // Not sure about encoding here... + this._message = this.constructor.utils.stringtoUTF8Array(message) + this._messageLength = this.constructor.utils.int64ToBytes(this._message.length) + } + + set isEncrypted(isEncrypted) { + this._isEncrypted[0] = isEncrypted + } + + set isText(isText) { + this._isText[0] = isText + } + + get _params() { + return [ + this._typeBytes, + this._timestampBytes, + this._lastReference, + this._keyPair.publicKey, + this._recipient, + this._key, + this._amountBytes, + this._messageLength, + this._message, + this._isEncrypted, + this._isText, + this._feeBytes + ] + } } - -//"use strict"; -//function generateSignatureMessageTransaction(keyPair, lastReference, recipient, amount, fee, timestamp, message, isText, isEncrypted) => { -// const data = generateMessageTransactionBase(keyPair.publicKey, lastReference, recipient, amount, fee, timestamp, message, isText, isEncrypted); -// return nacl.sign.detached(data, keyPair.privateKey); -//} -// -//function generateMessageTransaction(keyPair, lastReference, recipient, amount, fee, timestamp, message, isText, isEncrypted, signature) => { -// return appendBuffer(generateMessageTransactionBase(keyPair.publicKey, lastReference, recipient, amount, fee, timestamp, message, isText, isEncrypted), -// signature); -//} -//function generateMessageTransactionBase(publicKey, lastReference, recipient, amount, fee, timestamp, message, isText, isEncrypted) => { -// txType = TYPES.MESSAGE_TRANSACTION; -// -// const typeBytes = int32ToBytes(txType); -// const timestampBytes = int64ToBytes(timestamp); -// const amountBytes = int64ToBytes(amount * 100000000); -// const feeBytes = int64ToBytes(fee * 100000000); -// const messageLength = int32ToBytes(message.length); -// const key = int64ToBytes(0); -// -// isTextB = new Uint8Array(1); -// isTextB[0] = isText; -// -// isEncryptedB = new Uint8Array(1); -// isEncryptedB[0] = isEncrypted; -// -// let data = new Uint8Array(); -// -// data = appendBuffer(data, typeBytes); -// data = appendBuffer(data, timestampBytes); -// data = appendBuffer(data, lastReference); -// data = appendBuffer(data, publicKey); -// data = appendBuffer(data, recipient); -// data = appendBuffer(data, key); -// data = appendBuffer(data, amountBytes); -// data = appendBuffer(data, messageLength); -// data = appendBuffer(data, message); -// data = appendBuffer(data, isEncryptedB); -// data = appendBuffer(data, isTextB); -// data = appendBuffer(data, feeBytes); -// -// return data; -//} \ No newline at end of file diff --git a/qortal-ui-crypto/api/transactions/PaymentTransaction.js b/qortal-ui-crypto/api/transactions/PaymentTransaction.js index 655ac285..bde396eb 100644 --- a/qortal-ui-crypto/api/transactions/PaymentTransaction.js +++ b/qortal-ui-crypto/api/transactions/PaymentTransaction.js @@ -1,80 +1,63 @@ -'use strict'; +'use strict' import TransactionBase from './TransactionBase.js' import Base58 from '../deps/Base58.js' import { store } from '../../api.js' export default class PaymentTransaction extends TransactionBase { - constructor() { - super() - this.type = 2 - this.tests.push( - () => { - if (!(this._amount >= 0)) { - return 'Invalid amount ' + this._amount / store.getState().config.coin.decimals - } - return true - }, - () => { - if (!(this._recipient instanceof Uint8Array && this._recipient.length == 25)) { - return 'Invalid recipient ' + Base58.encode(this._recipient) - } - return true - } - ) - } + constructor() { + super() + this.type = 2 + } - set recipient(recipient) { // Always Base58 encoded. Accepts Uint8Array or Base58 string. - this._recipient = recipient instanceof Uint8Array ? recipient : this.constructor.Base58.decode(recipient) - } + render(html) { + const conf = store.getState().config + return html` + + + + + + + + + ${this.recipientName ? html` + + + + + ` : ''} + + + + +
${this._dialogto}:
${this.dialogAddress} ${' '}-${Base58.encode(this._recipient)}
${this.dialogName} ${' '}-${this.recipientName}
${this._dialogamount}${this._amount / conf.coin.decimals} ${conf.coin.symbol}
+ ` + } - set dialogto(dialogto) { - this._dialogto = dialogto - } + set recipient(recipient) { + this._recipient = recipient instanceof Uint8Array ? recipient : this.constructor.Base58.decode(recipient) + } - set dialogamount(dialogamount) { - this._dialogamount = dialogamount - } - - set amount(amount) { - this._amount = Math.round(amount * store.getState().config.coin.decimals) - this._amountBytes = this.constructor.utils.int64ToBytes(this._amount) - } + set dialogto(dialogto) { + this._dialogto = dialogto + } - get params() { - const params = super.params - params.push( - this._recipient, - this._amountBytes, - this._feeBytes - ) - return params - } + set dialogamount(dialogamount) { + this._dialogamount = dialogamount + } - render(html) { - const conf = store.getState().config - return html` - - - - - - - - - - - ${this.recipientName ? html` - - - - - ` : ''} - - - - - -
${this._dialogto}:
${this.dialogAddress} ${' '}-${Base58.encode(this._recipient)}
${this.dialogName} ${' '}-${this.recipientName}
${this._dialogamount}${this._amount / conf.coin.decimals} ${conf.coin.symbol}
- ` - } + set amount(amount) { + this._amount = Math.round(amount * store.getState().config.coin.decimals) + this._amountBytes = this.constructor.utils.int64ToBytes(this._amount) + } + + get params() { + const params = super.params + params.push( + this._recipient, + this._amountBytes, + this._feeBytes + ) + return params + } } diff --git a/qortal-ui-crypto/api/transactions/PublicizeTransaction.js b/qortal-ui-crypto/api/transactions/PublicizeTransaction.js index d4982bcb..0243901c 100644 --- a/qortal-ui-crypto/api/transactions/PublicizeTransaction.js +++ b/qortal-ui-crypto/api/transactions/PublicizeTransaction.js @@ -1,23 +1,23 @@ -"use strict"; -import ChatBase from "./chat/ChatBase.js" +'use strict' +import ChatBase from './chat/ChatBase.js' export default class PublicizeTransaction extends ChatBase { - constructor() { - super(); - this.type = 19 - this.fee = 0 - } + constructor() { + super() + this.type = 19 + this.fee = 0 + } - set proofOfWorkNonce(proofOfWorkNonce) { - this._proofOfWorkNonce = this.constructor.utils.int32ToBytes(proofOfWorkNonce) - } + set proofOfWorkNonce(proofOfWorkNonce) { + this._proofOfWorkNonce = this.constructor.utils.int32ToBytes(proofOfWorkNonce) + } - get params() { - const params = super.params; - params.push( - this._proofOfWorkNonce, - this._feeBytes - ) - return params; - } + get params() { + const params = super.params + params.push( + this._proofOfWorkNonce, + this._feeBytes + ) + return params + } } diff --git a/qortal-ui-crypto/api/transactions/TransactionBase.js b/qortal-ui-crypto/api/transactions/TransactionBase.js index f61f1834..ae5f613e 100644 --- a/qortal-ui-crypto/api/transactions/TransactionBase.js +++ b/qortal-ui-crypto/api/transactions/TransactionBase.js @@ -1,166 +1,121 @@ -'use strict'; +'use strict' import { TX_TYPES, QORT_DECIMALS } from '../constants.js' import nacl from '../deps/nacl-fast.js' import Base58 from '../deps/Base58.js' import utils from '../deps/utils.js' export default class TransactionBase { - static get utils() { - return utils - } - static get nacl() { - return nacl - } - static get Base58() { - return Base58 - } + static get utils() { + return utils + } + static get nacl() { + return nacl + } + static get Base58() { + return Base58 + } - constructor() { - // Defaults - this.fee = 0 - this.groupID = 0 - this.timestamp = Date.now() - this.tests = [ - () => { - if (!(this._type >= 1 && this._type in TX_TYPES)) { - return 'Invalid type: ' + this.type - } - return true - }, - () => { - if (this._fee < 0) { - return 'Invalid fee: ' + this._fee / QORT_DECIMALS - } - return true - }, - () => { - if (this._groupID < 0 || !Number.isInteger(this._groupID)) { - return 'Invalid groupID: ' + this._groupID - } - return true - }, - () => { - if (!(new Date(this._timestamp)).getTime() > 0) { - return 'Invalid timestamp: ' + this._timestamp - } - return true - }, - () => { - if (!(this._lastReference instanceof Uint8Array && this._lastReference.byteLength == 64)) { - if (this._lastReference == 0) { - // No prior transactions exist - return 'Invalid last reference. Please ensure that you have at least 0.001 QORT for the transaction fee.' - } - return 'Invalid last reference: ' + this._lastReference - } - return true - }, - () => { - if (!(this._keyPair)) { - return 'keyPair must be specified' - } - if (!(this._keyPair.publicKey instanceof Uint8Array && this._keyPair.publicKey.byteLength === 32)) { - return 'Invalid publicKey' - } - if (!(this._keyPair.privateKey instanceof Uint8Array && this._keyPair.privateKey.byteLength === 64)) { - return 'Invalid privateKey' - } - return true - } - ] - } + constructor() { + this.fee = 0 + this.groupID = 0 + this.timestamp = Date.now() + } - set keyPair(keyPair) { - this._keyPair = keyPair - } - set type(type) { - this.typeText = TX_TYPES[type] - this._type = type - this._typeBytes = this.constructor.utils.int32ToBytes(this._type) - } - set groupID(groupID) { - this._groupID = groupID - this._groupIDBytes = this.constructor.utils.int32ToBytes(this._groupID) - } - set timestamp(timestamp) { - this._timestamp = timestamp - this._timestampBytes = this.constructor.utils.int64ToBytes(this._timestamp) - } - set fee(fee) { - this._fee = fee * QORT_DECIMALS - this._feeBytes = this.constructor.utils.int64ToBytes(this._fee) - } - set lastReference(lastReference) { // Always Base58 encoded. Accepts Uint8Array or Base58 string. - // lastReference could be a string or an Uint8Array - this._lastReference = lastReference instanceof Uint8Array ? lastReference : this.constructor.Base58.decode(lastReference) - } - get params() { - return [ - this._typeBytes, - this._timestampBytes, - this._groupIDBytes, - this._lastReference, - this._keyPair.publicKey - ] - } - get signedBytes() { - if (!this._signedBytes) { - this.sign() - } - return this._signedBytes - } + render(html) { + return html`render method to display requested transaction info` + } - // render function but NOT lit element - render(html) { - return html`render method to display requested transaction info` - } + set keyPair(keyPair) { + this._keyPair = keyPair + } - validParams() { - let finalResult = { - valid: true - } - // const valid = - this.tests.some(test => { - const result = test() - if (result !== true) { - finalResult = { - valid: false, - message: result - } - return true // exists the loop - } - }) - return finalResult - } + set type(type) { + this.typeText = TX_TYPES[type] + this._type = type + this._typeBytes = this.constructor.utils.int32ToBytes(this._type) + } - generateBase() { - const isValid = this.validParams() - if (!isValid.valid) { - throw new Error(isValid.message) - } - let result = new Uint8Array() + set groupID(groupID) { + this._groupID = groupID + this._groupIDBytes = this.constructor.utils.int32ToBytes(this._groupID) + } - this.params.forEach(item => { - result = this.constructor.utils.appendBuffer(result, item) - }) + set timestamp(timestamp) { + this._timestamp = timestamp + this._timestampBytes = this.constructor.utils.int64ToBytes(this._timestamp) + } - this._base = result - return result - } + set fee(fee) { + this._fee = fee * QORT_DECIMALS + this._feeBytes = this.constructor.utils.int64ToBytes(this._fee) + } - sign() { - if (!this._keyPair) { - throw new Error('keyPair not defined') - } + set lastReference(lastReference) { + this._lastReference = lastReference instanceof Uint8Array ? lastReference : this.constructor.Base58.decode(lastReference) + } - if (!this._base) { - this.generateBase() - } + get params() { + return [ + this._typeBytes, + this._timestampBytes, + this._groupIDBytes, + this._lastReference, + this._keyPair.publicKey + ] + } - this._signature = this.constructor.nacl.sign.detached(this._base, this._keyPair.privateKey) + get signedBytes() { + if (!this._signedBytes) { + this.sign() + } + return this._signedBytes + } - this._signedBytes = this.constructor.utils.appendBuffer(this._base, this._signature) + validParams() { + let finalResult = { + valid: true + } + this.tests.some(test => { + const result = test() + if (result !== true) { + finalResult = { + valid: false, + message: result + } + return true // exists the loop + } + }) + return finalResult + } - return this._signature - } + generateBase() { + const isValid = this.validParams() + if (!isValid.valid) { + throw new Error(isValid.message) + } + let result = new Uint8Array() + + this.params.forEach(item => { + result = this.constructor.utils.appendBuffer(result, item) + }) + + this._base = result + return result + } + + sign() { + if (!this._keyPair) { + throw new Error('keyPair not defined') + } + + if (!this._base) { + this.generateBase() + } + + this._signature = this.constructor.nacl.sign.detached(this._base, this._keyPair.privateKey) + + this._signedBytes = this.constructor.utils.appendBuffer(this._base, this._signature) + + return this._signature + } } diff --git a/qortal-ui-crypto/api/transactions/TransferPrivsTransaction.js b/qortal-ui-crypto/api/transactions/TransferPrivsTransaction.js index f12d837f..858ac26a 100644 --- a/qortal-ui-crypto/api/transactions/TransferPrivsTransaction.js +++ b/qortal-ui-crypto/api/transactions/TransferPrivsTransaction.js @@ -1,42 +1,42 @@ -'use strict'; +'use strict' import TransactionBase from './TransactionBase.js' import Base58 from '../deps/Base58.js' import { store } from '../../api.js' import { QORT_DECIMALS } from '../constants.js' export default class TransferPrivsTransaction extends TransactionBase { - constructor() { - super() - this.type = 40 - } + constructor() { + super() + this.type = 40 + } - render(html) { - const conf = store.getState().config - return html` + render(html) { + const conf = store.getState().config + return html` Are you sure to transfer privileges to this account ?
${this.theRecipient}
On pressing confirm, the transfer privileges request will be sent! ` - } + } - set recipient(recipient) { - this._recipient = recipient instanceof Uint8Array ? recipient : this.constructor.Base58.decode(recipient) - this.theRecipient = recipient - } + set recipient(recipient) { + this._recipient = recipient instanceof Uint8Array ? recipient : this.constructor.Base58.decode(recipient) + this.theRecipient = recipient + } - set fee(fee) { - this._fee = fee * QORT_DECIMALS - this._feeBytes = this.constructor.utils.int64ToBytes(this._fee) - } + set fee(fee) { + this._fee = fee * QORT_DECIMALS + this._feeBytes = this.constructor.utils.int64ToBytes(this._fee) + } - get params() { - const params = super.params - params.push( - this._recipient, - this._feeBytes - ) - return params - } -} \ No newline at end of file + get params() { + const params = super.params + params.push( + this._recipient, + this._feeBytes + ) + return params + } +} diff --git a/qortal-ui-crypto/api/transactions/arbitrary/signArbitrary.js b/qortal-ui-crypto/api/transactions/arbitrary/signArbitrary.js index 47f37f81..84ed0638 100644 --- a/qortal-ui-crypto/api/transactions/arbitrary/signArbitrary.js +++ b/qortal-ui-crypto/api/transactions/arbitrary/signArbitrary.js @@ -2,38 +2,37 @@ import nacl from '../../deps/nacl-fast.js' import utils from '../../deps/utils.js' import Base58 from '../../deps/Base58.js' - const signArbitrary = (arbitraryBytesBase58, arbitraryBytesForSigningBase58, nonce, keyPair) => { - if (!arbitraryBytesBase58) { - throw new Error('ArbitraryBytesBase58 not defined') - } + if (!arbitraryBytesBase58) { + throw new Error('ArbitraryBytesBase58 not defined') + } - if (!nonce) { - throw new Error('Nonce not defined') - } + if (!nonce) { + throw new Error('Nonce not defined') + } - if (!keyPair) { - throw new Error('keyPair not defined') - } + if (!keyPair) { + throw new Error('keyPair not defined') + } - const arbitraryBytes = Base58.decode(arbitraryBytesBase58) - const _arbitraryBytesBuffer = Object.keys(arbitraryBytes).map(function (key) { return arbitraryBytes[key]; }); - const arbitraryBytesBuffer = new Uint8Array(_arbitraryBytesBuffer) + const arbitraryBytes = Base58.decode(arbitraryBytesBase58) + const _arbitraryBytesBuffer = Object.keys(arbitraryBytes).map(function (key) { return arbitraryBytes[key]; }) + const arbitraryBytesBuffer = new Uint8Array(_arbitraryBytesBuffer) - const arbitraryBytesForSigning = Base58.decode(arbitraryBytesForSigningBase58) - const _arbitraryBytesForSigningBuffer = Object.keys(arbitraryBytesForSigning).map(function (key) { return arbitraryBytesForSigning[key]; }); - const arbitraryBytesForSigningBuffer = new Uint8Array(_arbitraryBytesForSigningBuffer) + const arbitraryBytesForSigning = Base58.decode(arbitraryBytesForSigningBase58) + const _arbitraryBytesForSigningBuffer = Object.keys(arbitraryBytesForSigning).map(function (key) { return arbitraryBytesForSigning[key]; }) + const arbitraryBytesForSigningBuffer = new Uint8Array(_arbitraryBytesForSigningBuffer) - const _nonce = utils.int32ToBytes(nonce) - arbitraryBytesBuffer.set(_nonce, 112) - arbitraryBytesForSigningBuffer.set(_nonce, 112) + const _nonce = utils.int32ToBytes(nonce) + arbitraryBytesBuffer.set(_nonce, 112) + arbitraryBytesForSigningBuffer.set(_nonce, 112) - const signature = nacl.sign.detached(arbitraryBytesForSigningBuffer, keyPair.privateKey) + const signature = nacl.sign.detached(arbitraryBytesForSigningBuffer, keyPair.privateKey) - const signedBytes = utils.appendBuffer(arbitraryBytesBuffer, signature) + const signedBytes = utils.appendBuffer(arbitraryBytesBuffer, signature) - return signedBytes + return signedBytes } export default signArbitrary diff --git a/qortal-ui-crypto/api/transactions/arbitraryV3.js b/qortal-ui-crypto/api/transactions/arbitraryV3.js index 5d62000a..2c2536af 100644 --- a/qortal-ui-crypto/api/transactions/arbitraryV3.js +++ b/qortal-ui-crypto/api/transactions/arbitraryV3.js @@ -1,42 +1,37 @@ -"use strict"; -/* -TO DO -*/ +'use strict' + (function () { + function generateSignatureArbitraryTransactionV3(keyPair, lastReference, service, arbitraryData, fee, timestamp) => { + const data = generateArbitraryTransactionV3Base(keyPair.publicKey, lastReference, service, arbitraryData, fee, timestamp) + return nacl.sign.detached(data, keyPair.privateKey) + } -(function(){ - function generateSignatureArbitraryTransactionV3(keyPair, lastReference, service, arbitraryData, fee, timestamp) => { - const data = generateArbitraryTransactionV3Base(keyPair.publicKey, lastReference, service, arbitraryData, fee, timestamp); - return nacl.sign.detached(data, keyPair.privateKey); - } + function generateArbitraryTransactionV3(keyPair, lastReference, service, arbitraryData, fee, timestamp, signature) => { + return appendBuffer(generateArbitraryTransactionV3Base(keyPair.publicKey, lastReference, service, arbitraryData, fee, timestamp), signature) + } - function generateArbitraryTransactionV3(keyPair, lastReference, service, arbitraryData, fee, timestamp, signature) => { - return appendBuffer(generateArbitraryTransactionV3Base(keyPair.publicKey, lastReference, service, arbitraryData, fee, timestamp), - signature); - } + function generateArbitraryTransactionV3Base(publicKey, lastReference, service, arbitraryData, fee, timestamp) => { + const txType = TYPES.ARBITRARY_TRANSACTION + const typeBytes = int32ToBytes(txType) + const timestampBytes = int64ToBytes(timestamp) + const feeBytes = int64ToBytes(fee * 100000000) + const serviceBytes = int32ToBytes(service) + const dataSizeBytes = int32ToBytes(arbitraryData.length) + const paymentsLengthBytes = int32ToBytes(0) // Support payments - not yet. - function generateArbitraryTransactionV3Base(publicKey, lastReference, service, arbitraryData, fee, timestamp) => { - const txType = TYPES.ARBITRARY_TRANSACTION; - const typeBytes = int32ToBytes(txType); - const timestampBytes = int64ToBytes(timestamp); - const feeBytes = int64ToBytes(fee * 100000000); - const serviceBytes = int32ToBytes(service); - const dataSizeBytes = int32ToBytes(arbitraryData.length); - const paymentsLengthBytes = int32ToBytes(0); // Support payments - not yet. + var data = new Uint8Array() - var data = new Uint8Array(); + data = appendBuffer(data, typeBytes) + data = appendBuffer(data, timestampBytes) + data = appendBuffer(data, lastReference) + data = appendBuffer(data, publicKey) + data = appendBuffer(data, paymentsLengthBytes) + // Here it is necessary to insert the payments, if there are + data = appendBuffer(data, serviceBytes) + data = appendBuffer(data, dataSizeBytes) + data = appendBuffer(data, arbitraryData) + data = appendBuffer(data, feeBytes) - data = appendBuffer(data, typeBytes); - data = appendBuffer(data, timestampBytes); - data = appendBuffer(data, lastReference); - data = appendBuffer(data, publicKey); - data = appendBuffer(data, paymentsLengthBytes); - // Here it is necessary to insert the payments, if there are - data = appendBuffer(data, serviceBytes); - data = appendBuffer(data, dataSizeBytes); - data = appendBuffer(data, arbitraryData); - data = appendBuffer(data, feeBytes); - - return data; - } -}()) \ No newline at end of file + return data + } + }()) diff --git a/qortal-ui-crypto/api/transactions/chat/ChatBase.js b/qortal-ui-crypto/api/transactions/chat/ChatBase.js index 3a81d3f2..783176ed 100644 --- a/qortal-ui-crypto/api/transactions/chat/ChatBase.js +++ b/qortal-ui-crypto/api/transactions/chat/ChatBase.js @@ -1,137 +1,97 @@ -'use strict'; +'use strict' import { TX_TYPES, QORT_DECIMALS } from '../../constants.js' import nacl from '../../deps/nacl-fast.js' import Base58 from '../../deps/Base58.js' import utils from '../../deps/utils.js' export default class ChatBase { - static get utils() { - return utils - } - static get nacl() { - return nacl - } - static get Base58() { - return Base58 - } + static get utils() { + return utils + } + static get nacl() { + return nacl + } + static get Base58() { + return Base58 + } - constructor() { - this.fee = 0 - this.groupID = 0 - this.tests = [ - () => { - if (!(this._type >= 1 && this._type in TX_TYPES)) { - return 'Invalid type: ' + this.type - } - return true - }, - () => { - if (this._fee < 0) { - return 'Invalid fee: ' + this._fee / QORT_DECIMALS - } - return true - }, - () => { - if (this._groupID < 0 || !Number.isInteger(this._groupID)) { - return 'Invalid groupID: ' + this._groupID - } - return true - }, - () => { - if (!(new Date(this._timestamp)).getTime() > 0) { - return 'Invalid timestamp: ' + this._timestamp - } - return true - }, - () => { - if (!(this._lastReference instanceof Uint8Array && this._lastReference.byteLength == 64)) { - return 'Invalid last reference: ' + this._lastReference - } - return true - }, - () => { - if (!(this._keyPair)) { - return 'keyPair must be specified' - } - if (!(this._keyPair.publicKey instanceof Uint8Array && this._keyPair.publicKey.byteLength === 32)) { - return 'Invalid publicKey' - } - if (!(this._keyPair.privateKey instanceof Uint8Array && this._keyPair.privateKey.byteLength === 64)) { - return 'Invalid privateKey' - } - return true - } - ] - } + constructor() { + this.fee = 0 + this.groupID = 0 + } - set keyPair(keyPair) { - this._keyPair = keyPair - } - set type(type) { - this.typeText = TX_TYPES[type] - this._type = type - this._typeBytes = this.constructor.utils.int32ToBytes(this._type) - } - set groupID(groupID) { - this._groupID = groupID - this._groupIDBytes = this.constructor.utils.int32ToBytes(this._groupID) - } - set timestamp(timestamp) { - this._timestamp = timestamp - this._timestampBytes = this.constructor.utils.int64ToBytes(this._timestamp) - } - set fee(fee) { - this._fee = fee * QORT_DECIMALS - this._feeBytes = this.constructor.utils.int64ToBytes(this._fee) - } - set lastReference(lastReference) { - this._lastReference = lastReference instanceof Uint8Array ? lastReference : this.constructor.Base58.decode(lastReference) - } - get params() { + set keyPair(keyPair) { + this._keyPair = keyPair + } - return [ - this._typeBytes, - this._timestampBytes, - this._groupIDBytes, - this._lastReference, - this._keyPair.publicKey - ] - } + set type(type) { + this.typeText = TX_TYPES[type] + this._type = type + this._typeBytes = this.constructor.utils.int32ToBytes(this._type) + } - get chatBytes() { + set groupID(groupID) { + this._groupID = groupID + this._groupIDBytes = this.constructor.utils.int32ToBytes(this._groupID) + } - const isValid = this.validParams() - if (!isValid.valid) { - throw new Error(isValid.message) - } + set timestamp(timestamp) { + this._timestamp = timestamp + this._timestampBytes = this.constructor.utils.int64ToBytes(this._timestamp) + } - let result = new Uint8Array() + set fee(fee) { + this._fee = fee * QORT_DECIMALS + this._feeBytes = this.constructor.utils.int64ToBytes(this._fee) + } - this.params.forEach(item => { - result = this.constructor.utils.appendBuffer(result, item) - }) + set lastReference(lastReference) { + this._lastReference = lastReference instanceof Uint8Array ? lastReference : this.constructor.Base58.decode(lastReference) + } - this._chatBytes = result + get params() { + return [ + this._typeBytes, + this._timestampBytes, + this._groupIDBytes, + this._lastReference, + this._keyPair.publicKey + ] + } - return this._chatBytes - } + get chatBytes() { + const isValid = this.validParams() + if (!isValid.valid) { + throw new Error(isValid.message) + } - validParams() { - let finalResult = { - valid: true - } + let result = new Uint8Array() - this.tests.some(test => { - const result = test() - if (result !== true) { - finalResult = { - valid: false, - message: result - } - return true - } - }) - return finalResult - } + this.params.forEach(item => { + result = this.constructor.utils.appendBuffer(result, item) + }) + + this._chatBytes = result + + return this._chatBytes + } + + validParams() { + let finalResult = { + valid: true + } + + this.tests.some(test => { + const result = test() + if (result !== true) { + finalResult = { + valid: false, + message: result + } + return true + } + }) + return finalResult + } } diff --git a/qortal-ui-crypto/api/transactions/chat/ChatTransaction.js b/qortal-ui-crypto/api/transactions/chat/ChatTransaction.js index 6e6dcfd4..642ff744 100644 --- a/qortal-ui-crypto/api/transactions/chat/ChatTransaction.js +++ b/qortal-ui-crypto/api/transactions/chat/ChatTransaction.js @@ -1,77 +1,92 @@ -"use strict"; +'use strict' import ChatBase from "./ChatBase.js" import nacl from '../../deps/nacl-fast.js' import ed2curve from '../../deps/ed2curve.js' import { Sha256 } from 'asmcrypto.js' +import { CHAT_REFERENCE_FEATURE_TRIGGER_TIMESTAMP } from '../../constants.js' export default class ChatTransaction extends ChatBase { - constructor() { - super(); - this.type = 18 - this.fee = 0 - } + constructor() { + super() + this.type = 18 + this.fee = 0 + } - set recipientPublicKey(recipientPublicKey) { - this._base58RecipientPublicKey = recipientPublicKey instanceof Uint8Array ? this.constructor.Base58.encode(recipientPublicKey) : recipientPublicKey - this._recipientPublicKey = this.constructor.Base58.decode(this._base58RecipientPublicKey) + set recipientPublicKey(recipientPublicKey) { + this._base58RecipientPublicKey = recipientPublicKey instanceof Uint8Array ? this.constructor.Base58.encode(recipientPublicKey) : recipientPublicKey + this._recipientPublicKey = this.constructor.Base58.decode(this._base58RecipientPublicKey) + } - } + set proofOfWorkNonce(proofOfWorkNonce) { + this._proofOfWorkNonce = this.constructor.utils.int32ToBytes(proofOfWorkNonce) + } - set proofOfWorkNonce(proofOfWorkNonce) { - this._proofOfWorkNonce = this.constructor.utils.int32ToBytes(proofOfWorkNonce) - } + set recipient(recipient) { + this._recipient = recipient instanceof Uint8Array ? recipient : this.constructor.Base58.decode(recipient) + this._hasReceipient = new Uint8Array(1) + this._hasReceipient[0] = 1 + } + set hasChatReference(hasChatReference) { + this._hasChatReference = new Uint8Array(1) + this._hasChatReference[0] = hasChatReference + } - set recipient(recipient) { - this._recipient = recipient instanceof Uint8Array ? recipient : this.constructor.Base58.decode(recipient) - this._hasReceipient = new Uint8Array(1) - this._hasReceipient[0] = 1 - } + set chatReference(chatReference) { + this._chatReference = chatReference instanceof Uint8Array ? chatReference : this.constructor.Base58.decode(chatReference) + } - set message(message) { + set message(message) { + this.messageText = message; + this._message = this.constructor.utils.stringtoUTF8Array(message) + this._messageLength = this.constructor.utils.int32ToBytes(this._message.length) + } - this.messageText = message; + set isEncrypted(isEncrypted) { + this._isEncrypted = new Uint8Array(1) + this._isEncrypted[0] = isEncrypted - this._message = this.constructor.utils.stringtoUTF8Array(message) - this._messageLength = this.constructor.utils.int32ToBytes(this._message.length) - } + if (isEncrypted === 1) { + const convertedPrivateKey = ed2curve.convertSecretKey(this._keyPair.privateKey) + const convertedPublicKey = ed2curve.convertPublicKey(this._recipientPublicKey) + const sharedSecret = new Uint8Array(32) + nacl.lowlevel.crypto_scalarmult(sharedSecret, convertedPrivateKey, convertedPublicKey) - set isEncrypted(isEncrypted) { - this._isEncrypted = new Uint8Array(1); - this._isEncrypted[0] = isEncrypted; + this._chatEncryptionSeed = new Sha256().process(sharedSecret).finish().result + this._encryptedMessage = nacl.secretbox(this._message, this._lastReference.slice(0, 24), this._chatEncryptionSeed) + } - if (isEncrypted === 1) { - const convertedPrivateKey = ed2curve.convertSecretKey(this._keyPair.privateKey) - const convertedPublicKey = ed2curve.convertPublicKey(this._recipientPublicKey) - const sharedSecret = new Uint8Array(32); - nacl.lowlevel.crypto_scalarmult(sharedSecret, convertedPrivateKey, convertedPublicKey); + this._myMessage = isEncrypted === 1 ? this._encryptedMessage : this._message + this._myMessageLenth = isEncrypted === 1 ? this.constructor.utils.int32ToBytes(this._myMessage.length) : this._messageLength + } - this._chatEncryptionSeed = new Sha256().process(sharedSecret).finish().result - this._encryptedMessage = nacl.secretbox(this._message, this._lastReference.slice(0, 24), this._chatEncryptionSeed) - } + set isText(isText) { + this._isText = new Uint8Array(1) + this._isText[0] = isText + } - this._myMessage = isEncrypted === 1 ? this._encryptedMessage : this._message - this._myMessageLenth = isEncrypted === 1 ? this.constructor.utils.int32ToBytes(this._myMessage.length) : this._messageLength - } + get params() { + const params = super.params; + params.push( + this._proofOfWorkNonce, + this._hasReceipient, + this._recipient, + this._myMessageLenth, + this._myMessage, + this._isEncrypted, + this._isText, + this._feeBytes + ) - set isText(isText) { - this._isText = new Uint8Array(1); - this._isText[0] = isText; - } + // After the feature trigger timestamp we need to include chat reference + if (new Date(this._timestamp).getTime() >= CHAT_REFERENCE_FEATURE_TRIGGER_TIMESTAMP) { + params.push(this._hasChatReference) - get params() { - const params = super.params; - params.push( - this._proofOfWorkNonce, - this._hasReceipient, - this._recipient, - this._myMessageLenth, - this._myMessage, - this._isEncrypted, - this._isText, - this._feeBytes - ) - return params; - } + if (this._hasChatReference[0] == 1) { + params.push(this._chatReference) + } + } + return params + } } diff --git a/qortal-ui-crypto/api/transactions/chat/GroupChatTransaction.js b/qortal-ui-crypto/api/transactions/chat/GroupChatTransaction.js index efbd97b0..e414d10b 100644 --- a/qortal-ui-crypto/api/transactions/chat/GroupChatTransaction.js +++ b/qortal-ui-crypto/api/transactions/chat/GroupChatTransaction.js @@ -1,52 +1,67 @@ -"use strict"; +'use strict' import ChatBase from "./ChatBase.js" export default class GroupChatTransaction extends ChatBase { - constructor() { - super(); - this.type = 18 - this.fee = 0 - } + constructor() { + super(); + this.type = 18 + this.fee = 0 + } - set proofOfWorkNonce(proofOfWorkNonce) { - this._proofOfWorkNonce = this.constructor.utils.int32ToBytes(proofOfWorkNonce) - } + set proofOfWorkNonce(proofOfWorkNonce) { + this._proofOfWorkNonce = this.constructor.utils.int32ToBytes(proofOfWorkNonce) + } + set hasReceipient(hasReceipient) { + this._hasReceipient = new Uint8Array(1) + this._hasReceipient[0] = hasReceipient + } - set hasReceipient(hasReceipient) { - this._hasReceipient = new Uint8Array(1) - this._hasReceipient[0] = hasReceipient - } + set message(message) { + this.messageText = message + this._message = this.constructor.utils.stringtoUTF8Array(message) + this._messageLength = this.constructor.utils.int32ToBytes(this._message.length) + } - set message(message) { + set hasChatReference(hasChatReference) { + this._hasChatReference = new Uint8Array(1) + this._hasChatReference[0] = hasChatReference + } - this.messageText = message; + set chatReference(chatReference) { + this._chatReference = chatReference instanceof Uint8Array ? chatReference : this.constructor.Base58.decode(chatReference) + } - this._message = this.constructor.utils.stringtoUTF8Array(message) - this._messageLength = this.constructor.utils.int32ToBytes(this._message.length) - } + set isEncrypted(isEncrypted) { + this._isEncrypted = new Uint8Array(1); + this._isEncrypted[0] = isEncrypted + } - set isEncrypted(isEncrypted) { - this._isEncrypted = new Uint8Array(1); - this._isEncrypted[0] = isEncrypted; // Set to false... - } + set isText(isText) { + this._isText = new Uint8Array(1) + this._isText[0] = isText + } - set isText(isText) { - this._isText = new Uint8Array(1); - this._isText[0] = isText; // Set to true - } + get params() { + const params = super.params; + params.push( + this._proofOfWorkNonce, + this._hasReceipient, + this._messageLength, + this._message, + this._isEncrypted, + this._isText, + this._feeBytes + ) - get params() { - const params = super.params; - params.push( - this._proofOfWorkNonce, - this._hasReceipient, - this._messageLength, - this._message, - this._isEncrypted, - this._isText, - this._feeBytes - ) - return params; - } + // After the feature trigger timestamp we need to include chat reference + if (new Date(this._timestamp).getTime() >= CHAT_REFERENCE_FEATURE_TRIGGER_TIMESTAMP) { + params.push(this._hasChatReference) + + if (this._hasChatReference[0] == 1) { + params.push(this._chatReference) + } + } + return params + } } diff --git a/qortal-ui-crypto/api/transactions/chat/decryptChatMessage.js b/qortal-ui-crypto/api/transactions/chat/decryptChatMessage.js index 5ea06ec8..038db155 100644 --- a/qortal-ui-crypto/api/transactions/chat/decryptChatMessage.js +++ b/qortal-ui-crypto/api/transactions/chat/decryptChatMessage.js @@ -3,25 +3,24 @@ import Base58 from '../../deps/Base58.js' import ed2curve from '../../deps/ed2curve.js' import { Sha256 } from 'asmcrypto.js' - export const decryptChatMessage = (encryptedMessage, privateKey, recipientPublicKey, lastReference) => { - let _encryptedMessage = Base58.decode(encryptedMessage) + let _encryptedMessage = Base58.decode(encryptedMessage) - const _base58RecipientPublicKey = recipientPublicKey instanceof Uint8Array ? Base58.encode(recipientPublicKey) : recipientPublicKey - const _recipientPublicKey = Base58.decode(_base58RecipientPublicKey) + const _base58RecipientPublicKey = recipientPublicKey instanceof Uint8Array ? Base58.encode(recipientPublicKey) : recipientPublicKey + const _recipientPublicKey = Base58.decode(_base58RecipientPublicKey) - const _lastReference = lastReference instanceof Uint8Array ? lastReference : Base58.decode(lastReference) + const _lastReference = lastReference instanceof Uint8Array ? lastReference : Base58.decode(lastReference) - const convertedPrivateKey = ed2curve.convertSecretKey(privateKey) - const convertedPublicKey = ed2curve.convertPublicKey(_recipientPublicKey) - const sharedSecret = new Uint8Array(32); - nacl.lowlevel.crypto_scalarmult(sharedSecret, convertedPrivateKey, convertedPublicKey); + const convertedPrivateKey = ed2curve.convertSecretKey(privateKey) + const convertedPublicKey = ed2curve.convertPublicKey(_recipientPublicKey) + const sharedSecret = new Uint8Array(32); + nacl.lowlevel.crypto_scalarmult(sharedSecret, convertedPrivateKey, convertedPublicKey) - const _chatEncryptionSeed = new Sha256().process(sharedSecret).finish().result - const _decryptedMessage = nacl.secretbox.open(_encryptedMessage, _lastReference.slice(0, 24), _chatEncryptionSeed) + const _chatEncryptionSeed = new Sha256().process(sharedSecret).finish().result + const _decryptedMessage = nacl.secretbox.open(_encryptedMessage, _lastReference.slice(0, 24), _chatEncryptionSeed) - let decryptedMessage = '' + let decryptedMessage = '' - _decryptedMessage === false ? decryptedMessage : decryptedMessage = new TextDecoder('utf-8').decode(_decryptedMessage); - return decryptedMessage + _decryptedMessage === false ? decryptedMessage : decryptedMessage = new TextDecoder('utf-8').decode(_decryptedMessage) + return decryptedMessage } diff --git a/qortal-ui-crypto/api/transactions/chat/signChat.js b/qortal-ui-crypto/api/transactions/chat/signChat.js index 2c8428da..6760dac5 100644 --- a/qortal-ui-crypto/api/transactions/chat/signChat.js +++ b/qortal-ui-crypto/api/transactions/chat/signChat.js @@ -1,46 +1,43 @@ import nacl from '../../deps/nacl-fast.js' import utils from '../../deps/utils.js' - const signChat = (chatBytes, nonce, keyPair) => { - if (!chatBytes) { - throw new Error('Chat Bytes not defined') - } + if (!chatBytes) { + throw new Error('Chat Bytes not defined') + } - if (!nonce) { - throw new Error('Nonce not defined') - } + if (!nonce) { + throw new Error('Nonce not defined') + } - if (!keyPair) { - throw new Error('keyPair not defined') - } + if (!keyPair) { + throw new Error('keyPair not defined') + } - const _nonce = utils.int32ToBytes(nonce) + const _nonce = utils.int32ToBytes(nonce) - if (chatBytes.length === undefined) { - const _chatBytesBuffer = Object.keys(chatBytes).map(function (key) { return chatBytes[key]; }); + if (chatBytes.length === undefined) { + const _chatBytesBuffer = Object.keys(chatBytes).map(function (key) { return chatBytes[key]; }) - const chatBytesBuffer = new Uint8Array(_chatBytesBuffer) - chatBytesBuffer.set(_nonce, 112) + const chatBytesBuffer = new Uint8Array(_chatBytesBuffer) + chatBytesBuffer.set(_nonce, 112) + const signature = nacl.sign.detached(chatBytesBuffer, keyPair.privateKey) - const signature = nacl.sign.detached(chatBytesBuffer, keyPair.privateKey) + const signedBytes = utils.appendBuffer(chatBytesBuffer, signature) - const signedBytes = utils.appendBuffer(chatBytesBuffer, signature) + return signedBytes + } else { + const chatBytesBuffer = new Uint8Array(chatBytes) + chatBytesBuffer.set(_nonce, 112) - return signedBytes - } else { - const chatBytesBuffer = new Uint8Array(chatBytes) - chatBytesBuffer.set(_nonce, 112) + const signature = nacl.sign.detached(chatBytesBuffer, keyPair.privateKey) + const signedBytes = utils.appendBuffer(chatBytesBuffer, signature) - const signature = nacl.sign.detached(chatBytesBuffer, keyPair.privateKey) - - const signedBytes = utils.appendBuffer(chatBytesBuffer, signature) - - return signedBytes - } + return signedBytes + } } export default signChat diff --git a/qortal-ui-crypto/api/transactions/groups/AddGroupAdminTransaction.js b/qortal-ui-crypto/api/transactions/groups/AddGroupAdminTransaction.js index b4d6c120..4f5bf090 100644 --- a/qortal-ui-crypto/api/transactions/groups/AddGroupAdminTransaction.js +++ b/qortal-ui-crypto/api/transactions/groups/AddGroupAdminTransaction.js @@ -1,53 +1,53 @@ -'use strict'; -import TransactionBase from "../TransactionBase.js" -import { QORT_DECIMALS } from "../../constants.js" +'use strict' +import TransactionBase from '../TransactionBase.js' +import { QORT_DECIMALS } from '../../constants.js' export default class AddGroupAdminTransaction extends TransactionBase { - constructor() { - super() - this.type = 24 - } + constructor() { + super() + this.type = 24 + } - render(html) { - return html` - ${this._addAdminDialog1} -
- ${this.theRecipient} -
- ${this._addAdminDialog2} - ` - } + render(html) { + return html` + ${this._addAdminDialog1} +
+ ${this.theRecipient} +
+ ${this._addAdminDialog2} + ` + } - set addAdminDialog1(addAdminDialog1) { - this._addAdminDialog1 = addAdminDialog1 - } + set addAdminDialog1(addAdminDialog1) { + this._addAdminDialog1 = addAdminDialog1 + } - set addAdminDialog2(addAdminDialog2) { - this._addAdminDialog2 = addAdminDialog2 - } + set addAdminDialog2(addAdminDialog2) { + this._addAdminDialog2 = addAdminDialog2 + } - set rGroupId(rGroupId) { - this._rGroupId = rGroupId; - this._rGroupIdBytes = this.constructor.utils.int32ToBytes(this._rGroupId) - } + set rGroupId(rGroupId) { + this._rGroupId = rGroupId + this._rGroupIdBytes = this.constructor.utils.int32ToBytes(this._rGroupId) + } - set recipient(recipient) { - this._recipient = recipient instanceof Uint8Array ? recipient : this.constructor.Base58.decode(recipient) - this.theRecipient = recipient - } + set recipient(recipient) { + this._recipient = recipient instanceof Uint8Array ? recipient : this.constructor.Base58.decode(recipient) + this.theRecipient = recipient + } - set fee(fee) { - this._fee = fee * QORT_DECIMALS - this._feeBytes = this.constructor.utils.int64ToBytes(this._fee) - } + set fee(fee) { + this._fee = fee * QORT_DECIMALS + this._feeBytes = this.constructor.utils.int64ToBytes(this._fee) + } - get params() { - const params = super.params - params.push( - this._rGroupIdBytes, - this._recipient, - this._feeBytes - ) - return params - } -} \ No newline at end of file + get params() { + const params = super.params + params.push( + this._rGroupIdBytes, + this._recipient, + this._feeBytes + ) + return params + } +} diff --git a/qortal-ui-crypto/api/transactions/groups/CancelGroupBanTransaction.js b/qortal-ui-crypto/api/transactions/groups/CancelGroupBanTransaction.js index 3e36be23..61de1e34 100644 --- a/qortal-ui-crypto/api/transactions/groups/CancelGroupBanTransaction.js +++ b/qortal-ui-crypto/api/transactions/groups/CancelGroupBanTransaction.js @@ -1,53 +1,53 @@ -'use strict'; -import TransactionBase from "../TransactionBase.js" -import { QORT_DECIMALS } from "../../constants.js" +'use strict' +import TransactionBase from '../TransactionBase.js' +import { QORT_DECIMALS } from '../../constants.js' export default class CancelGroupBanTransaction extends TransactionBase { - constructor() { - super() - this.type = 27 - } + constructor() { + super() + this.type = 27 + } - render(html) { - return html` - ${this._cancelBanMemberDialog1} -
- ${this.theRecipient} -
- ${this._cancelBanMemberDialog2} - ` - } + render(html) { + return html` + ${this._cancelBanMemberDialog1} +
+ ${this.theRecipient} +
+ ${this._cancelBanMemberDialog2} + ` + } - set cancelBanMemberDialog1(cancelBanMemberDialog1) { - this._cancelBanMemberDialog1= cancelBanMemberDialog1 - } + set cancelBanMemberDialog1(cancelBanMemberDialog1) { + this._cancelBanMemberDialog1 = cancelBanMemberDialog1 + } - set cancelBanMemberDialog2(cancelBanMemberDialog2) { - this._cancelBanMemberDialog2 = cancelBanMemberDialog2 - } + set cancelBanMemberDialog2(cancelBanMemberDialog2) { + this._cancelBanMemberDialog2 = cancelBanMemberDialog2 + } - set rGroupId(rGroupId) { - this._rGroupId = rGroupId - this._rGroupIdBytes = this.constructor.utils.int32ToBytes(this._rGroupId) - } + set rGroupId(rGroupId) { + this._rGroupId = rGroupId + this._rGroupIdBytes = this.constructor.utils.int32ToBytes(this._rGroupId) + } - set recipient(recipient) { - this._recipient = recipient instanceof Uint8Array ? recipient : this.constructor.Base58.decode(recipient) - this.theRecipient = recipient - } + set recipient(recipient) { + this._recipient = recipient instanceof Uint8Array ? recipient : this.constructor.Base58.decode(recipient) + this.theRecipient = recipient + } - set fee(fee) { - this._fee = fee * QORT_DECIMALS - this._feeBytes = this.constructor.utils.int64ToBytes(this._fee) - } + set fee(fee) { + this._fee = fee * QORT_DECIMALS + this._feeBytes = this.constructor.utils.int64ToBytes(this._fee) + } - get params() { - const params = super.params - params.push( - this._rGroupIdBytes, - this._recipient, - this._feeBytes - ) - return params - } -} \ No newline at end of file + get params() { + const params = super.params + params.push( + this._rGroupIdBytes, + this._recipient, + this._feeBytes + ) + return params + } +} diff --git a/qortal-ui-crypto/api/transactions/groups/CancelGroupInviteTransaction.js b/qortal-ui-crypto/api/transactions/groups/CancelGroupInviteTransaction.js index 79d24656..10bb800b 100644 --- a/qortal-ui-crypto/api/transactions/groups/CancelGroupInviteTransaction.js +++ b/qortal-ui-crypto/api/transactions/groups/CancelGroupInviteTransaction.js @@ -1,60 +1,60 @@ -'use strict'; -import TransactionBase from "../TransactionBase.js" -import { QORT_DECIMALS } from "../../constants.js" +'use strict' +import TransactionBase from '../TransactionBase.js' +import { QORT_DECIMALS } from '../../constants.js' export default class CancelGroupInviteTransaction extends TransactionBase { - constructor() { - super() - this.type = 30 - } + constructor() { + super() + this.type = 30 + } - render(html) { - return html` - ${this._cancelInviteDialog1} -
- ${this._memberName} -
-
- ${this.theRecipient} -
- ${this._cancelInviteDialog2} - ` - } + render(html) { + return html` + ${this._cancelInviteDialog1} +
+ ${this._memberName} +
+
+ ${this.theRecipient} +
+ ${this._cancelInviteDialog2} + ` + } - set memberName(memberName) { - this._memberName = memberName - } + set memberName(memberName) { + this._memberName = memberName + } - set cancelInviteDialog1(cancelInviteDialog1) { - this._cancelInviteDialog1 = cancelInviteDialog1 - } + set cancelInviteDialog1(cancelInviteDialog1) { + this._cancelInviteDialog1 = cancelInviteDialog1 + } - set cancelInviteDialog2(cancelInviteDialog2) { - this._cancelInviteDialog2 = cancelInviteDialog2 - } + set cancelInviteDialog2(cancelInviteDialog2) { + this._cancelInviteDialog2 = cancelInviteDialog2 + } - set rGroupId(rGroupId) { - this._rGroupId = rGroupId; - this._rGroupIdBytes = this.constructor.utils.int32ToBytes(this._rGroupId) - } + set rGroupId(rGroupId) { + this._rGroupId = rGroupId + this._rGroupIdBytes = this.constructor.utils.int32ToBytes(this._rGroupId) + } - set recipient(recipient) { - this._recipient = recipient instanceof Uint8Array ? recipient : this.constructor.Base58.decode(recipient) - this.theRecipient = recipient - } + set recipient(recipient) { + this._recipient = recipient instanceof Uint8Array ? recipient : this.constructor.Base58.decode(recipient) + this.theRecipient = recipient + } - set fee(fee) { - this._fee = fee * QORT_DECIMALS - this._feeBytes = this.constructor.utils.int64ToBytes(this._fee) - } + set fee(fee) { + this._fee = fee * QORT_DECIMALS + this._feeBytes = this.constructor.utils.int64ToBytes(this._fee) + } - get params() { - const params = super.params - params.push( - this._rGroupIdBytes, - this._recipient, - this._feeBytes - ) - return params - } -} \ No newline at end of file + get params() { + const params = super.params + params.push( + this._rGroupIdBytes, + this._recipient, + this._feeBytes + ) + return params + } +} diff --git a/qortal-ui-crypto/api/transactions/groups/CreateGroupTransaction.js b/qortal-ui-crypto/api/transactions/groups/CreateGroupTransaction.js index 909b46bd..0b76ead0 100644 --- a/qortal-ui-crypto/api/transactions/groups/CreateGroupTransaction.js +++ b/qortal-ui-crypto/api/transactions/groups/CreateGroupTransaction.js @@ -1,98 +1,98 @@ -"use strict"; -import TransactionBase from "../TransactionBase.js" -import { QORT_DECIMALS } from "../../constants.js" +'use strict' +import TransactionBase from '../TransactionBase.js' +import { QORT_DECIMALS } from '../../constants.js' export default class CreateGroupTransaction extends TransactionBase { - constructor() { - super() - this.type = 22 - } + constructor() { + super() + this.type = 22 + } - render(html) { - return html` - ${this._groupdialog5} -
-
${this._groupdialog7}: ${this._rGroupName}
-
-
${this._groupdialog8}: ${this._rGroupDesc}
-
-
${this._groupdialog9}: ${this.myGroupType === 1 ? "Public" : "Private"}
-
- ${this._groupdialog6} - ` - } + render(html) { + return html` + ${this._groupdialog5} +
+
${this._groupdialog7}: ${this._rGroupName}
+
+
${this._groupdialog8}: ${this._rGroupDesc}
+
+
${this._groupdialog9}: ${this.myGroupType === 1 ? "Public" : "Private"}
+
+ ${this._groupdialog6} + ` + } - set groupdialog5(groupdialog5) { - this._groupdialog5 = groupdialog5 - } + set groupdialog5(groupdialog5) { + this._groupdialog5 = groupdialog5 + } - set groupdialog6(groupdialog6) { - this._groupdialog6 = groupdialog6 - } + set groupdialog6(groupdialog6) { + this._groupdialog6 = groupdialog6 + } - set groupdialog7(groupdialog7) { - this._groupdialog7 = groupdialog7 - } + set groupdialog7(groupdialog7) { + this._groupdialog7 = groupdialog7 + } - set groupdialog8(groupdialog8) { - this._groupdialog8 = groupdialog8 - } + set groupdialog8(groupdialog8) { + this._groupdialog8 = groupdialog8 + } - set groupdialog9(groupdialog9) { - this._groupdialog9 = groupdialog9 - } + set groupdialog9(groupdialog9) { + this._groupdialog9 = groupdialog9 + } - set fee(fee) { - this._fee = fee * QORT_DECIMALS - this._feeBytes = this.constructor.utils.int64ToBytes(this._fee) - } + set fee(fee) { + this._fee = fee * QORT_DECIMALS + this._feeBytes = this.constructor.utils.int64ToBytes(this._fee) + } - set rGroupName(rGroupName) { - this._rGroupName = rGroupName; - this._rGroupNameBytes = this.constructor.utils.stringtoUTF8Array(this._rGroupName.toLocaleLowerCase()) - this._rGroupNameLength = this.constructor.utils.int32ToBytes(this._rGroupNameBytes.length) - } + set rGroupName(rGroupName) { + this._rGroupName = rGroupName + this._rGroupNameBytes = this.constructor.utils.stringtoUTF8Array(this._rGroupName.toLocaleLowerCase()) + this._rGroupNameLength = this.constructor.utils.int32ToBytes(this._rGroupNameBytes.length) + } - set rGroupDesc(rGroupDesc) { - this._rGroupDesc = rGroupDesc; - this._rGroupDescBytes = this.constructor.utils.stringtoUTF8Array(this._rGroupDesc.toLocaleLowerCase()) - this._rGroupDescLength = this.constructor.utils.int32ToBytes(this._rGroupDescBytes.length) - } + set rGroupDesc(rGroupDesc) { + this._rGroupDesc = rGroupDesc + this._rGroupDescBytes = this.constructor.utils.stringtoUTF8Array(this._rGroupDesc.toLocaleLowerCase()) + this._rGroupDescLength = this.constructor.utils.int32ToBytes(this._rGroupDescBytes.length) + } - set rGroupType(rGroupType) { - this.myGroupType = rGroupType; - this._rGroupType = new Uint8Array(1) - this._rGroupType[0] = rGroupType; - } + set rGroupType(rGroupType) { + this.myGroupType = rGroupType + this._rGroupType = new Uint8Array(1) + this._rGroupType[0] = rGroupType + } - set rGroupApprovalThreshold(rGroupApprovalThreshold) { - this._rGroupApprovalThreshold = new Uint8Array(1) - this._rGroupApprovalThreshold[0] = rGroupApprovalThreshold; - } + set rGroupApprovalThreshold(rGroupApprovalThreshold) { + this._rGroupApprovalThreshold = new Uint8Array(1) + this._rGroupApprovalThreshold[0] = rGroupApprovalThreshold + } - set rGroupMinimumBlockDelay(rGroupMinimumBlockDelay) { - this._rGroupMinimumBlockDelay = rGroupMinimumBlockDelay; - this._rGroupMinimumBlockDelayBytes = this.constructor.utils.int32ToBytes(this._rGroupMinimumBlockDelay) - } + set rGroupMinimumBlockDelay(rGroupMinimumBlockDelay) { + this._rGroupMinimumBlockDelay = rGroupMinimumBlockDelay + this._rGroupMinimumBlockDelayBytes = this.constructor.utils.int32ToBytes(this._rGroupMinimumBlockDelay) + } - set rGroupMaximumBlockDelay(rGroupMaximumBlockDelay) { - this._rGroupMaximumBlockDelay = rGroupMaximumBlockDelay; - this._rGroupMaximumBlockDelayBytes = this.constructor.utils.int32ToBytes(this._rGroupMaximumBlockDelay) - } + set rGroupMaximumBlockDelay(rGroupMaximumBlockDelay) { + this._rGroupMaximumBlockDelay = rGroupMaximumBlockDelay + this._rGroupMaximumBlockDelayBytes = this.constructor.utils.int32ToBytes(this._rGroupMaximumBlockDelay) + } - get params() { - const params = super.params; - params.push( - this._rGroupNameLength, - this._rGroupNameBytes, - this._rGroupDescLength, - this._rGroupDescBytes, - this._rGroupType, - this._rGroupApprovalThreshold, - this._rGroupMinimumBlockDelayBytes, - this._rGroupMaximumBlockDelayBytes, - this._feeBytes - ) - return params; - } -} \ No newline at end of file + get params() { + const params = super.params + params.push( + this._rGroupNameLength, + this._rGroupNameBytes, + this._rGroupDescLength, + this._rGroupDescBytes, + this._rGroupType, + this._rGroupApprovalThreshold, + this._rGroupMinimumBlockDelayBytes, + this._rGroupMaximumBlockDelayBytes, + this._feeBytes + ) + return params + } +} diff --git a/qortal-ui-crypto/api/transactions/groups/GroupBanTransaction.js b/qortal-ui-crypto/api/transactions/groups/GroupBanTransaction.js index 2d6e2d9c..101cb364 100644 --- a/qortal-ui-crypto/api/transactions/groups/GroupBanTransaction.js +++ b/qortal-ui-crypto/api/transactions/groups/GroupBanTransaction.js @@ -1,67 +1,67 @@ -'use strict'; -import TransactionBase from "../TransactionBase.js" -import { QORT_DECIMALS } from "../../constants.js" +'use strict' +import TransactionBase from '../TransactionBase.js' +import { QORT_DECIMALS } from '../../constants.js' export default class GroupBanTransaction extends TransactionBase { - constructor() { - super() - this.type = 26 - } + constructor() { + super() + this.type = 26 + } - render(html) { - return html` - ${this._banMemberDialog1} -
- ${this.theRecipient} -
- ${this._banMemberDialog2} - ` - } + render(html) { + return html` + ${this._banMemberDialog1} +
+ ${this.theRecipient} +
+ ${this._banMemberDialog2} + ` + } - set banMemberDialog1(banMemberDialog1) { - this._banMemberDialog1= banMemberDialog1 - } + set banMemberDialog1(banMemberDialog1) { + this._banMemberDialog1 = banMemberDialog1 + } - set banMemberDialog2(banMemberDialog2) { - this._banMemberDialog2 = banMemberDialog2 - } + set banMemberDialog2(banMemberDialog2) { + this._banMemberDialog2 = banMemberDialog2 + } - set rGroupId(rGroupId) { - this._rGroupId = rGroupId; - this._rGroupIdBytes = this.constructor.utils.int32ToBytes(this._rGroupId) - } + set rGroupId(rGroupId) { + this._rGroupId = rGroupId + this._rGroupIdBytes = this.constructor.utils.int32ToBytes(this._rGroupId) + } - set rBanReason(rBanReason) { - this._rBanReason = rBanReason - this._rBanReasonBytes = this.constructor.utils.stringtoUTF8Array(this._rBanReason.toLocaleLowerCase()) - this._rBanReasonLength = this.constructor.utils.int32ToBytes(this._rBanReasonBytes.length) - } + set rBanReason(rBanReason) { + this._rBanReason = rBanReason + this._rBanReasonBytes = this.constructor.utils.stringtoUTF8Array(this._rBanReason.toLocaleLowerCase()) + this._rBanReasonLength = this.constructor.utils.int32ToBytes(this._rBanReasonBytes.length) + } - set rBanTime(rBanTime) { - this._rBanTime = rBanTime - this._rBanTimeBytes = this.constructor.utils.int32ToBytes(this._rBanTime) - } + set rBanTime(rBanTime) { + this._rBanTime = rBanTime + this._rBanTimeBytes = this.constructor.utils.int32ToBytes(this._rBanTime) + } - set recipient(recipient) { - this._recipient = recipient instanceof Uint8Array ? recipient : this.constructor.Base58.decode(recipient) - this.theRecipient = recipient - } + set recipient(recipient) { + this._recipient = recipient instanceof Uint8Array ? recipient : this.constructor.Base58.decode(recipient) + this.theRecipient = recipient + } - set fee(fee) { - this._fee = fee * QORT_DECIMALS - this._feeBytes = this.constructor.utils.int64ToBytes(this._fee) - } + set fee(fee) { + this._fee = fee * QORT_DECIMALS + this._feeBytes = this.constructor.utils.int64ToBytes(this._fee) + } - get params() { - const params = super.params - params.push( - this._rGroupIdBytes, - this._recipient, - this._rBanReasonLength, - this._rBanReasonBytes, - this._rBanTimeBytes, - this._feeBytes - ) - return params - } -} \ No newline at end of file + get params() { + const params = super.params + params.push( + this._rGroupIdBytes, + this._recipient, + this._rBanReasonLength, + this._rBanReasonBytes, + this._rBanTimeBytes, + this._feeBytes + ) + return params + } +} diff --git a/qortal-ui-crypto/api/transactions/groups/GroupInviteTransaction.js b/qortal-ui-crypto/api/transactions/groups/GroupInviteTransaction.js index 123ab820..62a89633 100644 --- a/qortal-ui-crypto/api/transactions/groups/GroupInviteTransaction.js +++ b/qortal-ui-crypto/api/transactions/groups/GroupInviteTransaction.js @@ -1,59 +1,59 @@ -'use strict'; -import TransactionBase from "../TransactionBase.js" -import { QORT_DECIMALS } from "../../constants.js" +'use strict' +import TransactionBase from '../TransactionBase.js' +import { QORT_DECIMALS } from '../../constants.js' export default class GroupInviteTransaction extends TransactionBase { - constructor() { - super() - this.type = 29 - } + constructor() { + super() + this.type = 29 + } - render(html) { - return html` - ${this._inviteMemberDialog1} -
- ${this.theRecipient} -
- ${this._inviteMemberDialog2} - ` - } + render(html) { + return html` + ${this._inviteMemberDialog1} +
+ ${this.theRecipient} +
+ ${this._inviteMemberDialog2} + ` + } - set inviteMemberDialog1(inviteMemberDialog1) { - this._inviteMemberDialog1= inviteMemberDialog1 - } + set inviteMemberDialog1(inviteMemberDialog1) { + this._inviteMemberDialog1 = inviteMemberDialog1 + } - set inviteMemberDialog2(inviteMemberDialog2) { - this._inviteMemberDialog2 = inviteMemberDialog2 - } + set inviteMemberDialog2(inviteMemberDialog2) { + this._inviteMemberDialog2 = inviteMemberDialog2 + } - set rGroupId(rGroupId) { - this._rGroupId = rGroupId; - this._rGroupIdBytes = this.constructor.utils.int32ToBytes(this._rGroupId) - } + set rGroupId(rGroupId) { + this._rGroupId = rGroupId + this._rGroupIdBytes = this.constructor.utils.int32ToBytes(this._rGroupId) + } - set rInviteTime(rInviteTime) { - this._rInviteTime = rInviteTime - this._rInviteTimeBytes = this.constructor.utils.int32ToBytes(this._rInviteTime) - } + set rInviteTime(rInviteTime) { + this._rInviteTime = rInviteTime + this._rInviteTimeBytes = this.constructor.utils.int32ToBytes(this._rInviteTime) + } - set recipient(recipient) { - this._recipient = recipient instanceof Uint8Array ? recipient : this.constructor.Base58.decode(recipient) - this.theRecipient = recipient - } + set recipient(recipient) { + this._recipient = recipient instanceof Uint8Array ? recipient : this.constructor.Base58.decode(recipient) + this.theRecipient = recipient + } - set fee(fee) { - this._fee = fee * QORT_DECIMALS - this._feeBytes = this.constructor.utils.int64ToBytes(this._fee) - } + set fee(fee) { + this._fee = fee * QORT_DECIMALS + this._feeBytes = this.constructor.utils.int64ToBytes(this._fee) + } - get params() { - const params = super.params - params.push( - this._rGroupIdBytes, - this._recipient, - this._rInviteTimeBytes, - this._feeBytes - ) - return params - } -} \ No newline at end of file + get params() { + const params = super.params + params.push( + this._rGroupIdBytes, + this._recipient, + this._rInviteTimeBytes, + this._feeBytes + ) + return params + } +} diff --git a/qortal-ui-crypto/api/transactions/groups/GroupKickTransaction.js b/qortal-ui-crypto/api/transactions/groups/GroupKickTransaction.js index 12e6d276..4a2af2c2 100644 --- a/qortal-ui-crypto/api/transactions/groups/GroupKickTransaction.js +++ b/qortal-ui-crypto/api/transactions/groups/GroupKickTransaction.js @@ -1,61 +1,61 @@ -'use strict'; -import TransactionBase from "../TransactionBase.js" -import { QORT_DECIMALS } from "../../constants.js" +'use strict' +import TransactionBase from '../TransactionBase.js' +import { QORT_DECIMALS } from '../../constants.js' export default class GroupKickTransaction extends TransactionBase { - constructor() { - super() - this.type = 28 - } + constructor() { + super() + this.type = 28 + } - render(html) { - return html` - ${this._kickMemberDialog1} -
- ${this.theRecipient} -
- ${this._kickMemberDialog2} - ` - } + render(html) { + return html` + ${this._kickMemberDialog1} +
+ ${this.theRecipient} +
+ ${this._kickMemberDialog2} + ` + } - set kickMemberDialog1(kickMemberDialog1) { - this._kickMemberDialog1= kickMemberDialog1 - } + set kickMemberDialog1(kickMemberDialog1) { + this._kickMemberDialog1 = kickMemberDialog1 + } - set kickMemberDialog2(kickMemberDialog2) { - this._kickMemberDialog2 = kickMemberDialog2 - } + set kickMemberDialog2(kickMemberDialog2) { + this._kickMemberDialog2 = kickMemberDialog2 + } - set rGroupId(rGroupId) { - this._rGroupId = rGroupId; - this._rGroupIdBytes = this.constructor.utils.int32ToBytes(this._rGroupId) - } + set rGroupId(rGroupId) { + this._rGroupId = rGroupId + this._rGroupIdBytes = this.constructor.utils.int32ToBytes(this._rGroupId) + } - set rBanReason(rBanReason) { - this._rBanReason = rBanReason - this._rBanReasonBytes = this.constructor.utils.stringtoUTF8Array(this._rBanReason.toLocaleLowerCase()) - this._rBanReasonLength = this.constructor.utils.int32ToBytes(this._rBanReasonBytes.length) - } + set rBanReason(rBanReason) { + this._rBanReason = rBanReason + this._rBanReasonBytes = this.constructor.utils.stringtoUTF8Array(this._rBanReason.toLocaleLowerCase()) + this._rBanReasonLength = this.constructor.utils.int32ToBytes(this._rBanReasonBytes.length) + } - set recipient(recipient) { - this._recipient = recipient instanceof Uint8Array ? recipient : this.constructor.Base58.decode(recipient) - this.theRecipient = recipient - } + set recipient(recipient) { + this._recipient = recipient instanceof Uint8Array ? recipient : this.constructor.Base58.decode(recipient) + this.theRecipient = recipient + } - set fee(fee) { - this._fee = fee * QORT_DECIMALS - this._feeBytes = this.constructor.utils.int64ToBytes(this._fee) - } + set fee(fee) { + this._fee = fee * QORT_DECIMALS + this._feeBytes = this.constructor.utils.int64ToBytes(this._fee) + } - get params() { - const params = super.params - params.push( - this._rGroupIdBytes, - this._recipient, - this._rBanReasonLength, - this._rBanReasonBytes, - this._feeBytes - ) - return params - } -} \ No newline at end of file + get params() { + const params = super.params + params.push( + this._rGroupIdBytes, + this._recipient, + this._rBanReasonLength, + this._rBanReasonBytes, + this._feeBytes + ) + return params + } +} diff --git a/qortal-ui-crypto/api/transactions/groups/JoinGroupTransaction.js b/qortal-ui-crypto/api/transactions/groups/JoinGroupTransaction.js index 126730ff..57a42bb5 100644 --- a/qortal-ui-crypto/api/transactions/groups/JoinGroupTransaction.js +++ b/qortal-ui-crypto/api/transactions/groups/JoinGroupTransaction.js @@ -1,63 +1,55 @@ -"use strict"; -import TransactionBase from "../TransactionBase.js" -import { QORT_DECIMALS } from "../../constants.js" +'use strict' +import TransactionBase from '../TransactionBase.js' +import { QORT_DECIMALS } from '../../constants.js' export default class JoinGroupTransaction extends TransactionBase { - constructor() { - super() - this.type = 31 - this.tests.push( - () => { - if (!(this._registrantAddress instanceof Uint8Array && this._registrantAddress.length == 25)) { - return "Invalid Registrant " + Base58.encode(this._registrantAddress) - } - return true - } - ) - } + constructor() { + super() + this.type = 31 + } - render(html) { - return html` - ${this._groupdialog1} -
- ${this._rGroupName} -
- ${this._groupdialog2} - ` - } + render(html) { + return html` + ${this._groupdialog1} +
+ ${this._rGroupName} +
+ ${this._groupdialog2} + ` + } - set groupdialog1(groupdialog1) { - this._groupdialog1 = groupdialog1 - } + set groupdialog1(groupdialog1) { + this._groupdialog1 = groupdialog1 + } - set groupdialog2(groupdialog2) { - this._groupdialog2 = groupdialog2 - } + set groupdialog2(groupdialog2) { + this._groupdialog2 = groupdialog2 + } - set fee(fee) { - this._fee = fee * QORT_DECIMALS - this._feeBytes = this.constructor.utils.int64ToBytes(this._fee) - } + set fee(fee) { + this._fee = fee * QORT_DECIMALS + this._feeBytes = this.constructor.utils.int64ToBytes(this._fee) + } - set registrantAddress(registrantAddress) {// Always Base58 encoded. Accepts Uint8Array or Base58 string. - this._registrantAddress = registrantAddress instanceof Uint8Array ? registrantAddress : this.constructor.Base58.decode(registrantAddress); - } + set registrantAddress(registrantAddress) { + this._registrantAddress = registrantAddress instanceof Uint8Array ? registrantAddress : this.constructor.Base58.decode(registrantAddress) + } - set rGroupId(rGroupId) { - this._rGroupId = rGroupId; - this._rGroupIdBytes = this.constructor.utils.int32ToBytes(this._rGroupId) - } + set rGroupId(rGroupId) { + this._rGroupId = rGroupId + this._rGroupIdBytes = this.constructor.utils.int32ToBytes(this._rGroupId) + } - set rGroupName(rGroupName) { - this._rGroupName = rGroupName; - } + set rGroupName(rGroupName) { + this._rGroupName = rGroupName + } - get params() { - const params = super.params; - params.push( - this._rGroupIdBytes, - this._feeBytes - ) - return params; - } -} \ No newline at end of file + get params() { + const params = super.params + params.push( + this._rGroupIdBytes, + this._feeBytes + ) + return params + } +} diff --git a/qortal-ui-crypto/api/transactions/groups/LeaveGroupTransaction.js b/qortal-ui-crypto/api/transactions/groups/LeaveGroupTransaction.js index 0a3939f0..988d768c 100644 --- a/qortal-ui-crypto/api/transactions/groups/LeaveGroupTransaction.js +++ b/qortal-ui-crypto/api/transactions/groups/LeaveGroupTransaction.js @@ -1,63 +1,55 @@ -"use strict"; -import TransactionBase from "../TransactionBase.js" -import { QORT_DECIMALS } from "../../constants.js" +'use strict' +import TransactionBase from '../TransactionBase.js' +import { QORT_DECIMALS } from '../../constants.js' export default class LeaveGroupTransaction extends TransactionBase { - constructor() { - super() - this.type = 32 - this.tests.push( - () => { - if (!(this._registrantAddress instanceof Uint8Array && this._registrantAddress.length == 25)) { - return "Invalid Registrant " + Base58.encode(this._registrantAddress) - } - return true - } - ) - } + constructor() { + super() + this.type = 32 + } - render(html) { - return html` - ${this._groupdialog3} -
- ${this._rGroupName} -
- ${this._groupdialog4} - ` - } + render(html) { + return html` + ${this._groupdialog3} +
+ ${this._rGroupName} +
+ ${this._groupdialog4} + ` + } - set groupdialog3(groupdialog3) { - this._groupdialog3 = groupdialog3 - } + set groupdialog3(groupdialog3) { + this._groupdialog3 = groupdialog3 + } - set groupdialog4(groupdialog4) { - this._groupdialog4 = groupdialog4 - } + set groupdialog4(groupdialog4) { + this._groupdialog4 = groupdialog4 + } - set fee(fee) { - this._fee = fee * QORT_DECIMALS - this._feeBytes = this.constructor.utils.int64ToBytes(this._fee) - } + set fee(fee) { + this._fee = fee * QORT_DECIMALS + this._feeBytes = this.constructor.utils.int64ToBytes(this._fee) + } - set registrantAddress(registrantAddress) {// Always Base58 encoded. Accepts Uint8Array or Base58 string. - this._registrantAddress = registrantAddress instanceof Uint8Array ? registrantAddress : this.constructor.Base58.decode(registrantAddress); - } + set registrantAddress(registrantAddress) { + this._registrantAddress = registrantAddress instanceof Uint8Array ? registrantAddress : this.constructor.Base58.decode(registrantAddress) + } - set rGroupId(rGroupId) { - this._rGroupId = rGroupId; - this._rGroupIdBytes = this.constructor.utils.int32ToBytes(this._rGroupId) - } + set rGroupId(rGroupId) { + this._rGroupId = rGroupId + this._rGroupIdBytes = this.constructor.utils.int32ToBytes(this._rGroupId) + } - set rGroupName(rGroupName) { - this._rGroupName = rGroupName; - } + set rGroupName(rGroupName) { + this._rGroupName = rGroupName + } - get params() { - const params = super.params; - params.push( - this._rGroupIdBytes, - this._feeBytes - ) - return params; - } + get params() { + const params = super.params + params.push( + this._rGroupIdBytes, + this._feeBytes + ) + return params + } } diff --git a/qortal-ui-crypto/api/transactions/groups/RemoveGroupAdminTransaction.js b/qortal-ui-crypto/api/transactions/groups/RemoveGroupAdminTransaction.js index 502c6166..05af0da9 100644 --- a/qortal-ui-crypto/api/transactions/groups/RemoveGroupAdminTransaction.js +++ b/qortal-ui-crypto/api/transactions/groups/RemoveGroupAdminTransaction.js @@ -1,53 +1,53 @@ -'use strict'; -import TransactionBase from "../TransactionBase.js" -import { QORT_DECIMALS } from "../../constants.js" +'use strict' +import TransactionBase from '../TransactionBase.js' +import { QORT_DECIMALS } from '../../constants.js' export default class RemoveGroupAdminTransaction extends TransactionBase { - constructor() { - super() - this.type = 25 - } + constructor() { + super() + this.type = 25 + } - render(html) { - return html` - ${this._kickAdminDialog1} -
- ${this.theRecipient} -
- ${this._kickAdminDialog2} - ` - } + render(html) { + return html` + ${this._kickAdminDialog1} +
+ ${this.theRecipient} +
+ ${this._kickAdminDialog2} + ` + } - set kickAdminDialog1(kickAdminDialog1) { - this._kickAdminDialog1 = kickAdminDialog1 - } + set kickAdminDialog1(kickAdminDialog1) { + this._kickAdminDialog1 = kickAdminDialog1 + } - set kickAdminDialog2(kickAdminDialog2) { - this._kickAdminDialog2 = kickAdminDialog2 - } + set kickAdminDialog2(kickAdminDialog2) { + this._kickAdminDialog2 = kickAdminDialog2 + } - set rGroupId(rGroupId) { - this._rGroupId = rGroupId; - this._rGroupIdBytes = this.constructor.utils.int32ToBytes(this._rGroupId) - } + set rGroupId(rGroupId) { + this._rGroupId = rGroupId + this._rGroupIdBytes = this.constructor.utils.int32ToBytes(this._rGroupId) + } - set recipient(recipient) { - this._recipient = recipient instanceof Uint8Array ? recipient : this.constructor.Base58.decode(recipient) - this.theRecipient = recipient - } + set recipient(recipient) { + this._recipient = recipient instanceof Uint8Array ? recipient : this.constructor.Base58.decode(recipient) + this.theRecipient = recipient + } - set fee(fee) { - this._fee = fee * QORT_DECIMALS - this._feeBytes = this.constructor.utils.int64ToBytes(this._fee) - } + set fee(fee) { + this._fee = fee * QORT_DECIMALS + this._feeBytes = this.constructor.utils.int64ToBytes(this._fee) + } - get params() { - const params = super.params - params.push( - this._rGroupIdBytes, - this._recipient, - this._feeBytes - ) - return params - } -} \ No newline at end of file + get params() { + const params = super.params + params.push( + this._rGroupIdBytes, + this._recipient, + this._feeBytes + ) + return params + } +} diff --git a/qortal-ui-crypto/api/transactions/names/BuyNameTransacion.js b/qortal-ui-crypto/api/transactions/names/BuyNameTransacion.js index 36aa7d60..48671a2a 100644 --- a/qortal-ui-crypto/api/transactions/names/BuyNameTransacion.js +++ b/qortal-ui-crypto/api/transactions/names/BuyNameTransacion.js @@ -1,70 +1,70 @@ -'use strict'; +'use strict' import TransactionBase from '../TransactionBase.js' import { QORT_DECIMALS } from '../../constants.js' export default class BuyNameTransacion extends TransactionBase { - constructor() { - super() - this.type = 7 - } + constructor() { + super() + this.type = 7 + } - render(html) { - return html` - ${this._buyNameDialog1} -
- ${this.nameText} -
- ${this._buyNameDialog2} -
- ${this.showSellPrice} -
- ${this._buyNameDialog3} - ` - } + render(html) { + return html` + ${this._buyNameDialog1} +
+ ${this.nameText} +
+ ${this._buyNameDialog2} +
+ ${this.showSellPrice} +
+ ${this._buyNameDialog3} + ` + } - set buyNameDialog1(buyNameDialog1) { - this._buyNameDialog1 = buyNameDialog1 - } + set buyNameDialog1(buyNameDialog1) { + this._buyNameDialog1 = buyNameDialog1 + } - set buyNameDialog2(buyNameDialog2) { - this._buyNameDialog2 = buyNameDialog2 - } + set buyNameDialog2(buyNameDialog2) { + this._buyNameDialog2 = buyNameDialog2 + } - set buyNameDialog3(buyNameDialog3) { - this._buyNameDialog3 = buyNameDialog3 - } + set buyNameDialog3(buyNameDialog3) { + this._buyNameDialog3 = buyNameDialog3 + } - set fee(fee) { - this._fee = fee * QORT_DECIMALS - this._feeBytes = this.constructor.utils.int64ToBytes(this._fee) - } + set fee(fee) { + this._fee = fee * QORT_DECIMALS + this._feeBytes = this.constructor.utils.int64ToBytes(this._fee) + } - set name(name) { - this.nameText = name - this._nameBytes = this.constructor.utils.stringtoUTF8Array(name) - this._nameLength = this.constructor.utils.int32ToBytes(this._nameBytes.length) - } + set name(name) { + this.nameText = name + this._nameBytes = this.constructor.utils.stringtoUTF8Array(name) + this._nameLength = this.constructor.utils.int32ToBytes(this._nameBytes.length) + } - set sellPrice(sellPrice) { - this.showSellPrice = sellPrice - this._sellPrice = sellPrice * QORT_DECIMALS - this._sellPriceBytes = this.constructor.utils.int64ToBytes(this._sellPrice) - } + set sellPrice(sellPrice) { + this.showSellPrice = sellPrice + this._sellPrice = sellPrice * QORT_DECIMALS + this._sellPriceBytes = this.constructor.utils.int64ToBytes(this._sellPrice) + } - set recipient(recipient) { - this._recipient = recipient instanceof Uint8Array ? recipient : this.constructor.Base58.decode(recipient) - this.theRecipient = recipient - } + set recipient(recipient) { + this._recipient = recipient instanceof Uint8Array ? recipient : this.constructor.Base58.decode(recipient) + this.theRecipient = recipient + } - get params() { - const params = super.params - params.push( - this._nameLength, - this._nameBytes, - this._sellPriceBytes, - this._recipient, - this._feeBytes - ) - return params - } -} \ No newline at end of file + get params() { + const params = super.params + params.push( + this._nameLength, + this._nameBytes, + this._sellPriceBytes, + this._recipient, + this._feeBytes + ) + return params + } +} diff --git a/qortal-ui-crypto/api/transactions/names/CancelSellNameTransacion.js b/qortal-ui-crypto/api/transactions/names/CancelSellNameTransacion.js index bc5a69b3..da8f98bb 100644 --- a/qortal-ui-crypto/api/transactions/names/CancelSellNameTransacion.js +++ b/qortal-ui-crypto/api/transactions/names/CancelSellNameTransacion.js @@ -1,49 +1,49 @@ -'use strict'; +'use strict' import TransactionBase from '../TransactionBase.js' import { QORT_DECIMALS } from '../../constants.js' export default class CancelSellNameTransacion extends TransactionBase { - constructor() { - super() - this.type = 6 - } + constructor() { + super() + this.type = 6 + } - render(html) { - return html` - ${this._cancelSellNameDialog1} -
- ${this.nameText} -
- ${this._cancelSellNameDialog2} - ` - } + render(html) { + return html` + ${this._cancelSellNameDialog1} +
+ ${this.nameText} +
+ ${this._cancelSellNameDialog2} + ` + } - set cancelSellNameDialog1(cancelSellNameDialog1) { - this._cancelSellNameDialog1 = cancelSellNameDialog1 - } + set cancelSellNameDialog1(cancelSellNameDialog1) { + this._cancelSellNameDialog1 = cancelSellNameDialog1 + } - set cancelSellNameDialog2(cancelSellNameDialog2) { - this._cancelSellNameDialog2 = cancelSellNameDialog2 - } + set cancelSellNameDialog2(cancelSellNameDialog2) { + this._cancelSellNameDialog2 = cancelSellNameDialog2 + } - set fee(fee) { - this._fee = fee * QORT_DECIMALS - this._feeBytes = this.constructor.utils.int64ToBytes(this._fee) - } + set fee(fee) { + this._fee = fee * QORT_DECIMALS + this._feeBytes = this.constructor.utils.int64ToBytes(this._fee) + } - set name(name) { - this.nameText = name - this._nameBytes = this.constructor.utils.stringtoUTF8Array(name) - this._nameLength = this.constructor.utils.int32ToBytes(this._nameBytes.length) - } + set name(name) { + this.nameText = name + this._nameBytes = this.constructor.utils.stringtoUTF8Array(name) + this._nameLength = this.constructor.utils.int32ToBytes(this._nameBytes.length) + } - get params() { - const params = super.params - params.push( - this._nameLength, - this._nameBytes, - this._feeBytes - ) - return params - } -} \ No newline at end of file + get params() { + const params = super.params + params.push( + this._nameLength, + this._nameBytes, + this._feeBytes + ) + return params + } +} diff --git a/qortal-ui-crypto/api/transactions/names/RegisterNameTransaction.js b/qortal-ui-crypto/api/transactions/names/RegisterNameTransaction.js index dac9f69e..6076e7c3 100644 --- a/qortal-ui-crypto/api/transactions/names/RegisterNameTransaction.js +++ b/qortal-ui-crypto/api/transactions/names/RegisterNameTransaction.js @@ -1,57 +1,57 @@ -"use strict"; -import TransactionBase from "../TransactionBase.js" -import { QORT_DECIMALS } from "../../constants.js" +'use strict' +import TransactionBase from '../TransactionBase.js' +import { QORT_DECIMALS } from '../../constants.js' export default class RegisterNameTransaction extends TransactionBase { - constructor() { - super() - this.type = 3 - } + constructor() { + super() + this.type = 3 + } - render(html) { - return html` - ${this._dialogyou} -
- ${this.nameText} -
- ${this._dialogonpress} - ` - } + render(html) { + return html` + ${this._dialogyou} +
+ ${this.nameText} +
+ ${this._dialogonpress} + ` + } - set dialogyou(dialogyou) { - this._dialogyou = dialogyou - } + set dialogyou(dialogyou) { + this._dialogyou = dialogyou + } - set dialogonpress(dialogonpress) { - this._dialogonpress = dialogonpress - } + set dialogonpress(dialogonpress) { + this._dialogonpress = dialogonpress + } - set fee(fee) { - this._fee = fee * QORT_DECIMALS - this._feeBytes = this.constructor.utils.int64ToBytes(this._fee) - } + set fee(fee) { + this._fee = fee * QORT_DECIMALS + this._feeBytes = this.constructor.utils.int64ToBytes(this._fee) + } - set name(name) { - this.nameText = name; - this._nameBytes = this.constructor.utils.stringtoUTF8Array(name) - this._nameLength = this.constructor.utils.int32ToBytes(this._nameBytes.length) - } + set name(name) { + this.nameText = name + this._nameBytes = this.constructor.utils.stringtoUTF8Array(name) + this._nameLength = this.constructor.utils.int32ToBytes(this._nameBytes.length) + } - set value(value) { - this.valueText = value.length === 0 ? "Registered Name on the Qortal Chain" : value; - this._valueBytes = this.constructor.utils.stringtoUTF8Array(this.valueText) - this._valueLength = this.constructor.utils.int32ToBytes(this._valueBytes.length) - } + set value(value) { + this.valueText = value.length === 0 ? "Registered Name on the Qortal Chain" : value + this._valueBytes = this.constructor.utils.stringtoUTF8Array(this.valueText) + this._valueLength = this.constructor.utils.int32ToBytes(this._valueBytes.length) + } - get params() { - const params = super.params; - params.push( - this._nameLength, - this._nameBytes, - this._valueLength, - this._valueBytes, - this._feeBytes - ) - return params; - } + get params() { + const params = super.params + params.push( + this._nameLength, + this._nameBytes, + this._valueLength, + this._valueBytes, + this._feeBytes + ) + return params + } } diff --git a/qortal-ui-crypto/api/transactions/names/SellNameTransacion.js b/qortal-ui-crypto/api/transactions/names/SellNameTransacion.js index aeb8b72e..8659edf7 100644 --- a/qortal-ui-crypto/api/transactions/names/SellNameTransacion.js +++ b/qortal-ui-crypto/api/transactions/names/SellNameTransacion.js @@ -1,64 +1,64 @@ -'use strict'; +'use strict' import TransactionBase from '../TransactionBase.js' import { QORT_DECIMALS } from '../../constants.js' export default class SellNameTransacion extends TransactionBase { - constructor() { - super() - this.type = 5 - } + constructor() { + super() + this.type = 5 + } - render(html) { - return html` - ${this._sellNameDialog1} -
- ${this.nameText} -
- ${this._sellNameDialog2} -
- ${this.showSellPrice} -
- ${this._sellNameDialog3} - ` - } + render(html) { + return html` + ${this._sellNameDialog1} +
+ ${this.nameText} +
+ ${this._sellNameDialog2} +
+ ${this.showSellPrice} +
+ ${this._sellNameDialog3} + ` + } - set sellNameDialog1(sellNameDialog1) { - this._sellNameDialog1 = sellNameDialog1 - } + set sellNameDialog1(sellNameDialog1) { + this._sellNameDialog1 = sellNameDialog1 + } - set sellNameDialog2(sellNameDialog2) { - this._sellNameDialog2 = sellNameDialog2 - } + set sellNameDialog2(sellNameDialog2) { + this._sellNameDialog2 = sellNameDialog2 + } - set sellNameDialog3(sellNameDialog3) { - this._sellNameDialog3 = sellNameDialog3 - } + set sellNameDialog3(sellNameDialog3) { + this._sellNameDialog3 = sellNameDialog3 + } - set fee(fee) { - this._fee = fee * QORT_DECIMALS - this._feeBytes = this.constructor.utils.int64ToBytes(this._fee) - } + set fee(fee) { + this._fee = fee * QORT_DECIMALS + this._feeBytes = this.constructor.utils.int64ToBytes(this._fee) + } - set name(name) { - this.nameText = name - this._nameBytes = this.constructor.utils.stringtoUTF8Array(name) - this._nameLength = this.constructor.utils.int32ToBytes(this._nameBytes.length) - } + set name(name) { + this.nameText = name + this._nameBytes = this.constructor.utils.stringtoUTF8Array(name) + this._nameLength = this.constructor.utils.int32ToBytes(this._nameBytes.length) + } - set sellPrice(sellPrice) { - this.showSellPrice = sellPrice - this._sellPrice = sellPrice * QORT_DECIMALS - this._sellPriceBytes = this.constructor.utils.int64ToBytes(this._sellPrice) - } + set sellPrice(sellPrice) { + this.showSellPrice = sellPrice + this._sellPrice = sellPrice * QORT_DECIMALS + this._sellPriceBytes = this.constructor.utils.int64ToBytes(this._sellPrice) + } - get params() { - const params = super.params - params.push( - this._nameLength, - this._nameBytes, - this._sellPriceBytes, - this._feeBytes - ) - return params - } -} \ No newline at end of file + get params() { + const params = super.params + params.push( + this._nameLength, + this._nameBytes, + this._sellPriceBytes, + this._feeBytes + ) + return params + } +} diff --git a/qortal-ui-crypto/api/transactions/registerName_dnsthing.js b/qortal-ui-crypto/api/transactions/registerName_dnsthing.js index 08e7713c..06210cc4 100644 --- a/qortal-ui-crypto/api/transactions/registerName_dnsthing.js +++ b/qortal-ui-crypto/api/transactions/registerName_dnsthing.js @@ -1,39 +1,36 @@ -"use strict"; -/* - TO DO -*/ -(function(){ - function generateSignatureRegisterNameTransaction(keyPair, lastReference, owner, name, value, fee, timestamp) => { - const data = generateRegisterNameTransactionBase(keyPair.publicKey, lastReference, owner, name, value, fee, timestamp); - return nacl.sign.detached(data, keyPair.privateKey); - } +'use strict' - function generateRegisterNameTransaction(keyPair, lastReference, owner, name, value, fee, timestamp, signature) => { - return appendBuffer( generateRegisterNameTransactionBase(keyPair.publicKey, lastReference, owner, name, value, fee, timestamp), - signature ); - } + (function () { + function generateSignatureRegisterNameTransaction(keyPair, lastReference, owner, name, value, fee, timestamp) => { + const data = generateRegisterNameTransactionBase(keyPair.publicKey, lastReference, owner, name, value, fee, timestamp) + return nacl.sign.detached(data, keyPair.privateKey) + } - function generateRegisterNameTransactionBase(publicKey, lastReference, owner, name, value, fee, timestamp) => { - const txType = TYPES.REGISTER_NAME_TRANSACTION; - const typeBytes = int32ToBytes(txType); - const timestampBytes = int64ToBytes(timestamp); - const feeBytes = int64ToBytes(fee * 100000000); - const nameSizeBytes = int32ToBytes(name.length); - const valueSizeBytes = int32ToBytes(value.length); + function generateRegisterNameTransaction(keyPair, lastReference, owner, name, value, fee, timestamp, signature) => { + return appendBuffer(generateRegisterNameTransactionBase(keyPair.publicKey, lastReference, owner, name, value, fee, timestamp), signature) + } - let data = new Uint8Array(); + function generateRegisterNameTransactionBase(publicKey, lastReference, owner, name, value, fee, timestamp) => { + const txType = TYPES.REGISTER_NAME_TRANSACTION + const typeBytes = int32ToBytes(txType) + const timestampBytes = int64ToBytes(timestamp) + const feeBytes = int64ToBytes(fee * 100000000) + const nameSizeBytes = int32ToBytes(name.length) + const valueSizeBytes = int32ToBytes(value.length) - data = appendBuffer(data, typeBytes); - data = appendBuffer(data, timestampBytes); - data = appendBuffer(data, lastReference); - data = appendBuffer(data, publicKey); - data = appendBuffer(data, owner); - data = appendBuffer(data, nameSizeBytes); - data = appendBuffer(data, name); - data = appendBuffer(data, valueSizeBytes); - data = appendBuffer(data, value); - data = appendBuffer(data, feeBytes); + let data = new Uint8Array() - return data; - } -}()) \ No newline at end of file + data = appendBuffer(data, typeBytes) + data = appendBuffer(data, timestampBytes) + data = appendBuffer(data, lastReference) + data = appendBuffer(data, publicKey) + data = appendBuffer(data, owner) + data = appendBuffer(data, nameSizeBytes) + data = appendBuffer(data, name) + data = appendBuffer(data, valueSizeBytes) + data = appendBuffer(data, value) + data = appendBuffer(data, feeBytes) + + return data + } + }()) diff --git a/qortal-ui-crypto/api/transactions/reward-share/RemoveRewardShareTransaction.js b/qortal-ui-crypto/api/transactions/reward-share/RemoveRewardShareTransaction.js index d8ca9480..5610830e 100644 --- a/qortal-ui-crypto/api/transactions/reward-share/RemoveRewardShareTransaction.js +++ b/qortal-ui-crypto/api/transactions/reward-share/RemoveRewardShareTransaction.js @@ -1,55 +1,55 @@ -"use strict"; -import TransactionBase from "../TransactionBase.js" +'use strict' +import TransactionBase from '../TransactionBase.js' import publicKeyToAddress from '../../wallet/publicKeyToAddress.js' -import { Base58 } from "../../deps/deps.js"; +import { Base58 } from '../../deps/deps.js' export default class RemoveRewardShareTransaction extends TransactionBase { - constructor() { - super() - this.type = 38 - } + constructor() { + super() + this.type = 38 + } - render(html) { - return html` - ${this._rewarddialog5} -
- ${this.constructor.Base58.encode(this._recipient)} -
- ${this._rewarddialog6} - ` - } + render(html) { + return html` + ${this._rewarddialog5} +
+ ${this.constructor.Base58.encode(this._recipient)} +
+ ${this._rewarddialog6} + ` + } - set rewarddialog5(rewarddialog5) { - this._rewarddialog5 = rewarddialog5; - } + set rewarddialog5(rewarddialog5) { + this._rewarddialog5 = rewarddialog5 + } - set rewarddialog6(rewarddialog6) { - this._rewarddialog6 = rewarddialog6; - } + set rewarddialog6(rewarddialog6) { + this._rewarddialog6 = rewarddialog6 + } - set rewardShareKeyPairPublicKey(rewardShareKeyPairPublicKey) { - this._rewardShareKeyPairPublicKey = Base58.decode(rewardShareKeyPairPublicKey) - } + set rewardShareKeyPairPublicKey(rewardShareKeyPairPublicKey) { + this._rewardShareKeyPairPublicKey = Base58.decode(rewardShareKeyPairPublicKey) + } - set recipient(recipient) { - const _address = publicKeyToAddress(this._keyPair.publicKey) - this._recipient = recipient instanceof Uint8Array ? recipient : this.constructor.Base58.decode(recipient) - this.fee = _address === recipient ? 0 : 0.001 - } + set recipient(recipient) { + const _address = publicKeyToAddress(this._keyPair.publicKey) + this._recipient = recipient instanceof Uint8Array ? recipient : this.constructor.Base58.decode(recipient) + this.fee = _address === recipient ? 0 : 0.001 + } - set percentageShare(share) { - this._percentageShare = share * 100 - this._percentageShareBytes = this.constructor.utils.int64ToBytes(this._percentageShare) - } + set percentageShare(share) { + this._percentageShare = share * 100 + this._percentageShareBytes = this.constructor.utils.int64ToBytes(this._percentageShare) + } - get params() { - const params = super.params - params.push( - this._recipient, - this._rewardShareKeyPairPublicKey, - this._percentageShareBytes, - this._feeBytes - ) - return params; - } + get params() { + const params = super.params + params.push( + this._recipient, + this._rewardShareKeyPairPublicKey, + this._percentageShareBytes, + this._feeBytes + ) + return params + } } diff --git a/qortal-ui-crypto/api/transactions/reward-share/RewardShareTransaction.js b/qortal-ui-crypto/api/transactions/reward-share/RewardShareTransaction.js index cc67356a..939552f9 100644 --- a/qortal-ui-crypto/api/transactions/reward-share/RewardShareTransaction.js +++ b/qortal-ui-crypto/api/transactions/reward-share/RewardShareTransaction.js @@ -1,4 +1,4 @@ -"use strict"; +'use strict' import publicKeyToAddress from '../../wallet/publicKeyToAddress.js' import TransactionBase from "../TransactionBase.js" import nacl from '../../deps/nacl-fast.js' @@ -6,74 +6,73 @@ import ed2curve from '../../deps/ed2curve.js' import { Sha256 } from 'asmcrypto.js' export default class RewardShareTransaction extends TransactionBase { - constructor() { - super() - this.type = 38 - } + constructor() { + super() + this.type = 38 + } - render(html) { - return html` - ${this._rewarddialog1} ${this._percentageShare / 1e8}% ${this._rewarddialog2} ${this.constructor.Base58.encode(this._recipient)}? - ${this._rewarddialog3} -
- ${this._base58RewardShareSeed} -
- ${this._rewarddialog4} - ` - } + render(html) { + return html` + ${this._rewarddialog1} ${this._percentageShare / 1e8}% ${this._rewarddialog2} ${this.constructor.Base58.encode(this._recipient)}? + ${this._rewarddialog3} +
+ ${this._base58RewardShareSeed} +
+ ${this._rewarddialog4} + ` + } - set rewarddialog1(rewarddialog1) { - this._rewarddialog1 = rewarddialog1; - } + set rewarddialog1(rewarddialog1) { + this._rewarddialog1 = rewarddialog1 + } - set rewarddialog2(rewarddialog2) { - this._rewarddialog2 = rewarddialog2; - } + set rewarddialog2(rewarddialog2) { + this._rewarddialog2 = rewarddialog2 + } - set rewarddialog3(rewarddialog3) { - this._rewarddialog3 = rewarddialog3; - } + set rewarddialog3(rewarddialog3) { + this._rewarddialog3 = rewarddialog3 + } - set rewarddialog4(rewarddialog4) { - this._rewarddialog4 = rewarddialog4; - } + set rewarddialog4(rewarddialog4) { + this._rewarddialog4 = rewarddialog4 + } - set recipientPublicKey(recipientPublicKey) { - this._base58RecipientPublicKey = recipientPublicKey instanceof Uint8Array ? this.constructor.Base58.encode(recipientPublicKey) : recipientPublicKey - this._recipientPublicKey = this.constructor.Base58.decode(this._base58RecipientPublicKey) + set recipientPublicKey(recipientPublicKey) { + this._base58RecipientPublicKey = recipientPublicKey instanceof Uint8Array ? this.constructor.Base58.encode(recipientPublicKey) : recipientPublicKey + this._recipientPublicKey = this.constructor.Base58.decode(this._base58RecipientPublicKey) - this.recipient = publicKeyToAddress(this._recipientPublicKey) + this.recipient = publicKeyToAddress(this._recipientPublicKey) - this.fee = (recipientPublicKey === this.constructor.Base58.encode(this._keyPair.publicKey) ? 0 : 0.001) + this.fee = (recipientPublicKey === this.constructor.Base58.encode(this._keyPair.publicKey) ? 0 : 0.001) - // Reward share keys - const convertedPrivateKey = ed2curve.convertSecretKey(this._keyPair.privateKey) - const convertedPublicKey = ed2curve.convertPublicKey(this._recipientPublicKey) - const sharedSecret = new Uint8Array(32); - nacl.lowlevel.crypto_scalarmult(sharedSecret, convertedPrivateKey, convertedPublicKey); - this._rewardShareSeed = new Sha256().process(sharedSecret).finish().result - this._base58RewardShareSeed = this.constructor.Base58.encode(this._rewardShareSeed) + const convertedPrivateKey = ed2curve.convertSecretKey(this._keyPair.privateKey) + const convertedPublicKey = ed2curve.convertPublicKey(this._recipientPublicKey) + const sharedSecret = new Uint8Array(32); + nacl.lowlevel.crypto_scalarmult(sharedSecret, convertedPrivateKey, convertedPublicKey); + this._rewardShareSeed = new Sha256().process(sharedSecret).finish().result + this._base58RewardShareSeed = this.constructor.Base58.encode(this._rewardShareSeed) - this._rewardShareKeyPair = nacl.sign.keyPair.fromSeed(this._rewardShareSeed) - } + this._rewardShareKeyPair = nacl.sign.keyPair.fromSeed(this._rewardShareSeed) + } - set recipient(recipient) { // Always Base58 encoded. Accepts Uint8Array or Base58 string. - this._recipient = recipient instanceof Uint8Array ? recipient : this.constructor.Base58.decode(recipient) - } + set recipient(recipient) { + this._recipient = recipient instanceof Uint8Array ? recipient : this.constructor.Base58.decode(recipient) + } - set percentageShare(share) { - this._percentageShare = share * 100 - this._percentageShareBytes = this.constructor.utils.int64ToBytes(this._percentageShare) - } + set percentageShare(share) { + this._percentageShare = share * 100 + this._percentageShareBytes = this.constructor.utils.int64ToBytes(this._percentageShare) + } - get params() { - const params = super.params - params.push( - this._recipient, - this._rewardShareKeyPair.publicKey, - this._percentageShareBytes, - this._feeBytes - ) - return params; - } + get params() { + const params = super.params + params.push( + this._recipient, + this._rewardShareKeyPair.publicKey, + this._percentageShareBytes, + this._feeBytes + ) + return params + } } diff --git a/qortal-ui-crypto/api/transactions/trade-portal/tradebot/TradeBotCreateRequest.js b/qortal-ui-crypto/api/transactions/trade-portal/tradebot/TradeBotCreateRequest.js index 85d5867c..05178976 100644 --- a/qortal-ui-crypto/api/transactions/trade-portal/tradebot/TradeBotCreateRequest.js +++ b/qortal-ui-crypto/api/transactions/trade-portal/tradebot/TradeBotCreateRequest.js @@ -5,75 +5,59 @@ */ export default class TradeBotCreateRequest { - constructor() { - // ... - } + constructor() { + // ... + } - createTransaction(txnReq) { + createTransaction(txnReq) { + this.creatorPublicKey(txnReq.creatorPublicKey) + this.qortAmount(txnReq.qortAmount) + this.fundingQortAmount(txnReq.fundingQortAmount) + this.foreignBlockchain(txnReq.foreignBlockchain) + this.foreignAmount(txnReq.foreignAmount) + this.tradeTimeout(txnReq.tradeTimeout) + this.receivingAddress(txnReq.receivingAddress) - this.creatorPublicKey(txnReq.creatorPublicKey); + return this.txnRequest() + } - this.qortAmount(txnReq.qortAmount); + creatorPublicKey(creatorPublicKey) { + this._creatorPublicKey = creatorPublicKey + } - this.fundingQortAmount(txnReq.fundingQortAmount); + qortAmount(qortAmount) { + this._qortAmount = qortAmount + } - this.foreignBlockchain(txnReq.foreignBlockchain); + fundingQortAmount(fundingQortAmount) { + this._fundingQortAmount = fundingQortAmount + } - this.foreignAmount(txnReq.foreignAmount); + foreignBlockchain(foreignBlockchain) { + this._foreignBlockchain = foreignBlockchain + } - this.tradeTimeout(txnReq.tradeTimeout); + foreignAmount(foreignAmount) { + this._foreignAmount = foreignAmount + } - this.receivingAddress(txnReq.receivingAddress); + tradeTimeout(tradeTimeout) { + this._tradeTimeout = tradeTimeout + } - return this.txnRequest(); - } + receivingAddress(receivingAddress) { + this._receivingAddress = receivingAddress + } - creatorPublicKey(creatorPublicKey) { - - this._creatorPublicKey = creatorPublicKey; - - } - - qortAmount(qortAmount) { - this._qortAmount = qortAmount; - } - - - fundingQortAmount(fundingQortAmount) { - - this._fundingQortAmount = fundingQortAmount; - } - - foreignBlockchain(foreignBlockchain) { - - this._foreignBlockchain = foreignBlockchain; - } - - foreignAmount(foreignAmount) { - - this._foreignAmount = foreignAmount; - } - - tradeTimeout(tradeTimeout) { - - this._tradeTimeout = tradeTimeout; - } - - receivingAddress(receivingAddress) { - - this._receivingAddress = receivingAddress; - } - - txnRequest() { - - return { - creatorPublicKey: this._creatorPublicKey, - qortAmount: this._qortAmount, - fundingQortAmount: this._fundingQortAmount, - foreignBlockchain: this._foreignBlockchain, - foreignAmount: this._foreignAmount, - tradeTimeout: this._tradeTimeout, - receivingAddress: this._receivingAddress - } - } + txnRequest() { + return { + creatorPublicKey: this._creatorPublicKey, + qortAmount: this._qortAmount, + fundingQortAmount: this._fundingQortAmount, + foreignBlockchain: this._foreignBlockchain, + foreignAmount: this._foreignAmount, + tradeTimeout: this._tradeTimeout, + receivingAddress: this._receivingAddress + } + } } diff --git a/qortal-ui-crypto/api/transactions/trade-portal/tradebot/TradeBotRespondRequest.js b/qortal-ui-crypto/api/transactions/trade-portal/tradebot/TradeBotRespondRequest.js index 773ea336..4380b46b 100644 --- a/qortal-ui-crypto/api/transactions/trade-portal/tradebot/TradeBotRespondRequest.js +++ b/qortal-ui-crypto/api/transactions/trade-portal/tradebot/TradeBotRespondRequest.js @@ -5,41 +5,35 @@ */ export default class TradeBotRespondRequest { - constructor() { - // ... - } + constructor() { + // ... + } - createTransaction(txnReq) { + createTransaction(txnReq) { + this.atAddress(txnReq.atAddress) + this.foreignKey(txnReq.foreignKey) + this.receivingAddress(txnReq.receivingAddress) - this.atAddress(txnReq.atAddress) + return this.txnRequest() + } - this.foreignKey(txnReq.foreignKey) + atAddress(atAddress) { + this._atAddress = atAddress + } - this.receivingAddress(txnReq.receivingAddress) + foreignKey(foreignKey) { + this._foreignKey = foreignKey + } - return this.txnRequest() - } + receivingAddress(receivingAddress) { + this._receivingAddress = receivingAddress + } - atAddress(atAddress) { - - this._atAddress = atAddress - } - - foreignKey(foreignKey) { - this._foreignKey = foreignKey - } - - receivingAddress(receivingAddress) { - - this._receivingAddress = receivingAddress - } - - txnRequest() { - - return { - atAddress: this._atAddress, - foreignKey: this._foreignKey, - receivingAddress: this._receivingAddress - } - } + txnRequest() { + return { + atAddress: this._atAddress, + foreignKey: this._foreignKey, + receivingAddress: this._receivingAddress + } + } } diff --git a/qortal-ui-crypto/api/transactions/trade-portal/tradebot/signTradeBotTransaction.js b/qortal-ui-crypto/api/transactions/trade-portal/tradebot/signTradeBotTransaction.js index 3671183a..bce40ed8 100644 --- a/qortal-ui-crypto/api/transactions/trade-portal/tradebot/signTradeBotTransaction.js +++ b/qortal-ui-crypto/api/transactions/trade-portal/tradebot/signTradeBotTransaction.js @@ -2,37 +2,30 @@ import Base58 from '../../../deps/Base58.js' import nacl from '../../../deps/nacl-fast.js' import utils from '../../../deps/utils.js' - const signTradeBotTransaction = (unsignedTxn, keyPair) => { + if (!unsignedTxn) { + throw new Error('Unsigned Transaction Bytes not defined') + } - if (!unsignedTxn) { - throw new Error('Unsigned Transaction Bytes not defined') - } + if (!keyPair) { + throw new Error('keyPair not defined') + } - if (!keyPair) { - throw new Error('keyPair not defined') - } + const txnBuffer = Base58.decode(unsignedTxn) - const txnBuffer = Base58.decode(unsignedTxn) + if (keyPair.privateKey.length === undefined) { + const _privateKey = Object.keys(keyPair.privateKey).map(function (key) { return keyPair.privateKey[key]; }) + const privateKey = new Uint8Array(_privateKey) + const signature = nacl.sign.detached(txnBuffer, privateKey) + const signedBytes = utils.appendBuffer(txnBuffer, signature) - if (keyPair.privateKey.length === undefined) { + return signedBytes + } else { + const signature = nacl.sign.detached(txnBuffer, keyPair.privateKey) + const signedBytes = utils.appendBuffer(txnBuffer, signature) - const _privateKey = Object.keys(keyPair.privateKey).map(function (key) { return keyPair.privateKey[key]; }); - const privateKey = new Uint8Array(_privateKey) - - const signature = nacl.sign.detached(txnBuffer, privateKey) - - const signedBytes = utils.appendBuffer(txnBuffer, signature) - - return signedBytes - } else { - - const signature = nacl.sign.detached(txnBuffer, keyPair.privateKey) - - const signedBytes = utils.appendBuffer(txnBuffer, signature) - - return signedBytes - } + return signedBytes + } } export default signTradeBotTransaction diff --git a/qortal-ui-crypto/api/transactions/trade-portal/tradeoffer/DeleteTradeOffer.js b/qortal-ui-crypto/api/transactions/trade-portal/tradeoffer/DeleteTradeOffer.js index c7b3f0e1..982d2423 100644 --- a/qortal-ui-crypto/api/transactions/trade-portal/tradeoffer/DeleteTradeOffer.js +++ b/qortal-ui-crypto/api/transactions/trade-portal/tradeoffer/DeleteTradeOffer.js @@ -5,35 +5,29 @@ */ export default class DeleteTradeOffer { - constructor() { - // ... - } + constructor() { + // ... + } - createTransaction(txnReq) { + createTransaction(txnReq) { + this.creatorPublicKey(txnReq.creatorPublicKey) + this.atAddress(txnReq.atAddress) - this.creatorPublicKey(txnReq.creatorPublicKey) + return this.txnRequest() + } - this.atAddress(txnReq.atAddress) + creatorPublicKey(creatorPublicKey) { + this._creatorPublicKey = creatorPublicKey + } - return this.txnRequest() - } + atAddress(atAddress) { + this._atAddress = atAddress + } - creatorPublicKey(creatorPublicKey) { - - this._creatorPublicKey = creatorPublicKey - - } - - atAddress(atAddress) { - - this._atAddress = atAddress - } - - txnRequest() { - - return { - creatorPublicKey: this._creatorPublicKey, - atAddress: this._atAddress - } - } + txnRequest() { + return { + creatorPublicKey: this._creatorPublicKey, + atAddress: this._atAddress + } + } } diff --git a/qortal-ui-crypto/api/transactions/trade-portal/tradeoffer/cancelAllOffers.js b/qortal-ui-crypto/api/transactions/trade-portal/tradeoffer/cancelAllOffers.js index 425c2684..e3011a59 100644 --- a/qortal-ui-crypto/api/transactions/trade-portal/tradeoffer/cancelAllOffers.js +++ b/qortal-ui-crypto/api/transactions/trade-portal/tradeoffer/cancelAllOffers.js @@ -1,24 +1,25 @@ import { request } from '../../../fetch-request.js' -import { deleteTradeOffer, signTradeBotTxn } from '../../../tradeRequest.js'; +import { deleteTradeOffer, signTradeBotTxn } from '../../../tradeRequest.js' import { processTransaction } from '../../../createTransaction.js' export const cancelAllOffers = async (requestObject) => { - const keyPair = requestObject.keyPair; - const publicKey = requestObject.base58PublicKey; - const address = requestObject.address; + const keyPair = requestObject.keyPair + const publicKey = requestObject.base58PublicKey + const address = requestObject.address - const getMyOpenOffers = async () => { - const res = await request('/crosschain/tradeoffers'); - const myOpenTradeOrders = await res.filter(order => order.mode === "OFFERING" && order.qortalCreator === address); - return myOpenTradeOrders; - } + const getMyOpenOffers = async () => { + const res = await request('/crosschain/tradeoffers') + const myOpenTradeOrders = await res.filter(order => order.mode === "OFFERING" && order.qortalCreator === address) + return myOpenTradeOrders + } - const myOpenOffers = await getMyOpenOffers(); - let response = true; - myOpenOffers.forEach( async (openOffer) => { - let unsignedTxn = await deleteTradeOffer({ creatorPublicKey: publicKey, atAddress: openOffer.qortalAtAddress }); - let signedTxnBytes = await signTradeBotTxn(unsignedTxn, keyPair); - await processTransaction(signedTxnBytes); - }); - return response + const myOpenOffers = await getMyOpenOffers() + let response = true + + myOpenOffers.forEach(async (openOffer) => { + let unsignedTxn = await deleteTradeOffer({ creatorPublicKey: publicKey, atAddress: openOffer.qortalAtAddress }) + let signedTxnBytes = await signTradeBotTxn(unsignedTxn, keyPair) + await processTransaction(signedTxnBytes) + }) + return response } diff --git a/qortal-ui-crypto/api/transactions/transactions.js b/qortal-ui-crypto/api/transactions/transactions.js index 84f2759b..b9387184 100644 --- a/qortal-ui-crypto/api/transactions/transactions.js +++ b/qortal-ui-crypto/api/transactions/transactions.js @@ -22,26 +22,26 @@ import RemoveRewardShareTransaction from './reward-share/RemoveRewardShareTransa import TransferPrivsTransaction from './TransferPrivsTransaction.js' export const transactionTypes = { - 2: PaymentTransaction, - 3: RegisterNameTransaction, - 5: SellNameTransacion, - 6: CancelSellNameTransacion, - 7: BuyNameTransacion, - 17: MessageTransaction, - 18: ChatTransaction, - 181: GroupChatTransaction, - 19: PublicizeTransaction, - 22: CreateGroupTransaction, - 24: AddGroupAdminTransaction, - 25: RemoveGroupAdminTransaction, - 26: GroupBanTransaction, - 27: CancelGroupBanTransaction, - 28: GroupKickTransaction, - 29: GroupInviteTransaction, - 30: CancelGroupInviteTransaction, - 31: JoinGroupTransaction, - 32: LeaveGroupTransaction, - 38: RewardShareTransaction, - 381: RemoveRewardShareTransaction, - 40: TransferPrivsTransaction + 2: PaymentTransaction, + 3: RegisterNameTransaction, + 5: SellNameTransacion, + 6: CancelSellNameTransacion, + 7: BuyNameTransacion, + 17: MessageTransaction, + 18: ChatTransaction, + 181: GroupChatTransaction, + 19: PublicizeTransaction, + 22: CreateGroupTransaction, + 24: AddGroupAdminTransaction, + 25: RemoveGroupAdminTransaction, + 26: GroupBanTransaction, + 27: CancelGroupBanTransaction, + 28: GroupKickTransaction, + 29: GroupInviteTransaction, + 30: CancelGroupInviteTransaction, + 31: JoinGroupTransaction, + 32: LeaveGroupTransaction, + 38: RewardShareTransaction, + 381: RemoveRewardShareTransaction, + 40: TransferPrivsTransaction } diff --git a/qortal-ui-crypto/api/wallet/base58PublicKeyToAddress.js b/qortal-ui-crypto/api/wallet/base58PublicKeyToAddress.js index 914a67e0..dbbae27d 100644 --- a/qortal-ui-crypto/api/wallet/base58PublicKeyToAddress.js +++ b/qortal-ui-crypto/api/wallet/base58PublicKeyToAddress.js @@ -1,11 +1,8 @@ import publicKeyToAddress from './publicKeyToAddress' import Base58 from '../deps/Base58.js' - export const base58PublicKeyToAddress = (base58pubkey, qora = false) => { - const decodePubKey = Base58.decode(base58pubkey) - - const address = publicKeyToAddress(decodePubKey, qora) - - return address + const decodePubKey = Base58.decode(base58pubkey) + const address = publicKeyToAddress(decodePubKey, qora) + return address } diff --git a/qortal-ui-crypto/api/wallet/publicKeyToAddress.js b/qortal-ui-crypto/api/wallet/publicKeyToAddress.js index cd484903..1839a05b 100644 --- a/qortal-ui-crypto/api/wallet/publicKeyToAddress.js +++ b/qortal-ui-crypto/api/wallet/publicKeyToAddress.js @@ -1,37 +1,35 @@ -import RIPEMD160 from '../deps/ripemd160.js' +import Base58 from '../deps/Base58.js' import BROKEN_RIPEMD160 from '../deps/broken-ripemd160.js' +import RIPEMD160 from '../deps/ripemd160.js' +import utils from '../deps/utils.js' +import { ADDRESS_VERSION } from '../constants.js' +import { Buffer } from 'buffer' import { Sha256 } from 'asmcrypto.js' -import utils from '../deps/utils.js' -import Base58 from '../deps/Base58.js' -import { Buffer } from 'buffer' - -import { ADDRESS_VERSION } from '../constants.js' - const repeatSHA256 = (passphrase, hashes) => { - let hash = passphrase - for (let i = 0; i < hashes; i++) { - hash = new Sha256().process(hash).finish().result - } - return hash + let hash = passphrase + for (let i = 0; i < hashes; i++) { + hash = new Sha256().process(hash).finish().result + } + return hash } const publicKeyToAddress = (publicKey, qora = false) => { - const publicKeySha256 = new Sha256().process(publicKey).finish().result - const _publicKeyHash = qora ? new BROKEN_RIPEMD160().digest(publicKeySha256) : new RIPEMD160().update(Buffer.from(publicKeySha256)).digest('hex') + const publicKeySha256 = new Sha256().process(publicKey).finish().result + const _publicKeyHash = qora ? new BROKEN_RIPEMD160().digest(publicKeySha256) : new RIPEMD160().update(Buffer.from(publicKeySha256)).digest('hex') + const publicKeyHash = qora ? _publicKeyHash : _publicKeyHash - const publicKeyHash = qora ? _publicKeyHash : _publicKeyHash - let address = new Uint8Array() + let address = new Uint8Array() - address = utils.appendBuffer(address, [ADDRESS_VERSION]) - address = utils.appendBuffer(address, publicKeyHash) + address = utils.appendBuffer(address, [ADDRESS_VERSION]) + address = utils.appendBuffer(address, publicKeyHash) - const checkSum = repeatSHA256(address, 2) - address = utils.appendBuffer(address, checkSum.subarray(0, 4)) + const checkSum = repeatSHA256(address, 2) + address = utils.appendBuffer(address, checkSum.subarray(0, 4)) - address = Base58.encode(address) + address = Base58.encode(address) - return address + return address } export default publicKeyToAddress diff --git a/qortal-ui-crypto/api/wallet/validateAddress.js b/qortal-ui-crypto/api/wallet/validateAddress.js index 515773b1..e487a55e 100644 --- a/qortal-ui-crypto/api/wallet/validateAddress.js +++ b/qortal-ui-crypto/api/wallet/validateAddress.js @@ -1,12 +1,10 @@ import Base58 from '../deps/Base58.js' - export const validateAddress = (address) => { - const decodePubKey = Base58.decode(address) - - if (!(decodePubKey instanceof Uint8Array && decodePubKey.length == 25)) { - return false - } - return true + const decodePubKey = Base58.decode(address) + if (!(decodePubKey instanceof Uint8Array && decodePubKey.length == 25)) { + return false + } + return true } diff --git a/qortal-ui-crypto/config.js b/qortal-ui-crypto/config.js index 6fccb8cc..e17ca4f2 100644 --- a/qortal-ui-crypto/config.js +++ b/qortal-ui-crypto/config.js @@ -6,33 +6,32 @@ const configWatchers = [] const waitingForConfig = [] const subscribeToStore = () => { - if (!store) return setTimeout(() => subscribeToStore(), 50) // 0.05s + if (!store) return setTimeout(() => subscribeToStore(), 50) - store.subscribe(() => { - const cA = store.getState().app - const c = store.getState().config - if (!c.loaded) return - if (!loaded) waitingForConfig.forEach(r => r(cA)) - configWatchers.forEach(fn => fn(cA)) - config = cA - }) + store.subscribe(() => { + const cA = store.getState().app + const c = store.getState().config + if (!c.loaded) return + if (!loaded) waitingForConfig.forEach(r => r(cA)) + configWatchers.forEach(fn => fn(cA)) + config = cA + }) } subscribeToStore() export function getConfig() { - return config + return config } export function watchConfig(fn) { - // config ? fn(config) : void 0 - fn(config) - configWatchers.push(fn) + fn(config) + configWatchers.push(fn) } export function waitForConfig() { - return new Promise((resolve, reject) => { - if (config) return resolve(config) - waitingForConfig.push(resolve) - }) -} \ No newline at end of file + return new Promise((resolve, reject) => { + if (config) return resolve(config) + waitingForConfig.push(resolve) + }) +} diff --git a/qortal-ui-plugins/plugins/core/components/ChatModals.js b/qortal-ui-plugins/plugins/core/components/ChatModals.js index d6cf6aba..62e9b4e6 100644 --- a/qortal-ui-plugins/plugins/core/components/ChatModals.js +++ b/qortal-ui-plugins/plugins/core/components/ChatModals.js @@ -183,6 +183,7 @@ class ChatModals extends LitElement { timestamp: sendTimestamp, recipient: recipient, recipientPublicKey: _publicKey, + hasChatReference: 0, message: messageText, lastReference: reference, proofOfWorkNonce: 0, diff --git a/qortal-ui-plugins/plugins/core/components/ChatPage.js b/qortal-ui-plugins/plugins/core/components/ChatPage.js index a3bfba57..c6745df3 100644 --- a/qortal-ui-plugins/plugins/core/components/ChatPage.js +++ b/qortal-ui-plugins/plugins/core/components/ChatPage.js @@ -695,6 +695,7 @@ class ChatPage extends LitElement { timestamp: Date.now(), recipient: this._chatId, recipientPublicKey: this._publicKey.key, + hasChatReference: 0, message: messageText, lastReference: reference, proofOfWorkNonce: 0, @@ -712,6 +713,7 @@ class ChatPage extends LitElement { timestamp: Date.now(), groupID: Number(this._chatId), hasReceipient: 0, + hasChatReference: 0, message: messageText, lastReference: reference, proofOfWorkNonce: 0, diff --git a/qortal-ui-plugins/plugins/core/components/ChatWelcomePage.js b/qortal-ui-plugins/plugins/core/components/ChatWelcomePage.js index 11f046ff..91d5beec 100644 --- a/qortal-ui-plugins/plugins/core/components/ChatWelcomePage.js +++ b/qortal-ui-plugins/plugins/core/components/ChatWelcomePage.js @@ -410,6 +410,7 @@ class ChatWelcomePage extends LitElement { timestamp: sendTimestamp, recipient: recipient, recipientPublicKey: _publicKey, + hasChatReference: 0, message: messageText, lastReference: reference, proofOfWorkNonce: 0, diff --git a/qortal-ui-plugins/plugins/core/components/NameMenu.js b/qortal-ui-plugins/plugins/core/components/NameMenu.js index ca67af73..feb454c8 100644 --- a/qortal-ui-plugins/plugins/core/components/NameMenu.js +++ b/qortal-ui-plugins/plugins/core/components/NameMenu.js @@ -529,6 +529,7 @@ class NameMenu extends LitElement { timestamp: sendTimestamp, recipient: recipient, recipientPublicKey: _publicKey, + hasChatReference: 0, message: messageText, lastReference: reference, proofOfWorkNonce: 0, diff --git a/qortal-ui-plugins/plugins/core/messaging/q-chat/q-chat.src.js b/qortal-ui-plugins/plugins/core/messaging/q-chat/q-chat.src.js index dc59b97f..984314bd 100644 --- a/qortal-ui-plugins/plugins/core/messaging/q-chat/q-chat.src.js +++ b/qortal-ui-plugins/plugins/core/messaging/q-chat/q-chat.src.js @@ -789,6 +789,7 @@ class Chat extends LitElement { timestamp: sendTimestamp, recipient: recipient, recipientPublicKey: _publicKey, + hasChatReference: 0, message: messageText, lastReference: reference, proofOfWorkNonce: 0,