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 EncodableWrapper: Encodable {4 let wrapped: Encodable56 public func encode(to encoder: Encoder) throws {7 try wrapped.encode(to: encoder)8 }9}1011public struct RequestAPI: Encodable {12 public init(method: String, params: [Encodable]) {13 self.method = method14 self.params = params15 }1617 public let id = UUID().uuidString18 public let method: String19 public let jsonrpc: String = "2.0"20 public let params: [Encodable]2122 enum CodingKeys: String, CodingKey {23 case id24 case method25 case jsonrpc26 case params27 }2829 public func encode(to encoder: Encoder) throws {30 var container = encoder.container(keyedBy: CodingKeys.self)31 try container.encode(id, forKey: .id)32 try container.encode(method, forKey: .method)33 try container.encode(jsonrpc, forKey: .jsonrpc)34 let wrappedDict = params.map(EncodableWrapper.init(wrapped:))35 try container.encode(wrappedDict, forKey: .params)36 }37}3839// MARK: - Transfer4041public enum Transfer {42 public static func compile() -> Data {43 var result = Data(capacity: 17) // FIXME: - capacity44 result.append(0x2) // program index45 let keyIndeces = [UInt8]([0, 1])46 result.append(Data.encodeLength(keyIndeces.count)) // key size47 result.append(contentsOf: keyIndeces) // keyIndeces48 result.append(UInt8(12)) // FIXME: transfer data size4950 result += UInt32(2).bytes // Program Index5152 let lamports = 300053 result += UInt64(lamports).bytes5455 return result56 }57}5859// MARK: - Public6061public struct OwnerInfoParams: Encodable {62 public let mint: String?63 public let programId: String?6465 public init(mint: String?, programId: String?) {66 self.mint = mint67 self.programId = programId68 }69}7071public typealias Commitment = String7273public struct RequestConfiguration: Encodable {74 public let commitment: Commitment?75 public let encoding: String?76 public let dataSlice: DataSlice?77 public let filters: [[String: EncodableWrapper]]?78 public let limit: Int?79 public let before: String?80 public let until: String?81 public let skipPreflight: Bool?82 public let preflightCommitment: Commitment?83 public let searchTransactionHistory: Bool?84 public let replaceRecentBlockhash: Bool?8586 public init?(87 commitment: Commitment? = nil,88 encoding: String? = nil,89 dataSlice: DataSlice? = nil,90 filters: [[String: EncodableWrapper]]? = nil,91 limit: Int? = nil,92 before: String? = nil,93 until: String? = nil,94 skipPreflight: Bool? = nil,95 preflightCommitment: Commitment? = nil,96 searchTransactionHistory: Bool? = nil,97 replaceRecentBlockhash: Bool? = nil98 ) {99 if commitment == nil,100 encoding == nil,101 dataSlice == nil,102 filters == nil,103 limit == nil,104 before == nil,105 until == nil,106 skipPreflight == nil,107 preflightCommitment == nil,108 searchTransactionHistory == nil,109 replaceRecentBlockhash == nil110 {111 return nil112 }113114 self.commitment = commitment115 self.encoding = encoding116 self.dataSlice = dataSlice117 self.filters = filters118 self.limit = limit119 self.before = before120 self.until = until121 self.skipPreflight = skipPreflight122 self.preflightCommitment = preflightCommitment123 self.searchTransactionHistory = searchTransactionHistory124 self.replaceRecentBlockhash = replaceRecentBlockhash125 }126}127128public struct DataSlice: Encodable {129 public let offset: Int130 public let length: Int131132 public init(offset: Int, length: Int) {133 self.offset = offset134 self.length = length135 }136}137