Skip to content
This repository was archived by the owner on Jan 16, 2026. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
216 changes: 154 additions & 62 deletions TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -1,67 +1,159 @@
# vApp Submission: [Your Project Name]
## Samba-SocialTicket vApp Proposal

## Verification
```yaml
github_username: "your-username"
discord_id: "123456789012345678"
timestamp: "2025-01-15"
```
## Project Information

## Developer
- **Name**: Your Name
- **GitHub**: @your-username
- **Discord**: username#1234
- **Experience**: Brief background
- **Project Name:** Samba-SocialTicket
- **Category:** social
- **GitHub Username:** pichanesantana-cloud
- **Discord ID:** @r3nato7732
- **Team Size:** 3 (Developer)

## Project

### Name & Category
- **Project**: Your vApp Name
- **Category**: identity/defi/social/gaming/infrastructure/other
## Project Overview

### Description
What problem does your vApp solve? What does it do?

### SL Integration
How will you use Soundness Layer? What specific SL features?

## Technical

### Architecture
High-level system design and approach

### Stack
- **Frontend**: React/Vue/etc
- **Backend**: Rust/Node.js/Python/etc
- **Blockchain**: SL + others
- **Storage**: Database/WALRUS/IPFS/etc

### Features
1. Core feature 1
2. Core feature 2
3. Core feature 3

## Timeline

### PoC (2-4 weeks)
- [ ] Basic functionality
- [ ] SL integration
- [ ] Simple UI

### MVP (4-8 weeks)
- [ ] Full features
- [ ] Production ready
- [ ] User testing

## Innovation
What makes this unique? Why will people use it?

## Contact
Preferred contact method and where you'll share updates.


**Checklist before submitting:**
- [ ] All fields completed
- [ ] GitHub username matches PR author
- [ ] SL integration explained
- [ ] Timeline is realistic
Samba-SocialTicket is a decentralized social ticketing platform that leverages blockchain technology and Soundness Layer's zero-knowledge proof (ZK) verification to create transparent, secure, and community-driven event management. The platform enables users to create, distribute, and manage event tickets while building social reputation through verified attendance and community interactions, all enhanced by Soundness Layer's trustless attestation system.

### Key Features
- **Decentralized Event Creation:** Users can create events with smart contract-backed tickets.
- **Social Verification:** Attendance verification using ZK proofs via Soundness Layer.
- **Reputation System:** Privacy-preserving reputation based on event history, verified by Soundness Layer.
- **NFT Ticketing:** Each ticket is an NFT with unique properties and transferability rules.
- **Community Governance:** Event organizers and attendees participate in dispute resolution.

## Technical Architecture

### Core Components

