Skip to content

Commit b256f11

Browse files
committed
- add "create account" call for remote node
- Fix promises visibility
1 parent 43256b1 commit b256f11

9 files changed

+53
-8
lines changed

web3swift.xcodeproj/project.pbxproj

+6
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,8 @@
104104
81909D4A218864A8007D2AE5 /* EIP681.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81A7B2862143DBF6004CD2C7 /* EIP681.swift */; };
105105
81909D4B218864A9007D2AE5 /* EIP681.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81A7B2862143DBF6004CD2C7 /* EIP681.swift */; };
106106
81909D4F21887658007D2AE5 /* web3swift_Eventloop_Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81909D4E21887658007D2AE5 /* web3swift_Eventloop_Tests.swift */; };
107+
81909D51218DAEC0007D2AE5 /* Promise+Web3+Personal+CreateAccount.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81909D50218DAEC0007D2AE5 /* Promise+Web3+Personal+CreateAccount.swift */; };
108+
81909D52218DAEC0007D2AE5 /* Promise+Web3+Personal+CreateAccount.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81909D50218DAEC0007D2AE5 /* Promise+Web3+Personal+CreateAccount.swift */; };
107109
81A1821520D5A2700016741F /* Promise+Web3+Eth+GetBalance.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81A1821420D5A2700016741F /* Promise+Web3+Eth+GetBalance.swift */; };
108110
81A1821620D5A2700016741F /* Promise+Web3+Eth+GetBalance.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81A1821420D5A2700016741F /* Promise+Web3+Eth+GetBalance.swift */; };
109111
81A1821A20D5A6F70016741F /* Promise+HttpProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81A1821720D5A3E70016741F /* Promise+HttpProvider.swift */; };
@@ -269,6 +271,7 @@
269271
81909D1721862D5A007D2AE5 /* Web3+Eventloop.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Web3+Eventloop.swift"; sourceTree = "<group>"; };
270272
81909D2021884893007D2AE5 /* BigUInt+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "BigUInt+Extensions.swift"; sourceTree = "<group>"; };
271273
81909D4E21887658007D2AE5 /* web3swift_Eventloop_Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = web3swift_Eventloop_Tests.swift; sourceTree = "<group>"; };
274+
81909D50218DAEC0007D2AE5 /* Promise+Web3+Personal+CreateAccount.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Promise+Web3+Personal+CreateAccount.swift"; sourceTree = "<group>"; };
272275
81A1821420D5A2700016741F /* Promise+Web3+Eth+GetBalance.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Promise+Web3+Eth+GetBalance.swift"; sourceTree = "<group>"; };
273276
81A1821720D5A3E70016741F /* Promise+HttpProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Promise+HttpProvider.swift"; sourceTree = "<group>"; };
274277
81A1821C20D5C6C10016741F /* web3swift_promises_Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = web3swift_promises_Tests.swift; sourceTree = "<group>"; };
@@ -611,6 +614,7 @@
611614
81A1823F20D79FDB0016741F /* Promise+Web3+Eth+EstimateGas.swift */,
612615
81A1824120D7AA750016741F /* Promise+Web3+Eth+SendTransaction.swift */,
613616
81A1824720D7DDA20016741F /* Promise+Web3+Personal+Sign.swift */,
617+
81909D50218DAEC0007D2AE5 /* Promise+Web3+Personal+CreateAccount.swift */,
614618
81A1824A20D7DF1B0016741F /* Promise+Web3+Personal+UnlockAccount.swift */,
615619
81195AAF20D7FF8500ABC6B1 /* Promise+Web3+Contract+GetIndexedEvents.swift */,
616620
985BFD4D216E2E0A00B28C14 /* Promise+Web3+TxPool.swift */,
@@ -1040,6 +1044,7 @@
10401044
81FB21FE207BB297007F9A83 /* EIP67Code.swift in Sources */,
10411045
81A1821A20D5A6F70016741F /* Promise+HttpProvider.swift in Sources */,
10421046
81A1823720D6E2BB0016741F /* Promise+Web3+Eth+GetBlockByHash.swift in Sources */,
1047+
81909D51218DAEC0007D2AE5 /* Promise+Web3+Personal+CreateAccount.swift in Sources */,
10431048
818D16CF204D42910084D2A4 /* Web3+EventParser.swift in Sources */,
10441049
81C5DA282072E18200424CD6 /* NativeTypesEncoding+Extensions.swift in Sources */,
10451050
8123E1C7200CBAC200B6D3AB /* Dictionary+Extension.swift in Sources */,
@@ -1143,6 +1148,7 @@
11431148
81FB21FF207BB297007F9A83 /* EIP67Code.swift in Sources */,
11441149
81A1821B20D5A6F80016741F /* Promise+HttpProvider.swift in Sources */,
11451150
81A1823820D6E2BB0016741F /* Promise+Web3+Eth+GetBlockByHash.swift in Sources */,
1151+
81909D52218DAEC0007D2AE5 /* Promise+Web3+Personal+CreateAccount.swift in Sources */,
11461152
818D16D0204D42940084D2A4 /* Web3+EventParser.swift in Sources */,
11471153
4194812E203630530065A83B /* AbstractKeystore.swift in Sources */,
11481154
81C5DA292072E18200424CD6 /* NativeTypesEncoding+Extensions.swift in Sources */,

