Skip to content

Market operations

Complete examples for understanding and interacting with the Akash marketplace, including bid management, lease operations, and market analytics.

Overview

The Akash marketplace connects deployment requests with provider capacity through a bidding system. Understanding market operations helps you optimize costs, ensure deployment success, and monitor marketplace dynamics.

Market Order Process:

graph LR
    A[Create Deployment] --> B[Market Orders Created]
    B --> C[Providers Submit Bids]

Bid Management:

graph LR
    D[Evaluate Bids] --> E[Select Best Bid]
    E --> F[Create Lease]

Lease Lifecycle:

graph LR
    G[Monitor Lease] --> H[Track Payments]
    H --> I[Settlement & Closure]

Market fundamentals

API reference

See Market API for orders, bids, leases, and marketplace operations

List market orders

from akash import AkashClient, AkashWallet

def list_market_orders(owner_address=None):
    """List current market orders"""

    client = AkashClient("https://akash-rpc.polkachu.com:443")

    if owner_address:
        orders = client.market.get_orders(owner=owner_address)
    else:
        orders = client.market.get_orders(limit=20)

    print(f"Found {len(orders)} market orders")
    print("-" * 60)

    for order in orders[:10]:
        print(f"Order: {order.get('order_id', {}).get('dseq', 'N/A')}")
        print(f"Owner: {order.get('order_id', {}).get('owner', 'N/A')}")
        print(f"State: {order.get('state', 'unknown')}")
        print(f"Spec: {order.get('spec', {})}")
        print()

    return orders

orders = list_market_orders()

Bid management

Monitor incoming bids

from akash import AkashClient, AkashWallet
import time

def monitor_deployment_bids(deployment_id, timeout=300):
    """Monitor bids for a specific deployment"""

    client = AkashClient("https://akash-rpc.polkachu.com:443")
    start_time = time.time()
    all_bids = []

    print(f"Monitoring bids for deployment {deployment_id['dseq']}")
    print("-" * 60)

    while time.time() - start_time < timeout:
        try:
            bids = client.market.get_bids(
                owner=deployment_id['owner'],
                dseq=deployment_id['dseq']
            )

            new_bids = []
            for bid in bids:
                bid_id = f"{bid['bid_id']['provider']}-{bid['bid_id']['dseq']}"
                if bid_id not in [b['id'] for b in all_bids]:
                    new_bids.append({
                        'id': bid_id,
                        'bid': bid,
                        'timestamp': time.time()
                    })
                    all_bids.extend(new_bids)

            if new_bids:
                print(f"\n[{time.strftime('%H:%M:%S')}] New bids received:")
                for nb in new_bids:
                    bid = nb['bid']
                    print(f"Provider: {bid['bid_id']['provider'][:20]}...")
                    print(f"Price: {bid['price']['amount']} {bid['price']['denom']}")
                    print(f"State: {bid['state']}")

            open_bids = [b for b in all_bids if b['bid']['state'] == 'open']
            if len(open_bids) >= 3:
                print(f"\nReceived {len(open_bids)} open bids. Ready to select.")
                break

            time.sleep(10)

        except Exception as e:
            print(f"Error checking bids: {e}")
            time.sleep(5)

    return all_bids

# Example usage with a deployment
# deployment_id = {"owner": "akash1...", "dseq": 12345}
# bids = monitor_deployment_bids(deployment_id)

Evaluate and compare bids

from akash import AkashClient, AkashWallet

