@@ -11,14 +11,12 @@ import BigInt
1111import Result
1212
1313// This namespace contains functions to work with ERC721 tokens.
14- // variables are lazyly evaluated or global token information (name, ticker, total supply)
1514// can be imperatively read and saved
1615class ERC721 {
1716 private var _name : String ? = nil
1817 private var _symbol : String ? = nil
1918 private var _tokenId : BigUInt ? = nil
2019 private var _tokenURI : String ? = nil
21- private var _owner : EthereumAddress ? = nil
2220 private var _hasReadProperties : Bool = false
2321
2422 public var options : Web3Options
@@ -141,17 +139,41 @@ class ERC721 {
141139 }
142140 }
143141
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+ }
155177
156178 func transfer( from: EthereumAddress , to: EthereumAddress , tokenId: BigUInt ) -> Result < TransactionIntermediate , Web3Error > {
157179 let contract = self . contract
@@ -173,32 +195,4 @@ class ERC721 {
173195 return Result ( intermediateToSend)
174196 }
175197
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-
204198}
0 commit comments