project screenshot 1
project screenshot 2
project screenshot 3
project screenshot 4
project screenshot 5
project screenshot 6

ETHPark-QR

Allows to settle QR Parking tickets (and beyond) on-chain with various options. Also settle QR payments without owning Local Thai Bank Account

ETHPark-QR

Created At

ETHGlobal Bangkok

Winner of

Blockscout - Blockscout Explorer Big Pool Prize

Prize Pool

Coinbase Developer Platform - Checkout component pool prize

Prize Pool

Bitkub - Best KUB Coin Utilization 1st place

Project Description

This project removes the gap between QR payments and cryptographic currencies. Imagine you're coming to Thailand and you do not have Thai Bank account, but everything around very often requires QR payments to settle, especially parking in malls. Fortunately they don't care WHO settles it.

We allow to use cryptocurrencies (POL, Bitkub, CoinBase Checkout, Arbitrum etc) to request a settle service broadcast for unsettled QR codes on the blockchain. After the crypto is received the application can settle it in 2 ways, either internally with a bot, or it gives the ability for anyone publicly settle actual QR for user in exchange for the deposited crypto.

This means that we are building on top of local companies , similar to PromptPay, in order to allow services on top of the traditional layer. The volunteer also does not need to do any KYC ,like e.g. on centralized exchanges, to get some blockchain assets, by offering requesters to settle their QR payments. This concept is called Coincidence of Wants and is also utilized in the crypto space by Cow Dao for trading. The advantage here for the crypto space lies in the fact that crypto does not get sold on the open market like it would with vanilla "crypto" credit cards thereby decreasing the value of the overall crypto market.

How it's Made

First we scan the local QR code to figure out if it comes from a supported entity or the venue. Then we need to query the QR providers data center in order to figure out the outstanding balance that QR holder needs to pay. Since we parse API calls to parking centers, we receive the outstanding balance in THB currency (Thai Baht) - with that in mind we are using a Chainlink-Price-Oracle to convert THB amount to USD (https://data.chain.link/feeds/polygon/mainnet/thb-usd)

Once we the have conversion rate we need to make one more hop through a Chainlink oracle to query second currency from USD to POL (Matic) or USD to KUB or other settlement assets that can be charged on chain. This is done on the smart-contract side and the feed already mentioned above. Since we support multiple chains we use Layer0 to pass pricing information to other chains (because THB/USD feed from Chainlink is only available on Polygon). All oracle calls also happen on chain. For off-chain prices we query Bitkub API to get the rates and compare them for UI to display.

Once a user is ready to make a transaction to our smart-contract this creates a charge on-chain and stores all necessary information for either our bot or any Volunteer to come front and settle actual payment. Our application then re-checks with data-provider the outstanding balance to figure if it should release payments to the correct Volunteer or to keep it internally if our bot settles the payment. We use also the CoinBase Checkout tool to allow seamless payments even if users do not have other wallets.

We use Privy for similar matter to connect users with generated address by simply using their Email Account. For communicating price between different contracts on different chains we use Layer0: We have layer0 contracts which publicly store the latest information about the oracle. If the oracle on polygon does an update a friendly bot then sends a message through layer0 with the newest oracle information to the other chains and updates a smart contract which mirrors the polygon oracle. This allows us to theoretically offer any token which has a chainlink usd oracle on any chain.

Here are known deployed contracts (also verified on Blockscout) https://polygon.blockscout.com/address/0x1fC490c7FD8716A9d20232B6871951e674841b4a?tab=contract

We also use this contract as Oracle HUB for pricing: https://polygon.blockscout.com/address/0xD3c0E09Ae6D1BAA7e171C9c2Cfd1e12f9853f026?tab=contract

Rest is done by Layer0 + Chainlink + Coinbase to settle payments + backendAPI to release payments to Volunteer depending on the matched chain.

MultiBass was also briefly used: https://j4kvg556rbaspaammrbt6lniqi.multibaas.com/ Privy is used in combination with Rainbow wallet and custom wallet.

Payments can also be settled on Mainnet using Bitkub token.

background image mobile

Join the mailing list

Get the latest news and updates