def evaluate_bids(bids):
    """Evaluate and compare bids based on multiple criteria"""

    if not bids:
        print("No bids to evaluate")
        return None

    evaluated_bids = []

    for bid in bids:
        evaluation = {
            'bid': bid,
            'price': float(bid['price']['amount']),
            'provider': bid['bid_id']['provider'],
            'state': bid['state']
        }

        if 'duration' in bid:
            evaluation['price_per_block'] = evaluation['price'] / bid['duration']

        evaluated_bids.append(evaluation)

    evaluated_bids.sort(key=lambda x: x['price'])

    print("Bid evaluation results:")
    print("-" * 60)

    for i, eval_bid in enumerate(evaluated_bids[:5], 1):
        print(f"{i}. Provider: {eval_bid['provider'][:30]}...")
        print(f"Price: {eval_bid['price']} uakt")
        print(f"State: {eval_bid['state']}")
        if 'price_per_block' in eval_bid:
            print(f"Price/block: {eval_bid['price_per_block']:.2f}")
        print()

    return evaluated_bids

# Example with mock bids
mock_bids = [
    {'bid_id': {'provider': 'akash1abc...'}, 'price': {'amount': '1000', 'denom': 'uakt'}, 'state': 'open'},
    {'bid_id': {'provider': 'akash1def...'}, 'price': {'amount': '1200', 'denom': 'uakt'}, 'state': 'open'},
    {'bid_id': {'provider': 'akash1ghi...'}, 'price': {'amount': '900', 'denom': 'uakt'}, 'state': 'open'}
]
evaluated = evaluate_bids(mock_bids)

Accept bid and create lease

from akash import AkashClient, AkashWallet

def accept_best_bid(deployment_id, wallet):
    """Accept the best bid and create a lease"""

    client = AkashClient("https://akash-rpc.polkachu.com:443")

    bids = client.market.get_bids(
        owner=deployment_id['owner'],
        dseq=deployment_id['dseq']
    )

    open_bids = [b for b in bids if b['state'] == 'open']

    if not open_bids:
        print("No open bids available")
        return None

    evaluated = evaluate_bids(open_bids)

    best_bid = evaluated[0]['bid']

    print(f"Accepting bid from {best_bid['bid_id']['provider'][:30]}...")
    print(f"Price: {best_bid['price']['amount']} {best_bid['price']['denom']}")

    result = client.market.create_lease(
        wallet=wallet,
        owner=best_bid['bid_id']['owner'],
        dseq=best_bid['bid_id']['dseq'],
        gseq=best_bid['bid_id']['gseq'],
        oseq=best_bid['bid_id']['oseq'],
        provider=best_bid['bid_id']['provider']
    )

    if result.success:
        print(f"Lease created successfully!")
        print(f"Transaction: {result.tx_hash}")
        return best_bid['bid_id']
    else:
        print(f"Failed to create lease: {result.error}")
        return None

# Example usage
# deployment_id = {"owner": wallet.address, "dseq": 12345}
# lease_id = accept_best_bid(deployment_id, wallet)

Lease operations

List active leases

from akash import AkashClient, AkashWallet

def list_active_leases(owner_address=None):
    """List all active leases"""

    client = AkashClient("https://akash-rpc.polkachu.com:443")

    if owner_address:
        leases = client.market.get_leases(owner=owner_address, state="active")
    else:
        leases = client.market.get_leases(state="active", limit=20)

    print(f"Found {len(leases)} active leases")
    print("-" * 60)

    for lease in leases[:10]:
        lease_id = lease.get('lease_id', {})
        print(f"Lease: {lease_id.get('dseq', 'N/A')}")
        print(f"Owner: {lease_id.get('owner', 'N/A')[:30]}...")
        print(f"Provider: {lease_id.get('provider', 'N/A')[:30]}...")
        print(f"Price: {lease.get('price', {}).get('amount', 'N/A')} uakt")
        print(f"State: {lease.get('state', 'unknown')}")
        print()

    return leases

active_leases = list_active_leases()

Monitor lease status

from akash import AkashClient, AkashWallet

