@xyo-network/chain-services 1.16.26 → 1.17.1
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 +23 -11
- package/dist/neutral/ChainBlockNumberIteration/ChainBlockNumberIterationService.d.ts.map +1 -1
- package/dist/neutral/ChainService/Evm/Evm.d.ts +6 -5
- package/dist/neutral/ChainService/Evm/Evm.d.ts.map +1 -1
- package/dist/neutral/ChainService/Memory/Memory.d.ts +6 -4
- package/dist/neutral/ChainService/Memory/Memory.d.ts.map +1 -1
- package/dist/neutral/ChainValidator/XyoValidator.d.ts +4 -18
- package/dist/neutral/ChainValidator/XyoValidator.d.ts.map +1 -1
- package/dist/neutral/Election/BaseElectionService.d.ts +3 -3
- package/dist/neutral/Election/BaseElectionService.d.ts.map +1 -1
- package/dist/neutral/PendingTransactions/BasePendingTransactions.d.ts +9 -9
- package/dist/neutral/PendingTransactions/BasePendingTransactions.d.ts.map +1 -1
- package/dist/neutral/StakeIntent/XyoStakeIntentService.d.ts +7 -6
- package/dist/neutral/StakeIntent/XyoStakeIntentService.d.ts.map +1 -1
- package/dist/neutral/Time/BaseTimeSyncService.d.ts +3 -6
- package/dist/neutral/Time/BaseTimeSyncService.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 +1623 -1150
- 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 +30 -27
- package/src/AccountBalance/accountBalanceServiceFromArchivist.ts +38 -10
- 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 +74 -6
- package/src/ChainService/Evm/Evm.ts +39 -36
- package/src/ChainService/Memory/Memory.ts +14 -7
- package/src/ChainValidator/XyoValidator.ts +29 -34
- package/src/Election/BaseElectionService.ts +5 -4
- package/src/NetworkStakeStepReward/BaseNetworkStakeStepRewardService.ts +18 -18
- package/src/PendingTransactions/BasePendingTransactions.ts +15 -9
- package/src/Schemas/BaseSchemasService.ts +1 -1
- package/src/StakeIntent/XyoStakeIntentService.ts +24 -18
- package/src/StepStake/BaseStepStakeService.ts +2 -2
- package/src/Time/BaseTimeSyncService.ts +6 -16
- package/src/blockViewerFromChainIteratorAndArchivist.ts +20 -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 -36
- 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 -100
- 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
|
@@ -1,9 +1,12 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type {
|
|
2
|
+
Address, Hex, Promisable,
|
|
3
|
+
} from '@xylabs/sdk-js'
|
|
2
4
|
import {
|
|
3
5
|
assertEx, toAddress, toEthAddress,
|
|
4
6
|
} from '@xylabs/sdk-js'
|
|
5
7
|
import type { StakedXyoChain } from '@xyo-network/typechain'
|
|
6
8
|
import { StakedXyoChain__factory as StakedXyoChainFactory } from '@xyo-network/typechain'
|
|
9
|
+
import type { AttoXL1, XL1BlockNumber } from '@xyo-network/xl1-protocol'
|
|
7
10
|
import type { ChainService } from '@xyo-network/xl1-protocol-sdk'
|
|
8
11
|
import { getAddress } from 'ethers/address'
|
|
9
12
|
import type { ContractRunner } from 'ethers/providers'
|
|
@@ -13,7 +16,7 @@ import type { BaseServiceParams } from '../../model/index.ts'
|
|
|
13
16
|
|
|
14
17
|
export interface EvmChainServiceParams extends BaseServiceParams {
|
|
15
18
|
contract: StakedXyoChain
|
|
16
|
-
id:
|
|
19
|
+
id: Hex
|
|
17
20
|
runner: ContractRunner
|
|
18
21
|
}
|
|
19
22
|
|
|
@@ -21,91 +24,91 @@ export interface EvmChainServiceParams extends BaseServiceParams {
|
|
|
21
24
|
* A class that represents a chain stake as backed by an EVM smart contract
|
|
22
25
|
*/
|
|
23
26
|
export class EvmChainService extends BaseService<EvmChainServiceParams> implements ChainService {
|
|
24
|
-
get chainId(): Address {
|
|
25
|
-
return assertEx(this.params.id)
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
get contract() {
|
|
29
|
-
if (this.params.contract === undefined) {
|
|
30
|
-
this.params.contract = StakedXyoChainFactory.connect(
|
|
31
|
-
toEthAddress(this.chainId),
|
|
32
|
-
this.params.runner,
|
|
33
|
-
) as StakedXyoChain
|
|
34
|
-
}
|
|
35
|
-
return assertEx(this.params.contract)
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
get runner(): ContractRunner {
|
|
39
|
-
return assertEx(this.params.runner)
|
|
40
|
-
}
|
|
41
|
-
|
|
42
27
|
async active(): Promise<bigint> {
|
|
43
|
-
return await this.contract.active()
|
|
28
|
+
return await (await this.contract()).active()
|
|
44
29
|
}
|
|
45
30
|
|
|
46
31
|
async activeByStaked(staked: Address): Promise<bigint> {
|
|
47
|
-
return await this.contract.activeByAddressStaked(getAddress(toEthAddress(staked)))
|
|
32
|
+
return await (await this.contract()).activeByAddressStaked(getAddress(toEthAddress(staked)))
|
|
48
33
|
}
|
|
49
34
|
|
|
50
35
|
async activeByStaker(address: Address): Promise<bigint> {
|
|
51
|
-
return await this.contract.activeByStaker(getAddress(toEthAddress(address)))
|
|
36
|
+
return await (await this.contract()).activeByStaker(getAddress(toEthAddress(address)))
|
|
52
37
|
}
|
|
53
38
|
|
|
54
39
|
async addStake(staked: Address, amount: bigint): Promise<boolean> {
|
|
55
|
-
const result = await this.contract.addStake(getAddress(toEthAddress(staked)), amount)
|
|
40
|
+
const result = await (await this.contract()).addStake(getAddress(toEthAddress(staked)), amount)
|
|
56
41
|
await result.wait()
|
|
57
42
|
return true
|
|
58
43
|
}
|
|
59
44
|
|
|
45
|
+
chainId(): Promisable<Hex> {
|
|
46
|
+
return assertEx(this.params.id)
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
async contract() {
|
|
50
|
+
if (this.params.contract === undefined) {
|
|
51
|
+
this.params.contract = StakedXyoChainFactory.connect(
|
|
52
|
+
toEthAddress(await this.chainId()),
|
|
53
|
+
this.params.runner,
|
|
54
|
+
) as StakedXyoChain
|
|
55
|
+
}
|
|
56
|
+
return assertEx(this.params.contract)
|
|
57
|
+
}
|
|
58
|
+
|
|
60
59
|
async forkedAtBlockNumber(): Promise<bigint> {
|
|
61
|
-
return await this.contract.forkedAtBlockNumber()
|
|
60
|
+
return await (await this.contract()).forkedAtBlockNumber()
|
|
62
61
|
}
|
|
63
62
|
|
|
64
63
|
async forkedAtHash(): Promise<bigint> {
|
|
65
|
-
return await this.contract.forkedAtHash()
|
|
64
|
+
return await (await this.contract()).forkedAtHash()
|
|
66
65
|
}
|
|
67
66
|
|
|
68
67
|
async forkedChainId(): Promise<Address> {
|
|
69
|
-
return toAddress(await this.contract.forkedChainId())
|
|
68
|
+
return toAddress(await (await this.contract()).forkedChainId())
|
|
70
69
|
}
|
|
71
70
|
|
|
72
71
|
async minWithdrawalBlocks(): Promise<bigint> {
|
|
73
|
-
return await this.contract.minWithdrawalBlocks()
|
|
72
|
+
return await (await this.contract()).minWithdrawalBlocks()
|
|
74
73
|
}
|
|
75
74
|
|
|
76
75
|
async pending(): Promise<bigint> {
|
|
77
|
-
return await this.contract.pending()
|
|
76
|
+
return await (await this.contract()).pending()
|
|
78
77
|
}
|
|
79
78
|
|
|
80
79
|
async pendingByStaker(staker: Address): Promise<bigint> {
|
|
81
|
-
return await this.contract.pendingByStaker(getAddress(toEthAddress(staker)))
|
|
80
|
+
return await (await this.contract()).pendingByStaker(getAddress(toEthAddress(staker)))
|
|
82
81
|
}
|
|
83
82
|
|
|
84
83
|
async removeStake(slot: bigint): Promise<boolean> {
|
|
85
|
-
const result = await this.contract.removeStake(slot)
|
|
84
|
+
const result = await (await this.contract()).removeStake(slot)
|
|
86
85
|
await result.wait()
|
|
87
86
|
return true
|
|
88
87
|
}
|
|
89
88
|
|
|
89
|
+
rewardForBlock(_block: XL1BlockNumber): Promisable<AttoXL1> {
|
|
90
|
+
throw new Error('Method not implemented.')
|
|
91
|
+
}
|
|
92
|
+
|
|
90
93
|
async rewardsContract(): Promise<string> {
|
|
91
|
-
return await this.contract.rewardsContract()
|
|
94
|
+
return await (await this.contract()).rewardsContract()
|
|
92
95
|
}
|
|
93
96
|
|
|
94
97
|
async stakingTokenAddress(): Promise<string> {
|
|
95
|
-
return await this.contract.stakingTokenAddress()
|
|
98
|
+
return await (await this.contract()).stakingTokenAddress()
|
|
96
99
|
}
|
|
97
100
|
|
|
98
101
|
async withdrawStake(slot: bigint): Promise<boolean> {
|
|
99
|
-
const result = await this.contract.withdrawStake(slot)
|
|
102
|
+
const result = await (await this.contract()).withdrawStake(slot)
|
|
100
103
|
await result.wait()
|
|
101
104
|
return true
|
|
102
105
|
}
|
|
103
106
|
|
|
104
107
|
async withdrawn(): Promise<bigint> {
|
|
105
|
-
return await this.contract.withdrawn()
|
|
108
|
+
return await (await this.contract()).withdrawn()
|
|
106
109
|
}
|
|
107
110
|
|
|
108
111
|
async withdrawnByStaker(staker: string): Promise<bigint> {
|
|
109
|
-
return await this.contract.withdrawnByStaker(getAddress(staker))
|
|
112
|
+
return await (await this.contract()).withdrawnByStaker(getAddress(staker))
|
|
110
113
|
}
|
|
111
114
|
}
|
|
@@ -1,27 +1,26 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type {
|
|
2
|
+
Address, Hex, Promisable,
|
|
3
|
+
} from '@xylabs/sdk-js'
|
|
2
4
|
import {
|
|
3
5
|
assertEx, toAddress, ZERO_ADDRESS,
|
|
4
6
|
} from '@xylabs/sdk-js'
|
|
7
|
+
import type { AttoXL1, XL1BlockNumber } from '@xyo-network/xl1-protocol'
|
|
5
8
|
import type { ChainService, Config } from '@xyo-network/xl1-protocol-sdk'
|
|
6
9
|
|
|
7
10
|
import { BaseService } from '../../BaseService.ts'
|
|
8
11
|
import type { BaseServiceParams } from '../../model/index.ts'
|
|
9
12
|
|
|
10
13
|
export interface MemoryChainServiceParams extends BaseServiceParams<Pick<Config, 'producer'>> {
|
|
11
|
-
chainId:
|
|
14
|
+
chainId: Hex
|
|
12
15
|
}
|
|
13
16
|
|
|
14
17
|
/**
|
|
15
18
|
* A class that represents a chain stake as backed in memory
|
|
16
19
|
*/
|
|
17
20
|
export class MemoryChainService extends BaseService<MemoryChainServiceParams> implements ChainService {
|
|
18
|
-
protected _chainId:
|
|
21
|
+
protected _chainId: Hex | undefined
|
|
19
22
|
protected _simulatedStake: bigint = 1n
|
|
20
23
|
|
|
21
|
-
get chainId(): Address {
|
|
22
|
-
return assertEx(this._chainId, () => 'Chain ID not set')
|
|
23
|
-
}
|
|
24
|
-
|
|
25
24
|
async active(): Promise<bigint> {
|
|
26
25
|
return await Promise.resolve(this._simulatedStake)
|
|
27
26
|
}
|
|
@@ -38,6 +37,10 @@ export class MemoryChainService extends BaseService<MemoryChainServiceParams> im
|
|
|
38
37
|
return await Promise.resolve(true)
|
|
39
38
|
}
|
|
40
39
|
|
|
40
|
+
chainId(): Promisable<Hex> {
|
|
41
|
+
return assertEx(this._chainId, () => 'Chain ID not set')
|
|
42
|
+
}
|
|
43
|
+
|
|
41
44
|
override createHandler(): void {
|
|
42
45
|
const { minStake = 1 } = this.params.config.producer ?? {}
|
|
43
46
|
this._simulatedStake = BigInt(minStake)
|
|
@@ -71,6 +74,10 @@ export class MemoryChainService extends BaseService<MemoryChainServiceParams> im
|
|
|
71
74
|
return await Promise.resolve(true)
|
|
72
75
|
}
|
|
73
76
|
|
|
77
|
+
rewardForBlock(_block: XL1BlockNumber): Promisable<AttoXL1> {
|
|
78
|
+
throw new Error('Method not implemented.')
|
|
79
|
+
}
|
|
80
|
+
|
|
74
81
|
async rewardsContract(): Promise<string> {
|
|
75
82
|
return await Promise.resolve('')
|
|
76
83
|
}
|
|
@@ -2,61 +2,56 @@ import {
|
|
|
2
2
|
assertEx, creatable, EmptyObject,
|
|
3
3
|
Promisable,
|
|
4
4
|
} from '@xylabs/sdk-js'
|
|
5
|
-
import { AccountInstance } from '@xyo-network/account-model'
|
|
6
|
-
import { ArchivistInstance, ReadArchivist } from '@xyo-network/archivist-model'
|
|
7
5
|
import {
|
|
8
6
|
BlockBoundWitness,
|
|
9
|
-
ChainId,
|
|
10
7
|
SignedHydratedTransactionWithStorageMeta,
|
|
11
8
|
} from '@xyo-network/xl1-protocol'
|
|
12
|
-
import {
|
|
13
|
-
BlockRewardService, ElectionService, HydratedBlockStateValidationFunction, StakeIntentService,
|
|
14
|
-
} from '@xyo-network/xl1-protocol-sdk'
|
|
9
|
+
import { BlockViewer, HydratedBlockStateValidationFunction } from '@xyo-network/xl1-protocol-sdk'
|
|
15
10
|
|
|
16
11
|
import { BaseService } from '../BaseService.ts'
|
|
17
12
|
import { BaseServiceParams } from '../model/index.ts'
|
|
18
13
|
import { Validator } from './model/index.ts'
|
|
19
14
|
|
|
20
15
|
export interface XyoValidatorParams<TConfig extends EmptyObject = EmptyObject> extends BaseServiceParams<TConfig> {
|
|
21
|
-
account: AccountInstance
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
stakeIntentService: StakeIntentService
|
|
16
|
+
// account: AccountInstance
|
|
17
|
+
// blockRewardService: BlockRewardService
|
|
18
|
+
blockViewer: BlockViewer
|
|
19
|
+
// chainId: ChainId
|
|
20
|
+
// electionService: ElectionService
|
|
21
|
+
// pendingBundledTransactionsArchivist: ArchivistInstance
|
|
22
|
+
// stakeIntentService: StakeIntentService
|
|
28
23
|
validateHydratedBlockState: HydratedBlockStateValidationFunction
|
|
29
24
|
}
|
|
30
25
|
|
|
31
26
|
@creatable()
|
|
32
27
|
export class XyoValidator<TParams extends XyoValidatorParams = XyoValidatorParams> extends BaseService<TParams> implements Validator {
|
|
33
|
-
get address() {
|
|
34
|
-
|
|
35
|
-
}
|
|
28
|
+
// get address() {
|
|
29
|
+
// return this.account.address
|
|
30
|
+
// }
|
|
36
31
|
|
|
37
|
-
protected get account() {
|
|
38
|
-
|
|
39
|
-
}
|
|
32
|
+
// protected get account() {
|
|
33
|
+
// return assertEx(this.params.account, () => 'account is required')
|
|
34
|
+
// }
|
|
40
35
|
|
|
41
|
-
protected get
|
|
42
|
-
return assertEx(this.params.
|
|
36
|
+
protected get blockViewer() {
|
|
37
|
+
return assertEx(this.params.blockViewer, () => 'blockViewer is required')
|
|
43
38
|
}
|
|
44
39
|
|
|
45
|
-
protected get chainInfo() {
|
|
46
|
-
|
|
47
|
-
}
|
|
40
|
+
// protected get chainInfo() {
|
|
41
|
+
// return assertEx(this.params.chainId, () => 'chainInfo is required')
|
|
42
|
+
// }
|
|
48
43
|
|
|
49
|
-
protected get electionService() {
|
|
50
|
-
|
|
51
|
-
}
|
|
44
|
+
// protected get electionService() {
|
|
45
|
+
// return assertEx(this.params.electionService, () => 'electionService is required')
|
|
46
|
+
// }
|
|
52
47
|
|
|
53
|
-
protected get pendingBundledTransactionsArchivist() {
|
|
54
|
-
|
|
55
|
-
}
|
|
48
|
+
// protected get pendingBundledTransactionsArchivist() {
|
|
49
|
+
// return assertEx(this.params.pendingBundledTransactionsArchivist, () => 'pendingBundledTransactions is required')
|
|
50
|
+
// }
|
|
56
51
|
|
|
57
|
-
protected get
|
|
58
|
-
|
|
59
|
-
}
|
|
52
|
+
// protected get blockRewardService() {
|
|
53
|
+
// return assertEx(this.params.blockRewardService, () => 'blockRewardService is required')
|
|
54
|
+
// }
|
|
60
55
|
|
|
61
56
|
validatePendingBlock(_block: BlockBoundWitness): Promisable<Error[]> {
|
|
62
57
|
return [] // await validateBlockProtocol(block, this.chainInfo)
|
|
@@ -66,7 +61,7 @@ export class XyoValidator<TParams extends XyoValidatorParams = XyoValidatorParam
|
|
|
66
61
|
async validatePendingTransaction(hydratedTransaction: SignedHydratedTransactionWithStorageMeta): Promise<boolean> {
|
|
67
62
|
const [tx] = hydratedTransaction
|
|
68
63
|
// Ensure not confirmed already (replay attack)
|
|
69
|
-
if ((await this.
|
|
64
|
+
if ((await this.blockViewer.blockByHash(tx._hash)) !== undefined) return false
|
|
70
65
|
// TODO: Ensure transaction is valid (double spend, has voucher, has required stake, etc.)
|
|
71
66
|
// TODO: Ensure validator stake is valid
|
|
72
67
|
return await Promise.resolve(true)
|
|
@@ -5,22 +5,23 @@ import { hexToLast4BytesInt, shuffleWithSeed } from '@xyo-network/chain-utils'
|
|
|
5
5
|
import { WithHashMeta } from '@xyo-network/payload-model'
|
|
6
6
|
import { BlockBoundWitness } from '@xyo-network/xl1-protocol'
|
|
7
7
|
import type {
|
|
8
|
-
|
|
8
|
+
BlockViewer,
|
|
9
|
+
ChainStakeViewer, ElectionService, StakeIntentService,
|
|
9
10
|
} from '@xyo-network/xl1-protocol-sdk'
|
|
10
11
|
|
|
11
12
|
import { BaseService } from '../BaseService.ts'
|
|
12
13
|
import { BaseServiceParams } from '../model/index.ts'
|
|
13
14
|
|
|
14
15
|
export interface BaseElectionServicesParams extends BaseServiceParams {
|
|
15
|
-
|
|
16
|
+
blockViewer?: BlockViewer
|
|
16
17
|
chainStakeViewer?: ChainStakeViewer
|
|
17
18
|
stakeIntentService?: StakeIntentService
|
|
18
19
|
}
|
|
19
20
|
|
|
20
21
|
@creatable()
|
|
21
22
|
export class BaseElectionService extends BaseService<BaseElectionServicesParams> implements ElectionService {
|
|
22
|
-
get
|
|
23
|
-
return assertEx(this.params.
|
|
23
|
+
get blockViewer() {
|
|
24
|
+
return assertEx(this.params.blockViewer, () => 'No block viewer')
|
|
24
25
|
}
|
|
25
26
|
|
|
26
27
|
get chainStakeViewer() {
|
|
@@ -21,74 +21,74 @@ export interface BaseNetworkStakeStepRewardServiceParams extends BaseServicePara
|
|
|
21
21
|
@creatable()
|
|
22
22
|
export class BaseNetworkStakeStepRewardService extends BaseService<BaseNetworkStakeStepRewardServiceParams> implements NetworkStakeStepRewardService {
|
|
23
23
|
networkStakeStepRewardAddressHistory(_address: Address): Promisable<Record<Address, bigint>> {
|
|
24
|
-
throw new Error('Method not implemented.')
|
|
24
|
+
throw new Error('Method [networkStakeStepRewardAddressHistory] not implemented.')
|
|
25
25
|
}
|
|
26
26
|
|
|
27
27
|
networkStakeStepRewardAddressReward(_context: StepIdentity, _address: Address): Promisable<Record<Address, bigint>> {
|
|
28
|
-
throw new Error('Method not implemented.')
|
|
28
|
+
throw new Error('Method [networkStakeStepRewardAddressReward] not implemented.')
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
networkStakeStepRewardAddressShare(_context: StepIdentity, _address: Address): Promisable<[bigint, bigint]> {
|
|
32
|
-
throw new Error('Method not implemented.')
|
|
32
|
+
throw new Error('Method [networkStakeStepRewardAddressShare] not implemented.')
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
networkStakeStepRewardClaimedByAddress(_address: Address): Promisable<bigint> {
|
|
36
|
-
throw new Error('Method not implemented.')
|
|
36
|
+
throw new Error('Method [networkStakeStepRewardClaimedByAddress] not implemented.')
|
|
37
37
|
}
|
|
38
38
|
|
|
39
39
|
networkStakeStepRewardForPosition(_position: number, _range: [number, number]): Promisable<[bigint, bigint]> {
|
|
40
|
-
throw new Error('Method not implemented.')
|
|
40
|
+
throw new Error('Method [networkStakeStepRewardForPosition] not implemented.')
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
networkStakeStepRewardForStep(_context: StepIdentity): Promisable<bigint> {
|
|
44
|
-
throw new Error('Method not implemented.')
|
|
44
|
+
throw new Error('Method [networkStakeStepRewardForStep] not implemented.')
|
|
45
45
|
}
|
|
46
46
|
|
|
47
47
|
networkStakeStepRewardForStepForPosition(_context: StepIdentity, _position: number): Promisable<[bigint, bigint]> {
|
|
48
|
-
throw new Error('Method not implemented.')
|
|
48
|
+
throw new Error('Method [networkStakeStepRewardForStepForPosition] not implemented.')
|
|
49
49
|
}
|
|
50
50
|
|
|
51
51
|
networkStakeStepRewardPoolRewards(_context: StepIdentity): Promisable<Record<Address, bigint>> {
|
|
52
|
-
throw new Error('Method not implemented.')
|
|
52
|
+
throw new Error('Method [networkStakeStepRewardPoolRewards] not implemented.')
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
networkStakeStepRewardPoolShares(_context: StepIdentity): Promisable<Record<Address, bigint>> {
|
|
56
|
-
throw new Error('Method not implemented.')
|
|
56
|
+
throw new Error('Method [networkStakeStepRewardPoolShares] not implemented.')
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
networkStakeStepRewardPositionWeight(_context: StepIdentity, _position: number): Promisable<bigint> {
|
|
60
|
-
throw new Error('Method not implemented.')
|
|
60
|
+
throw new Error('Method [networkStakeStepRewardPositionWeight] not implemented.')
|
|
61
61
|
}
|
|
62
62
|
|
|
63
63
|
networkStakeStepRewardPotentialPositionLoss(_context: StepIdentity, _position: number): Promisable<bigint> {
|
|
64
|
-
throw new Error('Method not implemented.')
|
|
64
|
+
throw new Error('Method [networkStakeStepRewardPotentialPositionLoss] not implemented.')
|
|
65
65
|
}
|
|
66
66
|
|
|
67
67
|
networkStakeStepRewardRandomizer(_context: StepIdentity): Promisable<bigint> {
|
|
68
|
-
throw new Error('Method not implemented.')
|
|
68
|
+
throw new Error('Method [networkStakeStepRewardRandomizer] not implemented.')
|
|
69
69
|
}
|
|
70
70
|
|
|
71
71
|
networkStakeStepRewardStakerCount(_context: StepIdentity): Promisable<number> {
|
|
72
|
-
throw new Error('Method not implemented.')
|
|
72
|
+
throw new Error('Method [networkStakeStepRewardStakerCount] not implemented.')
|
|
73
73
|
}
|
|
74
74
|
|
|
75
75
|
networkStakeStepRewardUnclaimedByAddress(_address: Address): Promisable<bigint> {
|
|
76
|
-
throw new Error('Method not implemented.')
|
|
76
|
+
throw new Error('Method [networkStakeStepRewardUnclaimedByAddress] not implemented.')
|
|
77
77
|
}
|
|
78
78
|
|
|
79
79
|
networkStakeStepRewardWeightForAddress(_context: StepIdentity, _address: Address): Promisable<bigint> {
|
|
80
|
-
throw new Error('Method not implemented.')
|
|
80
|
+
throw new Error('Method [networkStakeStepRewardWeightForAddress] not implemented.')
|
|
81
81
|
}
|
|
82
82
|
|
|
83
83
|
networkStakeStepRewardsForPosition(_position: number, _range: [number, number]): Promisable<Record<StepIdentityString, [bigint, bigint]>> {
|
|
84
|
-
throw new Error('Method not implemented.')
|
|
84
|
+
throw new Error('Method [networkStakeStepRewardsForPosition] not implemented.')
|
|
85
85
|
}
|
|
86
86
|
|
|
87
87
|
networkStakeStepRewardsForRange(_range: [number, number]): Promisable<bigint> {
|
|
88
|
-
throw new Error('Method not implemented.')
|
|
88
|
+
throw new Error('Method [networkStakeStepRewardsForRange] not implemented.')
|
|
89
89
|
}
|
|
90
90
|
|
|
91
91
|
networkStakeStepRewardsForStepLevel(_stepLevel: number, _range: [number, number]): Promisable<bigint> {
|
|
92
|
-
throw new Error('Method not implemented.')
|
|
92
|
+
throw new Error('Method [networkStakeStepRewardsForStepLevel] not implemented.')
|
|
93
93
|
}
|
|
94
94
|
}
|
|
@@ -7,17 +7,19 @@ import {
|
|
|
7
7
|
} from '@xylabs/sdk-js'
|
|
8
8
|
import { MemoryArchivist } from '@xyo-network/archivist-memory'
|
|
9
9
|
import { ArchivistInstance } from '@xyo-network/archivist-model'
|
|
10
|
-
import { findMostRecentBlock } from '@xyo-network/chain-protocol'
|
|
11
10
|
import {
|
|
12
11
|
Payload, PayloadBundle, Sequence, WithStorageMeta,
|
|
13
12
|
} from '@xyo-network/payload-model'
|
|
14
13
|
import {
|
|
15
14
|
asBlockBoundWitnessWithHashMeta, asXL1BlockNumber, ChainId, HydratedTransactionValidationFunction, isTransactionBoundWitnessWithStorageMeta,
|
|
15
|
+
SignedHydratedBlockWithHashMeta,
|
|
16
16
|
SignedHydratedTransactionWithHashMeta,
|
|
17
17
|
SignedHydratedTransactionWithStorageMeta,
|
|
18
18
|
XL1BlockNumber,
|
|
19
19
|
} from '@xyo-network/xl1-protocol'
|
|
20
|
-
import {
|
|
20
|
+
import {
|
|
21
|
+
findMostRecentBlock, MempoolViewer, PendingBlocksOptions, PendingTransactionsOptions,
|
|
22
|
+
} from '@xyo-network/xl1-protocol-sdk'
|
|
21
23
|
import { TransactionJsonSchemaValidator, validateTransaction } from '@xyo-network/xl1-validation'
|
|
22
24
|
import { Mutex } from 'async-mutex'
|
|
23
25
|
|
|
@@ -28,14 +30,14 @@ import { hydratedTransactionToPayloadBundle } from './hydratedTransactionToPaylo
|
|
|
28
30
|
|
|
29
31
|
export interface BasePendingTransactionsServiceParams extends BaseServiceParams {
|
|
30
32
|
additionalPendingTransactionValidators?: HydratedTransactionValidationFunction[]
|
|
31
|
-
chainArchivist
|
|
32
|
-
chainId
|
|
33
|
-
pendingBundledTransactionsArchivist
|
|
34
|
-
rejectedTransactionsArchivist
|
|
33
|
+
chainArchivist: ArchivistInstance
|
|
34
|
+
chainId: ChainId
|
|
35
|
+
pendingBundledTransactionsArchivist: ArchivistInstance
|
|
36
|
+
rejectedTransactionsArchivist: ArchivistInstance
|
|
35
37
|
}
|
|
36
38
|
|
|
37
39
|
@creatable()
|
|
38
|
-
export class BasePendingTransactionsService extends BaseService<BasePendingTransactionsServiceParams> implements
|
|
40
|
+
export class BasePendingTransactionsService extends BaseService<BasePendingTransactionsServiceParams> implements MempoolViewer {
|
|
39
41
|
private static readonly MutexPriority = {
|
|
40
42
|
/**
|
|
41
43
|
* Priority for inserting new transactions
|
|
@@ -142,12 +144,16 @@ export class BasePendingTransactionsService extends BaseService<BasePendingTrans
|
|
|
142
144
|
})
|
|
143
145
|
}
|
|
144
146
|
|
|
145
|
-
|
|
147
|
+
pendingBlocks(_options?: PendingBlocksOptions): Promise<SignedHydratedBlockWithHashMeta[]> {
|
|
148
|
+
throw new Error('Method [pendingBlocks] not implemented.')
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
async pendingTransactions({ limit = 100 }: PendingTransactionsOptions = {}): Promise<SignedHydratedTransactionWithStorageMeta[]> {
|
|
146
152
|
return await this.spanAsync('getPendingTransactions', async () => {
|
|
147
153
|
// Acquires an exclusive mutex to ensure no race conditions while accessing pending transactions.
|
|
148
154
|
return await this._updateCuratedPendingTransactionsArchivistMutex.runExclusive(async () => {
|
|
149
155
|
// Find the supplied head
|
|
150
|
-
let
|
|
156
|
+
let lastHead = (filterAs(await this.chainArchivist.next({ limit: 100 }), x => asBlockBoundWitnessWithHashMeta(x))).at(-1)
|
|
151
157
|
if (isUndefined(lastHead)) return []
|
|
152
158
|
|
|
153
159
|
await this.pruneCuratedPendingTransactionsArchivist(lastHead._hash)
|
|
@@ -22,7 +22,7 @@ export class BaseSchemasService extends BaseService<BaseSchemasServiceParams> im
|
|
|
22
22
|
|
|
23
23
|
async schemas(head: Hash, schemas: Schema[]): Promise<Partial<Record<Schema, number>>> {
|
|
24
24
|
return await spanRootAsync('transfers', async () => {
|
|
25
|
-
const summary = await schemasSummary(this.params.context)
|
|
25
|
+
const [summary] = await schemasSummary(this.params.context)
|
|
26
26
|
const result: Record<Schema, number> = {}
|
|
27
27
|
for (const schema of schemas) {
|
|
28
28
|
const count = summary[schema] ?? 0
|
|
@@ -19,9 +19,9 @@ import {
|
|
|
19
19
|
} from '@xyo-network/xl1-protocol'
|
|
20
20
|
import {
|
|
21
21
|
asChainIndexingServiceStateWithStorageMeta,
|
|
22
|
+
BlockViewer,
|
|
22
23
|
ChainIndexingServiceState, ChainIndexingServiceStateSchema, ChainStakeViewer,
|
|
23
24
|
Config,
|
|
24
|
-
EventingChainBlockNumberIteratorService,
|
|
25
25
|
isChainIndexingServiceState,
|
|
26
26
|
readPayloadMapFromStore,
|
|
27
27
|
StakeIntentService,
|
|
@@ -34,10 +34,10 @@ import { BaseService } from '../BaseService.ts'
|
|
|
34
34
|
import { BaseServiceParams } from '../model/index.ts'
|
|
35
35
|
|
|
36
36
|
export interface XyoStakeIntentServiceParams extends BaseServiceParams<Pick<Config, 'producer'>> {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
chainStakeViewer
|
|
40
|
-
stakeIntentStateArchivist
|
|
37
|
+
blockViewer: BlockViewer
|
|
38
|
+
chainArchivist: ArchivistInstance
|
|
39
|
+
chainStakeViewer: ChainStakeViewer
|
|
40
|
+
stakeIntentStateArchivist: ArchivistInstance
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
/**
|
|
@@ -65,30 +65,36 @@ export class XyoStakeIntentService extends BaseService<XyoStakeIntentServicePara
|
|
|
65
65
|
protected _stakeCache = new LRUCache<Address, bigint>({ max: STAKE_CACHE_MAX_ENTRIES })
|
|
66
66
|
protected _updateMutex = new Mutex()
|
|
67
67
|
|
|
68
|
-
protected get
|
|
69
|
-
return
|
|
68
|
+
protected get blockViewer() {
|
|
69
|
+
return this.params.blockViewer
|
|
70
70
|
}
|
|
71
71
|
|
|
72
|
-
protected get
|
|
73
|
-
return assertEx(this.params.
|
|
72
|
+
protected get chainArchivist() {
|
|
73
|
+
return assertEx(this.params.chainArchivist!, () => 'chainArchivist not set')
|
|
74
74
|
}
|
|
75
75
|
|
|
76
76
|
protected get chainStakeViewer() {
|
|
77
|
-
return assertEx(this.params.chainStakeViewer
|
|
77
|
+
return assertEx(this.params.chainStakeViewer!, () => 'chainStakeViewer not set')
|
|
78
78
|
}
|
|
79
79
|
|
|
80
80
|
protected get stakeIntentStateArchivist() {
|
|
81
|
-
return assertEx(this.params.stakeIntentStateArchivist
|
|
81
|
+
return assertEx(this.params.stakeIntentStateArchivist!, () => 'stakeIntentStateArchivist not set')
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
static override async paramsHandler(params?: Partial<XyoStakeIntentServiceParams>): Promise<XyoStakeIntentServiceParams> {
|
|
85
|
+
return {
|
|
86
|
+
...await super.paramsHandler(params),
|
|
87
|
+
blockViewer: assertEx(params?.blockViewer, () => 'blockViewer is required'),
|
|
88
|
+
chainArchivist: assertEx(params?.chainArchivist, () => 'chainArchivist is required'),
|
|
89
|
+
chainStakeViewer: assertEx(params?.chainStakeViewer, () => 'chainStakeViewer is required'),
|
|
90
|
+
stakeIntentStateArchivist: assertEx(params?.stakeIntentStateArchivist, () => 'stakeIntentStateArchivist is required'),
|
|
91
|
+
} as XyoStakeIntentServiceParams
|
|
82
92
|
}
|
|
83
93
|
|
|
84
94
|
override async createHandler() {
|
|
85
|
-
this.
|
|
86
|
-
await this.updateIndex()
|
|
87
|
-
})
|
|
88
|
-
const head = await this.chainIterator.head()
|
|
95
|
+
const head = await this.blockViewer.currentBlock()
|
|
89
96
|
if (isUndefined(head)) return
|
|
90
|
-
|
|
91
|
-
await this.recoverState(headHash)
|
|
97
|
+
await this.recoverState(head[0]._hash)
|
|
92
98
|
}
|
|
93
99
|
|
|
94
100
|
async getDeclaredCandidateRanges(address: Address, intent: Intent): Promise<Readonly<Readonly<[number, number]>[]>> {
|
|
@@ -208,7 +214,7 @@ export class XyoStakeIntentService extends BaseService<XyoStakeIntentServicePara
|
|
|
208
214
|
}
|
|
209
215
|
await this._updateMutex.runExclusive(async () => {
|
|
210
216
|
return await this.spanAsync('updateIndex', async () => {
|
|
211
|
-
const currentHead = await this.
|
|
217
|
+
const currentHead = (await this.blockViewer.currentBlock())[0]
|
|
212
218
|
if (isUndefined(currentHead)) return
|
|
213
219
|
return await timeBudget('XyoStakeIntentService.updateIndex', console, async () => {
|
|
214
220
|
const currentHeadHash = currentHead._hash
|
|
@@ -15,10 +15,10 @@ export interface BaseStepStakeServiceParams extends BaseServiceParams {
|
|
|
15
15
|
@creatable()
|
|
16
16
|
export class BaseStepStakeService extends BaseService<BaseStepStakeServiceParams> implements StepStakeViewer {
|
|
17
17
|
stepStake(_step: StepIdentity): Promisable<Record<Address, bigint>> {
|
|
18
|
-
throw new Error('Method not implemented.')
|
|
18
|
+
throw new Error('Method [stepStake] not implemented.')
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
stepStakeForAddress(_address: Address, _step: StepIdentity): Promisable<bigint> {
|
|
22
|
-
throw new Error('Method not implemented.')
|
|
22
|
+
throw new Error('Method [stepStakeForAddress] not implemented.')
|
|
23
23
|
}
|
|
24
24
|
}
|
|
@@ -1,18 +1,16 @@
|
|
|
1
1
|
import { creatable, EmptyObject } from '@xylabs/sdk-js'
|
|
2
|
-
import { ReadArchivist } from '@xyo-network/archivist-model'
|
|
3
2
|
import { TimeDomain, TimePayload } from '@xyo-network/xl1-protocol'
|
|
4
3
|
import {
|
|
5
|
-
|
|
4
|
+
BlockViewer,
|
|
5
|
+
SimpleTimeSyncViewer, TimeSyncViewer,
|
|
6
6
|
} from '@xyo-network/xl1-protocol-sdk'
|
|
7
7
|
import { Provider } from 'ethers'
|
|
8
8
|
|
|
9
9
|
import { BaseService } from '../BaseService.ts'
|
|
10
|
-
import { blockViewerFromChainIteratorAndArchivist } from '../blockViewerFromChainIteratorAndArchivist.ts'
|
|
11
10
|
import { BaseServiceParams } from '../model/index.ts'
|
|
12
11
|
|
|
13
12
|
export interface BaseTimeServiceParams<TConfig extends EmptyObject = EmptyObject> extends BaseServiceParams<TConfig> {
|
|
14
|
-
|
|
15
|
-
chainIterator: EventingChainBlockNumberIteratorService
|
|
13
|
+
blockViewer: BlockViewer
|
|
16
14
|
ethProvider?: Provider
|
|
17
15
|
}
|
|
18
16
|
|
|
@@ -20,12 +18,8 @@ export interface BaseTimeServiceParams<TConfig extends EmptyObject = EmptyObject
|
|
|
20
18
|
export class BaseTimeSyncService extends BaseService<BaseTimeServiceParams> implements TimeSyncViewer {
|
|
21
19
|
protected timeSyncViewer!: TimeSyncViewer
|
|
22
20
|
|
|
23
|
-
protected get
|
|
24
|
-
return this.params.
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
protected get chainIterator() {
|
|
28
|
-
return this.params.chainIterator
|
|
21
|
+
protected get blockViewer() {
|
|
22
|
+
return this.params.blockViewer
|
|
29
23
|
}
|
|
30
24
|
|
|
31
25
|
protected get ethProvider() {
|
|
@@ -38,11 +32,7 @@ export class BaseTimeSyncService extends BaseService<BaseTimeServiceParams> impl
|
|
|
38
32
|
|
|
39
33
|
override async createHandler(): Promise<void> {
|
|
40
34
|
await super.createHandler()
|
|
41
|
-
|
|
42
|
-
this.chainIterator,
|
|
43
|
-
this.chainArchivist,
|
|
44
|
-
)
|
|
45
|
-
this.timeSyncViewer = new SimpleTimeSyncViewer(blockViewer, this.ethProvider)
|
|
35
|
+
this.timeSyncViewer = new SimpleTimeSyncViewer(this.blockViewer, this.ethProvider)
|
|
46
36
|
}
|
|
47
37
|
|
|
48
38
|
async currentTime(domain: TimeDomain): Promise<[string, number]> {
|