Hacker News new | ask | show | jobs
by ss248 2758 days ago
But how would you protect the seller from the "evil buyer"? The one who receives the goods, but never releases the lock? Sure, he is not getting his money back, but the seller is not getting that money also.
1 comments

The buyer has to pay to make the order, that's usually the case in most e-commerce transactions I can think of.

If the evil buyer convinces the naive seller to ship products without a payment being executed or a smart-contract based bond, then the situation is exactly the same with or without cryptocurrencies.... the seller must report the buyer to the police and either hire a collection agency or take some other action to recover the goods.

edit: on a second look, I think I misread your comment... are you asking about the mechanics of conterfactual transactions?

If so, the idea is that the contract is entered with the buyer signing a transaction with some form of conditional operation. One the seller ships the product, the shipping code could very well be the condition that allows releasing the funds.

There's plenty to talk about here around game theory and mechanism design, but if you are interested in the topic I can recommend some cool state-channel and plasma contracts we can go over and discuss.

>The buyer has to pay to make the order

You mean like another lock? But what is stopping the seller from holding buyer's money hostage and force him to release the lock just to get some money back even when he did not receive the goods?

An example of evil buyer would be something like: 1. The buyer buys goods from seller with smart-contract

2. The money in buyer's wallet gets locked.

3. The seller ships the goods.

4. The buyer receives the goods, but never signs the smart-contract.

That way the buyer gets what he paid for, but the seller never receives the money.

No matter how i think about it, smart-contract idea looks abusable.

How about this:

1) the contract is initiated by the seller (sets amount, payable accounts, etc)

2) the contract is signed by the buyer, moving (or locking) an amount of money in the contract pending one of two situations:

2.1) the seller signs a message that the product has been shipped and the buyer signs a message the product has been received

2.2) the seller signs a message that the product has been shipped and after 30 days of no further message from the buyer's side the contract releases the funds

In this case, the solution is to have a commitment from the buyer that unless they take action (sign a special message to denounce the transaction / pull out of the contract) the seller gets paid. To address the scenario where the seller is malicious, the buyer can use the on-chain commitments from both parties as evidence of malpractice and report the situation.

(edit: formatting)

You're adding pointless layers of complexity without acknowledging the core problem: there's no way for a smart contract to know the true state of the real world without having to trust someone to give it accurate information.
Also known as the oracle problem. Some platforms find solutions to this in a decentralized way, see Augur. The solutions to real world data being inputted into a blockchain is an economic one.
Not all transactions require the smart-contract to know about the off-chain world!

The "oracle problem" is what I think you are referring to but I have a strong view that the problem of low quality data can be solved with existing mechanisms and tools.

My favourite method to dealing with information quality is by providing incentives to good quality sources and having a method that allows a third-party (anyone with an account...) to submit a fraud proof.

The evil seller doesn't ship the item but signs the product shipped message anyway. Who's gonna stop them, it's not like the blockchain knows if they actually shipped it or not. Or maybe they shipped a fake or non working item. Then what?
The evil seller has a reputation to protect and the victim has an undeletable evidence of the "crime" on-chain for anyone to verify.
How could you tell who is the culprit in this event?
Your caveat still renders the system vulnerable to malicious buyers. What if the buyer receives the product but "takes action" by denouncing the transaction or exiting the contract?
That is a good point.

On-chain, the solution is to have an oracle provide a third vote somehow. Off-chain, the solution is for the seller to report the buyer and its address to the authorities.

Both solutions rely on trusted 3rd parties then.
Isn't this very similar to what Escrow does?