From: Chris Duncan Date: Fri, 7 Aug 2026 18:04:55 +0000 (-0700) Subject: Include link as account in Block subtype calls. X-Git-Url: https://git.codecow.com/?a=commitdiff_plain;h=36d72338b79899ceff155fb3df08d1fbe6685140;p=libnemo.git Include link as account in Block subtype calls. --- diff --git a/src/lib/block/change.ts b/src/lib/block/change.ts index a8d7748..c5cb063 100644 --- a/src/lib/block/change.ts +++ b/src/lib/block/change.ts @@ -3,11 +3,11 @@ 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}`) @@ -22,10 +22,12 @@ export function _change (block: Block, representative: unknown): Block { : 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 }) diff --git a/src/lib/block/index.ts b/src/lib/block/index.ts index 85deedd..8f2b2c7 100644 --- a/src/lib/block/index.ts +++ b/src/lib/block/index.ts @@ -121,7 +121,7 @@ export class Block { * * @returns {string} JSON representation of the block */ - toJSON (): Record { + toJSON () { try { if (this.link == null) { throw new Error('Link is required') @@ -130,12 +130,13 @@ export class Block { 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 ?? '' } @@ -204,11 +205,16 @@ export class Block { 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) diff --git a/src/lib/block/receive.ts b/src/lib/block/receive.ts index 99ca1ea..fca80d5 100644 --- a/src/lib/block/receive.ts +++ b/src/lib/block/receive.ts @@ -2,6 +2,7 @@ //! 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' @@ -16,7 +17,7 @@ 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}`) @@ -40,11 +41,13 @@ export function _receive (block: Block, sendBlock: unknown, amount: unknown, uni 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 }) } diff --git a/src/lib/block/send.ts b/src/lib/block/send.ts index 54634de..4621bde 100644 --- a/src/lib/block/send.ts +++ b/src/lib/block/send.ts @@ -15,7 +15,7 @@ import { convert } from '../tools' * @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}`) @@ -43,11 +43,13 @@ export function _send (block: Block, account: unknown, amount: unknown, unit: un 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 }) } diff --git a/src/lib/rpc/process.ts b/src/lib/rpc/process.ts index 450399a..8c69b30 100644 --- a/src/lib/rpc/process.ts +++ b/src/lib/rpc/process.ts @@ -6,10 +6,10 @@ import { RpcError } from '../errors' 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' }