Skip to content

Commit

Permalink
added more web3js connector code (can contribute small images)
Browse files Browse the repository at this point in the history
Co-authored-by: Cy <cy@rosenbol.org>
Co-authored-by: Chloe <138538887+ChL4859@users.noreply.github.com>
Co-authored-by: Trisha Reddy <105570654+trishavreddy@users.noreply.github.com>
Co-authored-by: rebekah-wang <138538877+rebekah-wang@users.noreply.github.com>
Co-authored-by: anusha <aiyer720@gmail.com>
  • Loading branch information
6 people committed Jul 22, 2023
1 parent 64b9e58 commit 62eef88
Show file tree
Hide file tree
Showing 11 changed files with 164 additions and 73 deletions.
35 changes: 35 additions & 0 deletions blockchain/contracts/DataImage.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.0;

contract DataImage {
string value;
string class;
bool approved;

event DataVerified(
bool approved
);

constructor(string memory _value, string memory _class) {
value = _value;
class = _class;
approved = false;
}

function getValue() public view returns (string memory) {
return value;
}

function getClass() public view returns (string memory) {
return class;
}

function getApproved() public view returns (bool) {
return approved;
}

function approve() public {
approved = true;
emit DataVerified(approved);
}
}
52 changes: 33 additions & 19 deletions blockchain/contracts/Dataset.sol
Original file line number Diff line number Diff line change
@@ -1,38 +1,52 @@
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.0;
import "./DataImage.sol";

contract Dataset {
uint public imageCount = 0;
uint imageCount = 0;

string public name;
string public description;
string name;
string description;

struct Image {
uint id;
string value;
string class;
bool approved;
}

Image[] public images;
DataImage[] images;

event DataCreated(uint id, string value, string class, bool approved);
event DataCreated(
string value,
string class,
bool approved
);

event DataVerified(uint id, bool approved);
event DataVerified(
bool approved
);

constructor(string memory _name, string memory _description) {
name = _name;
description = _description;
}

function getName() public view returns (string memory) {
return name;
}

function getDescription() public view returns (string memory) {
return description;
}

function getImageCount() public view returns (uint) {
return imageCount;
}

function getImage(uint index) public view returns (DataImage) {
return images[index];
}

function createData(string memory _content, string memory _class) public {
imageCount++;
images.push(Image(imageCount, _content, _class, false));
emit DataCreated(imageCount, _content, _class, false);
}

function approveData(uint _id) public {
images[_id].approved = !images[_id].approved;
emit DataVerified(_id, images[_id].approved);
DataImage image = new DataImage(_content, _class);
images.push(image);

emit DataCreated(_content, _class, false);
}
}
18 changes: 15 additions & 3 deletions blockchain/contracts/DatasetManager.sol
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,22 @@ pragma solidity ^0.8.0;
import "./Dataset.sol";

