spb/os-vault Public
Self-custody, multi-chain crypto wallet for macOS. One recovery phrase, six chain families, zero API keys — nothing leaves your Mac.
Swift 96%
Shell 3.4%
Makefile 0.6%
1import Foundation23public struct Token2022MintState: MintLayoutState {4 private static var ACCOUNT_TYPE: UInt8 { 1 }56 public let mintAuthorityOption: UInt327 public let mintAuthority: PublicKey?8 public let supply: UInt649 public let decimals: UInt810 public let isInitialized: Bool11 public let freezeAuthorityOption: UInt3212 public let freezeAuthority: PublicKey?1314 public var extensions: [AnyToken2022ExtensionState]1516 public func getParsedExtension<T: Token2022ExtensionState>(ofType _: T.Type) -> T? {17 assert(T.self != VecU8<UInt16>.self)18 return extensions.first(where: { $0.state is T })?.state as? T19 }20}2122extension Token2022MintState: BorshCodable {23 public init(from reader: inout BinaryReader) throws {24 let oldTokenMintState = try TokenMintState(from: &reader)25 mintAuthorityOption = oldTokenMintState.mintAuthorityOption26 mintAuthority = oldTokenMintState.mintAuthority27 supply = oldTokenMintState.supply28 decimals = oldTokenMintState.decimals29 isInitialized = oldTokenMintState.isInitialized30 freezeAuthorityOption = oldTokenMintState.freezeAuthorityOption31 freezeAuthority = oldTokenMintState.freezeAuthority3233 guard reader.cursor < reader.bytes.count else {34 extensions = []35 return36 }3738 _ = try reader.read(count: 83) // padding3940 let accountType = try reader.read(count: 1)4142 // AccountType == 1 for MintState43 guard accountType.first == Self.ACCOUNT_TYPE else {44 throw BinaryReaderError.dataMismatch45 }4647 var extensions = [AnyToken2022ExtensionState]()48 repeat {49 let ext = try AnyToken2022ExtensionState(from: &reader)50 extensions.append(ext)51 } while reader.cursor < reader.bytes.count5253 self.extensions = extensions54 }5556 public func serialize(to writer: inout Data) throws {57 try serializeCommonProperties(to: &writer)58 try Data(repeating: UInt8(0), count: 83).serialize(to: &writer)59 try Self.ACCOUNT_TYPE.serialize(to: &writer)60 for ext in extensions {61 try ext.serialize(to: &writer)62 }63 }64}65