Skip to content

Commit 90a1b2c

Browse files
authored
Merge pull request #3 from mathwallet/tohuman
Tohuman
2 parents 714312d + 66a00b9 commit 90a1b2c

File tree

7 files changed

+82
-23
lines changed

7 files changed

+82
-23
lines changed

Sources/SolanaSwift/Provider/SolanaRPCProvider.swift

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -135,18 +135,15 @@ public struct SolanaRPCProvider {
135135
}
136136
}
137137

138-
extension SolanaRPCProvider {
139-
public enum SolanaRpcProviderError: Error {
140-
case unknown
141-
case server(message: String)
142-
143-
var errorDescription: String? {
144-
switch self {
145-
case .server(let message):
146-
return message
147-
default:
148-
return "Unknown error"
149-
}
138+
public enum SolanaRpcProviderError: Error {
139+
case unknown
140+
case server(message: String)
141+
public var errorDescription: String? {
142+
switch self {
143+
case .server(let message):
144+
return message
145+
default:
146+
return "Unknown error"
150147
}
151148
}
152149
}

Sources/SolanaSwift/Transaction/Instruction/SolanaInstructionAssetOwner.swift

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,11 @@ public struct SolanaInstructionAssetOwner: SolanaInstructionBase {
3434
extension SolanaInstructionAssetOwner: SolanaHumanReadable {
3535
public func toHuman() -> Dictionary<String, Any> {
3636
return [
37-
"type": "Asset Owner"
37+
"type": "Asset Owner",
38+
"data": [
39+
"destination":self.signers.first?.publicKey.address,
40+
"data":self.data.toHexString()
41+
]
3842
]
3943
}
4044
}

Sources/SolanaSwift/Transaction/Instruction/SolanaInstructionAssociatedAccount.swift

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,24 @@ public struct SolanaInstructionAssociatedAccount: SolanaInstructionBase {
4242

4343
extension SolanaInstructionAssociatedAccount: SolanaHumanReadable {
4444
public func toHuman() -> Dictionary<String, Any> {
45+
var dataDic:[String:String] = [String:String]()
46+
for i in 0..<self.signers.count {
47+
let signer = self.signers[i]
48+
if signer.isWritable {
49+
if signer.isSigner {
50+
dataDic["from"] = signer.publicKey.address
51+
continue
52+
} else {
53+
dataDic["associatedToken"] = signer.publicKey.address
54+
continue
55+
}
56+
} else {
57+
dataDic["key\(i)"] = signer.publicKey.address
58+
}
59+
}
4560
return [
46-
"type": "Associated Account"
61+
"type": "Associated Account",
62+
"data": dataDic
4763
]
4864
}
4965
}

Sources/SolanaSwift/Transaction/Instruction/SolanaInstructionRaw.swift

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,25 @@ extension SolanaInstructionRaw: SolanaHumanReadable {
3838
let i = SolanaInstructionToken(promgramId: promgramId, signers: signers, data: data) {
3939
return i.toHuman()
4040
}
41+
} else if promgramId == SolanaPublicKey.ASSOCIATEDTOKENPROGRAMID {
42+
// SolanaInstructionAssociatedAccount
43+
if let i = SolanaInstructionAssociatedAccount(promgramId: promgramId, signers: signers, data: data) {
44+
return i.toHuman()
45+
}
46+
} else if promgramId == SolanaPublicKey.OWNERVALIDATIONPROGRAMID {
47+
// SolanaInstructionAssetOwner
48+
if let i = SolanaInstructionAssetOwner(promgramId: promgramId, signers: signers, data: data){
49+
return i.toHuman()
50+
}
51+
}
52+
var dataDic:[String:String] = [String:String]()
53+
for i in 0..<self.signers.count {
54+
dataDic["pubkey\(i)"] = self.signers[i].publicKey.address
4155
}
42-
56+
dataDic["data"] = self.data.toHexString()
4357
return [
4458
"type": "Unknown Type",
45-
"data": data.toHexString()
59+
"data": dataDic
4660
]
4761
}
4862
}

Sources/SolanaSwift/Transaction/Instruction/SolanaInstructionToken.swift

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,13 +41,20 @@ public struct SolanaInstructionToken: SolanaInstructionBase {
4141

4242
extension SolanaInstructionToken: SolanaHumanReadable {
4343
public func toHuman() -> Dictionary<String, Any> {
44-
// let type = self.data.readUInt8(at: 0)
44+
var dataDic:[String:String] = [String:String]()
45+
for i in 0..<self.signers.count {
46+
let signer = self.signers[i]
47+
if signer.isSigner {
48+
dataDic["owner"] = signer.publicKey.address
49+
continue
50+
}
51+
dataDic["pubkey\(i)"] = signer.publicKey.address
52+
}
4553
let lamports = self.data.readUInt64(at: 1)
54+
dataDic["lamports"] = "\(lamports)"
4655
return [
4756
"type": "Transfer Token",
48-
"data": [
49-
"lamports": lamports
50-
]
57+
"data": dataDic
5158
]
5259
}
5360
}

Sources/SolanaSwift/Transaction/Instruction/SolanaInstructionTransfer.swift

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,23 @@ public struct SolanaInstructionTransfer: SolanaInstructionBase {
3939

4040
extension SolanaInstructionTransfer: SolanaHumanReadable {
4141
public func toHuman() -> Dictionary<String, Any> {
42-
// let type = self.data.readUInt32(at: 0)
42+
43+
var from = ""
44+
var to = ""
45+
self.signers.forEach({ signer in
46+
if signer.isSigner {
47+
from = signer.publicKey.address
48+
} else {
49+
to = signer.publicKey.address
50+
}
51+
})
4352
let lamports = self.data.readUInt64(at: 4)
4453
return [
45-
"type": "Transfer Token",
54+
"type": "Transfer",
4655
"data": [
47-
"lamports": lamports
56+
"from":from,
57+
"to":to,
58+
"lamports":"\(lamports)"
4859
]
4960
]
5061
}

Tests/SolanaSwiftTests/SolanaSwiftTests.swift

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,5 +167,15 @@ final class SolanaSwiftTests: XCTestCase {
167167

168168

169169

170+
}
171+
func testToHuman() throws {
172+
let array:[SolanaSigner] = [SolanaSigner(publicKey: SolanaPublicKey(base58String: "D37m1SKWnyY4fmhEntD84uZpjejUZkbHQUBEP3X74LuH")!,isSigner: true,isWritable: true),SolanaSigner(publicKey: SolanaPublicKey(base58String: "EY2kNS5hKfxxLSkbaBMQtQuHYYbjyYk6Ai2phcGMNgpC")!,isSigner: false,isWritable: true),SolanaSigner(publicKey: SolanaPublicKey(base58String: "DcaWQQGErxtzTTph7r5xWMxEvWEywGahtjnRvoJPN9Vz")!)]
173+
let instruction = SolanaInstructionTransfer(promgramId: SolanaPublicKey(base58String: "TokenwAJbNbGKPFXCWuBvf9Ss623VQ5DA")!, signers: array, data: Data(hex: "0x02000000a08601000000000002000000a086010000000000"))
174+
175+
let dataDic:Dictionary = instruction!.toHuman()
176+
let dataarray = dataDic["data"] as! Dictionary<String, Any>
177+
let data = try? JSONSerialization.data(withJSONObject: dataarray, options: [])
178+
let str = String(data: data!, encoding: String.Encoding.utf8)
179+
debugPrint(str!)
170180
}
171181
}

0 commit comments

Comments
 (0)