Skip to content

Commit bf25523

Browse files
Update [Read|Write]Transaction API
- No method accepts any parameters to merge with (it handles the CodableTransaction in its property). - Delete its gasEstimate method, since such method should be in CodableTransaction scope. - No default password as argument. - Code which calls such types are changed appropriate, to let project builds, but no logic have been changed yet.
1 parent ecdca7e commit bf25523

35 files changed

+335
-556
lines changed

Documentation/web3swift 2.0 Migration Guide.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -109,8 +109,8 @@ web3.addKeystoreManager(KeysService().keystoreManager())
109109
guard let ethAddressFrom = EthereumAddress(selectedKey) else {return}
110110
guard let contract = web3.contract(Web3.Utils.coldWalletABI, at: destinationEthAddress, abiVersion: 2) else {return}
111111
guard let writeTX = contract.write("fallback") else {return}
112-
writeTX.transactionOptions.from = ethAddressFrom
113-
writeTX.transactionOptions.value = value
112+
writeTX.transaction.from = ethAddressFrom
113+
writeTX.transaction.value = value
114114
return writeTX
115115
```
116116

@@ -152,8 +152,8 @@ web3.addKeystoreManager(KeysService().keystoreManager())
152152
guard let ethAddressFrom = EthereumAddress(selectedKey) else {return}
153153
guard let contract = web3.contract(Web3.Utils.erc20ABI, at: contractAddress, abiVersion: 2) else {return}
154154
guard let writeTX = contract.write("transfer") else {return}
155-
writeTX.transactionOptions.from = ethAddressFrom
156-
writeTX.transactionOptions.value = value
155+
writeTX.transaction.from = ethAddressFrom
156+
writeTX.transaction.value = value
157157
return writeTX
158158
```
159159

@@ -195,8 +195,8 @@ guard let writeTX = contract.write(method,
195195
parameters: parameters,
196196
extraData: data,
197197
transactionOptions: predefinedOptions) else {return}
198-
writeTX.transactionOptions.from = ethAddressFrom
199-
writeTX.transactionOptions.value = value
198+
writeTX.transaction.from = ethAddressFrom
199+
writeTX.transaction.value = value
200200
return writeTX
201201
```
202202

@@ -273,7 +273,7 @@ let contractAddress = EthereumAddress("<Contract address>")! // w3s token on Eth
273273
let contract = web3.contract(Web3.Utils.erc20ABI, at: contractAddress, abiVersion: 2) // utilize precompiled ERC20 ABI for your concenience
274274
let userAddress = EthereumAddress("<address>")!
275275
guard let readTX = contract?.read("balanceOf", parameters: [addressOfUser] as [AnyObject]) else {return}
276-
readTX.transactionOptions.from = EthereumAddress("<address>")!
276+
readTX.transaction.from = EthereumAddress("<address>")!
277277
let tokenBalance = try readTX.callPromise()
278278
guard let balance = tokenBalance["0"] as? BigUInt else {return}
279279
```

Sources/Core/Transaction/CodableTransaction.swift

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,11 @@
77
import Foundation
88
import BigInt
99

10+
11+
public protocol CodableTransactionInheritable {
12+
var transactionOptions: CodableTransaction { get }
13+
}
14+
1015
/// Structure capable of carying the parameters for any transaction type.
1116
/// while all fields in this struct are optional, they are not necessarily
1217
/// optional for the type of transaction they apply to.
@@ -432,6 +437,7 @@ extension CodableTransaction {
432437
self.gasPricePolicy = .automatic
433438
self.maxFeePerGasPolicy = .automatic
434439
self.maxPriorityFeePerGasPolicy = .automatic
440+
self.callOnBlock = .latest
435441

436442
self.envelope = EnvelopeFactory.createEnvelope(type: type, to: to, nonce: nonce, chainID: chainID, value: value, data: data, gasLimit: gasLimit, maxFeePerGas: maxFeePerGas, maxPriorityFeePerGas: maxPriorityFeePerGas, gasPrice: gasPrice, accessList: accessList, v: v, r: r, s: s)
437443
}

