Zenland Escrow Review
I was invited to try a Zenland escrow contract as an agent. The contract is 0x621340a3883bFF299E9AEb8c466598395408a53B on Bsc Chain (contract on bscscan:
https://bscscan.com/address/0x621340a3883bFF299E9AEb8c466598395408a53B)
Contract terms:
Exchange of 1 BUSD to 0.000022 BTC
However, there is a small mistake in the contract details, USDT is used instead of BUSD as quoted below:
This escrow contract initiates the exchange of 1 USDT for 0.000022 BTC. To fulfil this agreement, I, as the buyer, have locked in 1 BUSD
What happened:
The buyer was supposed to receive BTC from the seller. The seller sent an invalid TX hash since it doesn’t include the buyer's BTC address as a recipient. The buyer pointed this out to the seller who insisted it was a blockchain congestion problem which isn’t the case. The seller persuaded the buyer to coerce him/her to release the BUSD when the seller hadn’t fulfilled his end of the contract.
Given the seller's dishonest behaviour, I was inclined to resolve the escrow contract in favour of the buyer and I did. Agent fee is currently set between 1-3 % for the agent for successful resolution as seen below:

I took a 1% fee and returned the other 99% to the buyer.
Observations:
- Messages in chat by the agent can’t be edited once sent.
- The buyer protection time countdown is stuck at 1 days, 0 hours, 0 minutes in the UI even if it is enforced at the contract level.
- After the buyer protection time is elapsed, the seller can call
release()
and take 100% of the buyer's money and there is nothing the buyer can do about it. [/li]
- Contract code looks good and secure but lacks comments and some gas optimizations can be done to reduce the gas costs for users (buyer, seller, agent) eg: changing some require statements to custom error and other best practices like using constants instead of magic numbers.