From 3c650ae599ffbbd0909a41de466751f068c6674a Mon Sep 17 00:00:00 2001 From: darwincereska Date: Mon, 15 Dec 2025 21:37:41 -0500 Subject: [PATCH] feat: project setup --- cc/README.md | 0 cc/config/server_config.lua | 0 cc/lib/ccoin.lua | 0 cc/lib/crypto.lua | 0 cc/lib/http_client.lua | 0 cc/programs/balance.lua | 0 cc/programs/miner.lua | 0 cc/programs/send.lua | 0 cc/programs/transactions.lua | 0 cc/programs/wallet.lua | 0 server/.gitignore | 226 ++++++++++++++++++ server/Dockerfile | 67 ++++++ server/README.md | 0 server/build.gradle.kts | 121 ++++++++++ server/docker-compose.yml | 82 +++++++ server/gradle.properties | 24 ++ server/settings.gradle.kts | 0 server/src/main/kotlin/org/ccoin/Server.kt | 5 + .../kotlin/org/ccoin/config/DatabaseConfig.kt | 0 .../kotlin/org/ccoin/config/ServerConfig.kt | 0 .../org/ccoin/database/DatabaseMigrations.kt | 0 .../main/kotlin/org/ccoin/database/Tables.kt | 0 .../org/ccoin/exceptions/CCoinException.kt | 0 .../exceptions/InsufficientFundsException.kt | 0 .../exceptions/InvalidTransactionException.kt | 0 .../exceptions/WalletNotFoundException.kt | 0 .../kotlin/org/ccoin/models/ApiResponse.kt | 0 .../src/main/kotlin/org/ccoin/models/Block.kt | 0 .../kotlin/org/ccoin/models/Transaction.kt | 0 .../main/kotlin/org/ccoin/models/Wallet.kt | 0 .../kotlin/org/ccoin/routes/BlockRoutes.kt | 0 .../kotlin/org/ccoin/routes/HealthRoutes.kt | 0 .../kotlin/org/ccoin/routes/MiningRoutes.kt | 0 .../org/ccoin/routes/TransactionRoutes.kt | 0 .../kotlin/org/ccoin/routes/WalletRoutes.kt | 0 .../kotlin/org/ccoin/services/BlockService.kt | 0 .../org/ccoin/services/MiningService.kt | 0 .../org/ccoin/services/TransactionService.kt | 0 .../org/ccoin/services/ValidationService.kt | 0 .../org/ccoin/services/WalletService.kt | 0 .../kotlin/org/ccoin/utils/CryptoUtils.kt | 0 .../main/kotlin/org/ccoin/utils/Extensions.kt | 0 .../main/kotlin/org/ccoin/utils/HashUtils.kt | 0 server/src/main/resources/application.conf | 0 .../db/migration/V1__Create_wallets_table.sql | 0 .../V2__Create_transactions_table.sql | 0 .../db/migration/V3__Create_blocks_table.sql | 0 .../db/migration/V4__Add_indexes.sql | 0 server/src/main/resources/logback.xml | 0 .../src/test/kotlin/org/ccoin/ServerTest.kt | 0 .../org/ccoin/services/MiningServiceTest.kt | 0 .../ccoin/services/TransactionServiceTest.kt | 0 .../org/ccoin/services/WalletServiceTest.kt | 0 .../kotlin/org/ccoin/utils/CryptoUtilsTest.kt | 0 54 files changed, 525 insertions(+) create mode 100644 cc/README.md create mode 100644 cc/config/server_config.lua create mode 100644 cc/lib/ccoin.lua create mode 100644 cc/lib/crypto.lua create mode 100644 cc/lib/http_client.lua create mode 100644 cc/programs/balance.lua create mode 100644 cc/programs/miner.lua create mode 100644 cc/programs/send.lua create mode 100644 cc/programs/transactions.lua create mode 100644 cc/programs/wallet.lua create mode 100644 server/.gitignore create mode 100644 server/Dockerfile create mode 100644 server/README.md create mode 100644 server/build.gradle.kts create mode 100644 server/docker-compose.yml create mode 100644 server/gradle.properties create mode 100644 server/settings.gradle.kts create mode 100644 server/src/main/kotlin/org/ccoin/Server.kt create mode 100644 server/src/main/kotlin/org/ccoin/config/DatabaseConfig.kt create mode 100644 server/src/main/kotlin/org/ccoin/config/ServerConfig.kt create mode 100644 server/src/main/kotlin/org/ccoin/database/DatabaseMigrations.kt create mode 100644 server/src/main/kotlin/org/ccoin/database/Tables.kt create mode 100644 server/src/main/kotlin/org/ccoin/exceptions/CCoinException.kt create mode 100644 server/src/main/kotlin/org/ccoin/exceptions/InsufficientFundsException.kt create mode 100644 server/src/main/kotlin/org/ccoin/exceptions/InvalidTransactionException.kt create mode 100644 server/src/main/kotlin/org/ccoin/exceptions/WalletNotFoundException.kt create mode 100644 server/src/main/kotlin/org/ccoin/models/ApiResponse.kt create mode 100644 server/src/main/kotlin/org/ccoin/models/Block.kt create mode 100644 server/src/main/kotlin/org/ccoin/models/Transaction.kt create mode 100644 server/src/main/kotlin/org/ccoin/models/Wallet.kt create mode 100644 server/src/main/kotlin/org/ccoin/routes/BlockRoutes.kt create mode 100644 server/src/main/kotlin/org/ccoin/routes/HealthRoutes.kt create mode 100644 server/src/main/kotlin/org/ccoin/routes/MiningRoutes.kt create mode 100644 server/src/main/kotlin/org/ccoin/routes/TransactionRoutes.kt create mode 100644 server/src/main/kotlin/org/ccoin/routes/WalletRoutes.kt create mode 100644 server/src/main/kotlin/org/ccoin/services/BlockService.kt create mode 100644 server/src/main/kotlin/org/ccoin/services/MiningService.kt create mode 100644 server/src/main/kotlin/org/ccoin/services/TransactionService.kt create mode 100644 server/src/main/kotlin/org/ccoin/services/ValidationService.kt create mode 100644 server/src/main/kotlin/org/ccoin/services/WalletService.kt create mode 100644 server/src/main/kotlin/org/ccoin/utils/CryptoUtils.kt create mode 100644 server/src/main/kotlin/org/ccoin/utils/Extensions.kt create mode 100644 server/src/main/kotlin/org/ccoin/utils/HashUtils.kt create mode 100644 server/src/main/resources/application.conf create mode 100644 server/src/main/resources/db/migration/V1__Create_wallets_table.sql create mode 100644 server/src/main/resources/db/migration/V2__Create_transactions_table.sql create mode 100644 server/src/main/resources/db/migration/V3__Create_blocks_table.sql create mode 100644 server/src/main/resources/db/migration/V4__Add_indexes.sql create mode 100644 server/src/main/resources/logback.xml create mode 100644 server/src/test/kotlin/org/ccoin/ServerTest.kt create mode 100644 server/src/test/kotlin/org/ccoin/services/MiningServiceTest.kt create mode 100644 server/src/test/kotlin/org/ccoin/services/TransactionServiceTest.kt create mode 100644 server/src/test/kotlin/org/ccoin/services/WalletServiceTest.kt create mode 100644 server/src/test/kotlin/org/ccoin/utils/CryptoUtilsTest.kt diff --git a/cc/README.md b/cc/README.md new file mode 100644 index 0000000..e69de29 diff --git a/cc/config/server_config.lua b/cc/config/server_config.lua new file mode 100644 index 0000000..e69de29 diff --git a/cc/lib/ccoin.lua b/cc/lib/ccoin.lua new file mode 100644 index 0000000..e69de29 diff --git a/cc/lib/crypto.lua b/cc/lib/crypto.lua new file mode 100644 index 0000000..e69de29 diff --git a/cc/lib/http_client.lua b/cc/lib/http_client.lua new file mode 100644 index 0000000..e69de29 diff --git a/cc/programs/balance.lua b/cc/programs/balance.lua new file mode 100644 index 0000000..e69de29 diff --git a/cc/programs/miner.lua b/cc/programs/miner.lua new file mode 100644 index 0000000..e69de29 diff --git a/cc/programs/send.lua b/cc/programs/send.lua new file mode 100644 index 0000000..e69de29 diff --git a/cc/programs/transactions.lua b/cc/programs/transactions.lua new file mode 100644 index 0000000..e69de29 diff --git a/cc/programs/wallet.lua b/cc/programs/wallet.lua new file mode 100644 index 0000000..e69de29 diff --git a/server/.gitignore b/server/.gitignore new file mode 100644 index 0000000..7d61c09 --- /dev/null +++ b/server/.gitignore @@ -0,0 +1,226 @@ +# Compiled class file +*.class + +# Log files +*.log +logs/ +*.log.* + +# BlueJ files +*.ctxt + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files +*.jar +*.war +*.nar +*.ear +*.zip +*.tar.gz +*.rar + +# Virtual machine crash logs +hs_err_pid* +replay_pid* + +# Gradle +.gradle/ +build/ +!gradle/wrapper/gradle-wrapper.jar +!**/src/main/**/build/ +!**/src/test/**/build/ + +# Gradle Wrapper +!gradle/wrapper/gradle-wrapper.properties + +# IntelliJ IDEA +.idea/ +*.iws +*.iml +*.ipr +out/ +!**/src/main/**/out/ +!**/src/test/**/out/ + +# Eclipse +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache +bin/ +!**/src/main/**/bin/ +!**/src/test/**/bin/ + +# NetBeans +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ + +# VS Code +.vscode/ + +# Mac +.DS_Store + +# Windows +Thumbs.db +ehthumbs.db +Desktop.ini + +# Linux +*~ + +# Temporary files +*.tmp +*.temp +*.swp +*.swo +*~ + +# Database +*.db +*.sqlite +*.sqlite3 + +# Environment variables +.env +.env.local +.env.development +.env.test +.env.production + +# Docker +.dockerignore +docker-compose.override.yml + +# Application specific +application-local.conf +application-dev.conf +application-prod.conf + +# Secrets +secrets/ +*.key +*.pem +*.p12 +*.jks + +# Test results +test-results/ +coverage/ +*.coverage + +# Node modules (if any frontend tools) +node_modules/ +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Python (if any scripts) +__pycache__/ +*.py[cod] +*$py.class +*.so +.Python +env/ +venv/ +ENV/ + +# Backup files +*.bak +*.backup +*.old + +# Cache directories +.cache/ +.tmp/ + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Coverage directory used by tools like istanbul +coverage/ +*.lcov + +# Dependency directories +jspm_packages/ + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# parcel-bundler cache (https://parceljs.org/) +.parcel-cache + +# Next.js build output +.next + +# Nuxt.js build / generate output +.nuxt +dist + +# Storybook build outputs +.out +.storybook-out + +# Temporary folders +tmp/ +temp/ + +# Editor directories and files +.vscode/ +!.vscode/extensions.json +.idea +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +# OS generated files +.DS_Store +.DS_Store? +._* +.Spotlight-V100 +.Trashes +ehthumbs.db +Thumbs.db + +# CCoin specific +wallet_data/ +blockchain_data/ +mining_cache/ +transaction_pool/ + +# ComputerCraft +cc/data/ +cc/logs/ +cc/*.log + diff --git a/server/Dockerfile b/server/Dockerfile new file mode 100644 index 0000000..5cabd14 --- /dev/null +++ b/server/Dockerfile @@ -0,0 +1,67 @@ +# Multi-stage build for Java 24 +FROM openjdk:24-jdk-slim AS builder + +# Install required packages +RUN apt-get update && apt-get install -y \ + curl \ + unzip \ + && rm -rf /var/lib/apt/lists/* + +# Set working directory +WORKDIR /app + +# Copy gradle wrapper and build files +COPY gradle/ gradle/ +COPY gradlew . +COPY gradle.properties . +COPY settings.gradle.kts . +COPY build.gradle.kts . + +# Make gradlew executable +RUN chmod +x gradlew + +# Download dependencies (for better caching) +RUN ./gradlew dependencies --no-daemon + +# Copy source code +COPY src/ src/ + +# Build the application +RUN ./gradlew shadowJar --no-daemon + +# Runtime stage +FROM openjdk:24-jdk-slim + +# Install required runtime packages +RUN apt-get update && apt-get install -y \ + curl \ + && rm -rf /var/lib/apt/lists/* + +# Create app user +RUN groupadd -r ccoin && useradd -r -g ccoin ccoin + +# Set working directory +WORKDIR /app + +# Copy the built JAR from builder stage +COPY --from=builder /app/build/libs/*.jar app.jar + +# Change ownership to app user +RUN chown -R ccoin:ccoin /app + +# Switch to app user +USER ccoin + +# Expose port +EXPOSE 8080 + +# Health check +HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \ + CMD curl -f http://localhost:8080/health || exit 1 + +# JVM options for production +ENV JAVA_OPTS="-Xmx512m -Xms256m -XX:+UseG1GC -XX:+UseStringDeduplication" + +# Run the application +CMD ["sh", "-c", "java $JAVA_OPTS -jar app.jar"] + diff --git a/server/README.md b/server/README.md new file mode 100644 index 0000000..e69de29 diff --git a/server/build.gradle.kts b/server/build.gradle.kts new file mode 100644 index 0000000..fb11642 --- /dev/null +++ b/server/build.gradle.kts @@ -0,0 +1,121 @@ +val ktor_version: String by project +val kotlin_version: String by project +val logback_version: String by project +val exposed_version: String by project +val postgresql_version: String by project +val hikari_version: String by project +val flyway_version: String by project +val bouncycastle_version: String by project + +plugins { + kotlin("jvm") version "2.2.21" + kotlin("plugin.serialization") version "2.2.21" + id("io.ktor.plugin") version "3.3.3" + id("com.gradleup.shadow") version "9.3.0" + id("org.flywaydb.flyway") version "11.19.0" + application +} + +group = "org.ccoin" +version = "1.0.0" + +application { + mainClass.set("org.ccoin.ServerKt") + + val isDevelopment: Boolean = project.ext.has("development") + applicationDefaultJvmArgs = listOf("-Dio.ktor.development=$isDevelopment") +} + +repositories { + mavenCentral() +} + +dependencies { + // Ktor server + implementation("io.ktor:ktor-server-core-jvm:$ktor_version") + implementation("io.ktor:ktor-server-netty-jvm:$ktor_version") + implementation("io.ktor:ktor-server-content-negotiation-jvm:$ktor_version") + implementation("io.ktor:ktor-serialization-kotlinx-json-jvm:$ktor_version") + implementation("io.ktor:ktor-server-cors-jvm:$ktor_version") + implementation("io.ktor:ktor-server-call-logging-jvm:$ktor_version") + implementation("io.ktor:ktor-server-status-pages-jvm:$ktor_version") + implementation("io.ktor:ktor-server-compression-jvm:$ktor_version") + implementation("io.ktor:ktor-server-default-headers-jvm:$ktor_version") + implementation("io.ktor:ktor-server-host-common-jvm:$ktor_version") + implementation("io.ktor:ktor-server-config-yaml:$ktor_version") + + // Database + implementation("org.jetbrains.exposed:exposed-core:$exposed_version") + implementation("org.jetbrains.exposed:exposed-dao:$exposed_version") + implementation("org.jetbrains.exposed:exposed-jdbc:$exposed_version") + implementation("org.jetbrains.exposed:exposed-java-time:$exposed_version") + implementation("org.postgresql:postgresql:$postgresql_version") + implementation("com.zaxxer:HikariCP:$hikari_version") + implementation("org.flywaydb:flyway-core:$flyway_version") + implementation("org.flywaydb:flyway-database-postgresql:$flyway_version") + + // Logging + implementation("ch.qos.logback:logback-classic:$logback_version") + implementation("io.github.oshai:kotlin-logging-jvm:7.0.0") + + // Crypto utilities + implementation("org.bouncycastle:bcprov-jdk18on:$bouncycastle_version") + implementation("org.bouncycastle:bcpkix-jdk18on:$bouncycastle_version") + + // JSON + implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3") + implementation("org.jetbrains.kotlinx:kotlinx-datetime:0.6.1") + + // Coroutines + implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0") + + // Testing + testImplementation("io.ktor:ktor-server-test-host-jvm:$ktor_version") + testImplementation("org.jetbrains.kotlin:kotlin-test-junit:$kotlin_version") + testImplementation("io.mockk:mockk:1.13.13") + testImplementation("org.junit.jupiter:junit-jupiter:5.11.3") + testImplementation("org.testcontainers:testcontainers:1.20.3") + testImplementation("org.testcontainers:postgresql:1.20.3") + testImplementation("org.testcontainers:junit-jupiter:1.20.3") +} + +tasks.withType { + useJUnitPlatform() +} + +// Fat JAR configuration for Docker +tasks.jar { + enabled = false +} + +tasks.shadowJar { + archiveClassifier.set("") + manifest { + attributes["Main-Class"] = "org.ccoin.ServerKt" + } + // mergeServiceFile() +} + +// Flyway configuration +flyway { + url = "jbdc:postgresql://localhost:5432/ccoin" + user = "ccoin" + password = "ccoin" + locations = arrayOf("classpath:db/migration") + baselineOnMigrate = true + validateOnMigrate = true +} + +// Docker build task +tasks.register("buildDocker") { + dependsOn("shadowJar") + commandLine("docker", "build", "-t", "ccoin-server:latest", ".") +} + +// Development task +tasks.register("dev") { + dependsOn("run") + doFirst { + project.ext.set("development", true) + } +} diff --git a/server/docker-compose.yml b/server/docker-compose.yml new file mode 100644 index 0000000..f422da3 --- /dev/null +++ b/server/docker-compose.yml @@ -0,0 +1,82 @@ +services: + # Postgres Database + postgres: + image: postgres:17-alpine + container_name: ccoin-postgres + restart: unless-stopped + environment: + POSTGRES_DB: ccoin + POSTGRES_USER: ccoin + POSTGRES_PASSWORD: ccoin + POSTGRES_INITDB_ARGS: "--encoding=UTF-8 --lc-collate=C --lc-ctype=C" + ports: + - "5432:5432" + volumes: + - postgres_data:/var/lib/postgresql/data + - ./docker/postgres/init:/docker-entrypoint-initdb.d + networks: + - ccoin-network + healthcheck: + test: ["CMD-SHELL", "pg_isready -U ccoin -d ccoin"] + interval: 10s + timeout: 5s + retries: 5 + start_period: 30s + + # CCoin server + ccoin-server: + build: + context: . + dockerfile: Dockerfile + container_name: ccoin-server + restart: unless-stopped + ports: + - "8080:8080" + depends_on: + postgres: + condition: service_healthy + environment: + # Database configuration + DATABASE_URL: jdbc:postgresql://postgres:5432/ccoin + DATABASE_USER: ccoin + DATABASE_PASSWORD: ccoin + DATABASE_POOL_SIZE: 20 + + # Server configuration + SERVER_HOST: 0.0.0.0 + SERVER_PORT: 8080 + + # Mining configuration + MINING_DIFFICULTY: 4 + MINING_REWARD: 50.0 + BLOCK_TIME_TARGET: 600000 + + # Security + JWT_SECRET: your-super-secret-jwt-key-change-this-in-production + + # Logging + LOG_LEVEL: INFO + + # Development + DEVELOPMENT_MODE: false + volumes: + - ./logs:/app/logs + networks: + - ccoin-network + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:8080/health"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 60s + +volumes: + postgres_data: + driver: local + +networks: + ccoin-network: + driver: bridge + ipam: + config: + - subnet: 172.20.0.0/16 diff --git a/server/gradle.properties b/server/gradle.properties new file mode 100644 index 0000000..ff0ed32 --- /dev/null +++ b/server/gradle.properties @@ -0,0 +1,24 @@ +# Ktor +ktor_version=3.3.3 +kotlin_version=2.2.21 + +# Database +exposed_version=0.56.0 +postgresql_version=42.7.4 +hikari_version=6.0.0 +flyway_version=11.19.0 + +# Crypto +bouncycastle_version=1.78.1 + +# Logging +logback_version=1.5.12 + +# Gradle +kotlin.code.style=official +org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 +org.gradle.caching=true +org.gradle.parallel=true + +# Application +ccoin.version=1.0.0 diff --git a/server/settings.gradle.kts b/server/settings.gradle.kts new file mode 100644 index 0000000..e69de29 diff --git a/server/src/main/kotlin/org/ccoin/Server.kt b/server/src/main/kotlin/org/ccoin/Server.kt new file mode 100644 index 0000000..d10a9f6 --- /dev/null +++ b/server/src/main/kotlin/org/ccoin/Server.kt @@ -0,0 +1,5 @@ +package org.ccoin + +fun main() { + println("CCoin Server Started") +} diff --git a/server/src/main/kotlin/org/ccoin/config/DatabaseConfig.kt b/server/src/main/kotlin/org/ccoin/config/DatabaseConfig.kt new file mode 100644 index 0000000..e69de29 diff --git a/server/src/main/kotlin/org/ccoin/config/ServerConfig.kt b/server/src/main/kotlin/org/ccoin/config/ServerConfig.kt new file mode 100644 index 0000000..e69de29 diff --git a/server/src/main/kotlin/org/ccoin/database/DatabaseMigrations.kt b/server/src/main/kotlin/org/ccoin/database/DatabaseMigrations.kt new file mode 100644 index 0000000..e69de29 diff --git a/server/src/main/kotlin/org/ccoin/database/Tables.kt b/server/src/main/kotlin/org/ccoin/database/Tables.kt new file mode 100644 index 0000000..e69de29 diff --git a/server/src/main/kotlin/org/ccoin/exceptions/CCoinException.kt b/server/src/main/kotlin/org/ccoin/exceptions/CCoinException.kt new file mode 100644 index 0000000..e69de29 diff --git a/server/src/main/kotlin/org/ccoin/exceptions/InsufficientFundsException.kt b/server/src/main/kotlin/org/ccoin/exceptions/InsufficientFundsException.kt new file mode 100644 index 0000000..e69de29 diff --git a/server/src/main/kotlin/org/ccoin/exceptions/InvalidTransactionException.kt b/server/src/main/kotlin/org/ccoin/exceptions/InvalidTransactionException.kt new file mode 100644 index 0000000..e69de29 diff --git a/server/src/main/kotlin/org/ccoin/exceptions/WalletNotFoundException.kt b/server/src/main/kotlin/org/ccoin/exceptions/WalletNotFoundException.kt new file mode 100644 index 0000000..e69de29 diff --git a/server/src/main/kotlin/org/ccoin/models/ApiResponse.kt b/server/src/main/kotlin/org/ccoin/models/ApiResponse.kt new file mode 100644 index 0000000..e69de29 diff --git a/server/src/main/kotlin/org/ccoin/models/Block.kt b/server/src/main/kotlin/org/ccoin/models/Block.kt new file mode 100644 index 0000000..e69de29 diff --git a/server/src/main/kotlin/org/ccoin/models/Transaction.kt b/server/src/main/kotlin/org/ccoin/models/Transaction.kt new file mode 100644 index 0000000..e69de29 diff --git a/server/src/main/kotlin/org/ccoin/models/Wallet.kt b/server/src/main/kotlin/org/ccoin/models/Wallet.kt new file mode 100644 index 0000000..e69de29 diff --git a/server/src/main/kotlin/org/ccoin/routes/BlockRoutes.kt b/server/src/main/kotlin/org/ccoin/routes/BlockRoutes.kt new file mode 100644 index 0000000..e69de29 diff --git a/server/src/main/kotlin/org/ccoin/routes/HealthRoutes.kt b/server/src/main/kotlin/org/ccoin/routes/HealthRoutes.kt new file mode 100644 index 0000000..e69de29 diff --git a/server/src/main/kotlin/org/ccoin/routes/MiningRoutes.kt b/server/src/main/kotlin/org/ccoin/routes/MiningRoutes.kt new file mode 100644 index 0000000..e69de29 diff --git a/server/src/main/kotlin/org/ccoin/routes/TransactionRoutes.kt b/server/src/main/kotlin/org/ccoin/routes/TransactionRoutes.kt new file mode 100644 index 0000000..e69de29 diff --git a/server/src/main/kotlin/org/ccoin/routes/WalletRoutes.kt b/server/src/main/kotlin/org/ccoin/routes/WalletRoutes.kt new file mode 100644 index 0000000..e69de29 diff --git a/server/src/main/kotlin/org/ccoin/services/BlockService.kt b/server/src/main/kotlin/org/ccoin/services/BlockService.kt new file mode 100644 index 0000000..e69de29 diff --git a/server/src/main/kotlin/org/ccoin/services/MiningService.kt b/server/src/main/kotlin/org/ccoin/services/MiningService.kt new file mode 100644 index 0000000..e69de29 diff --git a/server/src/main/kotlin/org/ccoin/services/TransactionService.kt b/server/src/main/kotlin/org/ccoin/services/TransactionService.kt new file mode 100644 index 0000000..e69de29 diff --git a/server/src/main/kotlin/org/ccoin/services/ValidationService.kt b/server/src/main/kotlin/org/ccoin/services/ValidationService.kt new file mode 100644 index 0000000..e69de29 diff --git a/server/src/main/kotlin/org/ccoin/services/WalletService.kt b/server/src/main/kotlin/org/ccoin/services/WalletService.kt new file mode 100644 index 0000000..e69de29 diff --git a/server/src/main/kotlin/org/ccoin/utils/CryptoUtils.kt b/server/src/main/kotlin/org/ccoin/utils/CryptoUtils.kt new file mode 100644 index 0000000..e69de29 diff --git a/server/src/main/kotlin/org/ccoin/utils/Extensions.kt b/server/src/main/kotlin/org/ccoin/utils/Extensions.kt new file mode 100644 index 0000000..e69de29 diff --git a/server/src/main/kotlin/org/ccoin/utils/HashUtils.kt b/server/src/main/kotlin/org/ccoin/utils/HashUtils.kt new file mode 100644 index 0000000..e69de29 diff --git a/server/src/main/resources/application.conf b/server/src/main/resources/application.conf new file mode 100644 index 0000000..e69de29 diff --git a/server/src/main/resources/db/migration/V1__Create_wallets_table.sql b/server/src/main/resources/db/migration/V1__Create_wallets_table.sql new file mode 100644 index 0000000..e69de29 diff --git a/server/src/main/resources/db/migration/V2__Create_transactions_table.sql b/server/src/main/resources/db/migration/V2__Create_transactions_table.sql new file mode 100644 index 0000000..e69de29 diff --git a/server/src/main/resources/db/migration/V3__Create_blocks_table.sql b/server/src/main/resources/db/migration/V3__Create_blocks_table.sql new file mode 100644 index 0000000..e69de29 diff --git a/server/src/main/resources/db/migration/V4__Add_indexes.sql b/server/src/main/resources/db/migration/V4__Add_indexes.sql new file mode 100644 index 0000000..e69de29 diff --git a/server/src/main/resources/logback.xml b/server/src/main/resources/logback.xml new file mode 100644 index 0000000..e69de29 diff --git a/server/src/test/kotlin/org/ccoin/ServerTest.kt b/server/src/test/kotlin/org/ccoin/ServerTest.kt new file mode 100644 index 0000000..e69de29 diff --git a/server/src/test/kotlin/org/ccoin/services/MiningServiceTest.kt b/server/src/test/kotlin/org/ccoin/services/MiningServiceTest.kt new file mode 100644 index 0000000..e69de29 diff --git a/server/src/test/kotlin/org/ccoin/services/TransactionServiceTest.kt b/server/src/test/kotlin/org/ccoin/services/TransactionServiceTest.kt new file mode 100644 index 0000000..e69de29 diff --git a/server/src/test/kotlin/org/ccoin/services/WalletServiceTest.kt b/server/src/test/kotlin/org/ccoin/services/WalletServiceTest.kt new file mode 100644 index 0000000..e69de29 diff --git a/server/src/test/kotlin/org/ccoin/utils/CryptoUtilsTest.kt b/server/src/test/kotlin/org/ccoin/utils/CryptoUtilsTest.kt new file mode 100644 index 0000000..e69de29