import React, { Component } from 'react';
import ImageContract from '../../abis/ImageContract.json';
import TokenSaleContract from '../../abis/TokenSaleContract.json';
import ImageSaleContract from '../../abis/ImageSaleContract.json';
import {
Link
} from "react-router-dom";
class Explore extends Component {
render() {
return (
Explore
{this.state.images.map((id, key) => {
return (
(this.state.approved[key] && (this.state.owners[key] !== this.state.account)) ?
(
) : null
)
})
}
)
}
constructor(props) {
super(props)
this.state = {
account: '',
contract: null,
sale_contract: null,
totalSupply: 0,
images: [],
owners: [],
imageData_name: [],
imageData_price: [],
selling_to: '',
selling_price: null,
token_sale_contract: null,
token_price: 0,
approved: []
}
}
async componentWillMount() {
await this.loadBlockchainData()
await this.loadTokenSaleContract()
}
async loadBlockchainData() {
const web3 = window.web3
// Load account
const accounts = await web3.eth.getAccounts()
this.setState({ account: accounts[0] })
const networkId = await web3.eth.net.getId()
const networkData = ImageContract.networks[networkId]
if (networkData) {
const abi = ImageContract.abi
const address = networkData.address
const contract = new web3.eth.Contract(abi, address)
// console.log(contract)
this.setState({ contract })
const totalSupply = await contract.methods.totalSupply().call()
// console.log(totalSupply)
this.setState({ totalSupply })
// Load NFTs
for (var i = 1; i <= totalSupply; i++) {
const id = await contract.methods.images(i - 1).call()
// console.log(id)
this.setState({
images: [...this.state.images, id]
})
}
// Load Owner
for (i = 1; i <= totalSupply; i++) {
const owner = await contract.methods.ownerOf(i - 1).call()
// console.log(owner)
this.setState({
owners: [...this.state.owners, owner]
})
}
// Load NFTs Data
for (i = 1; i <= totalSupply; i++) {
const metadata = await contract.methods.imageData(i - 1).call()
// console.log(metadata)
this.setState({
imageData_name: [...this.state.imageData_name, metadata.name],
imageData_price: [...this.state.imageData_price, metadata.price]
})
}
} else {
window.alert('Smart contract not deployed to detected network.')
}
const sale_networkData = ImageSaleContract.networks[networkId]
if (sale_networkData) {
const sale_abi = ImageSaleContract.abi
const sale_address = sale_networkData.address
const sale_contract = new web3.eth.Contract(sale_abi, sale_address)
// console.log(sale_contract)
this.setState({ sale_contract })
for (i = 1; i <= this.state.totalSupply; i++) {
var approv = await this.state.contract.methods.isApprovedOrOwner(this.state.sale_contract._address, (i - 1)).call();
this.setState({ approved: [...this.state.approved, approv] })
// console.log(approv);
}
} else {
window.alert('Smart contract not deployed to detected network.')
}
}
async loadTokenSaleContract() {
const web3 = window.web3
const networkId = await web3.eth.net.getId()
const networkData = TokenSaleContract.networks[networkId]
if (networkData) {
const abi = TokenSaleContract.abi
const address = networkData.address
const token_sale_contract = new web3.eth.Contract(abi, address)
this.setState({ token_sale_contract })
// console.log(token_sale_contract)
var token_price = await this.state.token_sale_contract.methods.tokenPrice().call();
this.setState({ token_price: web3.utils.fromWei(token_price, "ether") })
} else {
window.alert('Smart contract not deployed to detected network.')
}
}
}
export default Explore;