Skip to content

Commit 4100ad8

Browse files
committed
feat: VecU8
1 parent 5827e9f commit 4100ad8

File tree

5 files changed

+27
-18
lines changed

5 files changed

+27
-18
lines changed

Sources/SolanaSwift/Programs/TokenPrograms/Token2022Program/ExtensionReader/Extensions/UnparsedExtensionState.swift renamed to Sources/SolanaSwift/Models/BufferLayout/VecU8.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import Foundation
22

3-
struct UnparsedExtensionState: Token2022ExtensionState {
3+
struct VecU8: BorshCodable, Codable, Equatable, Hashable {
44
let length: UInt16
55
let data: Data
66
init(from reader: inout BinaryReader) throws {

Sources/SolanaSwift/Programs/TokenPrograms/Token2022Program/ExtensionReader/AnyToken2022ExtensionState.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public struct AnyToken2022ExtensionState: BorshCodable, Codable, Equatable, Hash
3535
case .transferFeeConfig:
3636
state = try container.decode(TransferFeeConfigExtensionState.self, forKey: .state)
3737
default:
38-
state = try container.decode(UnparsedExtensionState.self, forKey: .state)
38+
state = try container.decode(VecU8.self, forKey: .state)
3939
}
4040
}
4141

@@ -58,7 +58,7 @@ public struct AnyToken2022ExtensionState: BorshCodable, Codable, Equatable, Hash
5858
case .interestBearingConfig:
5959
state = try InterestBearingConfigExtensionState(from: &reader)
6060
default:
61-
state = try UnparsedExtensionState(from: &reader)
61+
state = try VecU8(from: &reader)
6262
}
6363
}
6464

Sources/SolanaSwift/Programs/TokenPrograms/Token2022Program/ExtensionReader/Token2022ExtensionState.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,5 @@ import Foundation
33
public protocol Token2022ExtensionState: BorshCodable, Codable, Equatable, Hashable {
44
var length: UInt16 { get }
55
}
6+
7+
extension VecU8: Token2022ExtensionState {}

Sources/SolanaSwift/Programs/TokenPrograms/Token2022Program/Token2022MintState.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ public struct Token2022MintState: TokenMintState {
1212
public var extensions: [AnyToken2022ExtensionState]
1313

1414
public func getParsedExtension<T: Token2022ExtensionState>(ofType _: T.Type) -> T? {
15-
assert(T.self != UnparsedExtensionState.self)
15+
assert(T.self != VecU8.self)
1616
return extensions.first(where: { $0.state is T })?.state as? T
1717
}
1818
}

Tests/SolanaSwiftUnitTests/Other/BufferLayout/BufferLayoutEncodingTests.swift

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -183,8 +183,21 @@ final class BufferLayoutEncodingTests: XCTestCase {
183183
)
184184
}
185185

186-
// func testEncodingToken2022MintState() throws {
187-
// let extensionState = TransferFeeConfigExtensionState(
186+
// func testEncodingToken2022MintState2() throws {
187+
// // Mint FZYEgCWzzedxcmxYvGXSkMrj7TaA3bXoaEv6XMnwtLKh
188+
// let state = Token2022MintState(
189+
// mintAuthorityOption: 1,
190+
// mintAuthority: "FZYEgCWzzedxcmxYvGXSkMrj7TaA3bXoaEv6XMnwtLKh",
191+
// supply: 1_000_000_000_000,
192+
// decimals: 10,
193+
// isInitialized: true,
194+
// freezeAuthorityOption: 10,
195+
// freezeAuthority: nil,
196+
// extensions: []
197+
// )
198+
//
199+
// // Add TransferFeeConfigExtensionState
200+
// let transferConfig = TransferFeeConfigExtensionState(
188201
// length: 108,
189202
// transferFeeConfigAuthority: "11111111111111111111111111111111",
190203
// withdrawWithHeldAuthority: "11111111111111111111111111111111",
@@ -200,7 +213,9 @@ final class BufferLayoutEncodingTests: XCTestCase {
200213
// transferFeeBasisPoints: 300
201214
// )
202215
// )
216+
// state.extensions.append(TokenExtension(type: 1, state: transferConfig))
203217
//
218+
// // Add InterestBearingConfigExtensionState
204219
// let interestBearingConfig = InterestBearingConfigExtensionState(
205220
// length: 52,
206221
// rateAuthority: "2a9H7uNfUxt7YdS5yH3ZEijdPqpeBtyq7JPtVyi6XKtk",
@@ -209,24 +224,16 @@ final class BufferLayoutEncodingTests: XCTestCase {
209224
// lastUpdateTimestamp: 1_692_005_389,
210225
// currentRate: 0
211226
// )
227+
// state.extensions.append(TokenExtension(type: 2, state: interestBearingConfig))
212228
//
213-
// let state = Token2022MintState(
214-
// mintAuthorityOption: <#T##UInt32#>,
215-
// mintAuthority: <#T##PublicKey?#>,
216-
// supply: <#T##UInt64#>,
217-
// decimals: <#T##UInt8#>,
218-
// isInitialized: <#T##Bool#>,
219-
// freezeAuthorityOption: <#T##UInt32#>,
220-
// freezeAuthority: <#T##PublicKey?#>,
221-
// extensions: <#T##[AnyToken2022ExtensionState]#>
222-
// )
223-
//
229+
// // Serialize the state
224230
// var data = Data()
225231
// try state.serialize(to: &data)
226232
//
233+
// // Base64 encode the serialized data and compare with the expected value
227234
// XCTAssertEqual(
228235
// data.base64EncodedString(),
229-
// "AAAAAAT3LznRbp1toHmr0Mjv1bBjc6oSrtihgQu/PG0Sunz6XUTVg3ktAAAFAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEAbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAT3LznRbp1toHmr0Mjv1bBjc6oSrtihgQu/PG0Sunz6N5bilgAAAAASAgAAAAAAAAAgPYh5LQAALAESAgAAAAAAAAAgPYh5LQAALAE="
236+
// "AAAAABdZNqd8UPqRoeBHXdhoEwzZNLf6UnDQ1UDsr4oXimfhquOLA1BVIXECAQAAAAAXWTanfFD6kaHgR13YaBMM2TS3+lJw0NVA7K+KF4pn4QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEAbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALoDKJKHBCRLpAQAAAAAAAACQI15ZrVt7LAHpAQAAAAAAAACQI15ZrVt7LAEKADQAF1k2p3xQ+pGh4Edd2GgTDNk0t/pScNDVQOyviheKZ+EN9NlkAAAAAAAADfTZZAAAAAAAAAYAAQAB"
230237
// )
231238
// }
232239

0 commit comments

Comments
 (0)