forked from Qortal/qortal-ui
98 lines
1.8 KiB
JavaScript
98 lines
1.8 KiB
JavaScript
'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
|
|
}
|
|
|
|
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() {
|
|
return [
|
|
this._typeBytes,
|
|
this._timestampBytes,
|
|
this._groupIDBytes,
|
|
this._lastReference,
|
|
this._keyPair.publicKey
|
|
]
|
|
}
|
|
|
|
get chatBytes() {
|
|
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._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
|
|
}
|
|
|
|
}
|