Cairo smart contracts for the Entangle meeting auction platform on Starknet.
- 🎯 Meeting auction contract
- 💰 Token factory for creator tokens
- 🏊 Pool manager for liquidity
- 🔒 Secure and audited patterns
- ⚡ Gas-optimized implementations
- Language: Cairo 2.x
- Build Tool: Scarb
- Network: Starknet (Sepolia Testnet)
- Testing: Starknet Foundry
- Scarb (Cairo package manager)
- Starknet Foundry (for testing)
- Node.js (for deployment scripts)
# macOS/Linux
curl --proto '=https' --tlsv1.2 -sSf https://docs.swmansion.com/scarb/install.sh | sh
# Or use asdf
asdf plugin add scarb
asdf install scarb latest
asdf global scarb latestcurl -L https://raw.githubusercontent.com/foundry-rs/starknet-foundry/master/scripts/install.sh | sh# Install Cairo dependencies
scarb buildcontract/
├── src/
│ ├── auction.cairo # Main auction contract
│ ├── token_factory.cairo # Creator token factory
│ ├── pool_manager.cairo # Liquidity pool manager
│ └── lib.cairo # Library exports
├── tests/
│ ├── test_auction.cairo # Auction tests
│ ├── test_factory.cairo # Factory tests
│ └── test_pool.cairo # Pool tests
├── scripts/
│ ├── deploy.sh # Deployment script
│ ├── build.sh # Build script
│ └── test.sh # Test script
├── Scarb.toml # Scarb configuration
└── README.md
Main contract for creating and managing meeting auctions.
Features:
- Create time-based auctions
- Place bids with STRK tokens
- Automatic winner selection
- Meeting NFT minting for winners
Key Functions:
fn create_auction(
title: felt252,
description: felt252,
start_time: u64,
end_time: u64,
min_bid: u256
) -> u256
fn place_bid(auction_id: u256, amount: u256)
fn end_auction(auction_id: u256)
fn claim_meeting_nft(auction_id: u256)Factory for creating and managing creator tokens.
Features:
- Deploy ERC20 tokens for creators
- Bonding curve pricing
- Automatic liquidity provision
- Creator royalties
Key Functions:
fn create_token(
name: felt252,
symbol: felt252,
initial_supply: u256
) -> ContractAddress
fn buy_tokens(token_address: ContractAddress, amount: u256)
fn sell_tokens(token_address: ContractAddress, amount: u256)Manages liquidity pools for creator tokens.
Features:
- Create liquidity pools
- Add/remove liquidity
- Swap tokens
- Fee distribution
Key Functions:
fn create_pool(
token_a: ContractAddress,
token_b: ContractAddress
) -> ContractAddress
fn add_liquidity(
pool: ContractAddress,
amount_a: u256,
amount_b: u256
)
fn swap(
pool: ContractAddress,
token_in: ContractAddress,
amount_in: u256
) -> u256# Build all contracts
scarb build
# Or use the build script
./scripts/build.sh# Run all tests
scarb test
# Run specific test
scarb test test_auction
# Or use the test script
./scripts/test.sh# Format Cairo code
scarb fmt# Set environment variables
export STARKNET_RPC_URL="https://starknet-sepolia-rpc.publicnode.com"
export STARKNET_ACCOUNT="your_account_address"
export STARKNET_PRIVATE_KEY="your_private_key"
# Deploy contracts
./scripts/deploy.sh# Declare contract class
starkli declare target/dev/entangle_MeetingAuction.sierra.json \
--account ~/.starkli-wallets/deployer/account.json \
--keystore ~/.starkli-wallets/deployer/keystore.json
# Deploy contract instance
starkli deploy <CLASS_HASH> \
<CONSTRUCTOR_ARGS> \
--account ~/.starkli-wallets/deployer/account.json \
--keystore ~/.starkli-wallets/deployer/keystore.jsonMeeting Auction: 0x05e15d1c407510d2ab83c24c59c06ad473f2d58f069df764a0bdbc9126447331
Pool Manager: 0x049d121db1acfe975c9e374459eff9b34abeb64025ecf2fea05f7574ad9563e7
Token Factory: 0x01f31b4a185088bf5f248b7b8d5d6295906030eab4dc07da6ac27b4ba86c3c8f
tBTC Token: 0x03d3d97305e3d5546a3b80746856a348a14a453296acd7b945f76be8b01cca3b
# Run unit tests
scarb test# Run integration tests
scarb test --integration# Generate coverage report
scarb test --coverage- Reentrancy protection
- Integer overflow/underflow checks
- Access control validation
- Input validation
- Event emission
- Gas optimization
- Use OpenZeppelin Cairo contracts where possible
- Follow Cairo naming conventions
- Add comprehensive tests
- Document all public functions
- Use events for state changes
- Minimize storage reads/writes
- Use
felt252instead ofu256where possible - Batch operations when feasible
- Cache frequently accessed values
- Use view functions for read-only operations
# Clean build artifacts
scarb clean
# Rebuild
scarb build# Run tests with verbose output
scarb test -v
# Run specific test
scarb test test_name -v- Verify account has sufficient ETH for gas
- Check RPC URL is correct
- Ensure account is deployed on network
- Verify constructor arguments are correct
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests
- Run
scarb fmtandscarb test - Submit a pull request
MIT
For issues and questions, please open an issue on GitHub.