import type { Block } from '.'
import { Account } from '../account'
-import { BURN_PUBLIC_KEY } from '../constants'
+import { BURN_ADDRESS, BURN_PUBLIC_KEY } from '../constants'
import { hex } from '../convert'
export function _change (block: Block, representative: unknown): Block {
- const { link, representative: rep, subtype } = block
+ const { link, link_as_account, representative: rep, subtype } = block
try {
if (block.subtype != null) {
throw new Error(`Block already configured as ${block.subtype}`)
: representative
block.link = hex.toBytes(BURN_PUBLIC_KEY)
+ block.link_as_account = BURN_ADDRESS
return block
} catch (err) {
block.link = link
+ block.link_as_account = link_as_account
block.representative = rep
block.subtype = subtype
throw new TypeError('Failed to configure change block', { cause: err })
*
* @returns {string} JSON representation of the block
*/
- toJSON (): Record<string, string> {
+ toJSON () {
try {
if (this.link == null) {
throw new Error('Link is required')
throw new Error('Representative is required')
}
return {
- "type": "state",
+ "type": "state" as const,
"account": this.account.address,
"previous": bytes.toHex(this.previous),
"representative": this.representative.address ?? '',
"balance": dec.toString(this.balance),
"link": bytes.toHex(this.link),
+ "link_as_account": bytes.toHex(this.link),
"signature": this.signature ?? '',
"work": this.work ?? ''
}
if (this.signature == null) {
throw new Error('Block is missing signature. Use sign() and try again.')
}
+ if (this.subtype == null) {
+ throw new Error('Block is missing subtype. Call respective method and try again.')
+ }
if (this.work == null) await this.pow()
const data: ProcessRequest = {
- subtype: this.subtype,
+ async: false,
+ block: this.toJSON(),
+ force: false,
json_block: true,
- block: this.toJSON()
+ subtype: this.subtype,
}
try {
const res = await rpc.post('process', data)
//! SPDX-License-Identifier: GPL-3.0-or-later
import type { Block } from '.'
+import { Account } from '../account'
import { UNITS } from '../constants'
import { hex } from '../convert'
import { convert } from '../tools'
* @returns {Block} This block with balance, link, and subtype configured
*/
export function _receive (block: Block, sendBlock: unknown, amount: unknown, unit: unknown): Block {
- const { balance, link, subtype } = block
+ const { balance, link, link_as_account, subtype } = block
try {
if (block.subtype != null) {
throw new Error(`Block already configured as ${block.subtype}`)
throw new TypeError('Invalid send block hash', { cause: sendBlock })
}
block.link = hex.toBytes(sendBlock, 32)
+ block.link_as_account = new Account(sendBlock).address
return block
} catch (err) {
block.balance = balance
block.link = link
+ block.link_as_account = link_as_account
block.subtype = subtype
throw new TypeError('Failed to configure receive block', { cause: err })
}
* @returns {Block} This block with balance, link, and subtype configured
*/
export function _send (block: Block, account: unknown, amount: unknown, unit: unknown): Block {
- const { balance, link, subtype } = block
+ const { balance, link, link_as_account, subtype } = block
try {
if (block.subtype != null) {
throw new Error(`Block already configured as ${block.subtype}`)
throw new TypeError('Invalid account', { cause: account })
}
block.link = hex.toBytes(account.publicKey, 32)
+ block.link_to_account = account.address
return block
} catch (err) {
block.balance = balance
block.link = link
+ block.link_as_account = link_as_account
block.subtype = subtype
throw new TypeError('Failed to configure send block', { cause: err })
}
import { BlockInfoContents } from './block_info'
export type ProcessRequest = {
+ async: false
block: BlockInfoContents
- async: boolean
- force: boolean
- json_block: boolean
+ force: false
+ json_block: true
subtype: 'change' | 'epoch' | 'open' | 'receive' | 'send'
}