3dETH is meant to provide a secure, decentralized and trustless environment for people to buy and sell 3d printing services. Sometimes bidding and brokerage is used with higher-end print jobs, and this dapp could facilitate a sale between the source and the client, negating the need for a broker. The project is built with a smart contract, which creates and manages the states of escrow instances. Further, the escrow service itself is automated via strictly defined business logic, which allows users to 'trust the code' rather than the seller. For each sale, the seller and buyer are both asked to stake 25% of the total sale price. This is often done in decentralized marketplaces as it motivates each party to conduct a safe and secure business transaction. If the seller or buyer doesn't act in good faith, the aggrieved party can open a dispute. If the dispute cant be resolved, then the bad actor forfeits their stake. 3dETH is mostly experimental and will need some tweaking to work properly on the Mainnet and in the real world. Still, I think the idea of a decentralized 3d printing/CAD marketplace that allows buyers and sellers to interact more directly is something worth pursuing.

3dETH showcase

How it's made

The project uses a solidity smart contract to facilitate escrow between a buyer and seller. Writing an efficient smart contract was critical to a successful escrow service, as was using only the bare minimum for storing the escrow state. On creation, the buyers address is key-value mapped to an Escrow struct that represents an escrow instance. The escrow instances contain boolean values that store the states of a given escrow. The dapp also makes use of an 'escrow management' dashboard, where both buyers and sellers can manage their orders and perform actions like marking an item shipped or finalizing an order. Web3 was used here to interact with the contract and change the state of an escrow or finalize it. It also became necessary to create an off-chain storage solution that would privately store shipping addresses of customers and store their printed model files for retrieval by the seller. Eventually, I had to settle on a traditional database, as I was running out of time. Syncing off-chain and on-chain storage into the escrow management dashboard also proved to be a challenge. A hacky but working synchronization was implemented.