web3swift/Promises/Classes/Promise+Web3+Eth+Call.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import PromiseKit
99

1010
extension web3.Eth {
1111

12-
func callPromise(_ transaction: EthereumTransaction, transactionOptions: TransactionOptions?) -> Promise<Data>{
12+
public func callPromise(_ transaction: EthereumTransaction, transactionOptions: TransactionOptions?) -> Promise<Data>{
1313
let queue = web3.requestDispatcher.queue
1414
do {
1515
guard let request = EthereumTransaction.createRequest(method: .call, transaction: transaction, transactionOptions: transactionOptions) else {

web3swift/Promises/Classes/Promise+Web3+Eth+EstimateGas.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import PromiseKit
1010

1111
extension web3.Eth {
1212

13-
func estimateGasPromise(_ transaction: EthereumTransaction, transactionOptions: TransactionOptions?) -> Promise<BigUInt>{
13+
public func estimateGasPromise(_ transaction: EthereumTransaction, transactionOptions: TransactionOptions?) -> Promise<BigUInt>{
1414
let queue = web3.requestDispatcher.queue
1515
do {
1616
guard let request = EthereumTransaction.createRequest(method: .estimateGas, transaction: transaction, transactionOptions: transactionOptions) else {

web3swift/Promises/Classes/Promise+Web3+Eth+SendRawTransaction.swift

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import Foundation
88
import PromiseKit
99

1010
extension web3.Eth {
11-
func sendRawTransactionPromise(_ transaction: Data) -> Promise<TransactionSendingResult> {
11+
public func sendRawTransactionPromise(_ transaction: Data) -> Promise<TransactionSendingResult> {
1212
guard let deserializedTX = EthereumTransaction.fromRaw(transaction) else {
1313
let promise = Promise<TransactionSendingResult>.pending()
1414
promise.resolver.reject(Web3Error.processingError(desc: "Serialized TX is invalid"))
@@ -17,7 +17,7 @@ extension web3.Eth {
1717
return sendRawTransactionPromise(deserializedTX)
1818
}
1919

20-
func sendRawTransactionPromise(_ transaction: EthereumTransaction) -> Promise<TransactionSendingResult>{
20+
public func sendRawTransactionPromise(_ transaction: EthereumTransaction) -> Promise<TransactionSendingResult>{
2121
// print(transaction)
2222
let queue = web3.requestDispatcher.queue
2323
do {

web3swift/Promises/Classes/Promise+Web3+Eth+SendTransaction.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import PromiseKit
1010

1111
extension web3.Eth {
1212

13-
func sendTransactionPromise(_ transaction: EthereumTransaction, transactionOptions: TransactionOptions?, password:String = "web3swift") -> Promise<TransactionSendingResult> {
13+
public func sendTransactionPromise(_ transaction: EthereumTransaction, transactionOptions: TransactionOptions?, password:String = "web3swift") -> Promise<TransactionSendingResult> {
1414
// print(transaction)
1515
var assembledTransaction : EthereumTransaction = transaction // .mergedWithOptions(transactionOptions)
1616
let queue = web3.requestDispatcher.queue
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
// web3swift
2+
//
3+
// Created by Alex Vlasov.
4+
// Copyright © 2018 Alex Vlasov. All rights reserved.
5+
//
6+
7+
import Foundation
8+
import BigInt
9+
import PromiseKit
10+
import EthereumAddress
11+
12+
extension web3.Personal {
13+
public func createAccountPromise(password:String = "web3swift") -> Promise<EthereumAddress> {
14+
let queue = web3.requestDispatcher.queue
15+
do {
16+
if self.web3.provider.attachedKeystoreManager == nil {
17+
let request = JSONRPCRequestFabric.prepareRequest(.createAccount, parameters: [password])
18+
return self.web3.dispatch(request).map(on: queue) {response in
19+
guard let value: EthereumAddress = response.getValue() else {
20+
if response.error != nil {
21+
throw Web3Error.nodeError(desc: response.error!.message)
22+
}
23+
throw Web3Error.nodeError(desc: "Invalid value from Ethereum node")
24+
}
25+
return value
26+
}
27+
}
28+
throw Web3Error.inputError(desc: "Creating account in a local keystore with this method is not supported")
29+
} catch {
30+
let returnPromise = Promise<EthereumAddress>.pending()
31+
queue.async {
32+
returnPromise.resolver.reject(error)
33+
}
34+
return returnPromise.promise
35+
}
36+
}
37+
}

web3swift/Promises/Classes/Promise+Web3+Personal+Sign.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import EthereumAddress
1111

1212
extension web3.Personal {
1313

14-
func signPersonalMessagePromise(message: Data, from: EthereumAddress, password:String = "web3swift") -> Promise<Data> {
14+
public func signPersonalMessagePromise(message: Data, from: EthereumAddress, password:String = "web3swift") -> Promise<Data> {
1515
let queue = web3.requestDispatcher.queue
1616
do {
1717
if self.web3.provider.attachedKeystoreManager == nil {

web3swift/Promises/Classes/Promise+Web3+Personal+UnlockAccount.swift

+2-2
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,13 @@ import PromiseKit
1010
import EthereumAddress
1111

1212
extension web3.Personal {
13-
func unlockAccountPromise(account: EthereumAddress, password:String = "web3swift", seconds: UInt64 = 300) -> Promise<Bool> {
13+
public func unlockAccountPromise(account: EthereumAddress, password:String = "web3swift", seconds: UInt64 = 300) -> Promise<Bool> {
1414
let addr = account.address
1515
return unlockAccountPromise(account: addr, password: password, seconds: seconds)
1616
}
1717

1818

19-
func unlockAccountPromise(account: String, password:String = "web3swift", seconds: UInt64 = 300) -> Promise<Bool> {
19+
public func unlockAccountPromise(account: String, password:String = "web3swift", seconds: UInt64 = 300) -> Promise<Bool> {
2020
let queue = web3.requestDispatcher.queue
2121
do {
2222
if self.web3.provider.attachedKeystoreManager == nil {

web3swift/Web3/Classes/Web3+Methods.swift

+2
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,12 @@ public enum JSONRPCmethod: String, Encodable {
2626
case getBlockByNumber = "eth_getBlockByNumber"
2727
case personalSign = "eth_sign"
2828
case unlockAccount = "personal_unlockAccount"
29+
case createAccount = "personal_createAccount"
2930
case getLogs = "eth_getLogs"
3031
case getTxPoolInspect = "txpool_inspect"
3132
case getTxPoolStatus = "txpool_status"
3233
case getTxPoolContent = "txpool_content"
34+
3335

3436
public var requiredNumOfParameters: Int {
3537
get {

0 commit comments

Comments
 (0)