def monitor_lease_status(lease_id, duration=300):
    """Monitor a lease status over time"""

    client = AkashClient("https://akash-rpc.polkachu.com:443")
    start_time = time.time()
    status_history = []

    print(f"Monitoring lease {lease_id['dseq']} for {duration}s...")
    print("-" * 60)

    while time.time() - start_time < duration:
        try:
            leases = client.market.get_leases(
                owner=lease_id['owner'],
                dseq=lease_id['dseq'],
                gseq=lease_id['gseq'],
                oseq=lease_id['oseq'],
                provider=lease_id['provider'],
                limit=1
            )
            lease = leases[0] if leases else None

            current_status = {
                'timestamp': time.time(),
                'state': lease.get('state', 'unknown'),
                'price': lease.get('price', {}).get('amount', '0'),
                'escrow_balance': None
            }

            if not status_history or status_history[-1]['state'] != current_status['state']:
                print(f"\n[{time.strftime('%H:%M:%S')}] Status: {current_status['state']}")
                status_history.append(current_status)

            if current_status['state'] in ['closed', 'insufficient_funds']:
                print(f"Lease ended: {current_status['state']}")
                break

            time.sleep(30)

        except Exception as e:
            print(f"Error monitoring lease: {e}")
            time.sleep(10)

    return status_history

# Example usage
# lease_id = {"owner": "akash1...", "dseq": 12345, "gseq": 1, "oseq": 1, "provider": "akash1..."}
# history = monitor_lease_status(lease_id, 600)

Close lease

from akash import AkashClient, AkashWallet

def close_lease(lease_id, wallet):
    """Close an active lease"""

    client = AkashClient("https://akash-rpc.polkachu.com:443")

    print(f"Closing lease {lease_id['dseq']}...")

    result = client.market.close_lease(
        wallet=wallet,
        owner=lease_id['owner'],
        dseq=lease_id['dseq'],
        gseq=lease_id['gseq'],
        oseq=lease_id['oseq'],
        provider=lease_id['provider']
    )

    if result.success:
        print(f"Lease closed successfully!")
        print(f"Transaction: {result.tx_hash}")
        return True
    else:
        print(f"Failed to close lease: {result.error}")
        return False

# Example usage
# lease_id = {"owner": wallet.address, "dseq": 12345, "gseq": 1, "oseq": 1, "provider": "akash1..."}
# closed = close_lease(lease_id, wallet)

Market analytics

Analyze market pricing

from akash import AkashClient, AkashWallet

