@@ -59,21 +59,42 @@ extension web3.Personal {
59
59
}
60
60
61
61
public func unlockAccount( account: EthereumAddress , password: String = " BANKEXFOUNDATION " , seconds: UInt64 = 300 ) -> Result < Bool , Web3Error > {
62
- if let _ = self . web3. provider. attachedKeystoreManager {
63
- return Result . failure ( Web3Error . walletError)
64
- }
65
- let request = JSONRPCRequestFabric . prepareRequest ( . unlockAccount, parameters: [ account. address. lowercased ( ) , password, seconds] )
66
- let response = self . provider. send ( request: request)
67
- let result = ResultUnwrapper . getResponse ( response)
68
- switch result {
69
- case . failure( let error) :
70
- return Result . failure ( error)
71
- case . success( let payload) :
72
- guard let resultBool = payload as? Bool else {
73
- return Result . failure ( Web3Error . dataError)
62
+ var externalResult : Result < Bool , Web3Error > !
63
+ let semaphore = DispatchSemaphore ( value: 0 )
64
+ let callback = { ( res: Result < AnyObject , Web3Error > ) -> ( ) in
65
+ switch res {
66
+ case . success( let result) :
67
+ guard let unwrappedResult = result as? Bool else {
68
+ externalResult = Result . failure ( Web3Error . dataError)
69
+ break
70
+ }
71
+ externalResult = Result < Bool , Web3Error > ( unwrappedResult)
72
+ case . failure( let error) :
73
+ externalResult = Result . failure ( error)
74
+ break
74
75
}
75
- return Result ( resultBool )
76
+ semaphore . signal ( )
76
77
}
78
+ unlockAccount ( account: account, password: password, seconds: seconds, callback: callback, queue: self . web3. queue)
79
+ _ = semaphore. wait ( timeout: . distantFuture)
80
+ return externalResult
81
+
82
+
83
+ // if let _ = self.web3.provider.attachedKeystoreManager {
84
+ // return Result.failure(Web3Error.walletError)
85
+ // }
86
+ // let request = JSONRPCRequestFabric.prepareRequest(.unlockAccount, parameters: [account.address.lowercased(), password, seconds])
87
+ // let response = self.provider.send(request: request)
88
+ // let result = ResultUnwrapper.getResponse(response)
89
+ // switch result {
90
+ // case .failure(let error):
91
+ // return Result.failure(error)
92
+ // case .success(let payload):
93
+ // guard let resultBool = payload as? Bool else {
94
+ // return Result.failure(Web3Error.dataError)
95
+ // }
96
+ // return Result(resultBool)
97
+ // }
77
98
}
78
99
79
100
public func ecrecover( personalMessage: Data , signature: Data ) -> Result < EthereumAddress , Web3Error > {
0 commit comments