DERO Marketplace Smart Contract
Built for the Dero Smart Contract build competition
Fully functional yet simple marketplace where users can buy and sell goods without the need of a centralized e-commerce platform.
Made in DERO-BASIC, running on the DERO-DVM.
Refer to Schema.txt to understand the structures the marketplace is made up on.
AddProduct(name, description, price, amount) - Adds a new product to the marketplace.
RemoveProduct(product_id) - Removes a product from the marketplace.
ChangeProductAmount(product_id, new_amount) - Changes the amount of a product for sale.
FulfillOrder(order_id) - Confirms a order went through thus sending the funds to the seller.
BuyProduct(value, product_id, amount) - Buys a product. value should be equal to the product price multiplied by the amount bought. If not, unused coins will be sent back to the buyer address.
ReviewOrder(order_id, satisfied, comment) - Reviews a order. The buyer can either give a positive (satisfied = 1) or a negative (satisfied = 0) opinion. Comment is optional. By reviewing an order, its seller gets a feedback. Total feedback is equal to positive feedback minus negative feedback.
CancelOrder(order_id, reason) - Cancels a order. Can be used by either the buyer or the seller. Spent coins will be returned to the buyer. A order can not be canceled if it has already been fulfilled by the seller.
SetContactInfo(contact_info) - Sets the contact info of a user. Said contact info is needed in order for buyers and sellers to communicate shipping addresses/other info. Since data stored on the blockchain is currently public, contact_info should be something anonymous such as a ProtonMail address or a Wickr username.
I felt a frontend for this SC was needed in order to display data (products, orders and reviews) in a readable and understandable way to the human eye and to make interactions (buy/sell/etc) easier.
How to run
Download the frontend folder from this repository.
Make sure daemon and wallet are running and synced.
Open your web browser with web security disabled. This is needed in order to bypass a CORS issue with the daemon's JSON RPC server (thanks to plspro for providing this quick fix). Example (Chrome on Ubuntu):
$ google-chrome --disable-web-security --user-data-dir=/path/to/data/dir
Open index.html with your browser.
Tested on the latest version of Chrome and Firefox. If you're using a older browser and running into compatibility issues, you may need to pass the js file through BabelJS and the css file through a prefixer.