Skip to content

Commit 8922237

Browse files
authored
Work-package submission (#290)
* update issue 278 * Work-package submission * update networkmanager * update more test * update workpackage hash * update networkmanager * update workpackage * update workpackpool * update NetworkManagerTest * update test * update
1 parent 29ab217 commit 8922237

File tree

10 files changed

+82
-8
lines changed

10 files changed

+82
-8
lines changed

Blockchain/Sources/Blockchain/RuntimeProtocols/RuntimeEvents.swift

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,15 @@ public enum RuntimeEvents {
5454

5555
// When a work package is recived via CE133
5656
public struct WorkPackagesReceived: Event {
57-
public let item: WorkPackageRef
57+
public let coreIndex: CoreIndex
58+
public let workPackageRef: WorkPackageRef
59+
public let extrinsics: [Data]
60+
61+
public init(coreIndex: CoreIndex, workPackageRef: WorkPackageRef, extrinsics: [Data]) {
62+
self.coreIndex = coreIndex
63+
self.workPackageRef = workPackageRef
64+
self.extrinsics = extrinsics
65+
}
5866
}
5967

6068
// When a work package bundle is ready to shared via CE134

Blockchain/Sources/Blockchain/Types/RefinementContext.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import Utils
44
// A refinement context, denoted by the set X, describes the context of the chain
55
// at the point that the report’s corresponding work-package was evaluated.
66
public struct RefinementContext: Comparable, Sendable, Equatable, Codable {
7-
public struct Anchor: Comparable, Sendable, Equatable, Codable {
7+
public struct Anchor: Comparable, Sendable, Equatable, Codable, Hashable {
88
// a
99
public var headerHash: Data32
1010
// s

Blockchain/Sources/Blockchain/Types/WorkItem.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@ import Foundation
22
import Utils
33

44
// I
5-
public struct WorkItem: Sendable, Equatable, Codable {
6-
public struct ImportedDataSegment: Sendable, Equatable, Codable {
7-
public enum DataSegmentRootKind: Sendable, Equatable {
5+
public struct WorkItem: Sendable, Equatable, Codable, Hashable {
6+
public struct ImportedDataSegment: Sendable, Equatable, Codable, Hashable {
7+
public enum DataSegmentRootKind: Sendable, Equatable, Hashable {
88
case segmentRoot(Data32)
99
case workPackageHash(Data32)
1010
}

Blockchain/Sources/Blockchain/Types/WorkPackage.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import Foundation
33
import Utils
44

55
// P
6-
public struct WorkPackage: Comparable, Sendable, Equatable, Codable {
6+
public struct WorkPackage: Comparable, Sendable, Equatable, Codable, Hashable {
77
// j
88
public var authorizationToken: Data
99

Blockchain/Sources/Blockchain/Validator/GuaranteeingService.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ public final class GuaranteeingService: ServiceBase2, @unchecked Sendable {
8888
}
8989

9090
private func on(workPackagesReceived event: RuntimeEvents.WorkPackagesReceived) async throws {
91-
try await refine(package: event.item)
91+
try await refine(package: event.workPackageRef)
9292
}
9393

9494
private func refine(package: WorkPackageRef) async throws {

Node/Sources/Node/NetworkingProtocol/CommonEphemeral/CERequest.swift

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ public enum CERequest: Sendable, Equatable, Hashable {
77
case blockRequest(BlockRequest)
88
case safroleTicket1(SafroleTicketMessage)
99
case safroleTicket2(SafroleTicketMessage)
10+
case workPackageSubmission(WorkPackageMessage)
1011
}
1112

1213
extension CERequest: RequestProtocol {
@@ -20,6 +21,8 @@ extension CERequest: RequestProtocol {
2021
try JamEncoder.encode(message)
2122
case let .safroleTicket2(message):
2223
try JamEncoder.encode(message)
24+
case let .workPackageSubmission(message):
25+
try JamEncoder.encode(message)
2326
}
2427
}
2528

@@ -31,6 +34,8 @@ extension CERequest: RequestProtocol {
3134
.safroleTicket1
3235
case .safroleTicket2:
3336
.safroleTicket2
37+
case .workPackageSubmission:
38+
.workPackageSubmission
3439
}
3540
}
3641

@@ -42,6 +47,8 @@ extension CERequest: RequestProtocol {
4247
SafroleTicketMessage.self
4348
case .safroleTicket2:
4449
SafroleTicketMessage.self
50+
case .workPackageSubmission:
51+
WorkPackageMessage.self
4552
default:
4653
fatalError("unimplemented")
4754
}
@@ -64,6 +71,9 @@ extension CERequest: RequestProtocol {
6471
return nil
6572
}
6673
return .safroleTicket2(message)
74+
case .workPackageSubmission:
75+
guard let message = data as? WorkPackageMessage else { return nil }
76+
return .workPackageSubmission(message)
6777
default:
6878
fatalError("unimplemented")
6979
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import Blockchain
2+
import Codec
3+
import Foundation
4+
5+
public struct WorkPackageMessage: Codable, Sendable, Equatable, Hashable {
6+
/// The core index associated with the work-package.
7+
public var coreIndex: CoreIndex
8+
9+
/// The work-package data.
10+
public var workPackage: WorkPackage
11+
12+
/// The extrinsic data referenced by the work-package.
13+
public var extrinsics: [Data]
14+
15+
public init(coreIndex: CoreIndex, workPackage: WorkPackage, extrinsics: [Data]) {
16+
self.coreIndex = coreIndex
17+
self.workPackage = workPackage
18+
self.extrinsics = extrinsics
19+
}
20+
}

Node/Sources/Node/NetworkingProtocol/NetworkManager.swift

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,17 @@ struct HandlerImpl: NetworkProtocolHandler {
226226
]
227227
))
228228
return []
229+
case let .workPackageSubmission(message):
230+
blockchain
231+
.publish(
232+
event: RuntimeEvents
233+
.WorkPackagesReceived(
234+
coreIndex: message.coreIndex,
235+
workPackageRef: message.workPackage.asRef(),
236+
extrinsics: message.extrinsics
237+
)
238+
)
239+
return []
229240
}
230241
}
231242

Node/Tests/NodeTests/NetworkManagerTests.swift

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,31 @@ struct NetworkManagerTests {
7474
)
7575
}
7676

77+
@Test
78+
func testWorkPackagesReceived() async throws {
79+
// Create dummy work packages
80+
let workPackage = WorkPackage.dummy(config: services.config).asRef()
81+
82+
// Publish WorkPackagesReceived event
83+
await services.blockchain
84+
.publish(event: RuntimeEvents.WorkPackagesReceived(coreIndex: 0, workPackageRef: workPackage, extrinsics: []))
85+
86+
// Wait for event processing
87+
await storeMiddleware.wait()
88+
89+
// Verify network calls
90+
#expect(
91+
network.contain(calls: [
92+
.init(function: "connect", parameters: ["address": devPeers.first!, "role": PeerRole.validator]),
93+
.init(function: "sendToPeer", parameters: [
94+
"message": CERequest.workPackageSubmission(
95+
WorkPackageMessage(coreIndex: 0, workPackage: workPackage.value, extrinsics: [])
96+
),
97+
]),
98+
])
99+
)
100+
}
101+
77102
@Test
78103
func testBlockBroadcast() async throws {
79104
// Import a block

Utils/Sources/Utils/SaturatingNumber.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import Codec
22
import Numerics
33

4-
public struct SaturatingNumber<T: FixedWidthInteger & Sendable>: Sendable {
4+
public struct SaturatingNumber<T: FixedWidthInteger & Sendable>: Sendable, Hashable {
55
public private(set) var value: T
66

77
public static var max: SaturatingNumber {

0 commit comments

Comments
 (0)