Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 24 additions & 3 deletions Blockchain/Sources/Blockchain/Types/CodeAndMeta.swift
Original file line number Diff line number Diff line change
Expand Up @@ -4,21 +4,42 @@ import Utils

private let logger = Logger(label: "CodeAndMeta")

public struct Metadata: Sendable, Equatable, Codable {
public let formatVersion: UInt8
public let programName: Data
public let version: Data
public let license: Data
public let authors: [Data]
}

extension Metadata: CustomStringConvertible {
public var description: String {
var result = "\(String(data: programName, encoding: .utf8) ?? "") v\(String(data: version, encoding: .utf8) ?? "")"
if !license.isEmpty {
result += " (\(String(data: license, encoding: .utf8) ?? ""))"
}
if !authors.isEmpty {
result += " by \(authors.map { String(data: $0, encoding: .utf8) ?? "" }.joined(separator: ", "))"
}
return result
}
}

/// account preimage data is: meta length + meta + code
public struct CodeAndMeta: Sendable, Equatable {
public enum Error: Swift.Error {
case invalidMetadataLength
}

public var metadata: Data
public var metadata: Metadata
public var codeBlob: Data

public init(data: Data) throws {
var slice = Slice(base: data, bounds: data.startIndex ..< data.endIndex)
let metaLength = slice.decode()
guard let metaLength else { throw Error.invalidMetadataLength }
metadata = data[slice.startIndex ..< slice.startIndex + Int(metaLength)]
logger.debug("Metadata: \(String(data: metadata, encoding: .utf8) ?? "nil")")
metadata = try JamDecoder.decode(Metadata.self, from: data[slice.startIndex ..< slice.startIndex + Int(metaLength)])
logger.debug("Program Metadata: \(metadata)")
codeBlob = data[slice.startIndex + Int(metaLength) ..< slice.endIndex]
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -1350,17 +1350,17 @@ public class Log: HostCall {

public enum Level: UInt32, Codable {
case error = 0
case debug = 1
case warn = 1
case info = 2
case warn = 3
case debug = 3
case trace = 4

var description: String {
switch self {
case .error: "ERROR"
case .debug: "DEBUG"
case .info: "INFO"
case .warn: "WARN"
case .info: "INFO"
case .debug: "DEBUG"
case .trace: "TRACE"
}
}
Expand Down Expand Up @@ -1388,10 +1388,10 @@ public class Log: HostCall {
public var str: String {
var result = time + " \(level.description)"
if let core {
result += " @\(core)"
result += "@\(core)"
}
if let service {
result += " #\(service)"
result += "#\(service)"
}
if let target {
result += " \(String(data: target, encoding: .utf8) ?? "invalid string")"
Expand All @@ -1417,7 +1417,7 @@ public class Log: HostCall {
let message = try? state.readMemory(address: regs[3], length: Int(regs[4]))

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH-mm-ss"
dateFormatter.dateFormat = "yyyy/MM/dd HH:mm:ss"
let time = dateFormatter.string(from: Date())

let details = Details(
Expand Down
10 changes: 5 additions & 5 deletions Blockchain/Tests/BlockchainTests/VMInvocations/LogTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ struct LogTests {
level: .error,
target: Data("target".utf8),
message: Data("message".utf8),
core: nil,
core: 12,
service: 1
)
let json = logDetials.json
Expand All @@ -20,7 +20,7 @@ struct LogTests {
#expect(json["target"]?.string == "target")
#expect(json["message"]?.string == "message")
#expect(json["service"]?.string == "1")
#expect(json["core"] == .null)
#expect(json["core"]?.string == "12")
}

@Test func testLogDetailString() async throws {
Expand All @@ -29,11 +29,11 @@ struct LogTests {
level: .trace,
target: Data("target".utf8),
message: Data("message".utf8),
core: nil,
service: nil
core: 1,
service: 2
)
let str = logDetials.str
#expect(str == "2023-04-01 12:00:00 TRACE target message")
#expect(str == "2023-04-01 12:00:00 TRACE@1#2 target message")
}

@Test func testLogDetailInvalidString() async throws {
Expand Down