Skip to content

Commit

Permalink
encoder cleanup (#251)
Browse files Browse the repository at this point in the history
  • Loading branch information
xlc authored Dec 17, 2024
1 parent 13569f4 commit 25e6b5a
Show file tree
Hide file tree
Showing 7 changed files with 30 additions and 18 deletions.
8 changes: 4 additions & 4 deletions Blockchain/Sources/Blockchain/Types/Extrinsic.swift
Original file line number Diff line number Diff line change
Expand Up @@ -55,15 +55,15 @@ extension Extrinsic: Validate {}
extension Extrinsic {
public func hash() -> Data32 {
do {
return try JamEncoder.encode([
return try JamEncoder.encode(
JamEncoder.encode(tickets).blake2b256hash(),
JamEncoder.encode(preimages).blake2b256hash(),
JamEncoder.encode(reports.guarantees.array.map { item in
try JamEncoder.encode(item.workReport.hash()) + JamEncoder.encode(item.timeslot) + JamEncoder.encode(item.credential)
try JamEncoder.encode(item.workReport.hash(), item.timeslot, item.credential)
}).blake2b256hash(),
JamEncoder.encode(availability).blake2b256hash(),
JamEncoder.encode(disputes).blake2b256hash(),
]).blake2b256hash()
JamEncoder.encode(disputes).blake2b256hash()
).blake2b256hash()
} catch {
logger.error("Failed to encode extrinsic, returning empty hash", metadata: ["error": "\(error)"])
return Data32()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -943,7 +943,7 @@ public class Invoke: HostCall {
let engine = Engine(config: DefaultPvmConfig())
let exitReason = await engine.execute(program: program, state: vm)

try state.writeMemory(address: startAddr, values: JamEncoder.encode(vm.getGas()) + JamEncoder.encode(vm.getRegisters()))
try state.writeMemory(address: startAddr, values: JamEncoder.encode(vm.getGas(), vm.getRegisters()))
context.pvms[pvmIndex]?.memory = vm.getMemoryUnsafe()

switch exitReason {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ extension AccumulateFunction {
y: resultCtx
)
let ctx = AccumulateContext(context: &contextContent, config: config, timeslot: timeslot)
let argument = try JamEncoder.encode(timeslot) + JamEncoder.encode(serviceIndex) + JamEncoder.encode(arguments)
let argument = try JamEncoder.encode(timeslot, serviceIndex, arguments)

let (exitReason, gas, output) = await invokePVM(
config: config,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,12 @@ public protocol IsAuthorizedFunction {
}

extension IsAuthorizedFunction {
public func invoke(config: ProtocolConfigRef, package: WorkPackage,
coreIndex: CoreIndex) async throws -> Result<Data, WorkResultError>
{
let args = try JamEncoder.encode(package) + JamEncoder.encode(coreIndex)
public func invoke(
config: ProtocolConfigRef,
package: WorkPackage,
coreIndex: CoreIndex
) async throws -> Result<Data, WorkResultError> {
let args = try JamEncoder.encode(package, coreIndex)
let ctx = IsAuthorizedContext(config: config)

let (exitReason, _, output) = await invokePVM(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ extension OnTransferFunction {
var contextContent = OnTransferContext.ContextType(service, serviceAccounts)
let ctx = OnTransferContext(context: &contextContent, config: config)
let gasLimitSum = transfers.reduce(Balance(0)) { $0 + $1.gasLimit }
let argument = try JamEncoder.encode(timeslot) + JamEncoder.encode(service) + JamEncoder.encode(transfers)
let argument = try JamEncoder.encode(timeslot, service, transfers)

_ = await invokePVM(
config: config,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,13 +51,15 @@ extension RefineInvocation {
return (.failure(.codeTooLarge), [])
}

let argumentData = try JamEncoder.encode(service) +
JamEncoder.encode(workPayload) +
JamEncoder.encode(workPackageHash) +
JamEncoder.encode(refinementCtx) +
JamEncoder.encode(authorizerHash) +
JamEncoder.encode(authorizationOutput) +
JamEncoder.encode(extrinsicDataBlobs)
let argumentData = try JamEncoder.encode(
service,
workPayload,
workPackageHash,
refinementCtx,
authorizerHash,
authorizationOutput,
extrinsicDataBlobs
)
let ctx = RefineContext(
config: config,
context: (pvms: [:], exports: []),
Expand Down
8 changes: 8 additions & 0 deletions Codec/Sources/Codec/JamEncoder.swift
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,14 @@ public class JamEncoder {
return encoder.data
}

public static func encode(_ values: any Encodable...) throws -> Data {
let encoder = JamEncoder()
for value in values {
try encoder.encode(value)
}
return encoder.data
}

public var data: Data {
encoder.data
}
Expand Down

0 comments on commit 25e6b5a

Please sign in to comment.