@@ -11,14 +11,12 @@ import BigInt
11
11
import Result
12
12
13
13
// This namespace contains functions to work with ERC721 tokens.
14
- // variables are lazyly evaluated or global token information (name, ticker, total supply)
15
14
// can be imperatively read and saved
16
15
class ERC721 {
17
16
private var _name : String ? = nil
18
17
private var _symbol : String ? = nil
19
18
private var _tokenId : BigUInt ? = nil
20
19
private var _tokenURI : String ? = nil
21
- private var _owner : EthereumAddress ? = nil
22
20
private var _hasReadProperties : Bool = false
23
21
24
22
public var options : Web3Options
@@ -141,17 +139,41 @@ class ERC721 {
141
139
}
142
140
}
143
141
144
- // func getAllowance(originalOwner: EthereumAddress, delegate: EthereumAddress) -> Result<BigUInt, Web3Error> {
145
- // let contract = self.contract
146
- // let result = contract.method("allowance", parameters: [originalOwner, delegate] as [AnyObject], extraData: Data(), options: self.options)!.call(options: nil, onBlock: "latest")
147
- // switch result {
148
- // case .success(let returned):
149
- // guard let res = returned["0"] as? BigUInt else {return Result.failure(Web3Error.processingError(desc: "Failed to get result of expected type from the Ethereum node"))}
150
- // return Result(res)
151
- // case .failure(let error):
152
- // return Result.failure(error)
153
- // }
154
- // }
142
+ func getApproved( tokenId: BigUInt ) -> Result < EthereumAddress , Web3Error > {
143
+ let contract = self . contract
144
+ let result = contract. method ( " getApproved " , parameters: [ account] as [ tokenId ] , extraData: Data ( ) , options: self . options) !. call ( options: nil , onBlock: " latest " )
145
+ switch result {
146
+ case . success( let returned) :
147
+ guard let res = returned [ " 0 " ] as? EthereumAddress else { return Result . failure ( Web3Error . processingError ( desc: " Failed to get result of expected type from the Ethereum node " ) ) }
148
+ return Result ( res)
149
+ case . failure( let error) :
150
+ return Result . failure ( error)
151
+ }
152
+ }
153
+
154
+ func tokenByIndex( index: BigUInt ) -> Result < BigUInt , Web3Error > {
155
+ let contract = self . contract
156
+ let result = contract. method ( " tokenByIndex " , parameters: [ account] as [ index ] , extraData: Data ( ) , options: self . options) !. call ( options: nil , onBlock: " latest " )
157
+ switch result {
158
+ case . success( let returned) :
159
+ guard let res = returned [ " 0 " ] as? BigUInt else { return Result . failure ( Web3Error . processingError ( desc: " Failed to get result of expected type from the Ethereum node " ) ) }
160
+ return Result ( res)
161
+ case . failure( let error) :
162
+ return Result . failure ( error)
163
+ }
164
+ }
165
+
166
+ func tokenOfOwnerByIndex( owner: EthereumAddress , index: BigUInt ) -> Result < BigUInt , Web3Error > {
167
+ let contract = self . contract
168
+ let result = contract. method ( " tokenOfOwnerByIndex " , parameters: [ account] as [ owner , index] , extraData: Data ( ) , options: self . options) !. call ( options: nil , onBlock: " latest " )
169
+ switch result {
170
+ case . success( let returned) :
171
+ guard let res = returned [ " 0 " ] as? BigUInt else { return Result . failure ( Web3Error . processingError ( desc: " Failed to get result of expected type from the Ethereum node " ) ) }
172
+ return Result ( res)
173
+ case . failure( let error) :
174
+ return Result . failure ( error)
175
+ }
176
+ }
155
177
156
178
func transfer( from: EthereumAddress , to: EthereumAddress , tokenId: BigUInt ) -> Result < TransactionIntermediate , Web3Error > {
157
179
let contract = self . contract
@@ -173,32 +195,4 @@ class ERC721 {
173
195
return Result ( intermediateToSend)
174
196
}
175
197
176
- // func setAllowance(from: EthereumAddress, to: EthereumAddress, newAmount: String) -> Result<TransactionIntermediate, Web3Error> {
177
- // let contract = self.contract
178
- // var basicOptions = Web3Options()
179
- // basicOptions.from = from
180
- // basicOptions.to = self.address
181
- //
182
- // // get the decimals manually
183
- // let intermediate = contract.method("setAllowance", options: basicOptions)!
184
- // let callResult = intermediate.call(options: basicOptions, onBlock: "latest")
185
- // var decimals = BigUInt(0)
186
- // switch callResult {
187
- // case .success(let response):
188
- // guard let dec = response["0"], let decTyped = dec as? BigUInt else {
189
- // return Result.failure(Web3Error.inputError(desc: "Contract may be not ERC20 compatible, can not get decimals"))}
190
- // decimals = decTyped
191
- // break
192
- // case .failure(let error):
193
- // return Result.failure(error)
194
- // }
195
- // let intDecimals = Int(decimals)
196
- // guard let value = Web3.Utils.parseToBigUInt(newAmount, decimals: intDecimals) else {
197
- // return Result.failure(Web3Error.inputError(desc: "Can not parse inputted amount"))
198
- // }
199
- // let intermediateToSend = contract.method("setAllowance", parameters: [to, value] as [AnyObject], options: basicOptions)!
200
- // return Result(intermediateToSend)
201
- // }
202
-
203
-
204
198
}
0 commit comments