Sources/web3swift/EthereumAPICalls/Ethereum/Eth+Call.swift

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,9 @@ extension web3.Eth {
1111

1212
// FIXME: Rewrite this to CodableTransaction
1313
// FIXME: Not working yet.
14-
public func callTransaction(_ transaction: CodableTransaction, transactionOptions: CodableTransaction?) async throws -> Data {
15-
// MARK: Read data from ABI flow
16-
// guard let transactionParameters = transaction.encodeAsDictionary(from: transactionOptions?.from) else { throw Web3Error.dataError}
14+
public func callTransaction(_ transaction: CodableTransaction) async throws -> Data {
1715
// FIXME: Make me CodableTransaction
18-
let request: APIRequest = .call(transaction, transactionOptions?.callOnBlock ?? .latest)
16+
let request: APIRequest = .call(transaction, transaction.callOnBlock ?? .latest)
1917
let response: APIResponse<Data> = try await APIRequest.sendRequest(with: self.provider, for: request)
2018
return response.result
2119
}

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ public class ERC1155: IERC1155 {
106106
let contract = self.contract
107107
var transactionOptions = CodableTransaction.emptyTransaction
108108
transactionOptions.callOnBlock = .latest
109-
let result = try await contract.read("balanceOf", parameters: [account, id] as [AnyObject], extraData: Data(), transactionOptions: self.transactionOptions)!.decodedData(with: transactionOptions)
109+
let result = try await contract.read("balanceOf", parameters: [account, id] as [AnyObject], extraData: Data(), transactionOptions: self.transactionOptions)!.decodedData()
110110
guard let res = result["0"] as? BigUInt else {throw Web3Error.processingError(desc: "Failed to get result of expected type from the Ethereum node")}
111111
return res
112112
}
@@ -125,7 +125,7 @@ public class ERC1155: IERC1155 {
125125
let contract = self.contract
126126
var basicOptions = CodableTransaction.emptyTransaction
127127
basicOptions.callOnBlock = .latest
128-
let result = try await contract.read("isApprovedForAll", parameters: [owner, user, scope] as [AnyObject], extraData: Data(), transactionOptions: self.transactionOptions)!.decodedData(with: transactionOptions)
128+
let result = try await contract.read("isApprovedForAll", parameters: [owner, user, scope] as [AnyObject], extraData: Data(), transactionOptions: self.transactionOptions)!.decodedData()
129129
guard let res = result["0"] as? Bool else {throw Web3Error.processingError(desc: "Failed to get result of expected type from the Ethereum node")}
130130
return res
131131
}
@@ -135,7 +135,7 @@ public class ERC1155: IERC1155 {
135135
var transactionOptions = CodableTransaction.emptyTransaction
136136
transactionOptions.callOnBlock = .latest
137137
transactionOptions.gasLimitPolicy = .manual(30000)
138-
let result = try await contract.read("supportsInterface", parameters: [interfaceID] as [AnyObject], extraData: Data(), transactionOptions: self.transactionOptions)!.decodedData(with: transactionOptions)
138+
let result = try await contract.read("supportsInterface", parameters: [interfaceID] as [AnyObject], extraData: Data(), transactionOptions: self.transactionOptions)!.decodedData()
139139
guard let res = result["0"] as? Bool else {throw Web3Error.processingError(desc: "Failed to get result of expected type from the Ethereum node")}
140140
return res
141141
}

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ public class ERC1376: IERC1376, ERC20BaseProperties {
9999
let contract = self.contract
100100
var transactionOptions = CodableTransaction.emptyTransaction
101101
transactionOptions.callOnBlock = .latest
102-
let result = try await contract.read("balanceOf", parameters: [account] as [AnyObject], extraData: Data(), transactionOptions: self.transactionOptions)!.decodedData(with: transactionOptions)
102+
let result = try await contract.read("balanceOf", parameters: [account] as [AnyObject], extraData: Data(), transactionOptions: self.transactionOptions)!.decodedData()
103103
guard let res = result["0"] as? BigUInt else {throw Web3Error.processingError(desc: "Failed to get result of expected type from the Ethereum node")}
104104
return res
105105
}
@@ -108,7 +108,7 @@ public class ERC1376: IERC1376, ERC20BaseProperties {
108108
let contract = self.contract
109109
var transactionOptions = CodableTransaction.emptyTransaction
110110
transactionOptions.callOnBlock = .latest
111-
let result = try await contract.read("allowance", parameters: [originalOwner, delegate] as [AnyObject], extraData: Data(), transactionOptions: self.transactionOptions)!.decodedData(with: transactionOptions)
111+
let result = try await contract.read("allowance", parameters: [originalOwner, delegate] as [AnyObject], extraData: Data(), transactionOptions: self.transactionOptions)!.decodedData()
112112
guard let res = result["0"] as? BigUInt else {throw Web3Error.processingError(desc: "Failed to get result of expected type from the Ethereum node")}
113113
return res
114114
}
@@ -208,7 +208,7 @@ public class ERC1376: IERC1376, ERC20BaseProperties {
208208
let contract = self.contract
209209
var transactionOptions = CodableTransaction.emptyTransaction
210210
transactionOptions.callOnBlock = .latest
211-
let result = try await contract.read("totalSupply", parameters: [AnyObject](), extraData: Data(), transactionOptions: self.transactionOptions)!.decodedData(with: transactionOptions)
211+
let result = try await contract.read("totalSupply", parameters: [AnyObject](), extraData: Data(), transactionOptions: self.transactionOptions)!.decodedData()
212212
guard let res = result["0"] as? BigUInt else {throw Web3Error.processingError(desc: "Failed to get result of expected type from the Ethereum node")}
213213
return res
214214
}
@@ -299,7 +299,7 @@ public class ERC1376: IERC1376, ERC20BaseProperties {
299299
let contract = self.contract
300300
var transactionOptions = CodableTransaction.emptyTransaction
301301
transactionOptions.callOnBlock = .latest
302-
let result = try await contract.read("spendableAllowance", parameters: [owner, spender] as [AnyObject], extraData: Data(), transactionOptions: self.transactionOptions)!.decodedData(with: transactionOptions)
302+
let result = try await contract.read("spendableAllowance", parameters: [owner, spender] as [AnyObject], extraData: Data(), transactionOptions: self.transactionOptions)!.decodedData()
303303
guard let res = result["0"] as? BigUInt else {throw Web3Error.processingError(desc: "Failed to get result of expected type from the Ethereum node")}
304304
return res
305305
}
@@ -352,7 +352,7 @@ public class ERC1376: IERC1376, ERC20BaseProperties {
352352
let contract = self.contract
353353
var transactionOptions = CodableTransaction.emptyTransaction
354354
transactionOptions.callOnBlock = .latest
355-
let result = try await contract.read("nonceOf", parameters: [owner] as [AnyObject], extraData: Data(), transactionOptions: self.transactionOptions)!.decodedData(with: transactionOptions)
355+
let result = try await contract.read("nonceOf", parameters: [owner] as [AnyObject], extraData: Data(), transactionOptions: self.transactionOptions)!.decodedData()
356356
guard let res = result["0"] as? BigUInt else {throw Web3Error.processingError(desc: "Failed to get result of expected type from the Ethereum node")}
357357
return res
358358
}
@@ -397,7 +397,7 @@ public class ERC1376: IERC1376, ERC20BaseProperties {
397397
let contract = self.contract
398398
var transactionOptions = CodableTransaction.emptyTransaction
399399
transactionOptions.callOnBlock = .latest
400-
let result = try await contract.read("directDebit", parameters: [debtor, receiver] as [AnyObject], extraData: Data(), transactionOptions: self.transactionOptions)!.decodedData(with: transactionOptions)
400+
let result = try await contract.read("directDebit", parameters: [debtor, receiver] as [AnyObject], extraData: Data(), transactionOptions: self.transactionOptions)!.decodedData()
401401
guard let res = result["0"] as? DirectDebit else {throw Web3Error.processingError(desc: "Failed to get result of expected type from the Ethereum node")}
402402
return res
403403
}

0 commit comments

Comments
 (0)