def analyze_market_pricing():
    """Analyze current market pricing trends"""

    client = AkashClient("https://akash-rpc.polkachu.com:443")

    bids = client.market.get_bids(state="open", limit=100)

    if not bids:
        print("No bids available for analysis")
        return

    prices = []
    for bid in bids:
        try:
            price = float(bid['price']['amount'])
            prices.append(price)
        except (KeyError, ValueError):
            continue

    if prices:
        avg_price = sum(prices) / len(prices)
        min_price = min(prices)
        max_price = max(prices)

        sorted_prices = sorted(prices)
        n = len(sorted_prices)
        if n % 2 == 0:
            median_price = (sorted_prices[n//2-1] + sorted_prices[n//2]) / 2
        else:
            median_price = sorted_prices[n//2]

        print("Market pricing analysis:")
        print("-" * 60)
        print(f"Total bids analyzed: {len(prices)}")
        print(f"Average price: {avg_price:.2f} uakt")
        print(f"Median price: {median_price:.2f} uakt")
        print(f"Min price: {min_price:.2f} uakt")
        print(f"Max price: {max_price:.2f} uakt")
        print(f"Price range: {max_price - min_price:.2f} uakt")

        print("\nPrice distribution:")
        ranges = [(0, 1000), (1000, 5000), (5000, 10000), (10000, float('inf'))]
        for low, high in ranges:
            count = len([p for p in prices if low <= p < high])
            pct = (count / len(prices)) * 100
            label = f"{low}-{high}" if high != float('inf') else f"{low}+"
            print(f"{label:10} uakt: {count:3} bids ({pct:.1f}%)")

    return prices

prices = analyze_market_pricing()

Track market activity

from akash import AkashClient, AkashWallet

def track_market_activity(duration=3600):
    """Track market activity over time"""

    client = AkashClient("https://akash-rpc.polkachu.com:443")
    start_time = time.time()

    activity_log = {
        'new_orders': [],
        'new_bids': [],
        'new_leases': [],
        'closed_leases': []
    }

    print(f"Tracking market activity for {duration/60:.0f} minutes...")
    print("-" * 60)

    initial_orders = set(o['order_id']['dseq'] for o in client.market.get_orders(limit=100))
    initial_leases = set(l['lease_id']['dseq'] for l in client.market.get_leases(limit=100))

    while time.time() - start_time < duration:
        try:
            current_orders = client.market.get_orders(limit=100)
            for order in current_orders:
                dseq = order['order_id']['dseq']
                if dseq not in initial_orders:
                    activity_log['new_orders'].append({
                        'dseq': dseq,
                        'timestamp': time.time(),
                        'owner': order['order_id']['owner'][:20] + '...'
                    })
                    initial_orders.add(dseq)
                    print(f"[{time.strftime('%H:%M:%S')}] New order: {dseq}")

            current_leases = client.market.get_leases(limit=100)
            for lease in current_leases:
                dseq = lease['lease_id']['dseq']
                if dseq not in initial_leases:
                    activity_log['new_leases'].append({
                        'dseq': dseq,
                        'timestamp': time.time(),
                        'provider': lease['lease_id']['provider'][:20] + '...'
                    })
                    initial_leases.add(dseq)
                    print(f"[{time.strftime('%H:%M:%S')}] New lease: {dseq}")

            time.sleep(60)

        except Exception as e:
            print(f"Error tracking activity: {e}")
            time.sleep(30)

    print("\nActivity summary:")
    print(f"New orders: {len(activity_log['new_orders'])}")
    print(f"New leases: {len(activity_log['new_leases'])}")

    return activity_log

# Example (tracks for 1 hour)
# activity = track_market_activity(3600)

Advanced market strategies

Automated bid selection

from akash import AkashClient, AkashWallet

def automated_bid_selection(deployment_id, wallet, strategy="lowest_price"):
    """Automatically select and accept bids based on strategy"""

    client = AkashClient("https://akash-rpc.polkachu.com:443")

    print(f"Using strategy: {strategy}")

    print("Waiting for bids...")
    max_wait = 300
    start_time = time.time()

    while time.time() - start_time < max_wait:
        bids = client.market.get_bids(
            owner=deployment_id['owner'],
            dseq=deployment_id['dseq']
        )

        open_bids = [b for b in bids if b['state'] == 'open']

        if len(open_bids) >= 3:
            break

        time.sleep(10)

    if not open_bids:
        print("No bids received")
        return None

    selected_bid = None

    if strategy == "lowest_price":
        selected_bid = min(open_bids, key=lambda b: float(b['price']['amount']))

    elif strategy == "fastest_response":
        selected_bid = open_bids[0]

    elif strategy == "balanced":
        evaluated = evaluate_bids(open_bids)
        selected_bid = evaluated[0]['bid'] if evaluated else open_bids[0]

    if selected_bid:
        print(f"Selected bid: {selected_bid['bid_id']['provider'][:30]}...")
        print(f"Price: {selected_bid['price']['amount']} uakt")

        result = client.market.create_lease(
            wallet=wallet,
            owner=selected_bid['bid_id']['owner'],
            dseq=selected_bid['bid_id']['dseq'],
            gseq=selected_bid['bid_id']['gseq'],
            oseq=selected_bid['bid_id']['oseq'],
            provider=selected_bid['bid_id']['provider']
        )

        if result.success:
            print(f"Lease created: {result.tx_hash}")
            return selected_bid['bid_id']

    return None

# Example usage
# deployment_id = {"owner": wallet.address, "dseq": 12345}
# lease = automated_bid_selection(deployment_id, wallet, strategy="balanced")