From 609b4e839b3a601d31f5a0d16face7ee631cd152 Mon Sep 17 00:00:00 2001 From: 050ujjwal <050ujjwal.pal@gmail.com> Date: Mon, 10 Apr 2023 16:46:20 +0530 Subject: [PATCH 1/6] last commit --- .../.gitignore | 11 ++ .../README.md | 13 ++ .../contracts/Ecom.sol | 157 ++++++++++++++++++ .../contracts/paymentProcessing.sol | 46 +++++ .../contracts/productDetails.sol | 54 ++++++ .../contracts/shippingContract.sol | 52 ++++++ .../hardhat.config.js | 105 ++++++++++++ .../package.json | 16 ++ .../scripts/deploy.js | 23 +++ Alliance_University_Ujjwal_pal_CSE081/test.js | 48 ++++++ .../test/Lock.js | 126 ++++++++++++++ 11 files changed, 651 insertions(+) create mode 100644 Alliance_University_Ujjwal_pal_CSE081/.gitignore create mode 100644 Alliance_University_Ujjwal_pal_CSE081/README.md create mode 100644 Alliance_University_Ujjwal_pal_CSE081/contracts/Ecom.sol create mode 100644 Alliance_University_Ujjwal_pal_CSE081/contracts/paymentProcessing.sol create mode 100644 Alliance_University_Ujjwal_pal_CSE081/contracts/productDetails.sol create mode 100644 Alliance_University_Ujjwal_pal_CSE081/contracts/shippingContract.sol create mode 100644 Alliance_University_Ujjwal_pal_CSE081/hardhat.config.js create mode 100644 Alliance_University_Ujjwal_pal_CSE081/package.json create mode 100644 Alliance_University_Ujjwal_pal_CSE081/scripts/deploy.js create mode 100644 Alliance_University_Ujjwal_pal_CSE081/test.js create mode 100644 Alliance_University_Ujjwal_pal_CSE081/test/Lock.js diff --git a/Alliance_University_Ujjwal_pal_CSE081/.gitignore b/Alliance_University_Ujjwal_pal_CSE081/.gitignore new file mode 100644 index 00000000..00dad773 --- /dev/null +++ b/Alliance_University_Ujjwal_pal_CSE081/.gitignore @@ -0,0 +1,11 @@ +node_modules +.env +coverage +coverage.json +typechain +typechain-types + +# Hardhat files +cache +artifacts + diff --git a/Alliance_University_Ujjwal_pal_CSE081/README.md b/Alliance_University_Ujjwal_pal_CSE081/README.md new file mode 100644 index 00000000..e9dd5f34 --- /dev/null +++ b/Alliance_University_Ujjwal_pal_CSE081/README.md @@ -0,0 +1,13 @@ +# Sample Hardhat Project + +This project demonstrates a basic Hardhat use case. It comes with a sample contract, a test for that contract, and a script that deploys that contract. + +Try running some of the following tasks: + +```shell +npx hardhat help +npx hardhat test +REPORT_GAS=true npx hardhat test +npx hardhat node +npx hardhat run scripts/deploy.js +``` diff --git a/Alliance_University_Ujjwal_pal_CSE081/contracts/Ecom.sol b/Alliance_University_Ujjwal_pal_CSE081/contracts/Ecom.sol new file mode 100644 index 00000000..f4b06617 --- /dev/null +++ b/Alliance_University_Ujjwal_pal_CSE081/contracts/Ecom.sol @@ -0,0 +1,157 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^ 0.5.4; +contract shopping { + + address payable public owner; + + constructor() public { + owner = msg.sender; + } + uint id; + uint purchaseId; + struct seller { + string name; + address addre; + uint bankGuaraantee; + bool bgPaid; + } + struct product { + string productId; + string productName; + string Category; + uint price; + string description; + address payable seller; + bool isActive; + + } + struct ordersPlaced { + string productId; + uint purchaseId; + address orderedBy; + } + struct sellerShipment { + string productId; + uint purchaseId; + string shipmentStatus; + string deliveryAddress; + address payable orderedBy; + bool isActive; + bool isCanceled; + } + struct user { + string name; + string email; + string deliveryAddress; + bool isCreated; + } + struct orders { + string productId; + string orderStatus; + uint purchaseId; + string shipmentStatus; + } + mapping(address => seller) public sellers; + mapping(string => product) products; + product[] public allProducts; + mapping(address => ordersPlaced[]) sellerOrders; + mapping(address => mapping(uint => sellerShipment)) sellerShipments; + mapping(address => user) users; + mapping(address => orders[]) userOrders; + + function sellerSignUp(string memory _name) public payable { + require(!sellers[msg.sender].bgPaid, "You are Already Registered"); + require(msg.value == 1000 wei, "Bank Guarantee of 1000 wei Required"); + owner.transfer(msg.value); + sellers[msg.sender].name = _name; + sellers[msg.sender].addre = msg.sender; + sellers[msg.sender].bankGuaraantee = msg.value; + sellers[msg.sender].bgPaid = true; + } + + function createAccount(string memory _name, string memory _email, string memory _deliveryAddress) public { + + users[msg.sender].name = _name; + users[msg.sender].email = _email; + users[msg.sender].deliveryAddress = _deliveryAddress; + users[msg.sender].isCreated = true; + } + + function buyProduct(string memory _productId) public payable { + + + require(msg.value == products[_productId].price, "Value Must be Equal to Price of Product"); + require(users[msg.sender].isCreated, "You Must Be Registered to Buy"); + + products[_productId].seller.transfer(msg.value); + + purchaseId = id++; + orders memory order = orders(_productId, "Order Placed With Seller", purchaseId, sellerShipments[products[_productId].seller][purchaseId].shipmentStatus); + userOrders[msg.sender].push(order); + ordersPlaced memory ord = ordersPlaced(_productId, purchaseId, msg.sender); + sellerOrders[products[_productId].seller].push(ord); + + sellerShipments[products[_productId].seller][purchaseId].productId = _productId; + sellerShipments[products[_productId].seller][purchaseId].orderedBy = msg.sender; + sellerShipments[products[_productId].seller][purchaseId].purchaseId = purchaseId; + sellerShipments[products[_productId].seller][purchaseId].deliveryAddress = users[msg.sender].deliveryAddress; + sellerShipments[products[_productId].seller][purchaseId].isActive = true; + } + + function addProduct(string memory _productId, string memory _productName, string memory _category, uint _price, string memory _description) public { + require(sellers[msg.sender].bgPaid, "You are not Registered as Seller"); + require(!products[_productId].isActive, "Product With this Id is already Active. Use other UniqueId"); + + + product memory newProduct = product(_productId, _productName, _category, _price, _description, msg.sender, true); + products[_productId].productId = _productId; + products[_productId].productName = _productName; + products[_productId].Category = _category; + products[_productId].description = _description; + products[_productId].price = _price; + products[_productId].seller = msg.sender; + products[_productId].isActive = true; + allProducts.push(newProduct); + + } + + function cancelOrder(string memory _productId, uint _purchaseId) public payable { + require(sellerShipments[products[_productId].seller][_purchaseId].orderedBy == msg.sender, "Aww Crap.. You are not Authorized to This Product PurchaseId"); + require(sellerShipments[products[_productId].seller][purchaseId].isActive, "Aww crap..You Already Canceled This order"); + + + sellerShipments[products[_productId].seller][_purchaseId].shipmentStatus = "Order Canceled By Buyer, Payment will Be Refunded"; + sellerShipments[products[_productId].seller][_purchaseId].isCanceled = true; + sellerShipments[products[_productId].seller][_purchaseId].isActive = false; + } + + function updateShipment(uint _purchaseId, string memory _shipmentDetails) public { + require(sellerShipments[msg.sender][_purchaseId].isActive, "Order is either inActive or cancelled"); + + sellerShipments[msg.sender][_purchaseId].shipmentStatus = _shipmentDetails; + + } + + function refund(string memory _productId, uint _purchaseId) public payable { + require(sellerShipments[msg.sender][_purchaseId].isCanceled, "Order is not Yet Cancelled"); + require(!sellerShipments[products[_productId].seller][purchaseId].isActive, "Order is Active and not yet Cancelled"); + require(msg.value == products[_productId].price, "Value Must be Equal to Product Price"); + sellerShipments[msg.sender][_purchaseId].orderedBy.transfer(msg.value); + sellerShipments[products[_productId].seller][_purchaseId].shipmentStatus = "Order Canceled By Buyer, Payment Refunded"; + + } + + function myOrders(uint _index) public view returns(string memory, string memory, uint, string memory) { + return (userOrders[msg.sender][_index].productId, userOrders[msg.sender][_index].orderStatus, userOrders[msg.sender][_index].purchaseId, sellerShipments[products[userOrders[msg.sender][_index].productId].seller][userOrders[msg.sender][_index].purchaseId].shipmentStatus); + } + + function getOrdersPlaced(uint _index) public view returns(string memory, uint, address, string memory) { + return (sellerOrders[msg.sender][_index].productId, sellerOrders[msg.sender][_index].purchaseId, sellerOrders[msg.sender][_index].orderedBy, sellerShipments[msg.sender][sellerOrders[msg.sender][_index].purchaseId].shipmentStatus); + } + + function getShipmentDetails(uint _purchaseId) public view returns(string memory, string memory, address, string memory) { + + return (sellerShipments[msg.sender][_purchaseId].productId, sellerShipments[msg.sender][_purchaseId].shipmentStatus, sellerShipments[msg.sender][_purchaseId].orderedBy, sellerShipments[msg.sender][_purchaseId].deliveryAddress); + } + +} \ No newline at end of file diff --git a/Alliance_University_Ujjwal_pal_CSE081/contracts/paymentProcessing.sol b/Alliance_University_Ujjwal_pal_CSE081/contracts/paymentProcessing.sol new file mode 100644 index 00000000..697ca935 --- /dev/null +++ b/Alliance_University_Ujjwal_pal_CSE081/contracts/paymentProcessing.sol @@ -0,0 +1,46 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +contract PaymentProcessor { + enum PaymentStatus { Pending, Paid, Refunded } + + struct Payment { + uint256 paymentId; + address payable buyer; + address payable seller; + uint256 amount; + PaymentStatus status; + } + + uint256 public paymentCount; + mapping(uint256 => Payment) public payments; + + event PaymentCreated(uint256 indexed paymentId, address indexed buyer, address indexed seller, uint256 amount); + event PaymentPaid(uint256 indexed paymentId, address indexed payer); + event PaymentRefunded(uint256 indexed paymentId, address indexed payer); + + function createPayment(address payable _seller) public payable { + paymentCount++; + payments[paymentCount] = Payment(paymentCount, payable(msg.sender), _seller, msg.value, PaymentStatus.Pending); + emit PaymentCreated(paymentCount, msg.sender, _seller, msg.value); + } + + function pay(uint256 _paymentId) public payable { + Payment storage payment = payments[_paymentId]; + require(msg.sender == payment.buyer, "Only the buyer can pay for this payment"); + require(msg.value == payment.amount, "Incorrect payment amount"); + require(payment.status == PaymentStatus.Pending, "Invalid payment status for payment"); + payment.seller.transfer(msg.value); + payment.status = PaymentStatus.Paid; + emit PaymentPaid(_paymentId, msg.sender); + } + + function refund(uint256 _paymentId) public { + Payment storage payment = payments[_paymentId]; + require(msg.sender == payment.seller, "Only the seller can refund this payment"); + require(payment.status == PaymentStatus.Paid, "Invalid payment status for refund"); + payment.buyer.transfer(payment.amount); + payment.status = PaymentStatus.Refunded; + emit PaymentRefunded(_paymentId, msg.sender); + } +} diff --git a/Alliance_University_Ujjwal_pal_CSE081/contracts/productDetails.sol b/Alliance_University_Ujjwal_pal_CSE081/contracts/productDetails.sol new file mode 100644 index 00000000..1856ebfc --- /dev/null +++ b/Alliance_University_Ujjwal_pal_CSE081/contracts/productDetails.sol @@ -0,0 +1,54 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^ 0.5.4; +contract shopping { + + address payable public owner; + + constructor() public { + owner = msg.sender; + } + struct seller { + string name; + address addr; + uint bankGuaraantee; + bool bgPaid; + } + struct product { + string productId; + string productName; + string Category; + uint price; + string description; + address payable seller; + bool isActive; + } + mapping(address => seller) public sellers; + mapping(string => product) products; + product[] public allProducts; + + function sellerSignUp(string memory _name) public payable { + require(!sellers[msg.sender].bgPaid); + require(msg.value == 1000 wei, "Bank Guarantee of 1000 wei Required"); + owner.transfer(msg.value); + sellers[msg.sender].name = _name; + sellers[msg.sender].addr = msg.sender; + sellers[msg.sender].bankGuaraantee = msg.value; + sellers[msg.sender].bgPaid = true; + } + + function addProduct(string memory _productId, string memory _productName, string memory _category, uint _price, string memory _description) public { + require(!products[_productId].isActive); + require(sellers[msg.sender].bgPaid); + + product memory product = product(_productId, _productName, _category, _price, _description, msg.sender, true); + products[_productId].productId = _productId; + products[_productId].productName = _productName; + products[_productId].Category = _category; + products[_productId].description = _description; + products[_productId].price = _price; + products[_productId].seller = msg.sender; + products[_productId].isActive = true; + allProducts.push(product); + + } +} \ No newline at end of file diff --git a/Alliance_University_Ujjwal_pal_CSE081/contracts/shippingContract.sol b/Alliance_University_Ujjwal_pal_CSE081/contracts/shippingContract.sol new file mode 100644 index 00000000..87417f91 --- /dev/null +++ b/Alliance_University_Ujjwal_pal_CSE081/contracts/shippingContract.sol @@ -0,0 +1,52 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +contract Shipping { + enum ShipmentStatus { Created, InTransit, Delivered, Lost } + + struct Shipment { + uint256 shipmentId; + address buyer; + address seller; + string item; + ShipmentStatus status; + } + + uint256 public shipmentCount; + mapping(uint256 => Shipment) public shipments; + + event ShipmentCreated(uint256 indexed shipmentId, address indexed buyer, address indexed seller, string item); + event ShipmentInTransit(uint256 indexed shipmentId); + event ShipmentDelivered(uint256 indexed shipmentId); + event ShipmentLost(uint256 indexed shipmentId); + + function createShipment(address _buyer, string memory _item) public { + shipmentCount++; + shipments[shipmentCount] = Shipment(shipmentCount, _buyer, msg.sender, _item, ShipmentStatus.Created); + emit ShipmentCreated(shipmentCount, _buyer, msg.sender, _item); + } + + function markInTransit(uint256 _shipmentId) public { + Shipment storage shipment = shipments[_shipmentId]; + require(msg.sender == shipment.seller, "Only the seller can mark a shipment as in transit"); + require(shipment.status == ShipmentStatus.Created, "Invalid shipment status for in transit"); + shipment.status = ShipmentStatus.InTransit; + emit ShipmentInTransit(_shipmentId); + } + + function markDelivered(uint256 _shipmentId) public { + Shipment storage shipment = shipments[_shipmentId]; + require(msg.sender == shipment.buyer, "Only the buyer can mark a shipment as delivered"); + require(shipment.status == ShipmentStatus.InTransit, "Invalid shipment status for delivery"); + shipment.status = ShipmentStatus.Delivered; + emit ShipmentDelivered(_shipmentId); + } + + function markLost(uint256 _shipmentId) public { + Shipment storage shipment = shipments[_shipmentId]; + require(msg.sender == shipment.buyer || msg.sender == shipment.seller, "Only the buyer or seller can mark a shipment as lost"); + require(shipment.status == ShipmentStatus.InTransit, "Invalid shipment status for lost"); + shipment.status = ShipmentStatus.Lost; + emit ShipmentLost(_shipmentId); + } +} diff --git a/Alliance_University_Ujjwal_pal_CSE081/hardhat.config.js b/Alliance_University_Ujjwal_pal_CSE081/hardhat.config.js new file mode 100644 index 00000000..5d9c156b --- /dev/null +++ b/Alliance_University_Ujjwal_pal_CSE081/hardhat.config.js @@ -0,0 +1,105 @@ +/** + * @type import('hardhat/config').HardhatUserConfig + */ + +require('@nomiclabs/hardhat-ethers'); +require('@nomiclabs/hardhat-etherscan'); + +// Change private keys accordingly - ONLY FOR DEMOSTRATION PURPOSES - PLEASE STORE PRIVATE KEYS IN A SAFE PLACE +// Export your private key as +// export PRIVKEY=0x..... + + +module.exports = { + defaultNetwork: 'buildbear', + + networks: { + hardhat: {}, + buildbear: { + url: "https://rpc.buildbear.io/Critical_Mon_Mothma_150e5c8a" + } + + }, + solidity: { + compilers: [ + { + version: '0.8.16', + settings: { + optimizer: { + enabled: true, + runs: 200, + }, + }, + }, + { + version: '0.8.4', + settings: { + optimizer: { + enabled: true, + runs: 200, + }, + }, + }, + { + version: '0.8.9', + settings: { + optimizer: { + enabled: true, + runs: 200, + }, + }, + }, + { + version: '0.5.0', + settings: { + optimizer: { + enabled: true, + runs: 200, + }, + }, + }, + { + version: '0.8.13', + settings: { + optimizer: { + enabled: true, + runs: 200, + }, + }, + }, + { + version: '0.5.5', + settings: { + optimizer: { + enabled: true, + runs: 200, + }, + }, + }, + ], + }, + + etherscan: { + apiKey: { + buildbear: "test1", + }, + customChains: [ + { + network: "buildbear", + chainId: 8658, + urls: { + apiURL: "https://rpc.buildbear.io/verify/etherscan/Critical_Mon_Mothma_150e5c8a", + browserURL: "https://explorer.buildbear.io/Critical_Mon_Mothma_150e5c8a", + }, + }, + ], + }, + paths: { + sources: './contracts', + cache: './cache', + artifacts: './artifacts', + }, + mocha: { + timeout: 20000000000, + }, +}; diff --git a/Alliance_University_Ujjwal_pal_CSE081/package.json b/Alliance_University_Ujjwal_pal_CSE081/package.json new file mode 100644 index 00000000..c983f492 --- /dev/null +++ b/Alliance_University_Ujjwal_pal_CSE081/package.json @@ -0,0 +1,16 @@ +{ + "name": "ujjupalsm", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC", + "dependencies": { + "@nomiclabs/hardhat-ethers": "^2.2.2", + "@nomiclabs/hardhat-etherscan": "^3.1.7", + "hardhat": "^2.13.0" + } +} diff --git a/Alliance_University_Ujjwal_pal_CSE081/scripts/deploy.js b/Alliance_University_Ujjwal_pal_CSE081/scripts/deploy.js new file mode 100644 index 00000000..00417581 --- /dev/null +++ b/Alliance_University_Ujjwal_pal_CSE081/scripts/deploy.js @@ -0,0 +1,23 @@ +// We require the Hardhat Runtime Environment explicitly here. This is optional +// but useful for running the script in a standalone fashion through `node