Thank you for your comments! I will answer below:
interesting
are you going to block some kinds of products to avoid becoming silk road 2.0?
the idea is to open it for the whole world?
are you going to block some kinds of products to avoid becoming silk road 2.0?
the idea is to open it for the whole world?
The idea is to open it, yes, but not with the objective of becoming silk road 2.0. However, I do not think I can block specific products in the smart contract (at least in any effective way that would not be easily skipped). In the front end app it could be possible to block by hand, but the front end app is not the only way to interact with the smart contract...
a small feedback I can give is that it would be interesting to be able to see listings without having to connect a wallet, supporting other wallets besides metamask would be good too
That is a really good point. Initially I believed that I needed the wallet account to be able to retrieve the data from the smart contract, but now thinking about it it should be feasible. I will certainly try to implement this soon.
how are you handling disputes in case an user pay and never receives the physical item? funds are held on escrow until the item is received?
Initially I thought about a system to manage disputes with another specific role of users (let's call them "dispute resolvers") for that purpose. For example, selecting 5 of these dispute resolvers randomly, making them chat with the sender and receiver to cast a vote on who is right about the dispute, and selecting the winner of the dispute by majority and giving part of the loser's deposit to the dispute resolvers. However, I thought it would be difficult to set up and wasn't sure on how easy would it be for wrongdoers to fabricate false proof of shipping... So I decided to first go for a simpler approach, which is to make sure that all users are incentivized to behave correctly by setting up deposits ad studying all potential situations. Here is the diagram of all possibilities and how much money would be lost for each user en each case.

The principle is that if the receiver does not receive the product, it will not finalize the offer, penalizing himself but also the sender. To avoid blocking the funds forever in the escrow, there is something called lottery, which allows any user to forfeit offers that have been accepted but not finalized in a given amount of time (of the order of months), giving the user that triggered the forfeiture 10% of the funds locked, the contract creator 10 % and another random user that has previously interacted with the smart contract the remaining 80% (as the lottery winner).
The worst situations are:
- When the sender does not send the product and the Receiver confirms the delivery, effectively transferring unfairly from the receiver to the sender 100% of the price of the product. To avoid this happening, the receiver can choose to not confirm the delivery, but in that case, the receiver wold loose 150% of the price, instead of 100%. Another option is to confirm the delivery but give the sender a bad review. The idea is that users can build a reputation that allow the rest of the users to trust them.
- When the receiver receives the product but does not confirm the delivery. The main purpose of the deposit of the receiver is to avoid this situation. If the receiver did not have to provide a deposit, he would not loose anything by not confirming.
are you taking a fee afterwards?
Yes, there is a fee for 1% of the product price and 10% for the forfeitures.
consider deploying on an L2 like arbitrum or base, your users will save lots of fees if compared to mainnet
Also good point, I have deployed to the networks that I know better, but I certainly look forward to deploying in other networks.