Solana · Arazzo Workflow

Solana Request a Devnet Airdrop and Confirm Funding

Version 1.0.0

Check node health, record a balance, request an airdrop, confirm it, and verify the balance moved.

1 workflow 1 source API 1 provider
View Spec View on GitHub BlockchainCryptocurrencyWeb3DeFiTransactionsTokensArazzoWorkflows

Provider

solana

Workflows

devnet-airdrop
Fund a Devnet or Testnet address with SOL and verify the balance change.
Guards on node health, then airdrops lamports to an address and confirms the resulting balance increase.
5 steps inputs: address, lamports outputs: confirmationStatus, lamportsAfter, lamportsBefore, signature
1
checkHealth
getHealth
Confirm the RPC node is caught up with the cluster before spending an airdrop request against a node that would reject or stall it.
2
balanceBefore
getBalance
Record the lamport balance before the airdrop so the increase can be verified afterwards.
3
requestAirdrop
requestAirdrop
Ask the Devnet or Testnet faucet to credit the address with the requested lamports. Returns the airdrop transaction signature.
4
confirmAirdrop
getSignatureStatuses
Poll the airdrop signature until the cluster confirms it, retrying while the transaction works its way through the slots.
5
balanceAfter
getBalance
Re-read the balance to prove the airdropped lamports actually landed in the account.

Source API Descriptions

Arazzo Workflow Specification

Raw ↑
arazzo: 1.0.1
info:
  title: Solana Request a Devnet Airdrop and Confirm Funding
  summary: Check node health, record a balance, request an airdrop, confirm it, and verify the balance moved.
  description: >-
    The standard way to fund a development wallet. The workflow confirms the RPC
    node is healthy, records the starting lamport balance, requests an airdrop,
    polls the airdrop signature until it is confirmed, and re-reads the balance
    so the caller can prove the funds actually landed rather than trusting the
    signature alone. requestAirdrop is only served by the Devnet and Testnet
    clusters, so this flow must be run against a non-Mainnet server. Every step
    spells out its JSON-RPC request inline so the flow can be read and executed
    without opening the underlying OpenAPI description.
  version: 1.0.0
sourceDescriptions:
- name: solanaRpcApi
  url: ../openapi/solana-rpc-api-openapi.yml
  type: openapi
workflows:
- workflowId: devnet-airdrop
  summary: Fund a Devnet or Testnet address with SOL and verify the balance change.
  description: >-
    Guards on node health, then airdrops lamports to an address and confirms the
    resulting balance increase.
  inputs:
    type: object
    required:
    - address
    properties:
      address:
        type: string
        description: Base58-encoded public key to fund.
      lamports:
        type: integer
        description: Lamports to airdrop (1 SOL = 1,000,000,000 lamports).
        default: 1000000000
  steps:
  - stepId: checkHealth
    description: >-
      Confirm the RPC node is caught up with the cluster before spending an
      airdrop request against a node that would reject or stall it.
    operationId: getHealth
    requestBody:
      contentType: application/json
      payload:
        jsonrpc: "2.0"
        id: 1
        method: getHealth
        params: []
    successCriteria:
    - condition: $statusCode == 200
    - context: $response.body
      condition: $.result == 'ok'
      type: jsonpath
    outputs:
      health: $response.body#/result
  - stepId: balanceBefore
    description: >-
      Record the lamport balance before the airdrop so the increase can be
      verified afterwards.
    operationId: getBalance
    requestBody:
      contentType: application/json
      payload:
        jsonrpc: "2.0"
        id: 1
        method: getBalance
        params:
        - $inputs.address
    successCriteria:
    - condition: $statusCode == 200
    outputs:
      lamportsBefore: $response.body#/result/value
  - stepId: requestAirdrop
    description: >-
      Ask the Devnet or Testnet faucet to credit the address with the requested
      lamports. Returns the airdrop transaction signature.
    operationId: requestAirdrop
    requestBody:
      contentType: application/json
      payload:
        jsonrpc: "2.0"
        id: 1
        method: requestAirdrop
        params:
        - $inputs.address
        - $inputs.lamports
    successCriteria:
    - condition: $statusCode == 200
    - context: $response.body
      condition: $.result
      type: jsonpath
    outputs:
      signature: $response.body#/result
  - stepId: confirmAirdrop
    description: >-
      Poll the airdrop signature until the cluster confirms it, retrying while
      the transaction works its way through the slots.
    operationId: getSignatureStatuses
    requestBody:
      contentType: application/json
      payload:
        jsonrpc: "2.0"
        id: 1
        method: getSignatureStatuses
        params:
        - - $steps.requestAirdrop.outputs.signature
        - searchTransactionHistory: true
    successCriteria:
    - condition: $statusCode == 200
    - context: $response.body
      condition: $.result.value[0].confirmationStatus == 'confirmed'
      type: jsonpath
    outputs:
      confirmationStatus: $response.body#/result/value/0/confirmationStatus
      confirmedSlot: $response.body#/result/value/0/slot
    onFailure:
    - name: pollUntilConfirmed
      type: retry
      retryAfter: 2
      retryLimit: 30
  - stepId: balanceAfter
    description: >-
      Re-read the balance to prove the airdropped lamports actually landed in
      the account.
    operationId: getBalance
    requestBody:
      contentType: application/json
      payload:
        jsonrpc: "2.0"
        id: 1
        method: getBalance
        params:
        - $inputs.address
    successCriteria:
    - condition: $statusCode == 200
    outputs:
      lamportsAfter: $response.body#/result/value
  outputs:
    signature: $steps.requestAirdrop.outputs.signature
    lamportsBefore: $steps.balanceBefore.outputs.lamportsBefore
    lamportsAfter: $steps.balanceAfter.outputs.lamportsAfter
    confirmationStatus: $steps.confirmAirdrop.outputs.confirmationStatus