Official Go SDK for DeltaDeFi, a decentralized finance protocol built on Cardano. This SDK provides a simple and intuitive interface to interact with the DeltaDeFi API for trading, account management, and market data operations.
- β Trading Operations - Place, cancel, and manage orders
- β Account Management - Deposits, withdrawals, balance queries
- β Market Data - Real-time prices and historical data
- β Wallet Integration - Secure transaction signing with Cardano wallets
- β Multiple Networks - Support for mainnet, staging, and development environments
- β Type Safety - Full Go type definitions for all API endpoints
go get github.com/deltadefi-protocol/go-sdk- Go 1.21 or higher
- Valid DeltaDeFi API key
- Operation passcode for transaction signing
package main
import (
"fmt"
"log"
deltadefi "github.com/deltadefi-protocol/go-sdk"
)
func main() {
// Initialize the client
config := deltadefi.ApiConfig{
Network: deltadefi.ApiNetworkStaging, // or ApiNetworkMainnet
ApiKey: "your-api-key-here",
OperationPasscode: "your-operation-passcode",
}
client := deltadefi.NewDeltaDeFi(config)
// Load operation key for transaction signing
err := client.LoadOperationKey(config.OperationPasscode)
if err != nil {
log.Fatal("Failed to load operation key:", err)
}
// Get account balance
balance, err := client.Accounts.GetAccountBalance()
if err != nil {
log.Fatal("Failed to get balance:", err)
}
fmt.Printf("Account Balance: %+v\n", balance)
}Create a .env file based on .env.example:
# Network configuration
NETWORK=staging # or "mainnet" for production
# API credentials (optional for testing)
MAESTRO_API_KEY=your-maestro-api-key
BLOCKFROST_PROJECT_ID=your-blockfrost-project-idCreates a new DeltaDeFi client instance.
Parameters:
config: Configuration object containing network, API key, and operation passcode
Supported Networks:
ApiNetworkDev: Development environmentApiNetworkStaging: Staging environmentApiNetworkMainnet: Production environment
Loads the encrypted operation key required for transaction signing.
Parameters:
passcode: Your operation passcode
Returns: Error if key loading fails
balance, err := client.Accounts.GetAccountBalance()Response: []AssetBalance - Array of asset balances with free and locked amounts
operationKey, err := client.Accounts.GetOperationKey()Response: GetOperationKeyResponse - Encrypted operation key and hash
apiKey, err := client.Accounts.CreateNewAPIKey()Response: CreateNewAPIKeyResponse - New API key string
deposits, err := client.Accounts.GetDepositRecords()Response: []DepositRecord - Array of deposit transaction records
withdrawals, err := client.Accounts.GetWithdrawalRecords()Response: []WithdrawalRecord - Array of withdrawal transaction records
request := &deltadefi.GetOrderRecordRequest{
Status: deltadefi.OrderRecordStatusOpenOrder, // or OrderRecordStatusOrderHistory, OrderRecordStatusTradingHistory
Limit: 10, // Optional: 1-250, default 10
Page: 1, // Optional: 1-1000, default 1
Symbol: deltadefi.ADAUSDM, // Optional: filter by trading pair
}
orders, err := client.Accounts.GetOrderRecords(request)Response: GetOrderRecordsResponse - Paginated order records with total count
order, err := client.Accounts.GetOrderRecord("order-id-here")Response: GetOrderRecordResponse - Single order details
// Build deposit transaction
buildRequest := &deltadefi.BuildDepositTransactionRequest{
DepositAmount: []rum.Asset{{Asset: "lovelace", Qty: 100.0}},
InputUtxos: utxos, // Your input UTXOs
}
buildResponse, err := client.Accounts.BuildDepositTransaction(buildRequest)
if err != nil {
log.Fatal(err)
}
// Sign and submit
signedTx, err := client.OperationWallet.Signer().SignTransaction(buildResponse.TxHex)
if err != nil {
log.Fatal(err)
}
submitRequest := &deltadefi.SubmitDepositTransactionRequest{
SignedTx: signedTx,
}
result, err := client.Accounts.SubmitDepositTransaction(submitRequest)// Build withdrawal transaction
buildRequest := &deltadefi.BuildWithdrawalTransactionRequest{
WithdrawalAmount: []rum.Asset{{Asset: "lovelace", Qty: 50.0}},
}
buildResponse, err := client.Accounts.BuildWithdrawalTransaction(buildRequest)
// Sign and submit similar to deposit// Build transfer transaction
buildRequest := &deltadefi.BuildTransferalTransactionRequest{
TransferalAmount: []rum.Asset{{Asset: "lovelace", Qty: 25.0}},
ToAddress: "addr1...", // Destination address
}
buildResponse, err := client.Accounts.BuildTransferalTransaction(buildRequest)
// Sign and submit similar to depositprice, err := client.Market.GetMarketPrice("ADAUSDM")Response: GetMarketPriceResponse - Current market price
request := &deltadefi.GetAggregatedPriceRequest{
Symbol: deltadefi.ADAUSDM,
Interval: deltadefi.Interval1h, // 5m, 15m, 30m, 1h, 1d
Start: 1640995200, // Unix timestamp
End: 1641081600, // Unix timestamp
}
candlesticks, err := client.Market.GetAggregatedPrice(request)Response: []Candlestick - Array of OHLCV data points
// Market order
orderRequest := &deltadefi.BuildPlaceOrderTransactionRequest{
Symbol: deltadefi.ADAUSDM,
Side: deltadefi.OrderSideBuy,
Type: deltadefi.OrderTypeMarket,
Quantity: 100.0,
}
result, err := client.PostOrder(orderRequest)// Build order transaction
buildRequest := &deltadefi.BuildPlaceOrderTransactionRequest{
Symbol: deltadefi.ADAUSDM,
Side: deltadefi.OrderSideBuy,
Type: deltadefi.OrderTypeLimit,
Quantity: 100.0,
Price: deltadefi.FloatPtr(1.25), // Required for limit orders
LimitSlippage: deltadefi.BoolPtr(true), // Optional
MaxSlippageBasisPoint: deltadefi.IntPtr(50), // Optional: 0.5%
}
buildResponse, err := client.Order.BuildPlaceOrderTransaction(buildRequest)
if err != nil {
log.Fatal(err)
}
// Sign transaction
signedTx, err := client.OperationWallet.Signer().SignTransaction(buildResponse.TxHex)
if err != nil {
log.Fatal(err)
}
// Submit order
submitRequest := &deltadefi.SubmitPlaceOrderTransactionRequest{
OrderID: buildResponse.OrderID,
SignedTx: signedTx,
}
result, err := client.Order.SubmitPlaceOrderTransactionRequest(submitRequest)// High-level cancel
result, err := client.CancelOrder("order-id-here")
// Or low-level cancel
buildResponse, err := client.Order.BuildCancelOrderTransaction("order-id-here")
// Sign and submit similar to place order// Order sides
deltadefi.OrderSideBuy
deltadefi.OrderSideSell
// Order types
deltadefi.OrderTypeMarket
deltadefi.OrderTypeLimit
// Order status
deltadefi.OrderStatusOpen
deltadefi.OrderStatusClosed
deltadefi.OrderStatusCancelled
deltadefi.OrderStatusFailed
// Order record status filters
deltadefi.OrderRecordStatusOpenOrder // Active orders
deltadefi.OrderRecordStatusOrderHistory // Historical orders
deltadefi.OrderRecordStatusTradingHistory // Trade executionsdeltadefi.ADAUSDM // ADA/USDM pairdeltadefi.Interval5m // 5 minutes
deltadefi.Interval15m // 15 minutes
deltadefi.Interval30m // 30 minutes
deltadefi.Interval1h // 1 hour
deltadefi.Interval1d // 1 dayThe SDK returns standard Go errors. Always check for errors in production code:
balance, err := client.Accounts.GetAccountBalance()
if err != nil {
// Handle error appropriately
log.Printf("API error: %v", err)
return
}
// Process successful response
for _, asset := range *balance {
fmt.Printf("Asset: %s, Free: %.2f, Locked: %.2f\n",
asset.Asset, asset.Free, asset.Locked)
}The SDK provides helper functions for creating optional pointer values:
// For optional float64 fields
price := deltadefi.FloatPtr(1.25)
// For optional bool fields
limitSlippage := deltadefi.BoolPtr(true)
// For optional int fields
maxSlippage := deltadefi.IntPtr(50)- API Key Management: Never commit API keys to version control
- Environment Variables: Use environment variables or secure vaults for credentials
- Network Selection: Use appropriate network (staging for testing, mainnet for production)
- Error Handling: Always handle errors and validate responses
- Passcode Security: Store operation passcodes securely and never log them
See the sdks-demo/go for complete working examples
- github.com/sidan-lab/rum - Cardano wallet and transaction utilities
This project is licensed under the Apache2.0 License - see the LICENSE file for details.
- π§ Email: [email protected]
- π Documentation: docs.deltadefi.io
- π Issues: GitHub Issues
- Telegram community: Telegram Community
- Discord community: Dicord Community