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._dialogto}: |
+
+
+ ${this.dialogAddress} ${' '}- |
+ ${Base58.encode(this._recipient)} |
+
+ ${this.recipientName ? html`
+
+ ${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._dialogto}: |
-
-
-
- ${this.dialogAddress} ${' '}- |
- ${Base58.encode(this._recipient)} |
-
-
- ${this.recipientName ? html`
-
- ${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,