Skip to content

Commit 562c022

Browse files
continue working on objC bridge
1 parent 88a2313 commit 562c022

11 files changed

+121
-18
lines changed

web3swift.xcodeproj/project.pbxproj

+4
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,7 @@
210210
E23B5AE120EA695400DC7F32 /* web3swift_rinkeby_personalSignature_Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E23B5AE020EA695400DC7F32 /* web3swift_rinkeby_personalSignature_Tests.swift */; };
211211
E23B5AE320EA69B900DC7F32 /* web3swift_numberFormattingUtil_Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E23B5AE220EA69B900DC7F32 /* web3swift_numberFormattingUtil_Tests.swift */; };
212212
E23B5AE520EA6A0A00DC7F32 /* web3swift_contractV2_Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E23B5AE420EA6A0A00DC7F32 /* web3swift_contractV2_Tests.swift */; };
213+
E2C590762152835400FF53D3 /* JSONRPCrequestDispatcher+ObjC.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2C590752152835400FF53D3 /* JSONRPCrequestDispatcher+ObjC.swift */; };
213214
/* End PBXBuildFile section */
214215

215216
/* Begin PBXContainerItemProxy section */
@@ -377,6 +378,7 @@
377378
E23B5AE020EA695400DC7F32 /* web3swift_rinkeby_personalSignature_Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = web3swift_rinkeby_personalSignature_Tests.swift; sourceTree = "<group>"; };
378379
E23B5AE220EA69B900DC7F32 /* web3swift_numberFormattingUtil_Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = web3swift_numberFormattingUtil_Tests.swift; sourceTree = "<group>"; };
379380
E23B5AE420EA6A0A00DC7F32 /* web3swift_contractV2_Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = web3swift_contractV2_Tests.swift; sourceTree = "<group>"; };
381+
E2C590752152835400FF53D3 /* JSONRPCrequestDispatcher+ObjC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "JSONRPCrequestDispatcher+ObjC.swift"; sourceTree = "<group>"; };
380382
FB43EC035C593F9E5A3644B6 /* Pods-web3swift-macOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-web3swift-macOS.debug.xcconfig"; path = "Pods/Target Support Files/Pods-web3swift-macOS/Pods-web3swift-macOS.debug.xcconfig"; sourceTree = "<group>"; };
381383
FC1E6C115639177F2629E42A /* Pods_web3swift_osx.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_web3swift_osx.framework; sourceTree = BUILT_PRODUCTS_DIR; };
382384
/* End PBXFileReference section */
@@ -822,6 +824,7 @@
822824
isa = PBXGroup;
823825
children = (
824826
81FECD44211ADE51006DA367 /* Web3+ObjC.swift */,
827+
E2C590752152835400FF53D3 /* JSONRPCrequestDispatcher+ObjC.swift */,
825828
81FECD48211ADEB1006DA367 /* Web3+Instance+ObjC.swift */,
826829
81FECD4B211ADF70006DA367 /* Web3+HttpProvider+ObjC.swift */,
827830
81FECD4E211AE100006DA367 /* KeystoreManager+ObjC.swift */,
@@ -1120,6 +1123,7 @@
11201123
81195AB020D7FF8500ABC6B1 /* Promise+Web3+Contract+GetIndexedEvents.swift in Sources */,
11211124
8113D2C61FD7E1590074282C /* LibSecp256k1Extension.swift in Sources */,
11221125
81EB1E4B208173D7003BD47F /* Web3+Personal.swift in Sources */,
1126+
E2C590762152835400FF53D3 /* JSONRPCrequestDispatcher+ObjC.swift in Sources */,
11231127
81A1824B20D7DF1B0016741F /* Promise+Web3+Personal+UnlockAccount.swift in Sources */,
11241128
81A1823A20D79AD40016741F /* Promise+Web3+Eth+SendRawTransaction.swift in Sources */,
11251129
81D7D97520A3240900A193EC /* EthereumFilterEncodingExtensions.swift in Sources */,

web3swift/ObjectiveCbridge/Classes/BigUInt+ObjC.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import Foundation
1010
import BigInt
1111

12-
//@objc(BigUInt)
12+
@objc(BigUInt)
1313
public final class _ObjCBigUInt: NSObject{
1414
private (set) var biguint: BigUInt?
1515

web3swift/ObjectiveCbridge/Classes/EthereumAddress+ObjC.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
import Foundation
1010

11-
//@objc(EthereumAddress)
11+
@objc(EthereumAddress)
1212
public final class _ObjCEthereumAddress: NSObject{
1313
private (set) var address: EthereumAddress?
1414

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
//
2+
// JSONRPCrequestDispatcher.swift
3+
// web3swift-iOS
4+
//
5+
// Created by Anton Grigorev on 19.09.2018.
6+
// Copyright © 2018 Bankex Foundation. All rights reserved.
7+
//
8+
9+
import Foundation
10+
11+
@objc(JSONRPCrequestDispatcher)
12+
public final class _ObjCJSONRPCrequestDispatcher: NSObject {
13+
14+
private (set) weak var jsonRPCrequestDispatcher: JSONRPCrequestDispatcher?
15+
16+
// TODO: -DispatchQueue
17+
init(provider: _ObjCWeb3HttpProvider, queue: DispatchQueue, policy: _ObjCDispatchPolicy) {
18+
guard let provider = provider.web3Provider else {return}
19+
let _policy: JSONRPCrequestDispatcher.DispatchPolicy
20+
switch policy.value {
21+
case 0:
22+
_policy = JSONRPCrequestDispatcher.DispatchPolicy.NoBatching
23+
default:
24+
_policy = JSONRPCrequestDispatcher.DispatchPolicy.Batch(Int(policy.batchValue))
25+
}
26+
self.jsonRPCrequestDispatcher = JSONRPCrequestDispatcher(provider: provider, queue: queue, policy: _policy)
27+
}
28+
29+
struct _ObjCDispatchPolicy {
30+
var value: UInt32 = 0
31+
var batchValue: UInt32 = 0
32+
init(_ val: UInt32, batchVal: UInt32 = 0) {
33+
value = val
34+
if val != 0 {
35+
batchValue = batchVal
36+
}
37+
}
38+
39+
}
40+
41+
}

web3swift/ObjectiveCbridge/Classes/KeystoreManager+ObjC.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
import Foundation
1010

11-
//@objc(KeystoreManager)
11+
@objc(KeystoreManager)
1212
public final class _ObjCKeystoreManager: NSObject{
1313
private (set) var keystoreManager: KeystoreManager?
1414

web3swift/ObjectiveCbridge/Classes/PlainKeystore+ObjC.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
import Foundation
1010

11-
//@objc(PlainKeystore)
11+
@objc(PlainKeystore)
1212
public final class _ObjCPlainKeystore: NSObject{
1313
private (set) var keystore: PlainKeystore?
1414

web3swift/ObjectiveCbridge/Classes/Web3+Eth+ObjC.swift

+35-5
Original file line numberDiff line numberDiff line change
@@ -8,21 +8,21 @@
88

99
import Foundation
1010

11-
//@objc(web3Eth)
11+
@objc(web3Eth)
1212
public final class _ObjCweb3Eth: NSObject {
1313
private (set) weak var web3: web3?
1414

15-
init(web3: web3?) {
16-
self.web3 = web3
15+
init(web3: _ObjCweb3?) {
16+
self.web3 = web3?._web3
1717
}
1818

1919
public func getBalance(address: _ObjCEthereumAddress, onBlock: NSString = "latest", error: NSErrorPointer) -> _ObjCBigUInt? {
2020
guard let addr = address.address else {
21-
error?.pointee = Web3Error.inputError(desc: "Address is empty") as NSError
21+
error?.pointee = Web3Error.inputError("Address is empty") as NSError
2222
return nil
2323
}
2424
guard let result = self.web3?.eth.getBalance(address: addr, onBlock: onBlock as String) else {
25-
error?.pointee = Web3Error.processingError(desc: "Web3 object was not properly initialized") as NSError
25+
error?.pointee = Web3Error.processingError("Web3 object was not properly initialized") as NSError
2626
return nil
2727
}
2828
switch result {
@@ -34,4 +34,34 @@ public final class _ObjCweb3Eth: NSObject {
3434
return nil
3535
}
3636
}
37+
38+
public func getBlockNumber(error: NSErrorPointer) -> _ObjCBigUInt? {
39+
guard let result = self.web3?.eth.getBlockNumber() else {
40+
error?.pointee = Web3Error.inputError("Web3 object was not properly initialized") as NSError
41+
return nil
42+
}
43+
switch result {
44+
case .success(let blockNumber):
45+
let biguint = _ObjCBigUInt(value: blockNumber)
46+
return biguint
47+
case .failure(let web3error):
48+
error?.pointee = web3error as NSError
49+
return nil
50+
}
51+
}
52+
53+
public func getGasPrice(error: NSErrorPointer) -> _ObjCBigUInt? {
54+
guard let result = self.web3?.eth.getGasPrice() else {
55+
error?.pointee = Web3Error.inputError("Web3 object was not properly initialized") as NSError
56+
return nil
57+
}
58+
switch result {
59+
case .success(let blockNumber):
60+
let biguint = _ObjCBigUInt(value: blockNumber)
61+
return biguint
62+
case .failure(let web3error):
63+
error?.pointee = web3error as NSError
64+
return nil
65+
}
66+
}
3767
}

web3swift/ObjectiveCbridge/Classes/Web3+HttpProvider+ObjC.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
import Foundation
1010

11-
//@objc(Web3HttpProvider)
11+
@objc(Web3HttpProvider)
1212
final class _ObjCWeb3HttpProvider: NSObject{
1313
private (set) var web3Provider: Web3HttpProvider?
1414

web3swift/ObjectiveCbridge/Classes/Web3+Instance+ObjC.swift

+12-5
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,22 @@
88

99
import Foundation
1010

11-
//@objc(web3)
11+
@objc(web3)
1212
public final class _ObjCweb3: NSObject {
13-
private (set) var web3: web3?
13+
private (set) var _web3: web3?
1414

15-
init(web3: web3?) {
16-
self.web3 = web3
15+
// TODO: - OperationQueue
16+
init(provider prov: _ObjCWeb3HttpProvider, requestDispatcher: _ObjCJSONRPCrequestDispatcher = Optional.none!) {
17+
guard let prov = prov.web3Provider else {return}
18+
self._web3 = web3(provider: prov, queue: nil, requestDispatcher: requestDispatcher.jsonRPCrequestDispatcher)
19+
}
20+
21+
init(web3: web3) {
22+
self._web3 = web3
1723
}
1824

1925
public var web3Eth: _ObjCweb3Eth {
20-
return _ObjCweb3Eth(web3: self.web3)
26+
return _ObjCweb3Eth(web3: self)
2127
}
2228
}
29+

web3swift/ObjectiveCbridge/Classes/Web3+ObjC.swift

+7-3
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
import Foundation
1010

11-
//@objc(Web3)
11+
@objc(Web3)
1212
public final class _ObjCWeb3: NSObject {
1313
public static func InfuraMainnetWeb3() -> _ObjCweb3 {
1414
let web3 = Web3.InfuraMainnetWeb3()
@@ -20,9 +20,13 @@ public final class _ObjCWeb3: NSObject {
2020
return _ObjCweb3(web3: web3)
2121
}
2222

23-
public static func new(providerURL: NSURL) -> _ObjCweb3 {
24-
let web3 = Web3.new(providerURL as URL)
23+
public static func new(providerURL: NSURL, error: NSErrorPointer) -> _ObjCweb3? {
24+
guard let web3 = Web3.new(providerURL as URL) else {
25+
error?.pointee = Web3Error.inputError("Wrong URL") as NSError
26+
return nil
27+
}
2528
return _ObjCweb3(web3: web3)
2629
}
2730
}
2831

32+

web3swiftTests/web3swift_ObjC_Tests.swift

+17
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,21 @@ class web3swift_ObjC_Tests: XCTestCase {
1818
XCTAssert(err?.pointee == nil)
1919
XCTAssert(balance != nil)
2020
}
21+
22+
func testGettingBlockNumber() {
23+
let web3 = _ObjCWeb3.InfuraMainnetWeb3()
24+
let err: NSErrorPointer = NSErrorPointer(nilLiteral: ())
25+
let blockNumber = web3.web3Eth.getBlockNumber(error: err)
26+
XCTAssert(err?.pointee == nil)
27+
XCTAssert(blockNumber != nil)
28+
29+
}
30+
31+
func testGasPrice(){
32+
let web3 = _ObjCWeb3.InfuraMainnetWeb3()
33+
let err: NSErrorPointer = NSErrorPointer(nilLiteral: ())
34+
let gasPrice = web3.web3Eth.getGasPrice(error: err)
35+
XCTAssert(err?.pointee == nil)
36+
XCTAssert(gasPrice != nil)
37+
}
2138
}

0 commit comments

Comments
 (0)