Skip to content

Commit 9ada946

Browse files
committed
Address comments. Fix typo. Fix naming. Make contract constant. Make provider private set
1 parent fb5dc47 commit 9ada946

15 files changed

+101
-149
lines changed

Sources/web3swift/Tokens/ERC1376/Web3+ERC1376.swift

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -66,19 +66,15 @@ protocol IERC1376: IERC20 {
6666
}
6767

6868
// FIXME: Rewrite this to CodableTransaction
69-
public class ERC1376: IERC1376, ERCBaseProperties {
70-
public var basePropertiesProvder: ERCBasePropertiesProvider
69+
public class ERC1376: IERC1376, ERC20BaseProperties {
70+
public private(set) var basePropertiesProvider: ERC20BasePropertiesProvider
7171
public var transaction: CodableTransaction
7272
public var web3: Web3
7373
public var provider: Web3Provider
7474
public var address: EthereumAddress
7575
public var abi: String
7676

77-
public lazy var contract: Web3.Contract = {
78-
let contract = self.web3.contract(self.abi, at: self.address, abiVersion: 2)
79-
precondition(contract != nil)
80-
return contract!
81-
}()
77+
public let contract: Web3.Contract
8278

8379
public init(web3: Web3, provider: Web3Provider, address: EthereumAddress, abi: String = Web3.Utils.erc1376ABI, transaction: CodableTransaction = .emptyTransaction) {
8480
self.web3 = web3
@@ -88,8 +84,8 @@ public class ERC1376: IERC1376, ERCBaseProperties {
8884
self.transaction.to = address
8985
self.abi = abi
9086
// Forced because this should fail if contract is wrongly configured
91-
let contract = web3.contract(Web3.Utils.erc20ABI, at: address)!
92-
self.basePropertiesProvder = ERCBasePropertiesProvider(contract: contract)
87+
contract = web3.contract(abi, at: address)!
88+
basePropertiesProvider = ERC20BasePropertiesProvider(contract: contract)
9389
}
9490

9591
public func getBalance(account: EthereumAddress) async throws -> BigUInt {

Sources/web3swift/Tokens/ERC1400/Web3+ERC1400.swift

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -63,19 +63,15 @@ protocol IERC1400: IERC20 {
6363
// variables are lazyly evaluated or global token information (name, ticker, total supply)
6464
// can be imperatively read and saved
6565
// FIXME: Rewrite this to CodableTransaction
66-
public class ERC1400: IERC1400, ERCBaseProperties {
67-
public var basePropertiesProvder: ERCBasePropertiesProvider
66+
public class ERC1400: IERC1400, ERC20BaseProperties {
67+
public private(set) var basePropertiesProvider: ERC20BasePropertiesProvider
6868
public var transaction: CodableTransaction
6969
public var web3: Web3
7070
public var provider: Web3Provider
7171
public var address: EthereumAddress
7272
public var abi: String
7373

74-
public lazy var contract: Web3.Contract = {
75-
let contract = self.web3.contract(self.abi, at: self.address, abiVersion: 2)
76-
precondition(contract != nil)
77-
return contract!
78-
}()
74+
public let contract: Web3.Contract
7975

8076
public init(web3: Web3, provider: Web3Provider, address: EthereumAddress, abi: String = Web3.Utils.erc1400ABI, transaction: CodableTransaction = .emptyTransaction) {
8177
self.web3 = web3
@@ -85,8 +81,8 @@ public class ERC1400: IERC1400, ERCBaseProperties {
8581
self.transaction.to = address
8682
self.abi = abi
8783
// Forced because this should fail if contract is wrongly configured
88-
let contract = web3.contract(Web3.Utils.erc20ABI, at: address)!
89-
self.basePropertiesProvder = ERCBasePropertiesProvider(contract: contract)
84+
contract = web3.contract(abi, at: address)!
85+
basePropertiesProvider = ERC20BasePropertiesProvider(contract: contract)
9086
}
9187

9288
public func getBalance(account: EthereumAddress) async throws -> BigUInt {

Sources/web3swift/Tokens/ERC1410/Web3+ERC1410.swift

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -41,19 +41,15 @@ protocol IERC1410: IERC20 {
4141
}
4242

4343
// FIXME: Rewrite this to CodableTransaction
44-
public class ERC1410: IERC1410, ERCBaseProperties {
45-
public var basePropertiesProvder: ERCBasePropertiesProvider
44+
public class ERC1410: IERC1410, ERC20BaseProperties {
45+
public private(set) var basePropertiesProvider: ERC20BasePropertiesProvider
4646
public var transaction: CodableTransaction
4747
public var web3: Web3
4848
public var provider: Web3Provider
4949
public var address: EthereumAddress
5050
public var abi: String
5151

52-
public lazy var contract: Web3.Contract = {
53-
let contract = self.web3.contract(self.abi, at: self.address, abiVersion: 2)
54-
precondition(contract != nil)
55-
return contract!
56-
}()
52+
public let contract: Web3.Contract
5753

5854
public init(web3: Web3, provider: Web3Provider, address: EthereumAddress, abi: String = Web3.Utils.erc1410ABI, transaction: CodableTransaction = .emptyTransaction) {
5955
self.web3 = web3
@@ -63,8 +59,8 @@ public class ERC1410: IERC1410, ERCBaseProperties {
6359
self.transaction = transaction
6460
self.transaction.to = address
6561
// Forced because this should fail if contract is wrongly configured
66-
let contract = web3.contract(Web3.Utils.erc20ABI, at: address)!
67-
self.basePropertiesProvder = ERCBasePropertiesProvider(contract: contract)
62+
contract = web3.contract(abi, at: address)!
63+
basePropertiesProvider = ERC20BasePropertiesProvider(contract: contract)
6864
}
6965

7066
public func getBalance(account: EthereumAddress) async throws -> BigUInt {

Sources/web3swift/Tokens/ERC1594/Web3+ERC1594.swift

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -31,19 +31,15 @@ protocol IERC1594: IERC20 {
3131
}
3232

3333
// FIXME: Rewrite this to CodableTransaction
34-
public class ERC1594: IERC1594, ERCBaseProperties {
35-
public var basePropertiesProvder: ERCBasePropertiesProvider
34+
public class ERC1594: IERC1594, ERC20BaseProperties {
35+
public private(set) var basePropertiesProvider: ERC20BasePropertiesProvider
3636
public var transaction: CodableTransaction
3737
public var web3: Web3
3838
public var provider: Web3Provider
3939
public var address: EthereumAddress
4040
public var abi: String
4141

42-
public lazy var contract: Web3.Contract = {
43-
let contract = self.web3.contract(self.abi, at: self.address, abiVersion: 2)
44-
precondition(contract != nil)
45-
return contract!
46-
}()
42+
public let contract: Web3.Contract
4743

4844
public init(web3: Web3, provider: Web3Provider, address: EthereumAddress, abi: String = Web3.Utils.erc1594ABI, transaction: CodableTransaction = .emptyTransaction) {
4945
self.web3 = web3
@@ -53,8 +49,8 @@ public class ERC1594: IERC1594, ERCBaseProperties {
5349
self.transaction.to = address
5450
self.abi = abi
5551
// Forced because this should fail if contract is wrongly configured
56-
let contract = web3.contract(Web3.Utils.erc20ABI, at: address)!
57-
self.basePropertiesProvder = ERCBasePropertiesProvider(contract: contract)
52+
contract = web3.contract(abi, at: address)!
53+
basePropertiesProvider = ERC20BasePropertiesProvider(contract: contract)
5854
}
5955

6056
public func getBalance(account: EthereumAddress) async throws -> BigUInt {

Sources/web3swift/Tokens/ERC1633/Web3+ERC1633.swift

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,19 +18,15 @@ protocol IERC1633: IERC20, IERC165 {
1818

1919
}
2020

21-
public class ERC1633: IERC1633, ERCBaseProperties {
22-
public var basePropertiesProvder: ERCBasePropertiesProvider
21+
public class ERC1633: IERC1633, ERC20BaseProperties {
22+
public private(set) var basePropertiesProvider: ERC20BasePropertiesProvider
2323
public var transaction: CodableTransaction
2424
public var web3: Web3
2525
public var provider: Web3Provider
2626
public var address: EthereumAddress
2727
public var abi: String
2828

29-
public lazy var contract: Web3.Contract = {
30-
let contract = self.web3.contract(self.abi, at: self.address, abiVersion: 2)
31-
precondition(contract != nil)
32-
return contract!
33-
}()
29+
public let contract: Web3.Contract
3430

3531
public init(web3: Web3, provider: Web3Provider, address: EthereumAddress, abi: String = Web3.Utils.erc1633ABI, transaction: CodableTransaction = .emptyTransaction) {
3632
self.web3 = web3
@@ -40,8 +36,8 @@ public class ERC1633: IERC1633, ERCBaseProperties {
4036
self.transaction.to = address
4137
self.abi = abi
4238
// Forced because this should fail if contract is wrongly configured
43-
let contract = web3.contract(Web3.Utils.erc20ABI, at: address)!
44-
self.basePropertiesProvder = ERCBasePropertiesProvider(contract: contract)
39+
contract = web3.contract(abi, at: address)!
40+
basePropertiesProvider = ERC20BasePropertiesProvider(contract: contract)
4541
}
4642

4743
public func getBalance(account: EthereumAddress) async throws -> BigUInt {

Sources/web3swift/Tokens/ERC1643/Web3+ERC1643.swift

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,19 +21,15 @@ protocol IERC1643: IERC20 {
2121
}
2222

2323
// FIXME: Rewrite this to CodableTransaction
24-
public class ERC1643: IERC1643, ERCBaseProperties {
25-
public var basePropertiesProvder: ERCBasePropertiesProvider
24+
public class ERC1643: IERC1643, ERC20BaseProperties {
25+
public private(set) var basePropertiesProvider: ERC20BasePropertiesProvider
2626
public var transaction: CodableTransaction
2727
public var web3: Web3
2828
public var provider: Web3Provider
2929
public var address: EthereumAddress
3030
public var abi: String
3131

32-
public lazy var contract: Web3.Contract = {
33-
let contract = self.web3.contract(self.abi, at: self.address, abiVersion: 2)
34-
precondition(contract != nil)
35-
return contract!
36-
}()
32+
public let contract: Web3.Contract
3733

3834
public init(web3: Web3, provider: Web3Provider, address: EthereumAddress, abi: String = Web3.Utils.erc1643ABI, transaction: CodableTransaction = .emptyTransaction) {
3935
self.web3 = web3
@@ -43,8 +39,8 @@ public class ERC1643: IERC1643, ERCBaseProperties {
4339
self.transaction.to = address
4440
self.abi = abi
4541
// Forced because this should fail if contract is wrongly configured
46-
let contract = web3.contract(Web3.Utils.erc20ABI, at: address)!
47-
self.basePropertiesProvder = ERCBasePropertiesProvider(contract: contract)
42+
contract = web3.contract(abi, at: address)!
43+
basePropertiesProvider = ERC20BasePropertiesProvider(contract: contract)
4844
}
4945

5046
public func getBalance(account: EthereumAddress) async throws -> BigUInt {

Sources/web3swift/Tokens/ERC1644/Web3+ERC1644.swift

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,19 +20,15 @@ protocol IERC1644: IERC20 {
2020
}
2121

2222
// FIXME: Rewrite this to CodableTransaction
23-
public class ERC1644: IERC1644, ERCBaseProperties {
24-
public var basePropertiesProvder: ERCBasePropertiesProvider
23+
public class ERC1644: IERC1644, ERC20BaseProperties {
24+
public private(set) var basePropertiesProvider: ERC20BasePropertiesProvider
2525
public var transaction: CodableTransaction
2626
public var web3: Web3
2727
public var provider: Web3Provider
2828
public var address: EthereumAddress
2929
public var abi: String
3030

31-
public lazy var contract: Web3.Contract = {
32-
let contract = self.web3.contract(self.abi, at: self.address, abiVersion: 2)
33-
precondition(contract != nil)
34-
return contract!
35-
}()
31+
public let contract: Web3.Contract
3632

3733
public init(web3: Web3, provider: Web3Provider, address: EthereumAddress, abi: String = Web3.Utils.erc1644ABI, transaction: CodableTransaction = .emptyTransaction) {
3834
self.web3 = web3
@@ -42,8 +38,8 @@ public class ERC1644: IERC1644, ERCBaseProperties {
4238
self.transaction.to = address
4339
self.abi = abi
4440
// Forced because this should fail if contract is wrongly configured
45-
let contract = web3.contract(Web3.Utils.erc20ABI, at: address)!
46-
self.basePropertiesProvder = ERCBasePropertiesProvider(contract: contract)
41+
contract = web3.contract(abi, at: address)!
42+
basePropertiesProvider = ERC20BasePropertiesProvider(contract: contract)
4743
}
4844

4945
public func getBalance(account: EthereumAddress) async throws -> BigUInt {
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
//
2+
// ERC20BaseProperties.swift
3+
//
4+
//
5+
// Created by Jann Driessen on 21.11.22.
6+
//
7+
8+
import Foundation
9+
10+
public protocol ERC20BaseProperties: AnyObject {
11+
var basePropertiesProvider: ERC20BasePropertiesProvider { get }
12+
var contract: Web3.Contract { get }
13+
var name: String? { get }
14+
var symbol: String? { get }
15+
var decimals: UInt8? { get }
16+
}
17+
18+
public extension ERC20BaseProperties {
19+
var name: String? {
20+
basePropertiesProvider.name
21+
}
22+
23+
var symbol: String? {
24+
basePropertiesProvider.symbol
25+
}
26+
27+
var decimals: UInt8? {
28+
basePropertiesProvider.decimals
29+
}
30+
31+
var hasReadProperties: Bool {
32+
basePropertiesProvider.hasReadProperties
33+
}
34+
35+
func readProperties() async throws {
36+
if basePropertiesProvider.hasReadProperties { return }
37+
try await basePropertiesProvider.readProperties()
38+
}
39+
}

Sources/web3swift/Utils/ERC/ERCBasePropertiesProvider.swift renamed to Sources/web3swift/Tokens/ERC20/ERC20BasePropertiesProvider.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
//
2-
// ERCBasePropertiesProvider.swift
2+
// ERC20BasePropertiesProvider.swift
33
//
44
//
55
// Created by Jann Driessen on 21.11.22.
@@ -8,7 +8,7 @@
88
import BigInt
99
import Foundation
1010

11-
public final class ERCBasePropertiesProvider {
11+
public final class ERC20BasePropertiesProvider {
1212
var name: String?
1313
var symbol: String?
1414
var decimals: UInt8?

Sources/web3swift/Tokens/ERC20/Web3+ERC20.swift

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,27 +22,23 @@ protocol IERC20 {
2222
// variables are lazyly evaluated or global token information (name, ticker, total supply)
2323
// can be imperatively read and saved
2424
// FIXME: Rewrite this to CodableTransaction
25-
public class ERC20: IERC20, ERCBaseProperties {
26-
public var basePropertiesProvder: ERCBasePropertiesProvider
25+
public class ERC20: IERC20, ERC20BaseProperties {
26+
public private(set) var basePropertiesProvider: ERC20BasePropertiesProvider
2727
public var transaction: CodableTransaction
2828
public var web3: Web3
2929
public var provider: Web3Provider
3030
public var address: EthereumAddress
3131

32-
public lazy var contract: Web3.Contract = {
33-
let contract = self.web3.contract(Web3.Utils.erc20ABI, at: self.address, abiVersion: 2)
34-
precondition(contract != nil)
35-
return contract!
36-
}()
32+
public let contract: Web3.Contract
3733

3834
public init(web3: Web3, provider: Web3Provider, address: EthereumAddress, transaction: CodableTransaction = .emptyTransaction) {
3935
self.web3 = web3
4036
self.provider = provider
4137
self.address = address
4238
self.transaction = transaction
4339
// Forced because this should fail if contract is wrongly configured
44-
let contract = web3.contract(Web3.Utils.erc20ABI, at: address)!
45-
self.basePropertiesProvder = ERCBasePropertiesProvider(contract: contract)
40+
contract = web3.contract(Web3.Utils.erc20ABI, at: address)!
41+
basePropertiesProvider = ERC20BasePropertiesProvider(contract: contract)
4642
}
4743

4844
public func getBalance(account: EthereumAddress) async throws -> BigUInt {

0 commit comments

Comments
 (0)