#### 1. Smart Contracts (Move Language)
```move
// Simplified contract structure with Soundness Layer integration
module samba_tickets::event_manager {
use sui::object::{Self, UID};
use sui::string::{Self, String};
use sui::tx_context::{Self, TxContext};
use sui::transfer;
use sui::event;

// Structs for Events, Tickets, and Reputation
struct Event has key, store {
id: UID,
creator: address,
title: String,
description: String,
max_capacity: u64,
ticket_price: u64,
event_date: u64,
is_active: bool,
walrus_blob_id: String, // Reference to Walrus storage
}

struct Ticket has key, store {
id: UID,
event_id: UID,
owner: address,
attendance_verified: bool,
transfer_count: u8,
zk_proof_hash: String, // ZK proof hash from Soundness Layer
}

struct UserReputation has key {
id: UID,
user: address,
events_attended: u64,
events_created: u64,
reputation_score: u64,
zk_reputation_proof: String, // ZK proof for privacy-preserving reputation
}

// Event for logging
struct EventCreated has copy, drop {
event_id: ID,
creator: address,
}

// Function to create an event with Walrus metadata storage
public entry fun create_event(
title: vector<u8>,
description: vector<u8>,
max_capacity: u64,
ticket_price: u64,
event_date: u64,
walrus_blob_id: vector<u8>, // Metadata stored on Walrus
ctx: &mut TxContext
) {
let event = Event {
id: object::new(ctx),
creator: tx_context::sender(ctx),
title: string::utf8(title),
description: string::utf8(description),
max_capacity,
ticket_price,
event_date,
is_active: true,
walrus_blob_id: string::utf8(walrus_blob_id),
};
event::emit(EventCreated {
event_id: object::uid_to_inner(&event.id),
creator: tx_context::sender(ctx),
});
transfer::share_object(event);
}

// Function to mint a ticket with Soundness Layer proof submission
public entry fun mint_ticket(
event: &mut Event,
ctx: &mut TxContext
) {
assert!(event.is_active, 1); // Ensure event is active
let ticket = Ticket {
id: object::new(ctx),
event_id: object::uid_to_inner(&event.id),
owner: tx_context::sender(ctx),
attendance_verified: false,
transfer_count: 0,
zk_proof_hash: string::utf8(b""), // Placeholder, to be updated with ZK proof
};
// Simulate Soundness Layer proof submission (CLI call would be here)
// Example: soundness-cli submit-proof --blob-id <walrus_blob_id> --event-id <event_id>
transfer::transfer(ticket, tx_context::sender(ctx));
}

// Function to verify attendance with ZK proof
public entry fun verify_attendance(
ticket: &mut Ticket,
zk_proof: vector<u8>, // ZK proof submitted via Soundness Layer
ctx: &mut TxContext
) {
assert!(!ticket.attendance_verified, 2); // Ensure not already verified
// Simulate Soundness Layer verification (CLI call would verify proof)
// Example: soundness-cli verify-proof --proof <zk_proof> --ticket-id <ticket_id>
ticket.attendance_verified = true;
ticket.zk_proof_hash = string::utf8(zk_proof);
// Update reputation (placeholder for ZK calculation)
let reputation = get_or_create_reputation(tx_context::sender(ctx), ctx);
reputation.events_attended = reputation.events_attended + 1;
reputation.reputation_score = reputation.reputation_score + 10; // Example scoring
reputation.zk_reputation_proof = string::utf8(zk_proof); // Privacy-preserving proof
}

// Helper to get or create user reputation
fun get_or_create_reputation(user: address, ctx: &mut TxContext): &mut UserReputation {
// Simplified logic, would need a global store in a real implementation
let reputation = UserReputation {
id: object::new(ctx),
user,
events_attended: 0,
events_created: 0,
reputation_score: 0,
zk_reputation_proof: string::utf8(b""),
};
transfer::share_object(reputation);
// Return reference (simplified)
&mut reputation
}

// Public function to retrieve event data (for Walrus integration)
public fun get_walrus_blob_id(event: &Event): String {
event.walrus_blob_id
}
}
133 changes: 133 additions & 0 deletions submissions/social/# Samba-SocialTicket vApp Proposal.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
// Simplified contract structure with Soundness Layer integration


module samba_tickets::event_manager {
use sui::object::{Self, UID};
use sui::string::{Self, String};
use sui::tx_context::{Self, TxContext};
use sui::transfer;
use sui::event;

// Structs for Events, Tickets, and Reputation
struct Event has key, store {
id: UID,
creator: address,
title: String,
description: String,
max_capacity: u64,
ticket_price: u64,
event_date: u64,
is_active: bool,
walrus_blob_id: String, // Reference to Walrus storage
}

struct Ticket has key, store {
id: UID,
event_id: UID,
owner: address,
attendance_verified: bool,
transfer_count: u8,
zk_proof_hash: String, // ZK proof hash from Soundness Layer
}

struct UserReputation has key {
id: UID,
user: address,
events_attended: u64,
events_created: u64,
reputation_score: u64,
zk_reputation_proof: String, // ZK proof for privacy-preserving reputation
}

// Event for logging
struct EventCreated has copy, drop {
event_id: ID,
creator: address,
}

// Function to create an event with Walrus metadata storage
public entry fun create_event(
title: vector<u8>,
description: vector<u8>,
max_capacity: u64,
ticket_price: u64,
event_date: u64,
walrus_blob_id: vector<u8>, // Metadata stored on Walrus
ctx: &mut TxContext
) {
let event = Event {
id: object::new(ctx),
creator: tx_context::sender(ctx),
title: string::utf8(title),
description: string::utf8(description),
max_capacity,
ticket_price,
event_date,
is_active: true,
walrus_blob_id: string::utf8(walrus_blob_id),
};
event::emit(EventCreated {
event_id: object::uid_to_inner(&event.id),
creator: tx_context::sender(ctx),
});
transfer::share_object(event);
}

// Function to mint a ticket with Soundness Layer proof submission
public entry fun mint_ticket(
event: &mut Event,
ctx: &mut TxContext
) {
assert!(event.is_active, 1); // Ensure event is active
let ticket = Ticket {
id: object::new(ctx),
event_id: object::uid_to_inner(&event.id),
owner: tx_context::sender(ctx),
attendance_verified: false,
transfer_count: 0,
zk_proof_hash: string::utf8(b""), // Placeholder, to be updated with ZK proof
};
// Simulate Soundness Layer proof submission (CLI call would be here)
// Example: soundness-cli submit-proof --blob-id <walrus_blob_id> --event-id <event_id>
transfer::transfer(ticket, tx_context::sender(ctx));
}

// Function to verify attendance with ZK proof
public entry fun verify_attendance(
ticket: &mut Ticket,
zk_proof: vector<u8>, // ZK proof submitted via Soundness Layer
ctx: &mut TxContext
) {
assert!(!ticket.attendance_verified, 2); // Ensure not already verified
// Simulate Soundness Layer verification (CLI call would verify proof)
// Example: soundness-cli verify-proof --proof <zk_proof> --ticket-id <ticket_id>
ticket.attendance_verified = true;
ticket.zk_proof_hash = string::utf8(zk_proof);
// Update reputation (placeholder for ZK calculation)
let reputation = get_or_create_reputation(tx_context::sender(ctx), ctx);
reputation.events_attended = reputation.events_attended + 1;
reputation.reputation_score = reputation.reputation_score + 10; // Example scoring
reputation.zk_reputation_proof = string::utf8(zk_proof); // Privacy-preserving proof
}

// Helper to get or create user reputation
fun get_or_create_reputation(user: address, ctx: &mut TxContext): &mut UserReputation {
// Simplified logic, would need a global store in a real implementation
let reputation = UserReputation {
id: object::new(ctx),
user,
events_attended: 0,
events_created: 0,
reputation_score: 0,
zk_reputation_proof: string::utf8(b""),
};
transfer::share_object(reputation);
// Return reference (simplified)
&mut reputation
}

// Public function to retrieve event data (for Walrus integration)
public fun get_walrus_blob_id(event: &Event): String {
event.walrus_blob_id
}
}