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 Token2022AccountState: TokenAccountLayoutState {4 static var ACCOUNT_TYPE: UInt8 { 2 }56 public let mint: PublicKey7 public let owner: PublicKey8 public let lamports: UInt649 public let delegateOption: UInt3210 public var delegate: PublicKey?11 public let isInitialized: Bool12 public let isFrozen: Bool13 public let state: UInt814 public let isNativeOption: UInt3215 public let rentExemptReserve: UInt64?16 public let isNativeRaw: UInt6417 public let isNative: Bool18 public var delegatedAmount: UInt6419 public let closeAuthorityOption: UInt3220 public var closeAuthority: PublicKey?2122 public var extensions: [AnyToken2022ExtensionState]2324 public init(25 mint: PublicKey,26 owner: PublicKey,27 lamports: UInt64,28 delegateOption: UInt32,29 delegate: PublicKey? = nil,30 isInitialized: Bool,31 isFrozen: Bool,32 state: UInt8,33 isNativeOption: UInt32,34 rentExemptReserve: UInt64? = nil,35 isNativeRaw: UInt64,36 isNative: Bool,37 delegatedAmount: UInt64,38 closeAuthorityOption: UInt32,39 closeAuthority: PublicKey? = nil,40 extensions: [AnyToken2022ExtensionState] = []41 ) {42 self.mint = mint43 self.owner = owner44 self.lamports = lamports45 self.delegateOption = delegateOption46 self.delegate = delegate47 self.isInitialized = isInitialized48 self.isFrozen = isFrozen49 self.state = state50 self.isNativeOption = isNativeOption51 self.rentExemptReserve = rentExemptReserve52 self.isNativeRaw = isNativeRaw53 self.isNative = isNative54 self.delegatedAmount = delegatedAmount55 self.closeAuthorityOption = closeAuthorityOption56 self.closeAuthority = closeAuthority57 self.extensions = extensions58 }59}6061extension Token2022AccountState: BorshCodable {62 public func serialize(to writer: inout Data) throws {63 try serializeCommonProperties(to: &writer)64 try Self.ACCOUNT_TYPE.serialize(to: &writer)65 for ext in extensions {66 try ext.serialize(to: &writer)67 }68 }6970 public init(from reader: inout BinaryReader) throws {71 let oldTokenProgramData = try TokenAccountState(from: &reader)72 mint = oldTokenProgramData.mint73 owner = oldTokenProgramData.owner74 lamports = oldTokenProgramData.lamports75 delegateOption = oldTokenProgramData.delegateOption76 delegate = oldTokenProgramData.delegate77 isInitialized = oldTokenProgramData.isInitialized78 isFrozen = oldTokenProgramData.isFrozen79 state = oldTokenProgramData.state80 isNativeOption = oldTokenProgramData.isNativeOption81 rentExemptReserve = oldTokenProgramData.rentExemptReserve82 isNativeRaw = oldTokenProgramData.isNativeRaw83 isNative = oldTokenProgramData.isNative84 delegatedAmount = oldTokenProgramData.delegatedAmount85 closeAuthorityOption = oldTokenProgramData.closeAuthorityOption86 closeAuthority = oldTokenProgramData.closeAuthority8788 guard reader.cursor < reader.bytes.count else {89 extensions = []90 return91 }9293 let accountType = try reader.read(count: 1)9495 // AccountType == 2 for AccountState96 guard accountType.first == Self.ACCOUNT_TYPE else {97 throw BinaryReaderError.dataMismatch98 }99100 var extensions = [AnyToken2022ExtensionState]()101 repeat {102 let ext = try AnyToken2022ExtensionState(from: &reader)103 extensions.append(ext)104 } while reader.cursor < reader.bytes.count105106 self.extensions = extensions107 }108}109