Skip to content

Commit 57e93ff

Browse files
authored
Merge branch 'skywinder:develop' into develop
2 parents dea63ed + a3b2acf commit 57e93ff

34 files changed

+1201
-1099
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# web3swift
22
**web3swift** is an iOS toolbelt for interaction with the Ethereum network.
33

4-
## [Join our discord](https://discord.gg/8tXjHK3pus) if you need a support or want to contribute to web3swift development!
4+
## [Join our discord](https://discord.gg/npZ6SuSS) if you need a support or want to contribute to web3swift development!
55

66
![matter-github-swift](https://github.com/skywinder/web3swift/blob/develop/web3swift-logo.png)
77
[![Build Status](https://travis-ci.com/skywinder/web3swift.svg?branch=develop)](https://travis-ci.com/skywinder/web3swift)
@@ -423,4 +423,4 @@ If you believe you have identified a security vulnerability with web3swift, you
423423

424424
## License
425425

426-
web3swift is available under the Apache License 2.0 license. See the [LICENSE](https://github.com/skywinder/web3swift/blob/master/LICENSE) for details.
426+
web3swift is available under the Apache License 2.0 license. See the [LICENSE](https://github.com/skywinder/web3swift/blob/master/LICENSE) for details.

Sources/web3swift/Web3/Web3.swift

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,4 +76,10 @@ public struct Web3 {
7676
return web3(provider: infura)
7777
}
7878

79+
/// Initialized Web3 instance bound to Infura's kovan provider.
80+
public static func InfuraKovanWeb3(accessToken: String? = nil) -> web3 {
81+
let infura = InfuraProvider(Networks.Kovan, accessToken: accessToken)!
82+
return web3(provider: infura)
83+
}
84+
7985
}
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
// web3swift
2+
//
3+
// Created by Alex Vlasov.
4+
// Copyright © 2018 Alex Vlasov. All rights reserved.
5+
//
6+
7+
import XCTest
8+
9+
@testable import web3swift
10+
11+
// MARK: Works only with network connection
12+
class web3swift_ENS_Tests: XCTestCase {
13+
14+
func testDomainNormalization() throws {
15+
let normalizedString = NameHash.normalizeDomainName("example.ens")
16+
print(normalizedString!)
17+
}
18+
19+
func testNameHash() throws {
20+
XCTAssertEqual(NameHash.nameHash(""), Data.fromHex("0x0000000000000000000000000000000000000000000000000000000000000000"))
21+
XCTAssertEqual(NameHash.nameHash("eth"), Data.fromHex("0x93cdeb708b7545dc668eb9280176169d1c33cfd8ed6f04690a0bcc88a93fc4ae"))
22+
XCTAssertEqual(NameHash.nameHash("foo.eth"), Data.fromHex("0xde9b09fd7c5f901e23a3f19fecc54828e9c848539801e86591bd9801b019f84f"))
23+
}
24+
25+
func testResolverAddress() throws {
26+
let web = web3(provider: InfuraProvider(Networks.Mainnet)!)
27+
let ens = ENS(web3: web)
28+
let domain = "somename.eth"
29+
let address = try ens?.registry.getResolver(forDomain: domain).resolverContractAddress
30+
XCTAssertEqual(address?.address.lowercased(), "0x5ffc014343cd971b7eb70732021e26c35b744cc4")
31+
}
32+
33+
func testResolver() throws {
34+
let web = web3(provider: InfuraProvider(Networks.Mainnet)!)
35+
let ens = ENS(web3: web)
36+
let domain = "somename.eth"
37+
let address = try ens?.getAddress(forNode: domain)
38+
XCTAssertEqual(address?.address.lowercased(), "0x3487acfb1479ad1df6c0eb56ae743d34897798ac")
39+
}
40+
41+
func testSupportsInterface() throws {
42+
let web = web3(provider: InfuraProvider(Networks.Mainnet)!)
43+
let ens = ENS(web3: web)
44+
let domain = "somename.eth"
45+
let resolver = try ens?.registry.getResolver(forDomain: domain)
46+
let isAddrSupports = try resolver?.supportsInterface(interfaceID: ENS.Resolver.InterfaceName.addr.hash())
47+
let isNameSupports = try resolver?.supportsInterface(interfaceID: ENS.Resolver.InterfaceName.name.hash())
48+
let isABIsupports = try resolver?.supportsInterface(interfaceID: ENS.Resolver.InterfaceName.ABI.hash())
49+
let isPubkeySupports = try resolver?.supportsInterface(interfaceID: ENS.Resolver.InterfaceName.pubkey.hash())
50+
XCTAssertEqual(isAddrSupports, true)
51+
XCTAssertEqual(isNameSupports, true)
52+
XCTAssertEqual(isABIsupports, true)
53+
XCTAssertEqual(isPubkeySupports, true)
54+
}
55+
56+
func testABI() throws {
57+
let web = web3(provider: InfuraProvider(Networks.Mainnet)!)
58+
let ens = ENS(web3: web)
59+
let domain = "somename.eth"
60+
let resolver = try ens?.registry.getResolver(forDomain: domain)
61+
if let isABIsupported = try resolver?.supportsInterface(interfaceID: ENS.Resolver.InterfaceName.ABI.hash()),
62+
isABIsupported {
63+
let res = try resolver?.getContractABI(forNode: domain, contentType: .zlibCompressedJSON)
64+
XCTAssert(res?.0 == 0)
65+
XCTAssert(res?.1.count == 0)
66+
} else {
67+
XCTFail()
68+
}
69+
}
70+
71+
func testOwner() throws {
72+
let web = web3(provider: InfuraProvider(Networks.Mainnet)!)
73+
let ens = ENS(web3: web)
74+
let domain = "somename.eth"
75+
let owner = try ens?.registry.getOwner(node: domain)
76+
XCTAssertEqual("0xc67247454e720328714c4e17bec7640572657bee", owner?.address.lowercased())
77+
}
78+
79+
func testTTL() throws {
80+
let web = web3(provider: InfuraProvider(Networks.Mainnet)!)
81+
let ens = ENS(web3: web)
82+
let domain = "somename.eth"
83+
let ttl = try ens?.registry.getTTL(node: domain)
84+
print(ttl!.description)
85+
}
86+
87+
func testGetAddress() throws {
88+
let web = web3(provider: InfuraProvider(Networks.Mainnet)!)
89+
let ens = ENS(web3: web)
90+
let domain = "somename.eth"
91+
let resolver = try ens?.registry.getResolver(forDomain: domain)
92+
let address = try resolver?.getAddress(forNode: domain)
93+
XCTAssertEqual(address?.address.lowercased(), "0x3487acfb1479ad1df6c0eb56ae743d34897798ac")
94+
}
95+
96+
func testGetPubkey() throws {
97+
let web = web3(provider: InfuraProvider(Networks.Mainnet)!)
98+
let ens = ENS(web3: web)
99+
let domain = "somename.eth"
100+
let resolver = try ens?.registry.getResolver(forDomain: domain)
101+
let pubkey = try resolver?.getPublicKey(forNode: domain)
102+
XCTAssert(pubkey?.x == "0x0000000000000000000000000000000000000000000000000000000000000000")
103+
XCTAssert(pubkey?.y == "0x0000000000000000000000000000000000000000000000000000000000000000")
104+
}
105+
}

Tests/web3swiftTests/web3swift_ST20AndSecurityToken_Tests.swift renamed to Tests/web3swiftTests/infura_tests/web3swift_ST20AndSecurityToken_Tests.swift

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,14 @@
77
//
88
import XCTest
99
import BigInt
10-
//import EthereumAddress
1110

1211
@testable import web3swift
1312

13+
// MARK: Works only with network connection
1414
class web3swift_ST20AndSecurityToken_Tests: XCTestCase {
1515

16-
func testERC20TokenCreation() {
17-
let web3 = try! Web3.new(URL(string: "https://kovan.infura.io")!)
16+
func testERC20TokenCreation() throws {
17+
let web3 = Web3.InfuraKovanWeb3()
1818
let w3sTokenAddress = EthereumAddress("0x2dD33957C90880bE4Ee9fd5F703110BDA2E579EC")!
1919
let st20token = ST20.init(web3: web3, provider: web3.provider, address: w3sTokenAddress)
2020
st20token.readProperties()
@@ -24,7 +24,7 @@ class web3swift_ST20AndSecurityToken_Tests: XCTestCase {
2424
}
2525

2626
func testST20tokenBalanceAndAllowance() throws {
27-
let web3 = try! Web3.new(URL(string: "https://kovan.infura.io")!)
27+
let web3 = Web3.InfuraKovanWeb3()
2828
let w3sTokenAddress = EthereumAddress("0x2dD33957C90880bE4Ee9fd5F703110BDA2E579EC")!
2929
let st20token = ST20.init(web3: web3, provider: web3.provider, address: w3sTokenAddress)
3030
let userAddress = EthereumAddress("0xe22b8979739D724343bd002F9f432F5990879901")!
@@ -35,7 +35,7 @@ class web3swift_ST20AndSecurityToken_Tests: XCTestCase {
3535
}
3636

3737
func testSecurityTokenInvestors() throws {
38-
let web3 = try! Web3.new(URL(string: "https://kovan.infura.io")!)
38+
let web3 = Web3.InfuraKovanWeb3()
3939
let w3sTokenAddress = EthereumAddress("0x2dD33957C90880bE4Ee9fd5F703110BDA2E579EC")!
4040
let stoken = SecurityToken.init(web3: web3, provider: web3.provider, address: w3sTokenAddress)
4141
let investorsCount = try stoken.investorCount()
@@ -44,7 +44,7 @@ class web3swift_ST20AndSecurityToken_Tests: XCTestCase {
4444
}
4545

4646
func testSecurityTokenGranularity() throws {
47-
let web3 = try! Web3.new(URL(string: "https://kovan.infura.io")!)
47+
let web3 = Web3.InfuraKovanWeb3()
4848
let w3sTokenAddress = EthereumAddress("0x2dD33957C90880bE4Ee9fd5F703110BDA2E579EC")!
4949
let stoken = SecurityToken.init(web3: web3, provider: web3.provider, address: w3sTokenAddress)
5050
let granularity = try stoken.getGranularity()

Tests/web3swiftTests/web3swift_Websockets_Tests.swift renamed to Tests/web3swiftTests/infura_tests/web3swift_Websockets_Tests.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ class SpyDelegate: Web3SocketDelegate {
4040
}
4141
}
4242

43+
// MARK: Works only with network connection
4344
class web3swift_websocket_Tests: XCTestCase {
4445

4546
let spyDelegate = SpyDelegate()
@@ -75,7 +76,7 @@ class web3swift_websocket_Tests: XCTestCase {
7576
}
7677
self.socketProvider = socketProvider
7778
spyDelegate.asyncExpectation = expectation(description: "Delegate called")
78-
try! self.socketProvider!.subscribeOnLogs(addresses: [EthereumAddress("0x89d24A6b4CcB1B6fAA2625fE562bDD9a23260359")!], topics: nil)
79+
try! self.socketProvider!.subscribeOnLogs(addresses: [EthereumAddress("0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48")!], topics: nil)
7980
// DispatchQueue.main.asyncAfter(deadline: .now()+5) { [unowned self] in
8081
// try! self.socketProvider!.subscribeOnNewPendingTransactions()
8182
// }
@@ -123,7 +124,7 @@ class web3swift_websocket_Tests: XCTestCase {
123124
}
124125
self.socketProvider = socketProvider
125126
spyDelegate.asyncExpectation = expectation(description: "Delegate called")
126-
try! self.socketProvider?.setFilterAndGetLogs(method: .newFilter, address: EthereumAddress("0x89d24A6b4CcB1B6fAA2625fE562bDD9a23260359")!, fromBlock: .earliest, toBlock: .latest, topics: nil)
127+
try! self.socketProvider?.setFilterAndGetLogs(method: .newFilter, address: EthereumAddress("0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48")!, fromBlock: .earliest, toBlock: .latest, topics: nil)
127128
// DispatchQueue.main.asyncAfter(deadline: .now()+5) { [unowned self] in
128129
// try! self.socketProvider!.subscribeOnNewPendingTransactions()
129130
// }

0 commit comments

Comments
 (0)