Skip to content

Commit

Permalink
fix
Browse files Browse the repository at this point in the history
  • Loading branch information
xlc committed Aug 5, 2024
1 parent 319e2b3 commit 5d5103d
Showing 1 changed file with 28 additions and 53 deletions.
81 changes: 28 additions & 53 deletions Blockchain/Sources/Blockchain/Types/State.swift
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ public struct State: Sendable {
>

// β: Information on the most recent βlocks.
public var lastBlock: Block
public var lastBlock: BlockRef

// γ: State concerning Safrole.
public var safroleState: SafroleState
Expand Down Expand Up @@ -85,6 +85,9 @@ public struct State: Sendable {
// ψ: past judgements
public var judgements: JudgementsState

// π: The activity statistics for the validators.
public var activityStatistics: ValidatorActivityStatistics

public init(
config: ProtocolConfigRef,
coreAuthorizationPool: ConfigFixedSizeArray<
Expand All @@ -95,7 +98,7 @@ public struct State: Sendable {
>,
ProtocolConfig.TotalNumberOfCores
>,
lastBlock: Block,
lastBlock: BlockRef,
safroleState: SafroleState,
serviceAccounts: [ServiceIdentifier: ServiceAccount],
entropyPool: (Data32, Data32, Data32, Data32),
Expand Down Expand Up @@ -125,7 +128,8 @@ public struct State: Sendable {
assign: ServiceIdentifier,
designate: ServiceIdentifier
),
judgements: JudgementsState
judgements: JudgementsState,
activityStatistics: ValidatorActivityStatistics
) {
self.config = config
self.coreAuthorizationPool = coreAuthorizationPool
Expand All @@ -141,6 +145,7 @@ public struct State: Sendable {
self.authorizationQueue = authorizationQueue
self.privilegedServiceIndices = privilegedServiceIndices
self.judgements = judgements
self.activityStatistics = activityStatistics
}
}

Expand All @@ -160,7 +165,8 @@ extension State: Equatable {
lhs.timeslot == rhs.timeslot &&
lhs.authorizationQueue == rhs.authorizationQueue &&
lhs.privilegedServiceIndices == rhs.privilegedServiceIndices &&
lhs.judgements == rhs.judgements
lhs.judgements == rhs.judgements &&
lhs.activityStatistics == rhs.activityStatistics
}
}

Expand All @@ -170,7 +176,7 @@ extension State: Dummy {
State(
config: config,
coreAuthorizationPool: ConfigFixedSizeArray(config: config, defaultValue: ConfigLimitedSizeArray(config: config)),
lastBlock: Block.dummy(config: config),
lastBlock: BlockRef.dummy(config: config),
safroleState: SafroleState.dummy(config: config),
serviceAccounts: [:],
entropyPool: (Data32(), Data32(), Data32(), Data32()),
Expand All @@ -188,7 +194,8 @@ extension State: Dummy {
assign: ServiceIdentifier(),
designate: ServiceIdentifier()
),
judgements: JudgementsState.dummy(config: config)
judgements: JudgementsState.dummy(config: config),
activityStatistics: ValidatorActivityStatistics.dummy(config: config)
)
}
}
Expand Down Expand Up @@ -216,7 +223,7 @@ extension State: ScaleCodec.Encodable {
coreAuthorizationPool: ConfigFixedSizeArray(config: config, from: &decoder) {
try ConfigLimitedSizeArray(config: config, from: &$0) { try $0.decode() }
},
lastBlock: Block(config: config, from: &decoder),
lastBlock: Block(config: config, from: &decoder).asRef(),
safroleState: SafroleState(config: config, from: &decoder),
serviceAccounts: decoder.decode(),
entropyPool: decoder.decode(),
Expand All @@ -229,13 +236,14 @@ extension State: ScaleCodec.Encodable {
try ConfigFixedSizeArray(config: config, from: &$0)
},
privilegedServiceIndices: decoder.decode(),
judgements: decoder.decode()
judgements: decoder.decode(),
activityStatistics: ValidatorActivityStatistics(config: config, from: &decoder)
)
}

public func encode(in encoder: inout some ScaleCodec.Encoder) throws {
try encoder.encode(coreAuthorizationPool)
try encoder.encode(lastBlock)
try encoder.encode(lastBlock.value)
try encoder.encode(safroleState)
try encoder.encode(serviceAccounts)
try encoder.encode(entropyPool)
Expand All @@ -247,28 +255,7 @@ extension State: ScaleCodec.Encodable {
try encoder.encode(authorizationQueue)
try encoder.encode(privilegedServiceIndices)
try encoder.encode(judgements)
}
}

extension State {
public func update(with block: Block) -> State {
let state = State(
config: config,
coreAuthorizationPool: coreAuthorizationPool,
lastBlock: block,
safroleState: safroleState,
serviceAccounts: serviceAccounts,
entropyPool: entropyPool,
validatorQueue: validatorQueue,
currentValidators: currentValidators,
previousValidators: previousValidators,
reports: reports,
timeslot: timeslot,
authorizationQueue: authorizationQueue,
privilegedServiceIndices: privilegedServiceIndices,
judgements: judgements
)
return state
try encoder.encode(activityStatistics)
}
}

Expand Down Expand Up @@ -296,27 +283,15 @@ extension State: Safrole {

public var ticketsVerifier: BandersnatchRingVRFRoot { safroleState.ticketsVerifier }

public func mergeWith(postState: SafrolePostState) -> Self {
Self(
config: config,
coreAuthorizationPool: coreAuthorizationPool,
lastBlock: lastBlock,
safroleState: SafroleState(
nextValidators: postState.nextValidators,
ticketsVerifier: postState.ticketsVerifier,
ticketsOrKeys: postState.ticketsOrKeys,
ticketsAccumulator: postState.ticketsAccumulator
),
serviceAccounts: serviceAccounts,
entropyPool: postState.entropyPool,
validatorQueue: postState.validatorQueue,
currentValidators: postState.currentValidators,
previousValidators: postState.previousValidators,
reports: reports,
timeslot: postState.timeslot,
authorizationQueue: authorizationQueue,
privilegedServiceIndices: privilegedServiceIndices,
judgements: judgements
)
public mutating func mergeWith(postState: SafrolePostState) {
safroleState.nextValidators = postState.nextValidators
safroleState.ticketsVerifier = postState.ticketsVerifier
safroleState.ticketsOrKeys = postState.ticketsOrKeys
safroleState.ticketsAccumulator = postState.ticketsAccumulator
entropyPool = postState.entropyPool
validatorQueue = postState.validatorQueue
currentValidators = postState.currentValidators
previousValidators = postState.previousValidators
timeslot = postState.timeslot
}
}

0 comments on commit 5d5103d

Please sign in to comment.