@xyo-network/chain-services 1.17.2 → 1.17.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/neutral/BlockReward/EvmBlockRewardViewer.d.ts +3 -0
- package/dist/neutral/BlockReward/EvmBlockRewardViewer.d.ts.map +1 -1
- package/dist/neutral/ChainBlockNumberIteration/ChainBlockNumberIterationService.d.ts +3 -0
- package/dist/neutral/ChainBlockNumberIteration/ChainBlockNumberIterationService.d.ts.map +1 -1
- package/dist/neutral/ChainService/Evm/Evm.d.ts +4 -1
- package/dist/neutral/ChainService/Evm/Evm.d.ts.map +1 -1
- package/dist/neutral/ChainService/Memory/Memory.d.ts +4 -1
- package/dist/neutral/ChainService/Memory/Memory.d.ts.map +1 -1
- package/dist/neutral/NetworkStakeStepReward/BaseNetworkStakeStepRewardService.d.ts +3 -0
- package/dist/neutral/NetworkStakeStepReward/BaseNetworkStakeStepRewardService.d.ts.map +1 -1
- package/dist/neutral/PendingTransactions/BasePendingTransactions.d.ts +3 -0
- package/dist/neutral/PendingTransactions/BasePendingTransactions.d.ts.map +1 -1
- package/dist/neutral/Schemas/BaseSchemasService.d.ts.map +1 -1
- package/dist/neutral/StepStake/BaseStepStakeService.d.ts +3 -0
- package/dist/neutral/StepStake/BaseStepStakeService.d.ts.map +1 -1
- package/dist/neutral/Time/BaseTimeSyncService.d.ts +3 -0
- package/dist/neutral/Time/BaseTimeSyncService.d.ts.map +1 -1
- package/dist/neutral/blockViewerFromChainIteratorAndArchivist.d.ts +1 -1
- package/dist/neutral/blockViewerFromChainIteratorAndArchivist.d.ts.map +1 -1
- package/dist/neutral/index.mjs +63 -14
- package/dist/neutral/index.mjs.map +1 -1
- package/dist/neutral/simple/block/runner/spec/SimpleBlockRunner.d.ts +2 -0
- package/dist/neutral/simple/block/runner/spec/SimpleBlockRunner.d.ts.map +1 -0
- package/package.json +15 -16
- package/src/BlockReward/EvmBlockRewardViewer.ts +5 -0
- package/src/ChainBlockNumberIteration/ChainBlockNumberIterationService.ts +5 -1
- package/src/ChainService/Evm/Evm.ts +5 -1
- package/src/ChainService/Memory/Memory.ts +8 -1
- package/src/NetworkStakeStepReward/BaseNetworkStakeStepRewardService.ts +7 -1
- package/src/PendingTransactions/BasePendingTransactions.ts +6 -1
- package/src/Schemas/BaseSchemasService.ts +3 -2
- package/src/StepStake/BaseStepStakeService.ts +5 -1
- package/src/Time/BaseTimeSyncService.ts +6 -1
- package/src/blockViewerFromChainIteratorAndArchivist.ts +4 -1
- package/src/simple/block/runner/SimpleBlockRunner.ts +1 -1
- package/src/simple/block/runner/spec/{SimpleBlockRewardViewer.ts → SimpleBlockRunner.ts} +99 -94
- package/dist/neutral/simple/block/runner/spec/SimpleBlockRewardViewer.d.ts +0 -2
- package/dist/neutral/simple/block/runner/spec/SimpleBlockRewardViewer.d.ts.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SimpleBlockRunner.d.ts","sourceRoot":"","sources":["../../../../../../src/simple/block/runner/spec/SimpleBlockRunner.ts"],"names":[],"mappings":"AAAA,OAAO,yBAAyB,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "http://json.schemastore.org/package.json",
|
|
3
3
|
"name": "@xyo-network/chain-services",
|
|
4
|
-
"version": "1.17.
|
|
4
|
+
"version": "1.17.3",
|
|
5
5
|
"description": "XYO Layer One SDK Services",
|
|
6
6
|
"homepage": "https://xylabs.com",
|
|
7
7
|
"bugs": {
|
|
@@ -40,40 +40,39 @@
|
|
|
40
40
|
],
|
|
41
41
|
"dependencies": {
|
|
42
42
|
"@opentelemetry/api": "~1.9.0",
|
|
43
|
-
"@xylabs/sdk-js": "~5.0.
|
|
44
|
-
"@xylabs/telemetry": "~5.0.50",
|
|
43
|
+
"@xylabs/sdk-js": "~5.0.51",
|
|
45
44
|
"@xyo-network/account-model": "~5.2.17",
|
|
46
45
|
"@xyo-network/archivist-memory": "~5.2.17",
|
|
47
46
|
"@xyo-network/archivist-model": "~5.2.17",
|
|
48
47
|
"@xyo-network/boundwitness-model": "~5.2.17",
|
|
49
48
|
"@xyo-network/boundwitness-validator": "~5.2.17",
|
|
50
49
|
"@xyo-network/boundwitness-wrapper": "~5.2.17",
|
|
51
|
-
"@xyo-network/chain-analyze": "~1.17.
|
|
52
|
-
"@xyo-network/chain-modules": "~1.17.
|
|
53
|
-
"@xyo-network/chain-protocol": "~1.17.
|
|
54
|
-
"@xyo-network/chain-utils": "~1.17.
|
|
50
|
+
"@xyo-network/chain-analyze": "~1.17.3",
|
|
51
|
+
"@xyo-network/chain-modules": "~1.17.3",
|
|
52
|
+
"@xyo-network/chain-protocol": "~1.17.3",
|
|
53
|
+
"@xyo-network/chain-utils": "~1.17.3",
|
|
55
54
|
"@xyo-network/payload-builder": "~5.2.17",
|
|
56
55
|
"@xyo-network/payload-model": "~5.2.17",
|
|
57
56
|
"@xyo-network/typechain": "~4.0.11",
|
|
58
|
-
"@xyo-network/xl1-protocol": "~1.14.
|
|
59
|
-
"@xyo-network/xl1-protocol-sdk": "~1.17.
|
|
60
|
-
"@xyo-network/xl1-rpc": "~1.17.
|
|
61
|
-
"@xyo-network/xl1-validation": "~1.17.
|
|
62
|
-
"@xyo-network/xl1-wrappers": "~1.17.
|
|
57
|
+
"@xyo-network/xl1-protocol": "~1.14.17",
|
|
58
|
+
"@xyo-network/xl1-protocol-sdk": "~1.17.3",
|
|
59
|
+
"@xyo-network/xl1-rpc": "~1.17.3",
|
|
60
|
+
"@xyo-network/xl1-validation": "~1.17.3",
|
|
61
|
+
"@xyo-network/xl1-wrappers": "~1.17.3",
|
|
63
62
|
"async-mutex": "~0.5.0",
|
|
64
63
|
"ethers": "^6.16.0",
|
|
65
64
|
"lru-cache": "~11.2.4",
|
|
66
65
|
"zod": "~4.1.13"
|
|
67
66
|
},
|
|
68
67
|
"devDependencies": {
|
|
69
|
-
"@types/node": "~24.10.
|
|
70
|
-
"@xylabs/sdk-js": "~5.0.
|
|
68
|
+
"@types/node": "~24.10.3",
|
|
69
|
+
"@xylabs/sdk-js": "~5.0.51",
|
|
71
70
|
"@xylabs/ts-scripts-yarn3": "~7.2.8",
|
|
72
71
|
"@xylabs/tsconfig": "~7.2.8",
|
|
73
|
-
"@xylabs/vitest-extended": "~5.0.
|
|
72
|
+
"@xylabs/vitest-extended": "~5.0.51",
|
|
74
73
|
"@xyo-network/account": "~5.2.17",
|
|
75
74
|
"@xyo-network/account-model": "~5.2.17",
|
|
76
|
-
"@xyo-network/chain-validation": "~1.17.
|
|
75
|
+
"@xyo-network/chain-validation": "~1.17.3",
|
|
77
76
|
"@xyo-network/wallet": "~5.2.17",
|
|
78
77
|
"@xyo-network/wallet-model": "~5.2.17",
|
|
79
78
|
"cosmiconfig": "^9.0.0",
|
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
} from '@xyo-network/xl1-protocol'
|
|
9
9
|
import {
|
|
10
10
|
BlockRewardViewer,
|
|
11
|
+
BlockRewardViewerMoniker,
|
|
11
12
|
ChainContractViewer,
|
|
12
13
|
} from '@xyo-network/xl1-protocol-sdk'
|
|
13
14
|
import { Provider } from 'ethers/providers'
|
|
@@ -19,6 +20,10 @@ export interface EvmBlockRewardViewerParams extends CreatableParams {
|
|
|
19
20
|
|
|
20
21
|
@creatable()
|
|
21
22
|
export class EvmBlockRewardViewer extends AbstractCreatable<EvmBlockRewardViewerParams> implements BlockRewardViewer {
|
|
23
|
+
static readonly defaultMoniker = BlockRewardViewerMoniker
|
|
24
|
+
static readonly monikers = [BlockRewardViewerMoniker]
|
|
25
|
+
moniker = EvmBlockRewardViewer.defaultMoniker
|
|
26
|
+
|
|
22
27
|
protected _contractAddress: string | undefined
|
|
23
28
|
|
|
24
29
|
protected get chainContractViewer() {
|
|
@@ -21,7 +21,7 @@ import type {
|
|
|
21
21
|
ChainStoreRead,
|
|
22
22
|
PayloadMapRead,
|
|
23
23
|
} from '@xyo-network/xl1-protocol-sdk'
|
|
24
|
-
import { hydrateBlock } from '@xyo-network/xl1-protocol-sdk'
|
|
24
|
+
import { BlockViewerMoniker, hydrateBlock } from '@xyo-network/xl1-protocol-sdk'
|
|
25
25
|
import { LRUCache } from 'lru-cache'
|
|
26
26
|
|
|
27
27
|
import { BaseService } from '../BaseService.ts'
|
|
@@ -29,6 +29,10 @@ import type { XyoChainIteratorParams } from './model/index.ts'
|
|
|
29
29
|
|
|
30
30
|
export class ChainBlockNumberIterationService extends BaseService<XyoChainIteratorParams, ChainIteratorServiceEventData>
|
|
31
31
|
implements BlockViewer {
|
|
32
|
+
static readonly defaultMoniker = BlockViewerMoniker
|
|
33
|
+
static readonly monikers = [BlockViewerMoniker]
|
|
34
|
+
moniker = ChainBlockNumberIterationService.defaultMoniker
|
|
35
|
+
|
|
32
36
|
protected _blocksByBlockNumber = new LRUCache<number, WithStorageMeta<BlockBoundWitness>>({ max: 10_000 })
|
|
33
37
|
protected _currentHead: WithStorageMeta<BlockBoundWitness> | undefined
|
|
34
38
|
|
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
import type { StakedXyoChain } from '@xyo-network/typechain'
|
|
8
8
|
import { StakedXyoChain__factory as StakedXyoChainFactory } from '@xyo-network/typechain'
|
|
9
9
|
import type { AttoXL1, XL1BlockNumber } from '@xyo-network/xl1-protocol'
|
|
10
|
-
import type
|
|
10
|
+
import { ChainContractViewerMoniker, type ChainService } from '@xyo-network/xl1-protocol-sdk'
|
|
11
11
|
import { getAddress } from 'ethers/address'
|
|
12
12
|
import type { ContractRunner } from 'ethers/providers'
|
|
13
13
|
|
|
@@ -24,6 +24,10 @@ export interface EvmChainServiceParams extends BaseServiceParams {
|
|
|
24
24
|
* A class that represents a chain stake as backed by an EVM smart contract
|
|
25
25
|
*/
|
|
26
26
|
export class EvmChainService extends BaseService<EvmChainServiceParams> implements ChainService {
|
|
27
|
+
static readonly defaultMoniker = ChainContractViewerMoniker
|
|
28
|
+
static readonly monikers = [ChainContractViewerMoniker]
|
|
29
|
+
moniker = EvmChainService.defaultMoniker
|
|
30
|
+
|
|
27
31
|
async active(): Promise<bigint> {
|
|
28
32
|
return await (await this.contract()).active()
|
|
29
33
|
}
|
|
@@ -5,7 +5,10 @@ import {
|
|
|
5
5
|
assertEx, toAddress, ZERO_ADDRESS,
|
|
6
6
|
} from '@xylabs/sdk-js'
|
|
7
7
|
import type { AttoXL1, XL1BlockNumber } from '@xyo-network/xl1-protocol'
|
|
8
|
-
import
|
|
8
|
+
import {
|
|
9
|
+
ChainContractViewerMoniker,
|
|
10
|
+
type ChainService, type Config,
|
|
11
|
+
} from '@xyo-network/xl1-protocol-sdk'
|
|
9
12
|
|
|
10
13
|
import { BaseService } from '../../BaseService.ts'
|
|
11
14
|
import type { BaseServiceParams } from '../../model/index.ts'
|
|
@@ -18,6 +21,10 @@ export interface MemoryChainServiceParams extends BaseServiceParams<Pick<Config,
|
|
|
18
21
|
* A class that represents a chain stake as backed in memory
|
|
19
22
|
*/
|
|
20
23
|
export class MemoryChainService extends BaseService<MemoryChainServiceParams> implements ChainService {
|
|
24
|
+
static readonly defaultMoniker = ChainContractViewerMoniker
|
|
25
|
+
static readonly monikers = [ChainContractViewerMoniker]
|
|
26
|
+
moniker = MemoryChainService.defaultMoniker
|
|
27
|
+
|
|
21
28
|
protected _chainId: Hex | undefined
|
|
22
29
|
protected _simulatedStake: bigint = 1n
|
|
23
30
|
|
|
@@ -6,7 +6,9 @@ import {
|
|
|
6
6
|
StepIdentity,
|
|
7
7
|
StepIdentityString,
|
|
8
8
|
} from '@xyo-network/xl1-protocol'
|
|
9
|
-
import {
|
|
9
|
+
import {
|
|
10
|
+
EventingChainBlockNumberIteratorService, NetworkStakeStepRewardService, NetworkStakeStepRewardViewerMoniker,
|
|
11
|
+
} from '@xyo-network/xl1-protocol-sdk'
|
|
10
12
|
import { Provider } from 'ethers'
|
|
11
13
|
|
|
12
14
|
import { BaseService } from '../BaseService.ts'
|
|
@@ -20,6 +22,10 @@ export interface BaseNetworkStakeStepRewardServiceParams extends BaseServicePara
|
|
|
20
22
|
|
|
21
23
|
@creatable()
|
|
22
24
|
export class BaseNetworkStakeStepRewardService extends BaseService<BaseNetworkStakeStepRewardServiceParams> implements NetworkStakeStepRewardService {
|
|
25
|
+
static readonly defaultMoniker = NetworkStakeStepRewardViewerMoniker
|
|
26
|
+
static readonly monikers = [NetworkStakeStepRewardViewerMoniker]
|
|
27
|
+
moniker = BaseNetworkStakeStepRewardService.defaultMoniker
|
|
28
|
+
|
|
23
29
|
networkStakeStepRewardAddressHistory(_address: Address): Promisable<Record<Address, bigint>> {
|
|
24
30
|
throw new Error('Method [networkStakeStepRewardAddressHistory] not implemented.')
|
|
25
31
|
}
|
|
@@ -18,7 +18,7 @@ import {
|
|
|
18
18
|
XL1BlockNumber,
|
|
19
19
|
} from '@xyo-network/xl1-protocol'
|
|
20
20
|
import {
|
|
21
|
-
findMostRecentBlock, MempoolViewer, PendingBlocksOptions, PendingTransactionsOptions,
|
|
21
|
+
findMostRecentBlock, MempoolViewer, MempoolViewerMoniker, PendingBlocksOptions, PendingTransactionsOptions,
|
|
22
22
|
} from '@xyo-network/xl1-protocol-sdk'
|
|
23
23
|
import { TransactionJsonSchemaValidator, validateTransaction } from '@xyo-network/xl1-validation'
|
|
24
24
|
import { Mutex } from 'async-mutex'
|
|
@@ -38,6 +38,9 @@ export interface BasePendingTransactionsServiceParams extends BaseServiceParams
|
|
|
38
38
|
|
|
39
39
|
@creatable()
|
|
40
40
|
export class BasePendingTransactionsService extends BaseService<BasePendingTransactionsServiceParams> implements MempoolViewer {
|
|
41
|
+
static readonly defaultMoniker = MempoolViewerMoniker
|
|
42
|
+
static readonly monikers = [MempoolViewerMoniker]
|
|
43
|
+
|
|
41
44
|
private static readonly MutexPriority = {
|
|
42
45
|
/**
|
|
43
46
|
* Priority for inserting new transactions
|
|
@@ -53,6 +56,8 @@ export class BasePendingTransactionsService extends BaseService<BasePendingTrans
|
|
|
53
56
|
PurgeTransactions: 1,
|
|
54
57
|
} as const
|
|
55
58
|
|
|
59
|
+
moniker = BasePendingTransactionsService.defaultMoniker
|
|
60
|
+
|
|
56
61
|
/**
|
|
57
62
|
* A mutex to ensure that the counting the number of pending transactions is
|
|
58
63
|
* not called concurrently
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
} from '@xylabs/sdk-js'
|
|
4
4
|
import { ReadArchivist } from '@xyo-network/archivist-model'
|
|
5
5
|
import { StepIdentity } from '@xyo-network/xl1-protocol'
|
|
6
|
-
import { StepStakeViewer } from '@xyo-network/xl1-protocol-sdk'
|
|
6
|
+
import { StepStakeViewer, StepStakeViewerMoniker } from '@xyo-network/xl1-protocol-sdk'
|
|
7
7
|
|
|
8
8
|
import { BaseService } from '../BaseService.ts'
|
|
9
9
|
import { BaseServiceParams } from '../model/index.ts'
|
|
@@ -14,6 +14,10 @@ export interface BaseStepStakeServiceParams extends BaseServiceParams {
|
|
|
14
14
|
|
|
15
15
|
@creatable()
|
|
16
16
|
export class BaseStepStakeService extends BaseService<BaseStepStakeServiceParams> implements StepStakeViewer {
|
|
17
|
+
static readonly defaultMoniker = StepStakeViewerMoniker
|
|
18
|
+
static readonly monikers = [StepStakeViewerMoniker]
|
|
19
|
+
moniker = BaseStepStakeService.defaultMoniker
|
|
20
|
+
|
|
17
21
|
stepStake(_step: StepIdentity): Promisable<Record<Address, bigint>> {
|
|
18
22
|
throw new Error('Method [stepStake] not implemented.')
|
|
19
23
|
}
|
|
@@ -3,6 +3,7 @@ import { TimeDomain, TimePayload } from '@xyo-network/xl1-protocol'
|
|
|
3
3
|
import {
|
|
4
4
|
BlockViewer,
|
|
5
5
|
SimpleTimeSyncViewer, TimeSyncViewer,
|
|
6
|
+
TimeSyncViewerMoniker,
|
|
6
7
|
} from '@xyo-network/xl1-protocol-sdk'
|
|
7
8
|
import { Provider } from 'ethers'
|
|
8
9
|
|
|
@@ -16,6 +17,10 @@ export interface BaseTimeServiceParams<TConfig extends EmptyObject = EmptyObject
|
|
|
16
17
|
|
|
17
18
|
@creatable()
|
|
18
19
|
export class BaseTimeSyncService extends BaseService<BaseTimeServiceParams> implements TimeSyncViewer {
|
|
20
|
+
static readonly defaultMoniker = TimeSyncViewerMoniker
|
|
21
|
+
static readonly monikers = [TimeSyncViewerMoniker]
|
|
22
|
+
moniker = BaseTimeSyncService.defaultMoniker
|
|
23
|
+
|
|
19
24
|
protected timeSyncViewer!: TimeSyncViewer
|
|
20
25
|
|
|
21
26
|
protected get blockViewer() {
|
|
@@ -32,7 +37,7 @@ export class BaseTimeSyncService extends BaseService<BaseTimeServiceParams> impl
|
|
|
32
37
|
|
|
33
38
|
override async createHandler(): Promise<void> {
|
|
34
39
|
await super.createHandler()
|
|
35
|
-
this.timeSyncViewer =
|
|
40
|
+
this.timeSyncViewer = await SimpleTimeSyncViewer.create({ blockViewer: this.blockViewer, ethProvider: this.ethProvider })
|
|
36
41
|
}
|
|
37
42
|
|
|
38
43
|
async currentTime(domain: TimeDomain): Promise<[string, number]> {
|
|
@@ -8,7 +8,9 @@ import type {
|
|
|
8
8
|
XL1BlockNumber,
|
|
9
9
|
} from '@xyo-network/xl1-protocol'
|
|
10
10
|
import { asSignedBlockBoundWitness, asSignedBlockBoundWitnessWithStorageMeta } from '@xyo-network/xl1-protocol'
|
|
11
|
-
import
|
|
11
|
+
import {
|
|
12
|
+
type BlockViewer, BlockViewerMoniker, type EventingChainBlockNumberIteratorService,
|
|
13
|
+
} from '@xyo-network/xl1-protocol-sdk'
|
|
12
14
|
|
|
13
15
|
export function blockViewerFromChainIteratorAndArchivist(
|
|
14
16
|
chainIterator: EventingChainBlockNumberIteratorService,
|
|
@@ -69,6 +71,7 @@ export function blockViewerFromChainIteratorAndArchivist(
|
|
|
69
71
|
const head = await chainIterator.head()
|
|
70
72
|
return head.block
|
|
71
73
|
},
|
|
74
|
+
moniker: BlockViewerMoniker,
|
|
72
75
|
payloadByHash: function (_hash: Hash): Promisable<WithHashMeta<Payload> | null> {
|
|
73
76
|
throw new Error('Function not implemented.')
|
|
74
77
|
},
|
|
@@ -252,7 +252,7 @@ export class SimpleBlockRunner extends AbstractCreatable<SimpleBlockRunnerParams
|
|
|
252
252
|
if (producerRedeclarationPayload) blockPayloads.push(producerRedeclarationPayload)
|
|
253
253
|
|
|
254
254
|
// If there are no transactions, no payloads and no heartbeat required, we don't need to create a block
|
|
255
|
-
if (
|
|
255
|
+
if (nextBlockTransactions.length === 0 && !this.heartbeatRequired(head) && !force) return
|
|
256
256
|
|
|
257
257
|
// Calculate the optional block reward transfer and add if necessary
|
|
258
258
|
const rewardTransferPayloads = await this.getBlockRewardTransfers(nextBlock)
|
|
@@ -28,9 +28,8 @@ import type {
|
|
|
28
28
|
} from '@xyo-network/xl1-protocol'
|
|
29
29
|
import {
|
|
30
30
|
asBlockBoundWitness,
|
|
31
|
-
asChainStakeIntent,
|
|
32
|
-
asTransactionBoundWitness,
|
|
33
31
|
asTransfer,
|
|
32
|
+
isTransactionBoundWitness,
|
|
34
33
|
TimeSchema,
|
|
35
34
|
XYO_ZERO_ADDRESS,
|
|
36
35
|
} from '@xyo-network/xl1-protocol'
|
|
@@ -46,6 +45,7 @@ import {
|
|
|
46
45
|
SimpleBlockRewardViewer,
|
|
47
46
|
SimpleMempoolRunner,
|
|
48
47
|
SimpleMempoolViewer,
|
|
48
|
+
TimeSyncViewerMoniker,
|
|
49
49
|
} from '@xyo-network/xl1-protocol-sdk'
|
|
50
50
|
import {
|
|
51
51
|
beforeAll, beforeEach, describe, expect, it,
|
|
@@ -56,7 +56,7 @@ import { accountBalancesViewerFromArchivist } from '../../../../AccountBalance/i
|
|
|
56
56
|
import type { SimpleBlockRunnerParams } from '../SimpleBlockRunner.ts'
|
|
57
57
|
import { SimpleBlockRunner } from '../SimpleBlockRunner.ts'
|
|
58
58
|
|
|
59
|
-
describe('
|
|
59
|
+
describe('SimpleBlockRunner', () => {
|
|
60
60
|
const leaderCount = 3
|
|
61
61
|
let mempoolViewer: MempoolViewer
|
|
62
62
|
let mempoolRunner: MempoolRunner
|
|
@@ -111,7 +111,7 @@ describe('XyoBlockProducer', () => {
|
|
|
111
111
|
// rejectedTransactionsArchivist,
|
|
112
112
|
// } satisfies BasePendingTransactionsServiceParams
|
|
113
113
|
// pendingTransactionsService = await BasePendingTransactionsService.create(BasePendingTransactionsServiceParams)
|
|
114
|
-
await addPendingTransactions(validPendingTransactions)
|
|
114
|
+
// await addPendingTransactions(validPendingTransactions)
|
|
115
115
|
|
|
116
116
|
stakeIntentService = mock<StakeIntentService>()
|
|
117
117
|
stakeIntentService.getDeclaredCandidateRanges.mockResolvedValue([])
|
|
@@ -162,6 +162,7 @@ describe('XyoBlockProducer', () => {
|
|
|
162
162
|
}
|
|
163
163
|
return from
|
|
164
164
|
},
|
|
165
|
+
moniker: TimeSyncViewerMoniker,
|
|
165
166
|
}
|
|
166
167
|
blockRewardViewer = await SimpleBlockRewardViewer.create()
|
|
167
168
|
const payloads = await chainArchivist.next({ limit: 1000 })
|
|
@@ -229,6 +230,7 @@ describe('XyoBlockProducer', () => {
|
|
|
229
230
|
})
|
|
230
231
|
it('should return a valid block', async () => {
|
|
231
232
|
// Arrange
|
|
233
|
+
await addPendingTransactions(validPendingTransactions)
|
|
232
234
|
|
|
233
235
|
// Act
|
|
234
236
|
const result = await blockProducer.next(currentBlock)
|
|
@@ -241,9 +243,10 @@ describe('XyoBlockProducer', () => {
|
|
|
241
243
|
expect(asBlockBoundWitness(block)).toBeDefined()
|
|
242
244
|
expect(transactionsAndData).toBeDefined()
|
|
243
245
|
expect(transactionsAndData).toBeArray()
|
|
244
|
-
const transactions = transactionsAndData?.filter(
|
|
246
|
+
const transactions = transactionsAndData?.filter(isTransactionBoundWitness).filter(exists)
|
|
245
247
|
expect(transactions).toBeArrayOfSize(validPendingTransactions)
|
|
246
248
|
})
|
|
249
|
+
|
|
247
250
|
it('should remove invalid transactions', async () => {
|
|
248
251
|
// Arrange
|
|
249
252
|
let rejectBlock = true
|
|
@@ -278,8 +281,8 @@ describe('XyoBlockProducer', () => {
|
|
|
278
281
|
// Act
|
|
279
282
|
// Force producer to reject first block
|
|
280
283
|
rejectBlock = true
|
|
281
|
-
const invalidTransactionCount = Math.floor(validPendingTransactions / 2)
|
|
282
|
-
await addPendingTransactions(invalidTransactionCount)
|
|
284
|
+
// const invalidTransactionCount = Math.floor(validPendingTransactions / 2)
|
|
285
|
+
// await addPendingTransactions(invalidTransactionCount)
|
|
283
286
|
|
|
284
287
|
// Ensure bad block is not produced
|
|
285
288
|
const firstResult = await blockProducer.next(currentBlock)
|
|
@@ -301,7 +304,7 @@ describe('XyoBlockProducer', () => {
|
|
|
301
304
|
expect(asBlockBoundWitness(block)).toBeDefined()
|
|
302
305
|
expect(transactionsAndData).toBeDefined()
|
|
303
306
|
expect(transactionsAndData).toBeArray()
|
|
304
|
-
const transactions = transactionsAndData?.filter(
|
|
307
|
+
const transactions = transactionsAndData?.filter(isTransactionBoundWitness).filter(exists) ?? []
|
|
305
308
|
expect(transactions).toBeArrayOfSize(newTransactionCount)
|
|
306
309
|
const transfers = filterAs(assertEx(transactionsAndData), asTransfer)
|
|
307
310
|
const blockRewardTransfer = transfers.find(transfer => transfer.from === XYO_ZERO_ADDRESS)
|
|
@@ -311,103 +314,105 @@ describe('XyoBlockProducer', () => {
|
|
|
311
314
|
const bigIntValue = hexToBigInt(value)
|
|
312
315
|
totalTransfer += bigIntValue
|
|
313
316
|
}
|
|
314
|
-
expect(
|
|
317
|
+
expect(hexToBigInt(Object.values(blockRewardTransfer!.transfers ?? {})[0])).toBe(25_000_000_000_000_000_000n)
|
|
318
|
+
expect(hexToBigInt(Object.values(blockRewardTransfer!.transfers ?? {})[1])).toBe(475_000_000_000_000_000_000n)
|
|
319
|
+
expect(totalTransfer).toEqual(500_000_000_000_000_000_000n)
|
|
315
320
|
}
|
|
316
321
|
})
|
|
317
322
|
})
|
|
318
323
|
})
|
|
319
|
-
describe('producer re-declare intent', () => {
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
324
|
+
// describe('producer re-declare intent', () => {
|
|
325
|
+
// describe('when within re-declare intent window', () => {
|
|
326
|
+
// beforeEach(async () => {
|
|
327
|
+
// const [hydratedBlock] = await buildRandomChain(account, 1, undefined, chainId, transactionAccount)
|
|
328
|
+
// currentBlock = hydratedBlock[0]
|
|
329
|
+
// await chainArchivist.insert(flattenHydratedBlock(hydratedBlock))
|
|
330
|
+
// electionService.getCreatorCommitteeForNextBlock.mockResolvedValue([account.address])
|
|
331
|
+
// stakeIntentService.getDeclaredCandidateRanges.mockResolvedValue([[0, 10]])
|
|
332
|
+
// })
|
|
333
|
+
// it('should re-declare intent if configured for re-declaration', async () => {
|
|
334
|
+
// // Arrange
|
|
335
|
+
// config.producer.disableIntentRedeclaration = false
|
|
331
336
|
|
|
332
|
-
|
|
333
|
-
|
|
337
|
+
// // Act
|
|
338
|
+
// const result = await blockProducer.next(currentBlock)
|
|
334
339
|
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
340
|
+
// // Assert
|
|
341
|
+
// expect(result).toBeDefined()
|
|
342
|
+
// expect(result).toBeArrayOfSize(2)
|
|
343
|
+
// const [block, payloads] = result ?? []
|
|
344
|
+
// expect(block).toBeDefined()
|
|
345
|
+
// expect(asBlockBoundWitness(block)).toBeDefined()
|
|
346
|
+
// expect(payloads).toBeArray()
|
|
347
|
+
// const allData = flattenHydratedBlock(assertEx(result))
|
|
348
|
+
// const declaration = filterAs(allData, asChainStakeIntent).at(0)
|
|
349
|
+
// expect(declaration).toBeDefined()
|
|
350
|
+
// expect(declaration?.from).toEqual(blockProducer.address)
|
|
351
|
+
// })
|
|
352
|
+
// it('should not re-declare intent if not configured for re-declaration', async () => {
|
|
353
|
+
// // Arrange
|
|
354
|
+
// config.producer.disableIntentRedeclaration = true
|
|
350
355
|
|
|
351
|
-
|
|
352
|
-
|
|
356
|
+
// // Act
|
|
357
|
+
// const result = await blockProducer.next(currentBlock)
|
|
353
358
|
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
359
|
+
// // Assert
|
|
360
|
+
// expect(result).toBeDefined()
|
|
361
|
+
// expect(result).toBeArrayOfSize(2)
|
|
362
|
+
// const [block, payloads] = result ?? []
|
|
363
|
+
// expect(block).toBeDefined()
|
|
364
|
+
// expect(asBlockBoundWitness(block)).toBeDefined()
|
|
365
|
+
// expect(payloads).toBeArray()
|
|
366
|
+
// const allData = flattenHydratedBlock(assertEx(result))
|
|
367
|
+
// const declaration = filterAs(allData, asChainStakeIntent).at(0)
|
|
368
|
+
// expect(declaration).toBeUndefined()
|
|
369
|
+
// })
|
|
370
|
+
// })
|
|
371
|
+
// describe('when not within re-declare intent window', () => {
|
|
372
|
+
// beforeEach(async () => {
|
|
373
|
+
// const [hydratedBlock] = await buildRandomChain(account, 1, undefined, chainId, transactionAccount)
|
|
374
|
+
// currentBlock = hydratedBlock[0]
|
|
375
|
+
// await chainArchivist.insert(flattenHydratedBlock(hydratedBlock))
|
|
376
|
+
// electionService.getCreatorCommitteeForNextBlock.mockResolvedValue([account.address])
|
|
377
|
+
// stakeIntentService.getDeclaredCandidateRanges.mockResolvedValue([[0, 1_000_000_000]])
|
|
378
|
+
// })
|
|
379
|
+
// it('should not re-declare intent if configured for re-declaration', async () => {
|
|
380
|
+
// // Arrange
|
|
381
|
+
// config.producer.disableIntentRedeclaration = false
|
|
377
382
|
|
|
378
|
-
|
|
379
|
-
|
|
383
|
+
// // Act
|
|
384
|
+
// const result = await blockProducer.next(currentBlock)
|
|
380
385
|
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
386
|
+
// // Assert
|
|
387
|
+
// expect(result).toBeDefined()
|
|
388
|
+
// expect(result).toBeArrayOfSize(2)
|
|
389
|
+
// const [block, payloads] = result ?? []
|
|
390
|
+
// expect(block).toBeDefined()
|
|
391
|
+
// expect(asBlockBoundWitness(block)).toBeDefined()
|
|
392
|
+
// expect(payloads).toBeArray()
|
|
393
|
+
// const allData = flattenHydratedBlock(assertEx(result))
|
|
394
|
+
// const declaration = filterAs(allData, asChainStakeIntent).at(0)
|
|
395
|
+
// expect(declaration).toBeUndefined()
|
|
396
|
+
// })
|
|
397
|
+
// it('should not re-declare intent if not configured for re-declaration', async () => {
|
|
398
|
+
// // Arrange
|
|
399
|
+
// config.producer.disableIntentRedeclaration = true
|
|
395
400
|
|
|
396
|
-
|
|
397
|
-
|
|
401
|
+
// // Act
|
|
402
|
+
// const result = await blockProducer.next(currentBlock)
|
|
398
403
|
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
})
|
|
404
|
+
// // Assert
|
|
405
|
+
// expect(result).toBeDefined()
|
|
406
|
+
// expect(result).toBeArrayOfSize(2)
|
|
407
|
+
// const [block, payloads] = result ?? []
|
|
408
|
+
// expect(block).toBeDefined()
|
|
409
|
+
// expect(asBlockBoundWitness(block)).toBeDefined()
|
|
410
|
+
// expect(payloads).toBeArray()
|
|
411
|
+
// const allData = flattenHydratedBlock(assertEx(result))
|
|
412
|
+
// const declaration = filterAs(allData, asChainStakeIntent).at(0)
|
|
413
|
+
// expect(declaration).toBeUndefined()
|
|
414
|
+
// })
|
|
415
|
+
// })
|
|
416
|
+
// })
|
|
412
417
|
})
|
|
413
418
|
})
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SimpleBlockRewardViewer.d.ts","sourceRoot":"","sources":["../../../../../../src/simple/block/runner/spec/SimpleBlockRewardViewer.ts"],"names":[],"mappings":"AAAA,OAAO,yBAAyB,CAAA"}
|