contract DatasetManager {
uint public datasetCount = 0;
Dataset[] public datasets;
uint datasetCount = 0;

event DatasetCreated(string name, string description);
Dataset[] datasets;

event DatasetCreated(
string name,
string description
);

function getDatasetCount() public view returns (uint) {
return datasetCount;
}

function getDataset(uint index) public view returns (Dataset) {
return datasets[index];
}

function createDataset(string memory name, string memory description) public {
datasetCount++;
Expand Down
8 changes: 6 additions & 2 deletions blockchain/register.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,11 +71,13 @@ def register_abi(name, abi_path, cookies):

url = BASE_URL + "/api/dataset"

networks = abi.get("networks")

data = {
"name": name,
"description": "DatasetManager Contract",
"abi_id": response.json()["abi"]["id"],
"address": abi.get("networks").get("5777").get("address"),
"address": networks.get(list(networks.keys())[-1]).get("address"),
}

response = requests.post(url, json=data, cookies=cookies)
Expand All @@ -87,7 +89,9 @@ def register_abi(name, abi_path, cookies):

# register all ABIs in the build/ folder
def register_all_abis(cookies):
for file in os.listdir("build/contracts/"):
files = os.listdir("build/contracts/")
files.sort(reverse=True)
for file in files:
if file.endswith(".json") and not file.startswith("Migrations"):
name = file.split(".")[0]
abi_path = "build/contracts/" + file
Expand Down
Empty file removed blockchain/test/.gitkeep
Empty file.
2 changes: 1 addition & 1 deletion blockchain/truffle-config.js
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ module.exports = {
//
development: {
host: "127.0.0.1", // Localhost (default: none)
port: 8545, // Standard Ethereum port (default: none)
port: 7545, // Standard Ethereum port (default: none)
network_id: "*", // Any network (default: none)
},
//
Expand Down
32 changes: 16 additions & 16 deletions client/src/pages/ContributePage.jsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { useContext, useEffect, useState } from "react";
// import { useNavigate } from "react-router-dom";
import { useNavigate } from "react-router-dom";
import web3 from "web3";

import DropdownMenu from "../components/DropdownMenu";
Expand All @@ -8,10 +8,13 @@ import { DataContext } from "../components/DataProvider";
import { getABI } from "../api/abi";

import styles from "../styles/pages/ContributePage.module.css";
import { getDataset } from "../api/dataset";

function ImageUploader() {
document.title = "Contribute | SeBRUS";

const navigate = useNavigate();

const { accounts } = useContext(DataContext);

const [image, setImage] = useState("");
Expand All @@ -33,7 +36,7 @@ function ImageUploader() {
alert("Please upload a file");
return;
}
if (file.size > 10000000) {
if (file.size > 1000000) {
alert("File size must be less than 10MB");
return;
}
Expand Down Expand Up @@ -70,26 +73,23 @@ function ImageUploader() {
alert("Error loading dataset ABI.");
return;
}
console.log(abi);
console.log(selected);

let address = selected;

window.web3 = new web3(window.ethereum);
let DatasetContract = new window.web3.eth.Contract(abi, selected);
DatasetContract.setProvider(window.ethereum);
let DatasetContract = new window.web3.eth.Contract(abi, address);

console.log(image);
console.log(label);

DatasetContract.methods
await DatasetContract.methods
.createData(image, label)
.send({ from: accounts[0] })
.on("receipt", function (receipt) {
console.log(receipt);
})
.on("error", function (error) {
console.log(error);
})
.on("confirmation", function (confirmationNumber, receipt) {
console.log(confirmationNumber);
console.log(receipt);
});
.send({ from: window.ethereum.selectedAddress });

alert("Image uploaded successfully!");
navigate("/dashboard");
};

return (
Expand Down
17 changes: 12 additions & 5 deletions client/src/pages/CreateDatasetPage.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -25,26 +25,31 @@ function CreateDatasetPage() {

let abi = await getABI("0");

console.log(abi);

let datasetManager = await getDataset("0");

console.log(datasetManager);

let address = datasetManager[0].address;

let datasetABI = await getABI("1");
console.log(address);

if (abi === null || datasetManager === null || datasetABI === null) {
if (abi === null || datasetManager === null || address === null) {
alert("Error loading dataset manager or dataset ABI.");
return;
}

window.web3 = new web3(window.ethereum);
let DatasetManagerContract = new window.web3.eth.Contract(abi, address);
DatasetManagerContract.setProvider(window.ethereum);

await DatasetManagerContract.methods
.createDataset(name, description)
.send({ from: accounts[0], gas: 2000000 });
.send({ from: window.ethereum.selectedAddress });

let datasetCount = await DatasetManagerContract.methods
.datasetCount()
.getDatasetCount()
.call();

console.log(datasetCount);
Expand All @@ -54,9 +59,11 @@ function CreateDatasetPage() {
console.log(typeof index);

let newAddress = await DatasetManagerContract.methods
.datasets(index)
.getDataset(index)
.call();

console.log(newAddress);

let data = await createDataset(name, description, newAddress, 1);

if (data === null) {
Expand Down
Loading

0 comments on commit 62eef88

Please sign in to comment.