EACO Solana DApp 开发指南

为志愿开发者打造的完整 Java/Kotlin 网页app应用,实现 Solana 区块链上的eaco/usdt/usdc/sol等数字资产兑换与治理功能

资产兑换

通过 Jupiter API 实现 EACO ↔ USDC ↔ SOL 实时兑换功能,支持市场最优价格

钱包集成

支持 Phantom/Solflare 等主流 Solana 钱包连接与交易签名,确保资产安全

价格图表

实时展示数字资产价格走势,提供直观的数据可视化体验

身份绑定

实现语义标签与钱包地址的绑定功能,建立数字身份系统

治理面板

提供提案创建与投票功能,实现社区治理的去中心化决策

开源架构

采用模块化设计,代码开源可扩展,便于开发者参与贡献

技术栈选型

精心选择的技术组合,确保系统性能、安全性和开发效率的平衡

后端技术

  • Kotlin + Ktor - 轻量级异步框架,适合构建高效API
  • Java + Spring Boot - 企业级开发框架,生态丰富
  • Coroutines - Kotlin异步编程支持
  • Exposed - Kotlin SQL框架

区块链交互

  • Solana RPC - 与Solana区块链交互
  • Jupiter REST API - 去中心化交易所API
  • Solana Web3.js - 区块链交互工具库
  • BS58 - 地址编码解码工具

前端技术

  • HTML + JavaScript - 基础网页技术
  • Chart.js - 数据可视化库
  • Solana Wallet Adapter - 钱包连接工具
  • Tailwind CSS - 样式框架

项目结构

Kotlin + Ktor 示例项目的目录结构,清晰的模块划分便于团队协作开发

eaco-dapp-kotlin/
├── src/
│   ├── main/
│   │   ├── kotlin/
│   │   │   ├── App.kt                 # 应用入口点
│   │   │   ├── JupiterController.kt   # 处理兑换逻辑
│   │   │   ├── IdentityController.kt  # 身份绑定功能
│   │   │   └── GovernanceController.kt # 治理提案功能
│   │   ├── resources/
│   │   │   ├── static/
│   │   │   │   └── wallet.js          # 钱包交互脚本
│   │   │   └── templates/
│   │   │       └── index.html         # 前端页面
│   ├── test/
│   │   └── kotlin/                    # 单元测试代码
├── build.gradle.kts                   # 项目构建配置
└── README.md                          # 项目说明文档

核心代码示例

展示项目中关键功能模块的实现代码,帮助开发者快速理解核心逻辑

JupiterController.kt

import io.ktor.client.*
import io.ktor.client.engine.cio.*
import io.ktor.client.request.*
import io.ktor.client.statement.*
import io.ktor.http.*
import io.ktor.util.*
import kotlinx.serialization.json.*

class JupiterController {
    // 创建HTTP客户端
    private val client = HttpClient(CIO)
    
    /**
     * 获取代币兑换报价
     * @param inputMint 输入代币的Mint地址
     * @param outputMint 输出代币的Mint地址
     * @param amount 兑换数量(最小单位)
     * @return 包含兑换路径和价格的JSON对象
     */
    suspend fun getQuote(
        inputMint: String, 
        outputMint: String, 
        amount: Long
    ): JsonObject {
        val url = "https://quote-api.jup.ag/v6/quote"
        
        // 调用Jupiter API获取报价
        val response = client.get(url) {
            parameter("inputMint", inputMint)
            parameter("outputMint", outputMint)
            parameter("amount", amount)
            parameter("slippageBps", 50) // 0.5%滑点 tolerance
        }
        
        return Json.parseToJsonElement(response.bodyAsText()).jsonObject
    }
    
    /**
     * 构建兑换交易
     * @param route 从报价获取的兑换路径
     * @param userPubkey 用户钱包地址
     * @return 包含交易信息的JSON对象
     */
    suspend fun buildSwap(route: JsonObject, userPubkey: String): JsonObject {
        val payload = buildJsonObject {
            put("route", route)
            put("userPublicKey", userPubkey)
            put("wrapUnwrapSOL", true) // 自动处理SOL与WSOL的转换
        }
        
        // 调用Jupiter API构建交易
        val response = client.post("https://quote-api.jup.ag/v6/swap") {
            contentType(ContentType.Application.Json)
            setBody(payload)
        }
        
        return Json.parseToJsonElement(response.bodyAsText()).jsonObject
    }
    
    /**
     * 关闭HTTP客户端
     */
    fun close() {
        client.close()
    }
}

代码说明

JupiterController 负责与 Jupiter API 交互,实现代币兑换功能。它包含两个主要方法:getQuote() 用于获取兑换报价,buildSwap() 用于构建实际的兑换交易。代码使用 Ktor HTTP 客户端进行网络请求,并处理 JSON 数据解析。

快速启动指南

按照以下步骤在本地环境中运行EACO DApp项目

1 克隆项目代码

git clone https://github.com/eacocc/EACO-SDK/EACO-SDK.git

2 进入项目目录

cd EACO-SDK

3 启动应用

./gradlew run

Windows系统使用: gradlew.bat run

4 访问应用

http://localhost:8080

开发提示

  • 确保已安装Java 11或更高版本
  • 开发环境建议使用IntelliJ IDEA或Android Studio
  • 测试网环境下使用,请安装Phantom钱包并切换到Devnet
  • 如需修改端口,可在application.conf中配置

加入开发

EACO DApp是一个开源项目,欢迎所有志愿开发者参与贡献

代码贡献

提交bug修复、功能改进或新特性实现,帮助我们完善DApp功能

  • 遵循项目代码风格和规范
  • 提交清晰的commit信息
  • 为新功能编写单元测试

文档完善

帮助改进项目文档,包括API文档、使用教程和开发指南

  • 编写清晰易懂的使用教程
  • 完善API文档和参数说明
  • 翻译文档到不同语言

测试反馈

测试DApp功能,报告bug并提供改进建议

  • 在不同环境中测试功能
  • 详细报告发现的问题和复现步骤
  • 提供用户体验改进建议

社区参与

参与社区讨论,帮助其他用户,共同推动项目发展

  • 回答社区问题,帮助新用户
  • 参与功能规划和方向讨论
  • 分享使用经验和案例