Thanks to visit codestin.com
Credit goes to github.com

Skip to content

andyle83/marketplace

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Celo 101 - Marketplace

1. Introduce

This project implements a simple marketplace to manage / selling product. It's based on great course of Celo in the Dacade. It helps us to understand about Solidity, Celo blockchain, and how to make a fullstack application base on them.

The feature includes:

  • See products hosted on the Celo Blockchain
  • Purchase products with cUSD and pay the owner
  • Add your own products to the dApp
  • Record purchase history

On-going implementation (by order)

  • Pagination
  • Searching
  • Only verified merchant can add product
  • Merchant can check income / revenue in total or by product
  • Voting or commenting in purchased product (only customer who purchase can vote)
  • Category (labeling product type)
  • Tracking order

Demo website: https://marketplace-andyle83.vercel.app/

2. Technology Stack

Blockchain

  • Written in Solidity for Celo blockchain network
  • Deploying in Celo testnet: https://alfajores-blockscout.celo-testnet.org/
  • Deploy address: 0x052F92eF1B97c0dD68B7150a8BBeBf962dD8a4e7 (can be changed)
  • Development framework: HardHat & Laika

Backend [TBD]

  • Using ORM (i.e, Prisma) and Postgres database to store off-chain data / fall-over solution
  • Heroku to host Postgres

Frontend

There are two variants of implementation:

  • Node.js application (app folder)

    • Webpack as module bundler
    • Celo ContractKit
    • Using jQuery to update UI component with simple even handler function
    • Bootstrap UI framework
  • Next.js framework (react-app folder)

    • Using use-contractkit library
    • Apollo Client for GraphQL queries
    • Bootstrap UI framework

3. Showcase

Marketplace

  • Desktop

Home Page

  • Mobile

Home Page

Wallet Connect

Add New Product

Purchase Product

Add New Product

Create Product

Create New Product

Purchase History

Create New Product

4. Testing

Running Unit Testing Smart Contract

  • Local network - Testing using hardhat gauche package:
npm run test
  • Local network - Testing using hardhat node:
npx hardhat node
npx hardhat test
  • Testing network:
npx hardhat test --network alfajores

Running manual test (using Laika)

  • Deploy in testnet:
npx hardhat run scripts/sample-script.js --network alfajores

Output

No need to generate any newer typings.
Marketplace deployed to: 0xB67880E89e79aA1529532677Cc07e2ab007e6443
  • Sync:
npx hardhat laika-sync --contract Marketplace --address 0xB67880E89e79aA1529532677Cc07e2ab007e6443

Laika Initialize

Laika New Product

Laika Get Number

5. TODO

  • CI/CD (Applying Vercel)
    • Integration Testing: [TBD]
    • CI/CD Pipeline
vercel
vercel --prod
  • New features
    • Voting / Comment from customer
    • Sorting / Pagination / Category
    • Searching
    • Multi-items checkout
    • Buying history
    • Recommendation (or any Personalization)
  • Backend
    • Using database to improve performance / or store "big" data like images
    • Extra customer profile (email, phone). It helps customer engagement / personalization
    • Administration features
      • Not everyone can add new product / category (admin, group of admin)
      • Selling reporting etc..

6. Useful commands

Celo-cli

  • New account
celocli account:new
  • Check configure
celocli config:get
  • Set configure (for network)
celocli config:set --node=https://alfajores-forno.celo-testnet.org
  • Get balance (sample address)
celocli account:balance 0xbDEA9f367e9a92b41e91525AEC13d3aDFb027a68

Hardhat

  • Console (for configuration)
npx hardhat console
  • Accounts
npx hardhat accounts
  • Clean up
npx hardhat clean
  • Compile
npx hardhat compile
  • In-memory network
npx hardhat node
  • Testing
npx hardhat test
npx hardhat test --network alfajores
  • Deploy
npx hardhat run scripts/sample-script.js --network alfajores

Laika (similar as Postman)

  • Syn command
npx hardhat laika-sync --contract Marketplace --address 0x052F92eF1B97c0dD68B7150a8BBeBf962dD8a4e7

7. Issues

  1. Not able to run in localhost. Solution
  • Start the hardhat node as in-memory local blockchain
  • Update hardhat configure with right address (localhost) and port
  1. Trying to insert concurrent (multi products) at the same time in Testnet, and get an issue
Error: replacement fee too low [ See: https://links.ethers.org/v5-errors-REPLACEMENT_UNDERPRICED 
  1. Trying to make unit test for buyProduct but transaction was reverted with error:
ProviderError: VM Exception while processing transaction: revert
  • Running hardhat in-memory blockchain npx hardhat node
  • Running unit test in hardhat node npx hardhat test --network localhost
  • Checking output in hardhat console log
eth_chainId
eth_getTransactionByHash
eth_chainId
eth_getTransactionReceipt
eth_chainId
eth_estimateGas
  Contract call:       Marketplace#buyProduct
  From:                0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266
  To:                  0x0165878a594ca255338adfa4d48449f69242eb8f
  Value:               0 ETH

  Error: Transaction reverted: function call to a non-contract account
      at Marketplace.buyProduct (contracts/Marketplace.sol:88)
      at async EthModule._estimateGasAction (/Users/Anh.Le/Workspace/GitHub/celo-101/contract/node_modules/hardhat/src/internal/hardhat-network/provider/modules/eth.ts:425:7)
      at async HardhatNetworkProvider._sendWithLogging (/Users/Anh.Le/Workspace/GitHub/celo-101/contract/node_modules/hardhat/src/internal/hardhat-network/provider/provider.ts:139:22)
      at async HardhatNetworkProvider.request (/Users/Anh.Le/Workspace/GitHub/celo-101/contract/node_modules/hardhat/src/internal/hardhat-network/provider/provider.ts:116:18)
      at async JsonRpcHandler._handleRequest (/Users/Anh.Le/Workspace/GitHub/celo-101/contract/node_modules/hardhat/src/internal/hardhat-network/jsonrpc/handler.ts:188:20)
      at async JsonRpcHandler._handleSingleRequest (/Users/Anh.Le/Workspace/GitHub/celo-101/contract/node_modules/hardhat/src/internal/hardhat-network/jsonrpc/handler.ts:167:17)
      at async Server.JsonRpcHandler.handleHttp (/Users/Anh.Le/Workspace/GitHub/celo-101/contract/node_modules/hardhat/src/internal/hardhat-network/jsonrpc/handler.ts:52:21)

Reference

About

Not a simple marketplace in Celo blockchain network

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •