Skip to content

Commit 568ec5d

Browse files
finished erc721
1 parent d6a710c commit 568ec5d

File tree

1 file changed

+35
-41
lines changed

1 file changed

+35
-41
lines changed

web3swift/PrecompiledContracts/ERC721/Web3+ERC721.swift

Lines changed: 35 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,12 @@ import BigInt
1111
import 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
1615
class 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

Comments
 (0)