Skip to content

Commit b6caf63

Browse files
authored
JIP 1, 6 (#341)
* fix log host call * add program metadata format
1 parent 537bd14 commit b6caf63

File tree

3 files changed

+36
-15
lines changed

3 files changed

+36
-15
lines changed

Blockchain/Sources/Blockchain/Types/CodeAndMeta.swift

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,42 @@ import Utils
44

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

7+
public struct Metadata: Sendable, Equatable, Codable {
8+
public let formatVersion: UInt8
9+
public let programName: Data
10+
public let version: Data
11+
public let license: Data
12+
public let authors: [Data]
13+
}
14+
15+
extension Metadata: CustomStringConvertible {
16+
public var description: String {
17+
var result = "\(String(data: programName, encoding: .utf8) ?? "") v\(String(data: version, encoding: .utf8) ?? "")"
18+
if !license.isEmpty {
19+
result += " (\(String(data: license, encoding: .utf8) ?? ""))"
20+
}
21+
if !authors.isEmpty {
22+
result += " by \(authors.map { String(data: $0, encoding: .utf8) ?? "" }.joined(separator: ", "))"
23+
}
24+
return result
25+
}
26+
}
27+
728
/// account preimage data is: meta length + meta + code
829
public struct CodeAndMeta: Sendable, Equatable {
930
public enum Error: Swift.Error {
1031
case invalidMetadataLength
1132
}
1233

13-
public var metadata: Data
34+
public var metadata: Metadata
1435
public var codeBlob: Data
1536

1637
public init(data: Data) throws {
1738
var slice = Slice(base: data, bounds: data.startIndex ..< data.endIndex)
1839
let metaLength = slice.decode()
1940
guard let metaLength else { throw Error.invalidMetadataLength }
20-
metadata = data[slice.startIndex ..< slice.startIndex + Int(metaLength)]
21-
logger.debug("Metadata: \(String(data: metadata, encoding: .utf8) ?? "nil")")
41+
metadata = try JamDecoder.decode(Metadata.self, from: data[slice.startIndex ..< slice.startIndex + Int(metaLength)])
42+
logger.debug("Program Metadata: \(metadata)")
2243
codeBlob = data[slice.startIndex + Int(metaLength) ..< slice.endIndex]
2344
}
2445
}

Blockchain/Sources/Blockchain/VMInvocations/HostCall/HostCalls.swift

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1350,17 +1350,17 @@ public class Log: HostCall {
13501350

13511351
public enum Level: UInt32, Codable {
13521352
case error = 0
1353-
case debug = 1
1353+
case warn = 1
13541354
case info = 2
1355-
case warn = 3
1355+
case debug = 3
13561356
case trace = 4
13571357

13581358
var description: String {
13591359
switch self {
13601360
case .error: "ERROR"
1361-
case .debug: "DEBUG"
1362-
case .info: "INFO"
13631361
case .warn: "WARN"
1362+
case .info: "INFO"
1363+
case .debug: "DEBUG"
13641364
case .trace: "TRACE"
13651365
}
13661366
}
@@ -1388,10 +1388,10 @@ public class Log: HostCall {
13881388
public var str: String {
13891389
var result = time + " \(level.description)"
13901390
if let core {
1391-
result += " @\(core)"
1391+
result += "@\(core)"
13921392
}
13931393
if let service {
1394-
result += " #\(service)"
1394+
result += "#\(service)"
13951395
}
13961396
if let target {
13971397
result += " \(String(data: target, encoding: .utf8) ?? "invalid string")"
@@ -1417,7 +1417,7 @@ public class Log: HostCall {
14171417
let message = try? state.readMemory(address: regs[3], length: Int(regs[4]))
14181418

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

14231423
let details = Details(

Blockchain/Tests/BlockchainTests/VMInvocations/LogTests.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ struct LogTests {
1111
level: .error,
1212
target: Data("target".utf8),
1313
message: Data("message".utf8),
14-
core: nil,
14+
core: 12,
1515
service: 1
1616
)
1717
let json = logDetials.json
@@ -20,7 +20,7 @@ struct LogTests {
2020
#expect(json["target"]?.string == "target")
2121
#expect(json["message"]?.string == "message")
2222
#expect(json["service"]?.string == "1")
23-
#expect(json["core"] == .null)
23+
#expect(json["core"]?.string == "12")
2424
}
2525

2626
@Test func testLogDetailString() async throws {
@@ -29,11 +29,11 @@ struct LogTests {
2929
level: .trace,
3030
target: Data("target".utf8),
3131
message: Data("message".utf8),
32-
core: nil,
33-
service: nil
32+
core: 1,
33+
service: 2
3434
)
3535
let str = logDetials.str
36-
#expect(str == "2023-04-01 12:00:00 TRACE target message")
36+
#expect(str == "2023-04-01 12:00:00 TRACE@1#2 target message")
3737
}
3838

3939
@Test func testLogDetailInvalidString() async throws {

0 commit comments

Comments
 (0)