Skip to content

Commit ac9a797

Browse files
author
Alex Vlasov
committed
bridge account unlocking operation to synchronous method
1 parent 06b0acf commit ac9a797

File tree

1 file changed

+34
-13
lines changed

1 file changed

+34
-13
lines changed

web3swift/Web3/Classes/Web3+Personal.swift

Lines changed: 34 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -59,21 +59,42 @@ extension web3.Personal {
5959
}
6060

6161
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
7475
}
75-
return Result(resultBool)
76+
semaphore.signal()
7677
}
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+
// }
7798
}
7899

79100
public func ecrecover(personalMessage: Data, signature: Data) -> Result<EthereumAddress, Web3Error> {

0 commit comments

Comments
 (0)