Skip to content

Commit 3999fb8

Browse files
committed
Add erc base properties
1 parent 9d782c9 commit 3999fb8

File tree

14 files changed

+118
-151
lines changed

14 files changed

+118
-151
lines changed

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

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

6868
// FIXME: Rewrite this to CodableTransaction
69-
public class ERC1376: IERC1376, ERC20BaseProperties {
70-
71-
internal var _name: String?
72-
internal var _symbol: String?
73-
internal var _decimals: UInt8?
74-
internal var _hasReadProperties: Bool = false
75-
69+
public class ERC1376: IERC1376, ERCBaseProperties {
70+
public var basePropertiesProvder: ERCBasePropertiesProvider
7671
public var transaction: CodableTransaction
7772
public var web3: Web3
7873
public var provider: Web3Provider
7974
public var address: EthereumAddress
8075
public var abi: String
8176

82-
lazy var contract: Web3.Contract = {
77+
public lazy var contract: Web3.Contract = {
8378
let contract = self.web3.contract(self.abi, at: self.address, abiVersion: 2)
8479
precondition(contract != nil)
8580
return contract!
@@ -92,6 +87,9 @@ public class ERC1376: IERC1376, ERC20BaseProperties {
9287
self.transaction = transaction
9388
self.transaction.to = address
9489
self.abi = abi
90+
// 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)
9593
}
9694

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

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

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -63,20 +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, ERC20BaseProperties {
67-
68-
internal var _name: String?
69-
internal var _symbol: String?
70-
internal var _decimals: UInt8?
71-
internal var _hasReadProperties: Bool = false
72-
66+
public class ERC1400: IERC1400, ERCBaseProperties {
67+
public var basePropertiesProvder: ERCBasePropertiesProvider
7368
public var transaction: CodableTransaction
7469
public var web3: Web3
7570
public var provider: Web3Provider
7671
public var address: EthereumAddress
7772
public var abi: String
7873

79-
lazy var contract: Web3.Contract = {
74+
public lazy var contract: Web3.Contract = {
8075
let contract = self.web3.contract(self.abi, at: self.address, abiVersion: 2)
8176
precondition(contract != nil)
8277
return contract!
@@ -89,6 +84,9 @@ public class ERC1400: IERC1400, ERC20BaseProperties {
8984
self.transaction = transaction
9085
self.transaction.to = address
9186
self.abi = abi
87+
// 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)
9290
}
9391

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

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

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

4343
// FIXME: Rewrite this to CodableTransaction
44-
public class ERC1410: IERC1410, ERC20BaseProperties {
45-
46-
internal var _name: String?
47-
internal var _symbol: String?
48-
internal var _decimals: UInt8?
49-
private var _totalSupply: BigUInt?
50-
internal var _hasReadProperties: Bool = false
51-
44+
public class ERC1410: IERC1410, ERCBaseProperties {
45+
public var basePropertiesProvder: ERCBasePropertiesProvider
5246
public var transaction: CodableTransaction
5347
public var web3: Web3
5448
public var provider: Web3Provider
5549
public var address: EthereumAddress
5650
public var abi: String
5751

58-
lazy var contract: Web3.Contract = {
52+
public lazy var contract: Web3.Contract = {
5953
let contract = self.web3.contract(self.abi, at: self.address, abiVersion: 2)
6054
precondition(contract != nil)
6155
return contract!
@@ -68,6 +62,9 @@ public class ERC1410: IERC1410, ERC20BaseProperties {
6862
self.abi = abi
6963
self.transaction = transaction
7064
self.transaction.to = address
65+
// 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)
7168
}
7269

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

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

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

3333
// FIXME: Rewrite this to CodableTransaction
34-
public class ERC1594: IERC1594, ERC20BaseProperties {
35-
36-
internal var _name: String?
37-
internal var _symbol: String?
38-
internal var _decimals: UInt8?
39-
internal var _hasReadProperties: Bool = false
40-
34+
public class ERC1594: IERC1594, ERCBaseProperties {
35+
public var basePropertiesProvder: ERCBasePropertiesProvider
4136
public var transaction: CodableTransaction
4237
public var web3: Web3
4338
public var provider: Web3Provider
4439
public var address: EthereumAddress
4540
public var abi: String
4641

47-
lazy var contract: Web3.Contract = {
42+
public lazy var contract: Web3.Contract = {
4843
let contract = self.web3.contract(self.abi, at: self.address, abiVersion: 2)
4944
precondition(contract != nil)
5045
return contract!
@@ -57,6 +52,9 @@ public class ERC1594: IERC1594, ERC20BaseProperties {
5752
self.transaction = transaction
5853
self.transaction.to = address
5954
self.abi = abi
55+
// 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)
6058
}
6159

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

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

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,20 +18,15 @@ protocol IERC1633: IERC20, IERC165 {
1818

1919
}
2020

21-
public class ERC1633: IERC1633, ERC20BaseProperties {
22-
23-
internal var _name: String?
24-
internal var _symbol: String?
25-
internal var _decimals: UInt8?
26-
internal var _hasReadProperties: Bool = false
27-
21+
public class ERC1633: IERC1633, ERCBaseProperties {
22+
public var basePropertiesProvder: ERCBasePropertiesProvider
2823
public var transaction: CodableTransaction
2924
public var web3: Web3
3025
public var provider: Web3Provider
3126
public var address: EthereumAddress
3227
public var abi: String
3328

34-
lazy var contract: Web3.Contract = {
29+
public lazy var contract: Web3.Contract = {
3530
let contract = self.web3.contract(self.abi, at: self.address, abiVersion: 2)
3631
precondition(contract != nil)
3732
return contract!
@@ -44,6 +39,9 @@ public class ERC1633: IERC1633, ERC20BaseProperties {
4439
self.transaction = transaction
4540
self.transaction.to = address
4641
self.abi = abi
42+
// 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)
4745
}
4846

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

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

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

2323
// FIXME: Rewrite this to CodableTransaction
24-
public class ERC1643: IERC1643, ERC20BaseProperties {
25-
26-
internal var _name: String?
27-
internal var _symbol: String?
28-
internal var _decimals: UInt8?
29-
internal var _hasReadProperties: Bool = false
30-
24+
public class ERC1643: IERC1643, ERCBaseProperties {
25+
public var basePropertiesProvder: ERCBasePropertiesProvider
3126
public var transaction: CodableTransaction
3227
public var web3: Web3
3328
public var provider: Web3Provider
3429
public var address: EthereumAddress
3530
public var abi: String
3631

37-
lazy var contract: Web3.Contract = {
32+
public lazy var contract: Web3.Contract = {
3833
let contract = self.web3.contract(self.abi, at: self.address, abiVersion: 2)
3934
precondition(contract != nil)
4035
return contract!
@@ -47,6 +42,9 @@ public class ERC1643: IERC1643, ERC20BaseProperties {
4742
self.transaction = transaction
4843
self.transaction.to = address
4944
self.abi = abi
45+
// 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)
5048
}
5149

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

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

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

2222
// FIXME: Rewrite this to CodableTransaction
23-
public class ERC1644: IERC1644, ERC20BaseProperties {
24-
25-
internal var _name: String?
26-
internal var _symbol: String?
27-
internal var _decimals: UInt8?
28-
internal var _hasReadProperties: Bool = false
29-
23+
public class ERC1644: IERC1644, ERCBaseProperties {
24+
public var basePropertiesProvder: ERCBasePropertiesProvider
3025
public var transaction: CodableTransaction
3126
public var web3: Web3
3227
public var provider: Web3Provider
3328
public var address: EthereumAddress
3429
public var abi: String
3530

36-
lazy var contract: Web3.Contract = {
31+
public lazy var contract: Web3.Contract = {
3732
let contract = self.web3.contract(self.abi, at: self.address, abiVersion: 2)
3833
precondition(contract != nil)
3934
return contract!
@@ -46,6 +41,9 @@ public class ERC1644: IERC1644, ERC20BaseProperties {
4641
self.transaction = transaction
4742
self.transaction.to = address
4843
self.abi = abi
44+
// 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)
4947
}
5048

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

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

Lines changed: 6 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -22,18 +22,14 @@ 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, ERC20BaseProperties {
26-
var _name: String?
27-
var _symbol: String?
28-
var _decimals: UInt8?
29-
var _hasReadProperties: Bool = false
30-
25+
public class ERC20: IERC20, ERCBaseProperties {
26+
public var basePropertiesProvder: ERCBasePropertiesProvider
3127
public var transaction: CodableTransaction
3228
public var web3: Web3
3329
public var provider: Web3Provider
3430
public var address: EthereumAddress
3531

36-
lazy var contract: Web3.Contract = {
32+
public lazy var contract: Web3.Contract = {
3733
let contract = self.web3.contract(Web3.Utils.erc20ABI, at: self.address, abiVersion: 2)
3834
precondition(contract != nil)
3935
return contract!
@@ -44,6 +40,9 @@ public class ERC20: IERC20, ERC20BaseProperties {
4440
self.provider = provider
4541
self.address = address
4642
self.transaction = transaction
43+
// 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)
4746
}
4847

4948
public func getBalance(account: EthereumAddress) async throws -> BigUInt {
@@ -172,47 +171,3 @@ public class ERC20: IERC20, ERC20BaseProperties {
172171
}
173172

174173
}
175-
176-
protocol ERC20BaseProperties: AnyObject {
177-
var contract: Web3.Contract { get }
178-
var _name: String? { get set }
179-
var _symbol: String? { get set }
180-
var _decimals: UInt8? { get set }
181-
var _hasReadProperties: Bool { get set }
182-
func readProperties() async throws
183-
func name() -> String?
184-
func symbol() -> String?
185-
func decimals() -> UInt8?
186-
}
187-
188-
extension ERC20BaseProperties {
189-
public func name() -> String? {
190-
_name
191-
}
192-
193-
public func symbol() -> String? {
194-
_symbol
195-
}
196-
197-
public func decimals() -> UInt8? {
198-
_decimals
199-
}
200-
201-
public func readProperties() async throws {
202-
guard !_hasReadProperties else { return }
203-
guard contract.contract.address != nil else {return}
204-
_name = try await contract
205-
.createReadOperation("name")?
206-
.callContractMethod()["0"] as? String
207-
208-
_symbol = try await contract
209-
.createReadOperation("symbol")?
210-
.callContractMethod()["0"] as? String
211-
212-
let decimals = try await contract
213-
.createReadOperation("decimals")?
214-
.callContractMethod()["0"] as? BigUInt
215-
_decimals = decimals != nil ? UInt8(decimals!) : nil
216-
_hasReadProperties = true
217-
}
218-
}

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

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -29,21 +29,15 @@ protocol IERC777: IERC20, IERC820 {
2929
// This namespace contains functions to work with ERC777 tokens.
3030
// can be imperatively read and saved
3131
// FIXME: Rewrite this to CodableTransaction
32-
public class ERC777: IERC777, ERC20BaseProperties {
33-
34-
internal var _name: String?
35-
internal var _symbol: String?
36-
internal var _decimals: UInt8?
37-
38-
internal var _hasReadProperties: Bool = false
39-
32+
public class ERC777: IERC777, ERCBaseProperties {
33+
public var basePropertiesProvder: ERCBasePropertiesProvider
4034
public var transaction: CodableTransaction
4135
public var web3: Web3
4236
public var provider: Web3Provider
4337
public var address: EthereumAddress
4438
public var abi: String
4539

46-
lazy var contract: Web3.Contract = {
40+
public lazy var contract: Web3.Contract = {
4741
let contract = self.web3.contract(self.abi, at: self.address, abiVersion: 2)
4842
precondition(contract != nil)
4943
return contract!
@@ -56,13 +50,16 @@ public class ERC777: IERC777, ERC20BaseProperties {
5650
self.transaction = transaction
5751
self.transaction.to = address
5852
self.abi = abi
53+
// Forced because this should fail if contract is wrongly configured
54+
let contract = web3.contract(Web3.Utils.erc20ABI, at: address)!
55+
self.basePropertiesProvder = ERCBasePropertiesProvider(contract: contract)
5956
}
6057

6158
// Must be 18!
6259
public func decimals() async throws -> UInt8 {
6360
try await self.readProperties()
64-
if self._decimals != nil {
65-
return self._decimals!
61+
if self.decimals != nil {
62+
return self.decimals!
6663
}
6764
return 18
6865
}

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

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,20 +16,15 @@ protocol IERC888 {
1616
}
1717

1818
// FIXME: Rewrite this to CodableTransaction
19-
public class ERC888: IERC888, ERC20BaseProperties {
20-
21-
internal var _name: String?
22-
internal var _symbol: String?
23-
internal var _decimals: UInt8?
24-
internal var _hasReadProperties: Bool = false
25-
19+
public class ERC888: IERC888, ERCBaseProperties {
20+
public var basePropertiesProvder: ERCBasePropertiesProvider
2621
public var transaction: CodableTransaction
2722
public var web3: Web3
2823
public var provider: Web3Provider
2924
public var address: EthereumAddress
3025
public var abi: String
3126

32-
lazy var contract: Web3.Contract = {
27+
public lazy var contract: Web3.Contract = {
3328
let contract = self.web3.contract(self.abi, at: self.address, abiVersion: 2)
3429
precondition(contract != nil)
3530
return contract!
@@ -42,6 +37,9 @@ public class ERC888: IERC888, ERC20BaseProperties {
4237
self.transaction = transaction
4338
self.transaction.to = address
4439
self.abi = abi
40+
// Forced because this should fail if contract is wrongly configured
41+
let contract = web3.contract(Web3.Utils.erc20ABI, at: address)!
42+
self.basePropertiesProvder = ERCBasePropertiesProvider(contract: contract)
4543
}
4644

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

0 commit comments

Comments
 (0)