๐ BONK is short for Bid On Non-fungible Kavel (Kavel is Dutch for "lot")
- Bid On: Participate in an auction to place bids.
- Non-fungible: Referring to unique, indivisible items that are verified on the blockchain (like NFTs).
- Kavel: A Dutch word meaning "lot" or "parcel," representing each unique auction item.
Together, BONK is your gateway to secure, transparent and fair decentralized dutch auctions.
This dApp (decentralised application) empowers users to participate in secure, trust-less biddingโwhere every bid counts and decentralisation is at the core.
Dutch auctions decentralised to bid smart and own fast.
- Docker
- Dev Container extension (VSCode)
- Clone repository
git clone git@github.com:crystalcheong/bonk.git cd bonk - Duplicate
.env.exampleto create.envfilecp -n packages/service/.env.example packages/service/.env cp -n apps/web/.env.example apps/web/.env
- Install dependencies
pnpm i
- Start the application
pnpm run dev
Tip
Copy the Hardhat generated network accounts, for testing in localhost
- In a new terminal tab, deploy smart contracts
Once deployed, update
cd ./packages/service pnpm run deploy:localapps/web/.env,
VITE_BONK_AUCTION_INITIATOR_ADDRESS=<auction-initiator-address>
- Regenerate ABI
cd ../../apps/web pnpm run generate
1. Deploy to Sepolia testnet on Alchemy
- Set the following variables in
packages/service/.env:
SEPOLIA_GATEWAY_URL=https://eth-sepolia.g.alchemy.com/v2/<alchemy-api-key>
SEPOLIA_PRIVATE_KEY=<metamask-private-key>- Open a new terminal tab in the serivce packge
cd packages/service- Compile and test the smart contracts
pnpm run build
pnpm run test- Deploy to Sepolia testnet
pnpm run deploy:sepolia- Set the following variables in
apps/web/.env:
VITE_ALCHEMY_API_KEY=<alchemy-api-key>
VITE_BONK_AUCTION_INITIATOR_ADDRESS=<deployed-auction-initiator-address>- Open a new terminal tab in the web packge
cd apps/web- Build the project and generate the ABI Hooks
pnpm run build
pnpm run generate- Deploy to Vercel
Frontend (apps/web)
Built on TypeScript with React and Vite bundling. Wagmi dependency to manage wallet connections, fully type-safe interactions with the RPC, and to generate ABI directly from the deployed contract address.
Smart Contracts (packages/service)
containing our Solidity smart contracts, test scripts and typings generated with Typechain that the frontend references directly
AuctionInitiator
This contract allows anyone to create a new auction. It tracks all auctions created by different users, acting as the starting point for every new auction process.
AuctionMarket
This contract handles the auction mechanics. It manages the bidding process, tracks token commitments, calculates clearing prices, and distributes tokens at the end of the auction. Essentially, itโs the heart of the auction operation.
AuctionToken
This is where the custom ERC-20 token for the auction is defined. It manages token transfers, tracks balances, mints new tokens, and burns unsold tokens to maintain supply integrity.
- Crystal Cheong Yu Qing (U2121134A)
- Seah Kai Heng (U2021104L)
- Nguyen Ngoc Minh Nghia (U2120213H)
This repository is submitted as a project work for Nanyang Technological University's SC4053 - Blockchain Technology course.


