@xyo-network/chain-services 1.17.0 → 1.17.2
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/AccountBalance/accountBalanceServiceFromArchivist.d.ts +1 -1
- package/dist/neutral/AccountBalance/accountBalanceServiceFromArchivist.d.ts.map +1 -1
- package/dist/neutral/AccountBalance/index.d.ts +0 -1
- package/dist/neutral/AccountBalance/index.d.ts.map +1 -1
- package/dist/neutral/BaseService.d.ts +0 -3
- package/dist/neutral/BaseService.d.ts.map +1 -1
- package/dist/neutral/BlockReward/EvmBlockRewardViewer.d.ts +17 -0
- package/dist/neutral/BlockReward/EvmBlockRewardViewer.d.ts.map +1 -0
- package/dist/neutral/BlockReward/index.d.ts +1 -3
- package/dist/neutral/BlockReward/index.d.ts.map +1 -1
- package/dist/neutral/ChainBlockNumberIteration/ChainBlockNumberIterationService.d.ts +4 -2
- package/dist/neutral/ChainBlockNumberIteration/ChainBlockNumberIterationService.d.ts.map +1 -1
- package/dist/neutral/ChainService/Evm/Evm.d.ts +2 -1
- package/dist/neutral/ChainService/Evm/Evm.d.ts.map +1 -1
- package/dist/neutral/ChainService/Memory/Memory.d.ts +2 -0
- package/dist/neutral/ChainService/Memory/Memory.d.ts.map +1 -1
- package/dist/neutral/ChainValidator/XyoValidator.d.ts +2 -16
- package/dist/neutral/ChainValidator/XyoValidator.d.ts.map +1 -1
- package/dist/neutral/PendingTransactions/BasePendingTransactions.d.ts +7 -6
- package/dist/neutral/PendingTransactions/BasePendingTransactions.d.ts.map +1 -1
- package/dist/neutral/StakeIntent/XyoStakeIntentService.d.ts +5 -4
- package/dist/neutral/StakeIntent/XyoStakeIntentService.d.ts.map +1 -1
- package/dist/neutral/blockViewerFromChainIteratorAndArchivist.d.ts.map +1 -1
- package/dist/neutral/implementation/accountBalance.d.ts +7 -0
- package/dist/neutral/implementation/accountBalance.d.ts.map +1 -0
- package/dist/neutral/implementation/blockViewer.d.ts +7 -0
- package/dist/neutral/implementation/blockViewer.d.ts.map +1 -0
- package/dist/neutral/implementation/chain/evm.d.ts +7 -0
- package/dist/neutral/implementation/chain/evm.d.ts.map +1 -0
- package/dist/neutral/implementation/chain/index.d.ts +7 -0
- package/dist/neutral/implementation/chain/index.d.ts.map +1 -0
- package/dist/neutral/implementation/evm/index.d.ts +2 -0
- package/dist/neutral/implementation/evm/index.d.ts.map +1 -0
- package/dist/neutral/implementation/evm/initChainId.d.ts +4 -0
- package/dist/neutral/implementation/evm/initChainId.d.ts.map +1 -0
- package/dist/neutral/implementation/evm/initEvmProvider.d.ts +11 -0
- package/dist/neutral/implementation/evm/initEvmProvider.d.ts.map +1 -0
- package/dist/neutral/implementation/evm/initInfuraProvider.d.ts +6 -0
- package/dist/neutral/implementation/evm/initInfuraProvider.d.ts.map +1 -0
- package/dist/neutral/implementation/evm/initJsonRpcProvider.d.ts +6 -0
- package/dist/neutral/implementation/evm/initJsonRpcProvider.d.ts.map +1 -0
- package/dist/neutral/implementation/head/createBootstrapHead.d.ts +5 -0
- package/dist/neutral/implementation/head/createBootstrapHead.d.ts.map +1 -0
- package/dist/neutral/implementation/head/createForkedHead/config/getBridgeDestinationDetails.d.ts +8 -0
- package/dist/neutral/implementation/head/createForkedHead/config/getBridgeDestinationDetails.d.ts.map +1 -0
- package/dist/neutral/implementation/head/createForkedHead/config/getBridgeSourceDetails.d.ts +9 -0
- package/dist/neutral/implementation/head/createForkedHead/config/getBridgeSourceDetails.d.ts.map +1 -0
- package/dist/neutral/implementation/head/createForkedHead/config/getForkDetails.d.ts +4 -0
- package/dist/neutral/implementation/head/createForkedHead/config/getForkDetails.d.ts.map +1 -0
- package/dist/neutral/implementation/head/createForkedHead/config/index.d.ts +4 -0
- package/dist/neutral/implementation/head/createForkedHead/config/index.d.ts.map +1 -0
- package/dist/neutral/implementation/head/createForkedHead/createForkedHead.d.ts +5 -0
- package/dist/neutral/implementation/head/createForkedHead/createForkedHead.d.ts.map +1 -0
- package/dist/neutral/implementation/head/createForkedHead/getBridgeDestinationObservation.d.ts +11 -0
- package/dist/neutral/implementation/head/createForkedHead/getBridgeDestinationObservation.d.ts.map +1 -0
- package/dist/neutral/implementation/head/createForkedHead/getBridgeIntent.d.ts +11 -0
- package/dist/neutral/implementation/head/createForkedHead/getBridgeIntent.d.ts.map +1 -0
- package/dist/neutral/implementation/head/createForkedHead/getBridgeSourceObservation.d.ts +11 -0
- package/dist/neutral/implementation/head/createForkedHead/getBridgeSourceObservation.d.ts.map +1 -0
- package/dist/neutral/implementation/head/createForkedHead/getFirstBlockForNewChain.d.ts +13 -0
- package/dist/neutral/implementation/head/createForkedHead/getFirstBlockForNewChain.d.ts.map +1 -0
- package/dist/neutral/implementation/head/createForkedHead/index.d.ts +2 -0
- package/dist/neutral/implementation/head/createForkedHead/index.d.ts.map +1 -0
- package/dist/neutral/implementation/head/getForkFromBlock.d.ts +12 -0
- package/dist/neutral/implementation/head/getForkFromBlock.d.ts.map +1 -0
- package/dist/neutral/implementation/head/head.d.ts +11 -0
- package/dist/neutral/implementation/head/head.d.ts.map +1 -0
- package/dist/neutral/implementation/head/index.d.ts +2 -0
- package/dist/neutral/implementation/head/index.d.ts.map +1 -0
- package/dist/neutral/implementation/head/submitNewChain.d.ts +10 -0
- package/dist/neutral/implementation/head/submitNewChain.d.ts.map +1 -0
- package/dist/neutral/implementation/index.d.ts +13 -0
- package/dist/neutral/implementation/index.d.ts.map +1 -0
- package/dist/neutral/implementation/mempoolRunner.d.ts +7 -0
- package/dist/neutral/implementation/mempoolRunner.d.ts.map +1 -0
- package/dist/neutral/implementation/mempoolViewer.d.ts +7 -0
- package/dist/neutral/implementation/mempoolViewer.d.ts.map +1 -0
- package/dist/neutral/implementation/pendingTransactions.d.ts +9 -0
- package/dist/neutral/implementation/pendingTransactions.d.ts.map +1 -0
- package/dist/neutral/implementation/producer.d.ts +5 -0
- package/dist/neutral/implementation/producer.d.ts.map +1 -0
- package/dist/neutral/implementation/reward.d.ts +14 -0
- package/dist/neutral/implementation/reward.d.ts.map +1 -0
- package/dist/neutral/implementation/time.d.ts +6 -0
- package/dist/neutral/implementation/time.d.ts.map +1 -0
- package/dist/neutral/implementation/validator.d.ts +5 -0
- package/dist/neutral/implementation/validator.d.ts.map +1 -0
- package/dist/neutral/index.d.ts +2 -2
- package/dist/neutral/index.d.ts.map +1 -1
- package/dist/neutral/index.mjs +1565 -1140
- package/dist/neutral/index.mjs.map +1 -1
- package/dist/neutral/simple/block/index.d.ts +2 -0
- package/dist/neutral/simple/block/index.d.ts.map +1 -0
- package/dist/neutral/simple/block/runner/SimpleBlockRunner.d.ts +117 -0
- package/dist/neutral/simple/block/runner/SimpleBlockRunner.d.ts.map +1 -0
- package/dist/neutral/simple/block/runner/generateTransactionFeeTransfers.d.ts.map +1 -0
- package/dist/neutral/simple/block/runner/index.d.ts +2 -0
- package/dist/neutral/simple/block/runner/index.d.ts.map +1 -0
- package/dist/neutral/simple/block/runner/spec/SimpleBlockRewardViewer.d.ts +2 -0
- package/dist/neutral/simple/block/runner/spec/SimpleBlockRewardViewer.d.ts.map +1 -0
- package/dist/neutral/simple/index.d.ts +2 -0
- package/dist/neutral/simple/index.d.ts.map +1 -0
- package/package.json +32 -29
- package/src/AccountBalance/accountBalanceServiceFromArchivist.ts +35 -8
- package/src/AccountBalance/index.ts +0 -1
- package/src/BaseService.ts +0 -13
- package/src/BlockReward/EvmBlockRewardViewer.ts +50 -0
- package/src/BlockReward/index.ts +1 -3
- package/src/ChainBlockNumberIteration/ChainBlockNumberIterationService.ts +14 -2
- package/src/ChainService/Evm/Evm.ts +5 -4
- package/src/ChainService/Memory/Memory.ts +5 -0
- package/src/ChainValidator/XyoValidator.ts +25 -30
- package/src/NetworkStakeStepReward/BaseNetworkStakeStepRewardService.ts +18 -18
- package/src/PendingTransactions/BasePendingTransactions.ts +10 -5
- package/src/Schemas/BaseSchemasService.ts +1 -1
- package/src/StakeIntent/XyoStakeIntentService.ts +18 -8
- package/src/StepStake/BaseStepStakeService.ts +2 -2
- package/src/blockViewerFromChainIteratorAndArchivist.ts +8 -1
- package/src/implementation/accountBalance.ts +29 -0
- package/src/implementation/blockViewer.ts +29 -0
- package/src/implementation/chain/evm.ts +39 -0
- package/src/implementation/chain/index.ts +46 -0
- package/src/implementation/evm/index.ts +1 -0
- package/src/implementation/evm/initChainId.ts +20 -0
- package/src/implementation/evm/initEvmProvider.ts +24 -0
- package/src/implementation/evm/initInfuraProvider.ts +26 -0
- package/src/implementation/evm/initJsonRpcProvider.ts +20 -0
- package/src/implementation/head/createBootstrapHead.ts +31 -0
- package/src/implementation/head/createForkedHead/config/getBridgeDestinationDetails.ts +27 -0
- package/src/implementation/head/createForkedHead/config/getBridgeSourceDetails.ts +19 -0
- package/src/implementation/head/createForkedHead/config/getForkDetails.ts +10 -0
- package/src/implementation/head/createForkedHead/config/index.ts +3 -0
- package/src/implementation/head/createForkedHead/createForkedHead.ts +29 -0
- package/src/implementation/head/createForkedHead/getBridgeDestinationObservation.ts +42 -0
- package/src/implementation/head/createForkedHead/getBridgeIntent.ts +51 -0
- package/src/implementation/head/createForkedHead/getBridgeSourceObservation.ts +46 -0
- package/src/implementation/head/createForkedHead/getFirstBlockForNewChain.ts +41 -0
- package/src/implementation/head/createForkedHead/index.ts +1 -0
- package/src/implementation/head/getForkFromBlock.ts +43 -0
- package/src/implementation/head/head.ts +49 -0
- package/src/implementation/head/index.ts +1 -0
- package/src/implementation/head/submitNewChain.ts +27 -0
- package/src/implementation/index.ts +12 -0
- package/src/implementation/mempoolRunner.ts +29 -0
- package/src/implementation/mempoolViewer.ts +29 -0
- package/src/implementation/pendingTransactions.ts +36 -0
- package/src/implementation/producer.ts +16 -0
- package/src/implementation/reward.ts +53 -0
- package/src/implementation/time.ts +26 -0
- package/src/implementation/validator.ts +15 -0
- package/src/index.ts +2 -2
- package/src/simple/block/index.ts +1 -0
- package/src/{BlockProducer/BaseBlockProducerService.ts → simple/block/runner/SimpleBlockRunner.ts} +111 -74
- package/src/simple/block/runner/index.ts +1 -0
- package/src/simple/block/runner/spec/SimpleBlockRewardViewer.ts +413 -0
- package/src/simple/index.ts +1 -0
- package/dist/neutral/AccountBalance/BaseAccountBalanceService.d.ts +0 -35
- package/dist/neutral/AccountBalance/BaseAccountBalanceService.d.ts.map +0 -1
- package/dist/neutral/AccountTransfers/BaseAccountTransfersService.d.ts +0 -13
- package/dist/neutral/AccountTransfers/BaseAccountTransfersService.d.ts.map +0 -1
- package/dist/neutral/AccountTransfers/index.d.ts +0 -2
- package/dist/neutral/AccountTransfers/index.d.ts.map +0 -1
- package/dist/neutral/BlockProducer/BaseBlockProducerService.d.ts +0 -85
- package/dist/neutral/BlockProducer/BaseBlockProducerService.d.ts.map +0 -1
- package/dist/neutral/BlockProducer/generateTransactionFeeTransfers.d.ts.map +0 -1
- package/dist/neutral/BlockProducer/index.d.ts +0 -2
- package/dist/neutral/BlockProducer/index.d.ts.map +0 -1
- package/dist/neutral/BlockReward/BaseBlockRewardService.d.ts +0 -10
- package/dist/neutral/BlockReward/BaseBlockRewardService.d.ts.map +0 -1
- package/dist/neutral/BlockReward/EvmBlockRewardService.d.ts +0 -18
- package/dist/neutral/BlockReward/EvmBlockRewardService.d.ts.map +0 -1
- package/dist/neutral/BlockReward/MemoryBlockRewardService.d.ts +0 -23
- package/dist/neutral/BlockReward/MemoryBlockRewardService.d.ts.map +0 -1
- package/src/AccountBalance/BaseAccountBalanceService.ts +0 -98
- package/src/AccountTransfers/BaseAccountTransfersService.ts +0 -36
- package/src/AccountTransfers/index.ts +0 -1
- package/src/BlockProducer/index.ts +0 -1
- package/src/BlockReward/BaseBlockRewardService.ts +0 -17
- package/src/BlockReward/EvmBlockRewardService.ts +0 -49
- package/src/BlockReward/MemoryBlockRewardService.ts +0 -72
- /package/dist/neutral/{BlockProducer → simple/block/runner}/generateTransactionFeeTransfers.d.ts +0 -0
- /package/src/{BlockProducer → simple/block/runner}/generateTransactionFeeTransfers.ts +0 -0
|
@@ -0,0 +1,413 @@
|
|
|
1
|
+
import '@xylabs/vitest-extended'
|
|
2
|
+
|
|
3
|
+
import type {
|
|
4
|
+
Address, CreatableName, Hash, Promisable,
|
|
5
|
+
} from '@xylabs/sdk-js'
|
|
6
|
+
import {
|
|
7
|
+
asAddress, assertEx,
|
|
8
|
+
delay,
|
|
9
|
+
exists,
|
|
10
|
+
filterAs,
|
|
11
|
+
hexToBigInt, ZERO_HASH,
|
|
12
|
+
} from '@xylabs/sdk-js'
|
|
13
|
+
import { Account } from '@xyo-network/account'
|
|
14
|
+
import type { AccountInstance } from '@xyo-network/account-model'
|
|
15
|
+
import { MemoryArchivist } from '@xyo-network/archivist-memory'
|
|
16
|
+
import type { ArchivistInstance } from '@xyo-network/archivist-model'
|
|
17
|
+
import {
|
|
18
|
+
buildRandomChain, buildRandomTransaction, createGenesisBlock,
|
|
19
|
+
} from '@xyo-network/chain-protocol'
|
|
20
|
+
import { validateHydratedBlockState } from '@xyo-network/chain-validation'
|
|
21
|
+
import type { PayloadBundle, WithHashMeta } from '@xyo-network/payload-model'
|
|
22
|
+
import { PayloadBundleSchema } from '@xyo-network/payload-model'
|
|
23
|
+
import { HDWallet } from '@xyo-network/wallet'
|
|
24
|
+
import type {
|
|
25
|
+
BlockBoundWitness, ChainId,
|
|
26
|
+
HydratedBlock,
|
|
27
|
+
TimeDomain, TimePayload,
|
|
28
|
+
} from '@xyo-network/xl1-protocol'
|
|
29
|
+
import {
|
|
30
|
+
asBlockBoundWitness,
|
|
31
|
+
asChainStakeIntent,
|
|
32
|
+
asTransactionBoundWitness,
|
|
33
|
+
asTransfer,
|
|
34
|
+
TimeSchema,
|
|
35
|
+
XYO_ZERO_ADDRESS,
|
|
36
|
+
} from '@xyo-network/xl1-protocol'
|
|
37
|
+
import type {
|
|
38
|
+
BlockRewardViewer,
|
|
39
|
+
Config, ElectionService,
|
|
40
|
+
HydratedBlockStateValidationFunction, MempoolRunner, MempoolViewer, StakeIntentService,
|
|
41
|
+
TimeSyncViewer,
|
|
42
|
+
} from '@xyo-network/xl1-protocol-sdk'
|
|
43
|
+
import {
|
|
44
|
+
flattenHydratedBlock, flattenHydratedTransaction, getDefaultConfig,
|
|
45
|
+
HydratedBlockStateValidationError,
|
|
46
|
+
SimpleBlockRewardViewer,
|
|
47
|
+
SimpleMempoolRunner,
|
|
48
|
+
SimpleMempoolViewer,
|
|
49
|
+
} from '@xyo-network/xl1-protocol-sdk'
|
|
50
|
+
import {
|
|
51
|
+
beforeAll, beforeEach, describe, expect, it,
|
|
52
|
+
} from 'vitest'
|
|
53
|
+
import { mock } from 'vitest-mock-extended'
|
|
54
|
+
|
|
55
|
+
import { accountBalancesViewerFromArchivist } from '../../../../AccountBalance/index.ts'
|
|
56
|
+
import type { SimpleBlockRunnerParams } from '../SimpleBlockRunner.ts'
|
|
57
|
+
import { SimpleBlockRunner } from '../SimpleBlockRunner.ts'
|
|
58
|
+
|
|
59
|
+
describe('XyoBlockProducer', () => {
|
|
60
|
+
const leaderCount = 3
|
|
61
|
+
let mempoolViewer: MempoolViewer
|
|
62
|
+
let mempoolRunner: MempoolRunner
|
|
63
|
+
let account: AccountInstance
|
|
64
|
+
let blockProducer: SimpleBlockRunner
|
|
65
|
+
let chainArchivist: ArchivistInstance
|
|
66
|
+
// let chainIterator: EventingChainBlockNumberIteratorService
|
|
67
|
+
let electionService: ReturnType<typeof mock<ElectionService>>
|
|
68
|
+
let pendingTransactionsArchivist: ArchivistInstance
|
|
69
|
+
let pendingBlocksArchivist: ArchivistInstance
|
|
70
|
+
let rejectedTransactionsArchivist: ArchivistInstance
|
|
71
|
+
let rewardAddress = '1111111111111111111111111111111111111111' as Address
|
|
72
|
+
let blockRewardViewer: BlockRewardViewer
|
|
73
|
+
let stakeIntentService: ReturnType<typeof mock<StakeIntentService>>
|
|
74
|
+
let time: TimeSyncViewer
|
|
75
|
+
let transactionAccount: AccountInstance
|
|
76
|
+
const validPendingTransactions = Math.ceil(SimpleBlockRunner.DefaultBlockSize)
|
|
77
|
+
let config: Config
|
|
78
|
+
|
|
79
|
+
let currentBlock: WithHashMeta<BlockBoundWitness>
|
|
80
|
+
|
|
81
|
+
const chainId = assertEx(asAddress('Be17531fec6fEc55f3EAc3f1c187c87e4C47F81E'))
|
|
82
|
+
|
|
83
|
+
beforeAll(async () => {
|
|
84
|
+
account = await Account.random()
|
|
85
|
+
transactionAccount = await HDWallet.fromPhrase('room maximum palace fragile man pyramid school indoor base business want bronze assume marble report')
|
|
86
|
+
})
|
|
87
|
+
|
|
88
|
+
beforeEach(async () => {
|
|
89
|
+
config = getDefaultConfig()
|
|
90
|
+
config.producer.disableIntentRedeclaration = false
|
|
91
|
+
chainArchivist = await MemoryArchivist.create({ account: 'random' })
|
|
92
|
+
const genesisBlock = await createGenesisBlock(account, chainId, 0n, account.address)
|
|
93
|
+
await chainArchivist.insert([...genesisBlock[1], genesisBlock[0]])
|
|
94
|
+
// const chainMap = readPayloadMapFromStore<WithStorageMeta<Payload>>(chainArchivist)
|
|
95
|
+
// chainIterator = await ChainBlockNumberIterationService.create({
|
|
96
|
+
// chainMap,
|
|
97
|
+
// config,
|
|
98
|
+
// })
|
|
99
|
+
rejectedTransactionsArchivist = await MemoryArchivist.create({ account: 'random' })
|
|
100
|
+
electionService = mock<ElectionService>()
|
|
101
|
+
pendingTransactionsArchivist = await MemoryArchivist.create({ account: 'random' })
|
|
102
|
+
pendingBlocksArchivist = await MemoryArchivist.create({ account: 'random' })
|
|
103
|
+
mempoolViewer = await SimpleMempoolViewer.create({ pendingBlocksArchivist, pendingTransactionsArchivist })
|
|
104
|
+
mempoolRunner = await SimpleMempoolRunner.create({ pendingBlocksArchivist, pendingTransactionsArchivist })
|
|
105
|
+
// const BasePendingTransactionsServiceParams = {
|
|
106
|
+
// name: 'TestBasePendingTransactionsServiceParams' as CreatableName,
|
|
107
|
+
// chainArchivist,
|
|
108
|
+
// chainId,
|
|
109
|
+
// config,
|
|
110
|
+
// pendingTransactionsArchivist,
|
|
111
|
+
// rejectedTransactionsArchivist,
|
|
112
|
+
// } satisfies BasePendingTransactionsServiceParams
|
|
113
|
+
// pendingTransactionsService = await BasePendingTransactionsService.create(BasePendingTransactionsServiceParams)
|
|
114
|
+
await addPendingTransactions(validPendingTransactions)
|
|
115
|
+
|
|
116
|
+
stakeIntentService = mock<StakeIntentService>()
|
|
117
|
+
stakeIntentService.getDeclaredCandidateRanges.mockResolvedValue([])
|
|
118
|
+
time = {
|
|
119
|
+
currentTimeAndHash(domain: TimeDomain): Promisable<[number, Hash | null]> {
|
|
120
|
+
switch (domain) {
|
|
121
|
+
case 'epoch': {
|
|
122
|
+
return [Date.now(), null]
|
|
123
|
+
}
|
|
124
|
+
case 'xl1': {
|
|
125
|
+
return [1, '00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff' as Hash]
|
|
126
|
+
}
|
|
127
|
+
case 'ethereum': {
|
|
128
|
+
return [1, '00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff' as Hash]
|
|
129
|
+
}
|
|
130
|
+
// No default
|
|
131
|
+
}
|
|
132
|
+
},
|
|
133
|
+
currentTime(domain: TimeDomain): Promisable<[string, number]> {
|
|
134
|
+
switch (domain) {
|
|
135
|
+
case 'epoch': {
|
|
136
|
+
return ['epoch', Date.now()]
|
|
137
|
+
}
|
|
138
|
+
case 'xl1': {
|
|
139
|
+
return ['xl1', 1]
|
|
140
|
+
}
|
|
141
|
+
case 'ethereum': {
|
|
142
|
+
return ['ethereum', 1]
|
|
143
|
+
}
|
|
144
|
+
// No default
|
|
145
|
+
}
|
|
146
|
+
},
|
|
147
|
+
currentTimePayload(): Promisable<TimePayload> {
|
|
148
|
+
return {
|
|
149
|
+
schema: TimeSchema, epoch: Date.now(), xl1: 1,
|
|
150
|
+
}
|
|
151
|
+
},
|
|
152
|
+
/** Convert time between different domains */
|
|
153
|
+
convertTime(fromDomain: TimeDomain, toDomain: TimeDomain, from: number): Promisable<number> {
|
|
154
|
+
if (fromDomain === toDomain) {
|
|
155
|
+
return from
|
|
156
|
+
}
|
|
157
|
+
if (fromDomain === 'epoch' && toDomain === 'xl1') {
|
|
158
|
+
return 1
|
|
159
|
+
}
|
|
160
|
+
if (fromDomain === 'xl1' && toDomain === 'epoch') {
|
|
161
|
+
return Date.now()
|
|
162
|
+
}
|
|
163
|
+
return from
|
|
164
|
+
},
|
|
165
|
+
}
|
|
166
|
+
blockRewardViewer = await SimpleBlockRewardViewer.create()
|
|
167
|
+
const payloads = await chainArchivist.next({ limit: 1000 })
|
|
168
|
+
expect(payloads.length).toBe(9)
|
|
169
|
+
const balanceViewer = await accountBalancesViewerFromArchivist(chainId, chainArchivist)
|
|
170
|
+
const params: SimpleBlockRunnerParams = {
|
|
171
|
+
name: 'TestXyoBlockProducerParams' as CreatableName,
|
|
172
|
+
account,
|
|
173
|
+
balanceViewer,
|
|
174
|
+
chainId,
|
|
175
|
+
config,
|
|
176
|
+
mempoolRunner,
|
|
177
|
+
mempoolViewer,
|
|
178
|
+
// electionService,
|
|
179
|
+
// pendingTransactionsService,
|
|
180
|
+
// pendingBundledTransactionsArchivist,
|
|
181
|
+
rejectedTransactionsArchivist,
|
|
182
|
+
rewardAddress,
|
|
183
|
+
blockRewardViewer,
|
|
184
|
+
// stakeIntentService,
|
|
185
|
+
time,
|
|
186
|
+
validateHydratedBlockState,
|
|
187
|
+
}
|
|
188
|
+
blockProducer = await SimpleBlockRunner.create(params)
|
|
189
|
+
})
|
|
190
|
+
|
|
191
|
+
const addPendingTransactions = async (count: number = validPendingTransactions) => {
|
|
192
|
+
for (let i = 0; i < count; i++) {
|
|
193
|
+
const transaction = await buildRandomTransaction(chainId, [], transactionAccount)
|
|
194
|
+
const bundledPayload: PayloadBundle = {
|
|
195
|
+
schema: PayloadBundleSchema, payloads: flattenHydratedTransaction(transaction), root: transaction[0]._hash,
|
|
196
|
+
}
|
|
197
|
+
await pendingTransactionsArchivist.insert([bundledPayload])
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
describe('next', () => {
|
|
202
|
+
describe('block production', () => {
|
|
203
|
+
describe('when not current block leader', () => {
|
|
204
|
+
beforeEach(async () => {
|
|
205
|
+
const [hydratedBlock] = await buildRandomChain(account, 1, undefined, chainId, transactionAccount)
|
|
206
|
+
currentBlock = hydratedBlock[0]
|
|
207
|
+
await chainArchivist.insert(flattenHydratedBlock(hydratedBlock))
|
|
208
|
+
const leaders = await Promise.all(Array.from({ length: leaderCount }, async () => (await Account.random()).address))
|
|
209
|
+
electionService.getCreatorCommitteeForNextBlock.mockResolvedValue(leaders)
|
|
210
|
+
stakeIntentService.getDeclaredCandidateRanges.mockResolvedValue([])
|
|
211
|
+
})
|
|
212
|
+
it('should return undefined', async () => {
|
|
213
|
+
// Arrange
|
|
214
|
+
|
|
215
|
+
// Act
|
|
216
|
+
const result = await blockProducer.next(currentBlock)
|
|
217
|
+
|
|
218
|
+
// Assert
|
|
219
|
+
expect(result).toBeUndefined()
|
|
220
|
+
})
|
|
221
|
+
})
|
|
222
|
+
describe('when current block leader', () => {
|
|
223
|
+
beforeEach(async () => {
|
|
224
|
+
const [hydratedBlock] = await buildRandomChain(account, 1, undefined, chainId, transactionAccount)
|
|
225
|
+
currentBlock = hydratedBlock[0]
|
|
226
|
+
await chainArchivist.insert(flattenHydratedBlock(hydratedBlock))
|
|
227
|
+
await delay(1000)
|
|
228
|
+
electionService.getCreatorCommitteeForNextBlock.mockResolvedValue([account.address])
|
|
229
|
+
})
|
|
230
|
+
it('should return a valid block', async () => {
|
|
231
|
+
// Arrange
|
|
232
|
+
|
|
233
|
+
// Act
|
|
234
|
+
const result = await blockProducer.next(currentBlock)
|
|
235
|
+
|
|
236
|
+
// Assert
|
|
237
|
+
expect(result).toBeDefined()
|
|
238
|
+
expect(result).toBeArrayOfSize(2)
|
|
239
|
+
const [block, transactionsAndData] = result ?? []
|
|
240
|
+
expect(block).toBeDefined()
|
|
241
|
+
expect(asBlockBoundWitness(block)).toBeDefined()
|
|
242
|
+
expect(transactionsAndData).toBeDefined()
|
|
243
|
+
expect(transactionsAndData).toBeArray()
|
|
244
|
+
const transactions = transactionsAndData?.filter(asTransactionBoundWitness).filter(exists)
|
|
245
|
+
expect(transactions).toBeArrayOfSize(validPendingTransactions)
|
|
246
|
+
})
|
|
247
|
+
it('should remove invalid transactions', async () => {
|
|
248
|
+
// Arrange
|
|
249
|
+
let rejectBlock = true
|
|
250
|
+
const validateHydratedBlockState: HydratedBlockStateValidationFunction = async (
|
|
251
|
+
hydratedBlock: HydratedBlock,
|
|
252
|
+
chainId: ChainId,
|
|
253
|
+
) => {
|
|
254
|
+
return rejectBlock ? [await Promise.resolve(new HydratedBlockStateValidationError(ZERO_HASH, chainId, hydratedBlock, 'Invalid block'))] : []
|
|
255
|
+
}
|
|
256
|
+
// const blockViewer = blockViewerFromChainIteratorAndArchivist(chainIterator, chainArchivist)
|
|
257
|
+
const balanceViewer = await accountBalancesViewerFromArchivist(chainId, chainArchivist)
|
|
258
|
+
const params: SimpleBlockRunnerParams = {
|
|
259
|
+
name: 'TestXyoBlockProducerParams' as CreatableName,
|
|
260
|
+
account,
|
|
261
|
+
balanceViewer,
|
|
262
|
+
chainId,
|
|
263
|
+
config,
|
|
264
|
+
// electionService,
|
|
265
|
+
mempoolRunner,
|
|
266
|
+
mempoolViewer,
|
|
267
|
+
// pendingBundledTransactionsArchivist,
|
|
268
|
+
// pendingTransactionsService,
|
|
269
|
+
rejectedTransactionsArchivist,
|
|
270
|
+
rewardAddress,
|
|
271
|
+
blockRewardViewer,
|
|
272
|
+
// stakeIntentService,
|
|
273
|
+
time,
|
|
274
|
+
validateHydratedBlockState,
|
|
275
|
+
}
|
|
276
|
+
blockProducer = await SimpleBlockRunner.create(params)
|
|
277
|
+
|
|
278
|
+
// Act
|
|
279
|
+
// Force producer to reject first block
|
|
280
|
+
rejectBlock = true
|
|
281
|
+
const invalidTransactionCount = Math.floor(validPendingTransactions / 2)
|
|
282
|
+
await addPendingTransactions(invalidTransactionCount)
|
|
283
|
+
|
|
284
|
+
// Ensure bad block is not produced
|
|
285
|
+
const firstResult = await blockProducer.next(currentBlock)
|
|
286
|
+
expect(firstResult).toBeUndefined()
|
|
287
|
+
// Do not reject second block
|
|
288
|
+
rejectBlock = false
|
|
289
|
+
// Add more pending transactions
|
|
290
|
+
const newTransactionCount = Math.floor(validPendingTransactions / 2)
|
|
291
|
+
await addPendingTransactions(newTransactionCount)
|
|
292
|
+
// Ensure producer recovers from bad block
|
|
293
|
+
const result = await blockProducer.next(currentBlock)
|
|
294
|
+
|
|
295
|
+
// Assert
|
|
296
|
+
expect(result).toBeDefined()
|
|
297
|
+
expect(result).toBeArrayOfSize(2)
|
|
298
|
+
const [block, transactionsAndData] = result ?? []
|
|
299
|
+
expect(block).toBeDefined()
|
|
300
|
+
if (block) {
|
|
301
|
+
expect(asBlockBoundWitness(block)).toBeDefined()
|
|
302
|
+
expect(transactionsAndData).toBeDefined()
|
|
303
|
+
expect(transactionsAndData).toBeArray()
|
|
304
|
+
const transactions = transactionsAndData?.filter(asTransactionBoundWitness).filter(exists) ?? []
|
|
305
|
+
expect(transactions).toBeArrayOfSize(newTransactionCount)
|
|
306
|
+
const transfers = filterAs(assertEx(transactionsAndData), asTransfer)
|
|
307
|
+
const blockRewardTransfer = transfers.find(transfer => transfer.from === XYO_ZERO_ADDRESS)
|
|
308
|
+
expect(blockRewardTransfer).toBeDefined()
|
|
309
|
+
let totalTransfer = 0n
|
|
310
|
+
for (const value of Object.values(blockRewardTransfer?.transfers ?? {})) {
|
|
311
|
+
const bigIntValue = hexToBigInt(value)
|
|
312
|
+
totalTransfer += bigIntValue
|
|
313
|
+
}
|
|
314
|
+
expect(totalTransfer).toEqual(3_000_000_000_000_000_000_000n)
|
|
315
|
+
}
|
|
316
|
+
})
|
|
317
|
+
})
|
|
318
|
+
})
|
|
319
|
+
describe('producer re-declare intent', () => {
|
|
320
|
+
describe('when within re-declare intent window', () => {
|
|
321
|
+
beforeEach(async () => {
|
|
322
|
+
const [hydratedBlock] = await buildRandomChain(account, 1, undefined, chainId, transactionAccount)
|
|
323
|
+
currentBlock = hydratedBlock[0]
|
|
324
|
+
await chainArchivist.insert(flattenHydratedBlock(hydratedBlock))
|
|
325
|
+
electionService.getCreatorCommitteeForNextBlock.mockResolvedValue([account.address])
|
|
326
|
+
stakeIntentService.getDeclaredCandidateRanges.mockResolvedValue([[0, 10]])
|
|
327
|
+
})
|
|
328
|
+
it('should re-declare intent if configured for re-declaration', async () => {
|
|
329
|
+
// Arrange
|
|
330
|
+
config.producer.disableIntentRedeclaration = false
|
|
331
|
+
|
|
332
|
+
// Act
|
|
333
|
+
const result = await blockProducer.next(currentBlock)
|
|
334
|
+
|
|
335
|
+
// Assert
|
|
336
|
+
expect(result).toBeDefined()
|
|
337
|
+
expect(result).toBeArrayOfSize(2)
|
|
338
|
+
const [block, payloads] = result ?? []
|
|
339
|
+
expect(block).toBeDefined()
|
|
340
|
+
expect(asBlockBoundWitness(block)).toBeDefined()
|
|
341
|
+
expect(payloads).toBeArray()
|
|
342
|
+
const allData = flattenHydratedBlock(assertEx(result))
|
|
343
|
+
const declaration = filterAs(allData, asChainStakeIntent).at(0)
|
|
344
|
+
expect(declaration).toBeDefined()
|
|
345
|
+
expect(declaration?.from).toEqual(blockProducer.address)
|
|
346
|
+
})
|
|
347
|
+
it('should not re-declare intent if not configured for re-declaration', async () => {
|
|
348
|
+
// Arrange
|
|
349
|
+
config.producer.disableIntentRedeclaration = true
|
|
350
|
+
|
|
351
|
+
// Act
|
|
352
|
+
const result = await blockProducer.next(currentBlock)
|
|
353
|
+
|
|
354
|
+
// Assert
|
|
355
|
+
expect(result).toBeDefined()
|
|
356
|
+
expect(result).toBeArrayOfSize(2)
|
|
357
|
+
const [block, payloads] = result ?? []
|
|
358
|
+
expect(block).toBeDefined()
|
|
359
|
+
expect(asBlockBoundWitness(block)).toBeDefined()
|
|
360
|
+
expect(payloads).toBeArray()
|
|
361
|
+
const allData = flattenHydratedBlock(assertEx(result))
|
|
362
|
+
const declaration = filterAs(allData, asChainStakeIntent).at(0)
|
|
363
|
+
expect(declaration).toBeUndefined()
|
|
364
|
+
})
|
|
365
|
+
})
|
|
366
|
+
describe('when not within re-declare intent window', () => {
|
|
367
|
+
beforeEach(async () => {
|
|
368
|
+
const [hydratedBlock] = await buildRandomChain(account, 1, undefined, chainId, transactionAccount)
|
|
369
|
+
currentBlock = hydratedBlock[0]
|
|
370
|
+
await chainArchivist.insert(flattenHydratedBlock(hydratedBlock))
|
|
371
|
+
electionService.getCreatorCommitteeForNextBlock.mockResolvedValue([account.address])
|
|
372
|
+
stakeIntentService.getDeclaredCandidateRanges.mockResolvedValue([[0, 1_000_000_000]])
|
|
373
|
+
})
|
|
374
|
+
it('should not re-declare intent if configured for re-declaration', async () => {
|
|
375
|
+
// Arrange
|
|
376
|
+
config.producer.disableIntentRedeclaration = false
|
|
377
|
+
|
|
378
|
+
// Act
|
|
379
|
+
const result = await blockProducer.next(currentBlock)
|
|
380
|
+
|
|
381
|
+
// Assert
|
|
382
|
+
expect(result).toBeDefined()
|
|
383
|
+
expect(result).toBeArrayOfSize(2)
|
|
384
|
+
const [block, payloads] = result ?? []
|
|
385
|
+
expect(block).toBeDefined()
|
|
386
|
+
expect(asBlockBoundWitness(block)).toBeDefined()
|
|
387
|
+
expect(payloads).toBeArray()
|
|
388
|
+
const allData = flattenHydratedBlock(assertEx(result))
|
|
389
|
+
const declaration = filterAs(allData, asChainStakeIntent).at(0)
|
|
390
|
+
expect(declaration).toBeUndefined()
|
|
391
|
+
})
|
|
392
|
+
it('should not re-declare intent if not configured for re-declaration', async () => {
|
|
393
|
+
// Arrange
|
|
394
|
+
config.producer.disableIntentRedeclaration = true
|
|
395
|
+
|
|
396
|
+
// Act
|
|
397
|
+
const result = await blockProducer.next(currentBlock)
|
|
398
|
+
|
|
399
|
+
// Assert
|
|
400
|
+
expect(result).toBeDefined()
|
|
401
|
+
expect(result).toBeArrayOfSize(2)
|
|
402
|
+
const [block, payloads] = result ?? []
|
|
403
|
+
expect(block).toBeDefined()
|
|
404
|
+
expect(asBlockBoundWitness(block)).toBeDefined()
|
|
405
|
+
expect(payloads).toBeArray()
|
|
406
|
+
const allData = flattenHydratedBlock(assertEx(result))
|
|
407
|
+
const declaration = filterAs(allData, asChainStakeIntent).at(0)
|
|
408
|
+
expect(declaration).toBeUndefined()
|
|
409
|
+
})
|
|
410
|
+
})
|
|
411
|
+
})
|
|
412
|
+
})
|
|
413
|
+
})
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './block/index.ts'
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { Address, Hash } from '@xylabs/sdk-js';
|
|
2
|
-
import { ReadArchivist } from '@xyo-network/archivist-model';
|
|
3
|
-
import { AttoXL1, XL1BlockRange } from '@xyo-network/xl1-protocol';
|
|
4
|
-
import { AccountBalanceHistoryItem, AccountBalanceViewer, BalanceStepSummaryContext, BlockViewer, TransfersStepSummaryContext } from '@xyo-network/xl1-protocol-sdk';
|
|
5
|
-
import z from 'zod';
|
|
6
|
-
import { BaseService } from '../BaseService.ts';
|
|
7
|
-
import { BaseServiceParams } from '../model/index.ts';
|
|
8
|
-
export declare const BaseAccountBalanceServiceParamsZod: z.ZodObject<{
|
|
9
|
-
blockViewer: z.ZodObject<{}, z.z.core.$loose>;
|
|
10
|
-
chainArchivist: z.ZodObject<{}, z.z.core.$loose>;
|
|
11
|
-
chainIterator: z.ZodObject<{}, z.z.core.$loose>;
|
|
12
|
-
context: z.ZodObject<{}, z.z.core.$loose>;
|
|
13
|
-
transferContext: z.ZodObject<{}, z.z.core.$loose>;
|
|
14
|
-
}, z.z.core.$strip>;
|
|
15
|
-
export interface BaseAccountBalanceServiceParams extends BaseServiceParams {
|
|
16
|
-
blockViewer: BlockViewer;
|
|
17
|
-
chainArchivist: ReadArchivist;
|
|
18
|
-
context: BalanceStepSummaryContext;
|
|
19
|
-
transfersSummaryContext: TransfersStepSummaryContext;
|
|
20
|
-
}
|
|
21
|
-
export declare class BaseAccountBalanceService extends BaseService<BaseAccountBalanceServiceParams> implements AccountBalanceViewer {
|
|
22
|
-
protected accountBalanceViewer: AccountBalanceViewer;
|
|
23
|
-
protected get blockViewer(): BlockViewer;
|
|
24
|
-
static paramsHandler(params?: Partial<BaseAccountBalanceServiceParams> | undefined): Promise<BaseAccountBalanceServiceParams>;
|
|
25
|
-
accountBalance(address: Address, headOrRange?: XL1BlockRange | Hash): Promise<AttoXL1>;
|
|
26
|
-
accountBalanceHistory(address: Address): Promise<AccountBalanceHistoryItem[]>;
|
|
27
|
-
accountBalanceHistory(address: Address, head: Hash): Promise<AccountBalanceHistoryItem[]>;
|
|
28
|
-
accountBalanceHistory(address: Address, range: XL1BlockRange): Promise<AccountBalanceHistoryItem[]>;
|
|
29
|
-
accountsBalances(address: Address[], _headOrRange?: Hash | XL1BlockRange): Promise<Partial<Record<Address, AttoXL1>>>;
|
|
30
|
-
accountsBalancesHistory(addresses: Address[]): Promise<Partial<Record<Address, AccountBalanceHistoryItem[]>>>;
|
|
31
|
-
accountsBalancesHistory(addresses: Address[], head: Hash): Promise<Partial<Record<Address, AccountBalanceHistoryItem[]>>>;
|
|
32
|
-
accountsBalancesHistory(addresses: Address[], range: XL1BlockRange): Promise<Partial<Record<Address, AccountBalanceHistoryItem[]>>>;
|
|
33
|
-
createHandler(): Promise<void>;
|
|
34
|
-
}
|
|
35
|
-
//# sourceMappingURL=BaseAccountBalanceService.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"BaseAccountBalanceService.d.ts","sourceRoot":"","sources":["../../../src/AccountBalance/BaseAccountBalanceService.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EAAuB,IAAI,EACnC,MAAM,gBAAgB,CAAA;AAEvB,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAA;AAC5D,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAClE,OAAO,EACL,yBAAyB,EACzB,oBAAoB,EAEpB,yBAAyB,EACzB,WAAW,EAEX,2BAA2B,EAC5B,MAAM,+BAA+B,CAAA;AACtC,OAAO,CAAC,MAAM,KAAK,CAAA;AAEnB,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAErD,eAAO,MAAM,kCAAkC;;;;;;mBAM7C,CAAA;AAEF,MAAM,WAAW,+BAAgC,SAAQ,iBAAiB;IACxE,WAAW,EAAE,WAAW,CAAA;IACxB,cAAc,EAAE,aAAa,CAAA;IAC7B,OAAO,EAAE,yBAAyB,CAAA;IAClC,uBAAuB,EAAE,2BAA2B,CAAA;CACrD;AAED,qBACa,yBAA0B,SAAQ,WAAW,CAAC,+BAA+B,CAAE,YAAW,oBAAoB;IACzH,SAAS,CAAC,oBAAoB,EAAG,oBAAoB,CAAA;IAErD,SAAS,KAAK,WAAW,gBAExB;WAEqB,aAAa,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,+BAA+B,CAAC,GAAG,SAAS,GAAG,OAAO,CAAC,+BAA+B,CAAC;IAOtI,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,aAAa,GAAG,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC;IAKtF,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,yBAAyB,EAAE,CAAC;IAC7E,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,yBAAyB,EAAE,CAAC;IACzF,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,yBAAyB,EAAE,CAAC;IAKnG,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,YAAY,CAAC,EAAE,IAAI,GAAG,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IAqBrH,uBAAuB,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,yBAAyB,EAAE,CAAC,CAAC,CAAC;IAC7G,uBAAuB,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,yBAAyB,EAAE,CAAC,CAAC,CAAC;IACzH,uBAAuB,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,yBAAyB,EAAE,CAAC,CAAC,CAAC;IAK1H,aAAa;CAO7B"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { Address, Hash } from '@xylabs/sdk-js';
|
|
2
|
-
import { AttoXL1 } from '@xyo-network/xl1-protocol';
|
|
3
|
-
import { AccountTransfersService, TransfersStepSummaryContext } from '@xyo-network/xl1-protocol-sdk';
|
|
4
|
-
import { BaseService } from '../BaseService.ts';
|
|
5
|
-
import { BaseServiceParams } from '../model/index.ts';
|
|
6
|
-
export interface BaseAccountTransferServiceParams extends BaseServiceParams {
|
|
7
|
-
context: TransfersStepSummaryContext;
|
|
8
|
-
}
|
|
9
|
-
export declare class BaseAccountTransfersService extends BaseService<BaseAccountTransferServiceParams> implements AccountTransfersService {
|
|
10
|
-
transfer(head: Hash, address: Address): Promise<AttoXL1>;
|
|
11
|
-
transfers(head: Hash, addresses: Address[]): Promise<Partial<Record<Address, AttoXL1>>>;
|
|
12
|
-
}
|
|
13
|
-
//# sourceMappingURL=BaseAccountTransfersService.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"BaseAccountTransfersService.d.ts","sourceRoot":"","sources":["../../../src/AccountTransfers/BaseAccountTransfersService.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EAAa,IAAI,EACzB,MAAM,gBAAgB,CAAA;AAEvB,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAA;AACnD,OAAO,EACL,uBAAuB,EACvB,2BAA2B,EAE5B,MAAM,+BAA+B,CAAA;AAEtC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAErD,MAAM,WAAW,gCAAiC,SAAQ,iBAAiB;IACzE,OAAO,EAAE,2BAA2B,CAAA;CACrC;AAED,qBACa,2BAA4B,SAAQ,WAAW,CAAC,gCAAgC,CAAE,YAAW,uBAAuB;IACzH,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAIxD,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;CAW9F"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/AccountTransfers/index.ts"],"names":[],"mappings":"AAAA,cAAc,kCAAkC,CAAA"}
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
import { Address, Hex } from '@xylabs/sdk-js';
|
|
2
|
-
import { ArchivistInstance } from '@xyo-network/archivist-model';
|
|
3
|
-
import { BlockRewardDiviner } from '@xyo-network/chain-modules';
|
|
4
|
-
import { WithHashMeta } from '@xyo-network/payload-model';
|
|
5
|
-
import { BlockBoundWitness, ChainStakeIntent, HydratedBlockWithHashMeta, Transfer } from '@xyo-network/xl1-protocol';
|
|
6
|
-
import { AccountBalanceViewer, BlockProducerService, Config, MempoolViewer, StakeIntentService, TimeSyncViewer } from '@xyo-network/xl1-protocol-sdk';
|
|
7
|
-
import z from 'zod';
|
|
8
|
-
import { BaseService } from '../BaseService.ts';
|
|
9
|
-
import { XyoValidatorParams } from '../ChainValidator/index.ts';
|
|
10
|
-
/**
|
|
11
|
-
* The default block size for a block
|
|
12
|
-
*/
|
|
13
|
-
export declare const DEFAULT_BLOCK_SIZE = 10;
|
|
14
|
-
/**
|
|
15
|
-
* The amount of time for which a producer will restake their intent
|
|
16
|
-
*/
|
|
17
|
-
export declare const XYO_PRODUCER_REDECLARATION_DURATION = 10000;
|
|
18
|
-
/**
|
|
19
|
-
* The number of blocks within which a producer will redeclare
|
|
20
|
-
* their intent to produce blocks
|
|
21
|
-
*/
|
|
22
|
-
export declare const XYO_PRODUCER_REDECLARATION_WINDOW = 500;
|
|
23
|
-
export declare const BaseBlockProducerServiceParamsZod: z.ZodObject<{
|
|
24
|
-
balanceService: z.ZodObject<{}, z.z.core.$loose>;
|
|
25
|
-
pendingTransactionsService: z.ZodObject<{}, z.z.core.$loose>;
|
|
26
|
-
rejectedTransactionsArchivist: z.ZodObject<{}, z.z.core.$loose>;
|
|
27
|
-
rewardAddress: z.ZodPipe<z.ZodString, z.ZodTransform<Address, string>>;
|
|
28
|
-
time: z.ZodObject<{}, z.z.core.$loose>;
|
|
29
|
-
}, z.z.core.$strip>;
|
|
30
|
-
export interface BaseBlockProducerServiceParams extends XyoValidatorParams<Pick<Config, 'producer'>> {
|
|
31
|
-
balanceService: AccountBalanceViewer;
|
|
32
|
-
pendingTransactionsService: MempoolViewer;
|
|
33
|
-
rejectedTransactionsArchivist: ArchivistInstance;
|
|
34
|
-
rewardAddress: Address;
|
|
35
|
-
time: TimeSyncViewer;
|
|
36
|
-
}
|
|
37
|
-
export declare class BaseBlockProducerService extends BaseService<BaseBlockProducerServiceParams> implements BlockProducerService {
|
|
38
|
-
protected _blockRewardDiviner: BlockRewardDiviner | undefined;
|
|
39
|
-
/**
|
|
40
|
-
* The default block size for a block
|
|
41
|
-
*/
|
|
42
|
-
static get DefaultBlockSize(): number;
|
|
43
|
-
/**
|
|
44
|
-
* The amount of time for which the producer will redeclare
|
|
45
|
-
* their intent to continue producing blocks
|
|
46
|
-
*/
|
|
47
|
-
static get RedeclarationDuration(): number;
|
|
48
|
-
/**
|
|
49
|
-
* The number of blocks within which the producer will redeclare
|
|
50
|
-
* their intent to continue producing blocks
|
|
51
|
-
*/
|
|
52
|
-
static get RedeclarationWindow(): number;
|
|
53
|
-
get address(): Address;
|
|
54
|
-
protected get account(): import("@xyo-network/account-model").AccountInstance;
|
|
55
|
-
protected get balanceService(): AccountBalanceViewer;
|
|
56
|
-
protected get blockViewer(): import("@xyo-network/xl1-protocol-sdk").BlockViewer;
|
|
57
|
-
protected get chainId(): Hex;
|
|
58
|
-
protected get electionService(): import("@xyo-network/xl1-protocol-sdk").ElectionService;
|
|
59
|
-
protected get pendingTransactionsService(): MempoolViewer;
|
|
60
|
-
protected get rejectedTransactionsArchivist(): ArchivistInstance<import("@xyo-network/archivist-model").ArchivistParams<import("@xyo-network/module-model").AnyConfigSchema<import("@xyo-network/archivist-model").ArchivistConfig>>, import("@xyo-network/archivist-model").ArchivistModuleEventData, import("@xyo-network/payload-model").Payload>;
|
|
61
|
-
protected get rewardAddress(): Address;
|
|
62
|
-
protected get rewardService(): import("@xyo-network/xl1-protocol-sdk").BlockRewardService;
|
|
63
|
-
protected get stakeIntentService(): StakeIntentService;
|
|
64
|
-
protected get time(): TimeSyncViewer;
|
|
65
|
-
protected get validateHydratedBlockState(): import("@xyo-network/xl1-protocol-sdk").HydratedBlockStateValidationFunction;
|
|
66
|
-
static paramsHandler(params?: Partial<BaseBlockProducerServiceParams> | undefined): Promise<BaseBlockProducerServiceParams>;
|
|
67
|
-
next(head: WithHashMeta<BlockBoundWitness>): Promise<HydratedBlockWithHashMeta | undefined>;
|
|
68
|
-
protected getBlockRewardTransfers(block: number): Promise<Transfer[]>;
|
|
69
|
-
/**
|
|
70
|
-
* Handles the producer redeclaration logic
|
|
71
|
-
* @param head The current head block
|
|
72
|
-
* @returns chain stake intent for the producer redeclaration, or undefined if no redeclaration is needed
|
|
73
|
-
*/
|
|
74
|
-
protected getProducerRedeclaration(head: WithHashMeta<BlockBoundWitness>): Promise<ChainStakeIntent | undefined>;
|
|
75
|
-
protected proposeNextValidBlock(head: WithHashMeta<BlockBoundWitness>, validateBalances?: boolean): Promise<HydratedBlockWithHashMeta | undefined>;
|
|
76
|
-
private filterByFunded;
|
|
77
|
-
private generateTimePayload;
|
|
78
|
-
/**
|
|
79
|
-
* Check if a heartbeat block is required based on network activity.
|
|
80
|
-
* @param head The current head block
|
|
81
|
-
* @returns True if a heartbeat is required, false otherwise
|
|
82
|
-
*/
|
|
83
|
-
private heartbeatRequired;
|
|
84
|
-
}
|
|
85
|
-
//# sourceMappingURL=BaseBlockProducerService.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"BaseBlockProducerService.d.ts","sourceRoot":"","sources":["../../../src/BlockProducer/BaseBlockProducerService.ts"],"names":[],"mappings":"AACA,OAAO,EACL,OAAO,EAAmD,GAAG,EAC9D,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAChE,OAAO,EACL,kBAAkB,EACnB,MAAM,4BAA4B,CAAA;AAGnC,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AACzD,OAAO,EAC8C,iBAAiB,EACpE,gBAAgB,EAAsB,yBAAyB,EAC/D,QAAQ,EACT,MAAM,2BAA2B,CAAA;AAClC,OAAO,EACL,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,EAAE,aAAa,EAAE,kBAAkB,EAAE,cAAc,EACtG,MAAM,+BAA+B,CAAA;AACtC,OAAO,CAAC,MAAM,KAAK,CAAA;AAEnB,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAG/D;;GAEG;AACH,eAAO,MAAM,kBAAkB,KAAK,CAAA;AAEpC;;GAEG;AACH,eAAO,MAAM,mCAAmC,QAAS,CAAA;AAEzD;;;GAGG;AACH,eAAO,MAAM,iCAAiC,MAAM,CAAA;AAEpD,eAAO,MAAM,iCAAiC;;;;;;mBAM5C,CAAA;AAEF,MAAM,WAAW,8BAA+B,SAAQ,kBAAkB,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAClG,cAAc,EAAE,oBAAoB,CAAA;IACpC,0BAA0B,EAAE,aAAa,CAAA;IACzC,6BAA6B,EAAE,iBAAiB,CAAA;IAChD,aAAa,EAAE,OAAO,CAAA;IACtB,IAAI,EAAE,cAAc,CAAA;CACrB;AAED,qBACa,wBAAyB,SAAQ,WAAW,CAAC,8BAA8B,CAAE,YAAW,oBAAoB;IACvH,SAAS,CAAC,mBAAmB,EAAE,kBAAkB,GAAG,SAAS,CAAA;IAE7D;;OAEG;IACH,MAAM,KAAK,gBAAgB,IAAI,MAAM,CAEpC;IAED;;;OAGG;IACH,MAAM,KAAK,qBAAqB,IAAI,MAAM,CAEzC;IAED;;;OAGG;IACH,MAAM,KAAK,mBAAmB,IAAI,MAAM,CAEvC;IAED,IAAI,OAAO,YAEV;IAED,SAAS,KAAK,OAAO,yDAEpB;IAED,SAAS,KAAK,cAAc,yBAE3B;IAED,SAAS,KAAK,WAAW,wDAExB;IAED,SAAS,KAAK,OAAO,QAEpB;IAED,SAAS,KAAK,eAAe,4DAE5B;IAED,SAAS,KAAK,0BAA0B,kBAEvC;IAED,SAAS,KAAK,6BAA6B,0SAE1C;IAED,SAAS,KAAK,aAAa,IAAI,OAAO,CAErC;IAED,SAAS,KAAK,aAAa,+DAE1B;IAED,SAAS,KAAK,kBAAkB,IAAI,kBAAkB,CAErD;IAED,SAAS,KAAK,IAAI,IAAI,cAAc,CAEnC;IAED,SAAS,KAAK,0BAA0B,iFAEvC;WAEqB,aAAa,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,8BAA8B,CAAC,GAAG,SAAS,GAAG,OAAO,CAAC,8BAA8B,CAAC;IAMpI,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,iBAAiB,CAAC,GAAG,OAAO,CAAC,yBAAyB,GAAG,SAAS,CAAC;cAgBjF,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAmB3E;;;;OAIG;cACa,wBAAwB,CAAC,IAAI,EAAE,YAAY,CAAC,iBAAiB,CAAC,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;cAiBtG,qBAAqB,CAAC,IAAI,EAAE,YAAY,CAAC,iBAAiB,CAAC,EAAE,gBAAgB,UAAQ,GAAG,OAAO,CAAC,yBAAyB,GAAG,SAAS,CAAC;YA+DxI,cAAc;YAyBd,mBAAmB;IAgBjC;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;CAU1B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"generateTransactionFeeTransfers.d.ts","sourceRoot":"","sources":["../../../src/BlockProducer/generateTransactionFeeTransfers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAiB,MAAM,gBAAgB,CAAA;AAG5D,OAAO,KAAK,EACV,yBAAyB,EACzB,QAAQ,EAET,MAAM,2BAA2B,CAAA;AAKlC,wBAAsB,+BAA+B,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,yBAAyB,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CA0CtI"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/BlockProducer/index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAA"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { EmptyObject, Promisable } from '@xylabs/sdk-js';
|
|
2
|
-
import { BlockRewardService } from '@xyo-network/xl1-protocol-sdk';
|
|
3
|
-
import { BaseService } from '../BaseService.ts';
|
|
4
|
-
import { BaseServiceParams } from '../model/index.ts';
|
|
5
|
-
export interface BaseBlockRewardServiceParams<TConfig extends EmptyObject = EmptyObject> extends BaseServiceParams<TConfig> {
|
|
6
|
-
}
|
|
7
|
-
export declare class BaseBlockRewardService<TParams extends BaseBlockRewardServiceParams = BaseBlockRewardServiceParams> extends BaseService<TParams> implements BlockRewardService {
|
|
8
|
-
getRewardForBlock(_blockNumber: bigint): Promisable<bigint>;
|
|
9
|
-
}
|
|
10
|
-
//# sourceMappingURL=BaseBlockRewardService.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"BaseBlockRewardService.d.ts","sourceRoot":"","sources":["../../../src/BlockReward/BaseBlockRewardService.ts"],"names":[],"mappings":"AAAA,OAAO,EACM,WAAW,EAAE,UAAU,EACnC,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAA;AAElE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAErD,MAAM,WAAW,4BAA4B,CAAC,OAAO,SAAS,WAAW,GAAG,WAAW,CAAE,SAAQ,iBAAiB,CAAC,OAAO,CAAC;CAAG;AAE9H,qBACa,sBAAsB,CAAC,OAAO,SAAS,4BAA4B,GAAG,4BAA4B,CAC7G,SAAQ,WAAW,CAAC,OAAO,CAAE,YAAW,kBAAkB;IAC1D,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;CAG5D"}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { AccountInstance } from '@xyo-network/account-model';
|
|
2
|
-
import { BlockRewardService, ChainService, Config } from '@xyo-network/xl1-protocol-sdk';
|
|
3
|
-
import { Provider } from 'ethers/providers';
|
|
4
|
-
import { BaseBlockRewardService, BaseBlockRewardServiceParams } from './BaseBlockRewardService.ts';
|
|
5
|
-
export interface EvmBlockRewardServiceParams extends BaseBlockRewardServiceParams<Pick<Config, 'evm'>> {
|
|
6
|
-
account: AccountInstance;
|
|
7
|
-
chainService?: ChainService;
|
|
8
|
-
provider?: Provider;
|
|
9
|
-
}
|
|
10
|
-
export declare class EvmBlockRewardService extends BaseBlockRewardService<EvmBlockRewardServiceParams> implements BlockRewardService {
|
|
11
|
-
protected _contractAddress: string | undefined;
|
|
12
|
-
protected get chainService(): ChainService;
|
|
13
|
-
protected get contractAddress(): string;
|
|
14
|
-
protected get provider(): Provider;
|
|
15
|
-
createHandler(): Promise<void>;
|
|
16
|
-
getRewardForBlock(blockNumber: bigint): Promise<bigint>;
|
|
17
|
-
}
|
|
18
|
-
//# sourceMappingURL=EvmBlockRewardService.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"EvmBlockRewardService.d.ts","sourceRoot":"","sources":["../../../src/BlockReward/EvmBlockRewardService.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAE5D,OAAO,EACL,kBAAkB,EAAE,YAAY,EAAE,MAAM,EACzC,MAAM,+BAA+B,CAAA;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAE3C,OAAO,EAAE,sBAAsB,EAAE,4BAA4B,EAAE,MAAM,6BAA6B,CAAA;AAElG,MAAM,WAAW,2BAA4B,SAAQ,4BAA4B,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACpG,OAAO,EAAE,eAAe,CAAA;IACxB,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B,QAAQ,CAAC,EAAE,QAAQ,CAAA;CACpB;AAED,qBACa,qBAAsB,SAAQ,sBAAsB,CAAC,2BAA2B,CAAE,YAAW,kBAAkB;IAC1H,SAAS,CAAC,gBAAgB,EAAE,MAAM,GAAG,SAAS,CAAA;IAE9C,SAAS,KAAK,YAAY,iBAEzB;IAED,SAAS,KAAK,eAAe,WAE5B;IAED,SAAS,KAAK,QAAQ,aAErB;IAEc,aAAa;IAUb,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAIvE"}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { Promisable } from '@xylabs/sdk-js';
|
|
2
|
-
import { BlockRewardService } from '@xyo-network/xl1-protocol-sdk';
|
|
3
|
-
import { BaseBlockRewardService, BaseBlockRewardServiceParams } from './BaseBlockRewardService.ts';
|
|
4
|
-
export interface MemoryBlockRewardServiceParams extends BaseBlockRewardServiceParams {
|
|
5
|
-
creatorReward?: bigint;
|
|
6
|
-
initialStepReward?: bigint;
|
|
7
|
-
minRewardPerBlock?: bigint;
|
|
8
|
-
stepFactorDenominator?: bigint;
|
|
9
|
-
stepFactorNumerator?: bigint;
|
|
10
|
-
stepSize?: bigint;
|
|
11
|
-
}
|
|
12
|
-
export declare class MemoryBlockRewardService<TParams extends MemoryBlockRewardServiceParams = MemoryBlockRewardServiceParams> extends BaseBlockRewardService<TParams> implements BlockRewardService {
|
|
13
|
-
protected readonly rewardFromBlockNumber: (blockNumber: bigint, startingReward?: bigint, blocksPerStep?: bigint, stepFactorNumerator?: bigint, stepFactorDenominator?: bigint, minBlockReward?: bigint, creatorReward?: bigint) => bigint;
|
|
14
|
-
get creatorReward(): bigint;
|
|
15
|
-
get initialReward(): bigint;
|
|
16
|
-
get minRewardPerBlock(): bigint;
|
|
17
|
-
get stepFactorDenominator(): bigint;
|
|
18
|
-
get stepFactorNumerator(): bigint;
|
|
19
|
-
get stepSize(): bigint;
|
|
20
|
-
static paramsHandler<T extends MemoryBlockRewardService['params']>(inParams?: Partial<T>): Promise<T>;
|
|
21
|
-
getRewardForBlock(blockNumber: bigint): Promisable<bigint>;
|
|
22
|
-
}
|
|
23
|
-
//# sourceMappingURL=MemoryBlockRewardService.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"MemoryBlockRewardService.d.ts","sourceRoot":"","sources":["../../../src/BlockReward/MemoryBlockRewardService.ts"],"names":[],"mappings":"AAAA,OAAO,EACgB,UAAU,EAChC,MAAM,gBAAgB,CAAA;AAEvB,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAA;AAElE,OAAO,EAAE,sBAAsB,EAAE,4BAA4B,EAAE,MAAM,6BAA6B,CAAA;AAElG,MAAM,WAAW,8BAA+B,SAAQ,4BAA4B;IAClF,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,qBACa,wBAAwB,CAAC,OAAO,SAAS,8BAA8B,GAAG,8BAA8B,CACnH,SAAQ,sBAAsB,CAAC,OAAO,CAAE,YAAW,kBAAkB;IACrE,SAAS,CAAC,QAAQ,CAAC,qBAAqB,kMAA4B;IAEpE,IAAI,aAAa,WAEhB;IAED,IAAI,aAAa,WAEhB;IAED,IAAI,iBAAiB,WAEpB;IAED,IAAI,qBAAqB,WAExB;IAED,IAAI,mBAAmB,WAEtB;IAED,IAAI,QAAQ,WAEX;WAEqB,aAAa,CAAC,CAAC,SAAS,wBAAwB,CAAC,QAAQ,CAAC,EAC9E,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,GACpB,OAAO,CAAC,CAAC,CAAC;IAYJ,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;CAWpE"}
|