Fixx transactions
This commit is contained in:
parent
b6f567c584
commit
6049d18f49
@ -19,6 +19,53 @@ export default class TransactionBase {
|
|||||||
this.fee = 0
|
this.fee = 0
|
||||||
this.groupID = 0
|
this.groupID = 0
|
||||||
this.timestamp = Date.now()
|
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) {
|
||||||
|
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
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
render(html) {
|
render(html) {
|
||||||
|
@ -5,93 +5,137 @@ import Base58 from '../../deps/Base58.js'
|
|||||||
import utils from '../../deps/utils.js'
|
import utils from '../../deps/utils.js'
|
||||||
|
|
||||||
export default class ChatBase {
|
export default class ChatBase {
|
||||||
static get utils() {
|
static get utils() {
|
||||||
return utils
|
return utils
|
||||||
}
|
}
|
||||||
static get nacl() {
|
static get nacl() {
|
||||||
return nacl
|
return nacl
|
||||||
}
|
}
|
||||||
static get Base58() {
|
static get Base58() {
|
||||||
return Base58
|
return Base58
|
||||||
}
|
}
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
this.fee = 0
|
this.fee = 0
|
||||||
this.groupID = 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
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
set keyPair(keyPair) {
|
set keyPair(keyPair) {
|
||||||
this._keyPair = keyPair
|
this._keyPair = keyPair
|
||||||
}
|
}
|
||||||
|
|
||||||
set type(type) {
|
set type(type) {
|
||||||
this.typeText = TX_TYPES[type]
|
this.typeText = TX_TYPES[type]
|
||||||
this._type = type
|
this._type = type
|
||||||
this._typeBytes = this.constructor.utils.int32ToBytes(this._type)
|
this._typeBytes = this.constructor.utils.int32ToBytes(this._type)
|
||||||
}
|
}
|
||||||
|
|
||||||
set groupID(groupID) {
|
set groupID(groupID) {
|
||||||
this._groupID = groupID
|
this._groupID = groupID
|
||||||
this._groupIDBytes = this.constructor.utils.int32ToBytes(this._groupID)
|
this._groupIDBytes = this.constructor.utils.int32ToBytes(this._groupID)
|
||||||
}
|
}
|
||||||
|
|
||||||
set timestamp(timestamp) {
|
set timestamp(timestamp) {
|
||||||
this._timestamp = timestamp
|
this._timestamp = timestamp
|
||||||
this._timestampBytes = this.constructor.utils.int64ToBytes(this._timestamp)
|
this._timestampBytes = this.constructor.utils.int64ToBytes(this._timestamp)
|
||||||
}
|
}
|
||||||
|
|
||||||
set fee(fee) {
|
set fee(fee) {
|
||||||
this._fee = fee * QORT_DECIMALS
|
this._fee = fee * QORT_DECIMALS
|
||||||
this._feeBytes = this.constructor.utils.int64ToBytes(this._fee)
|
this._feeBytes = this.constructor.utils.int64ToBytes(this._fee)
|
||||||
}
|
}
|
||||||
|
|
||||||
set lastReference(lastReference) {
|
set lastReference(lastReference) {
|
||||||
this._lastReference = lastReference instanceof Uint8Array ? lastReference : this.constructor.Base58.decode(lastReference)
|
this._lastReference = lastReference instanceof Uint8Array ? lastReference : this.constructor.Base58.decode(lastReference)
|
||||||
}
|
}
|
||||||
|
|
||||||
get params() {
|
get params() {
|
||||||
return [
|
return [
|
||||||
this._typeBytes,
|
this._typeBytes,
|
||||||
this._timestampBytes,
|
this._timestampBytes,
|
||||||
this._groupIDBytes,
|
this._groupIDBytes,
|
||||||
this._lastReference,
|
this._lastReference,
|
||||||
this._keyPair.publicKey
|
this._keyPair.publicKey
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
get chatBytes() {
|
get chatBytes() {
|
||||||
const isValid = this.validParams()
|
const isValid = this.validParams()
|
||||||
if (!isValid.valid) {
|
if (!isValid.valid) {
|
||||||
throw new Error(isValid.message)
|
throw new Error(isValid.message)
|
||||||
}
|
}
|
||||||
|
|
||||||
let result = new Uint8Array()
|
let result = new Uint8Array()
|
||||||
|
|
||||||
this.params.forEach(item => {
|
this.params.forEach(item => {
|
||||||
result = this.constructor.utils.appendBuffer(result, item)
|
result = this.constructor.utils.appendBuffer(result, item)
|
||||||
})
|
})
|
||||||
|
|
||||||
this._chatBytes = result
|
this._chatBytes = result
|
||||||
|
|
||||||
return this._chatBytes
|
return this._chatBytes
|
||||||
}
|
}
|
||||||
|
|
||||||
validParams() {
|
validParams() {
|
||||||
let finalResult = {
|
let finalResult = {
|
||||||
valid: true
|
valid: true
|
||||||
}
|
}
|
||||||
|
|
||||||
this.tests.some(test => {
|
this.tests.some(test => {
|
||||||
const result = test()
|
const result = test()
|
||||||
if (result !== true) {
|
if (result !== true) {
|
||||||
finalResult = {
|
finalResult = {
|
||||||
valid: false,
|
valid: false,
|
||||||
message: result
|
message: result
|
||||||
}
|
}
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
return finalResult
|
return finalResult
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -67,7 +67,7 @@ export default class ChatTransaction extends ChatBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
get params() {
|
get params() {
|
||||||
const params = super.params;
|
const params = super.params
|
||||||
params.push(
|
params.push(
|
||||||
this._proofOfWorkNonce,
|
this._proofOfWorkNonce,
|
||||||
this._hasReceipient,
|
this._hasReceipient,
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
'use strict'
|
'use strict'
|
||||||
import ChatBase from "./ChatBase.js"
|
import ChatBase from "./ChatBase.js"
|
||||||
|
import { CHAT_REFERENCE_FEATURE_TRIGGER_TIMESTAMP } from '../../constants.js'
|
||||||
|
|
||||||
export default class GroupChatTransaction extends ChatBase {
|
export default class GroupChatTransaction extends ChatBase {
|
||||||
constructor() {
|
constructor() {
|
||||||
@ -43,7 +44,7 @@ export default class GroupChatTransaction extends ChatBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
get params() {
|
get params() {
|
||||||
const params = super.params;
|
const params = super.params
|
||||||
params.push(
|
params.push(
|
||||||
this._proofOfWorkNonce,
|
this._proofOfWorkNonce,
|
||||||
this._hasReceipient,
|
this._hasReceipient,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user