SPB Git

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%
2.2 KB · 65 lines swift
Raw Blame History
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