Your First Transaction
Complete walkthrough of building, signing, and submitting a simple payment transaction on Cardano using Evolution SDK.
Your First Transaction
Building a Cardano transaction involves three clear stages: construction (specifying outputs and constraints), signing (cryptographically authorizing with your wallet), and submission (broadcasting to the network). Evolution SDK makes this workflow type-safe—each stage returns a builder that only exposes valid operations for that phase.
This guide walks through a complete payment transaction from client setup to on-chain confirmation. You'll learn the fundamental pattern that applies to all Evolution SDK transactions, regardless of complexity.
Complete Example
Here's a full transaction workflow—configure once, then build, sign, and submit:
import { , , , } from "@evolution-sdk/evolution"
// 1. Configure your client
const = .()
.({
: "https://cardano-preprod.blockfrost.io/api/v0",
: ..!
})
.({
: ..!,
: 0
})
// 2. Build transaction
const = await
.()
.({
: .("addr_test1vrm9x2dgvdau8vckj4duc89m638t8djmluqw5pdrFollw8qd9k63"),
: .(2_000_000n)
})
.()
// 3. Sign with your wallet
const = await .()
// 4. Submit to network
const = await .()
.("Transaction submitted:", )Breaking It Down
Stage 1: Client Configuration
Set up your connection to the network. This happens once—you'll reuse the client throughout your application:
import { , , , } from "@evolution-sdk/evolution"
const = .()
.({
: "https://cardano-preprod.blockfrost.io/api/v0",
: ..!
})
.({
: ..!,
: 0
})Stage 2: Building the Transaction
Chain operations to specify what the transaction should do. Call .build() when ready to finalize:
import { , , , } from "@evolution-sdk/evolution"
const = .()
.({ : "", : "" })
.({ : "", : 0 })
const = await
.()
.({
: .("addr_test1vrm9x2dgvdau8vckj4duc89m638t8djmluqw5pdrFollw8qd9k63"),
: .(2_000_000n)
})
.()The builder handles UTxO selection, fee calculation, and change outputs automatically.
Stage 3: Signing
Authorize the transaction with your wallet's private keys:
import { , , , } from "@evolution-sdk/evolution"
const = .()
.({ : "", : "" })
.({ : "", : 0 })
const = await
.()
.({
: .("addr_test1vrm9x2dgvdau8vckj4duc89m638t8djmluqw5pdrFollw8qd9k63"),
: .(2_000_000n)
})
.()
const = await .()Stage 4: Submission
Broadcast the signed transaction to the blockchain and get the transaction hash:
import { , , , } from "@evolution-sdk/evolution"
const = .()
.({ : "", : "" })
.({ : "", : 0 })
const = await
.()
.({
: .("addr_test1vrm9x2dgvdau8vckj4duc89m638t8djmluqw5pdrFollw8qd9k63"),
: .(2_000_000n)
})
.()
const = await .()
const = await .()
.("Transaction hash:", )What Happens Under the Hood
Evolution SDK handles several complex operations automatically:
- UTxO Selection: Chooses inputs from your wallet that cover the payment amount plus fees
- Fee Calculation: Computes minimum required fees based on transaction size and protocol parameters
- Change Output: Creates a change output sending excess value back to your wallet
- Balance Checking: Validates you have sufficient funds before building
- Witness Creation: Generates cryptographic signatures during signing
You focus on what to send—Evolution SDK handles how to send it correctly.
Next Steps
- Simple Payment - Common payment patterns and examples
- Multi-Output - Send to multiple addresses in one transaction
- Wallets - Different wallet types and configuration
- Querying - Check transaction status and balances