{% extends "base.html" %} {% block content %} {% if alert_ok %}
{{ alert_ok }}
{% endif %} {% if alert_err %}
{{ alert_err }}
{% endif %} {% if my_standing.abandoned_count %}
Your standing has a verified missed-payment claim against it: a step you owed was still unpaid an hour past its deadline {% if my_standing.last_abandoned_at %}, most recently {{ fmt_duration(now - my_standing.last_abandoned_at) }} ago{% endif %} {% if my_standing.last_abandon_session %} (session {{ my_standing.last_abandon_session[:16] }}…, see below){% endif %}. This is independently checked against the chain, not a bare accusation from the other side - see "People you have traded with" below for the exact record. {% if worker.state == 'ok' %} Your wallet is unlocked and the worker is running, so if that step can now be paid it already has been or will be on the next pass; this clears on its own the moment the missing leg settles. {% else %} Your worker is not currently able to send ({{ worker.message }}) - fix that and any payable step goes out automatically, nothing to do by hand. {% endif %}
{% endif %} {% if worker.state in ('stopped', 'locked', 'paused') %}
{{ {"stopped": "Worker stopped", "locked": "Wallet locked", "paused": "Stellar unreachable"}[worker.state] }}: {{ worker.message }}
{% elif worker.state == 'ok' and active %}

Swap worker running normally · {{ worker.passes }} pass{{ "es" if worker.passes != 1 }} so far.

{% endif %} {% if pending_requests %}

Pending requests

Sent, waiting on the maker to answer. Nothing is paid yet: an accept opens as a trade below within one worker pass, and a decline or a request nobody ever answers costs you nothing.

{% for r in pending_requests %} {% endfor %}
SideAmountMakerSentStatus
{% if r.direction %} {{ 'Buying' if r.direction == 'sell' else 'Selling' }} {% else %} order gone {% endif %} {{ fmt_lapse_dp(r.lapse_total, 4) }} {{ short_addr(r.maker_lapse_addr) if r.maker_lapse_addr else "n/a" }} {{ fmt_duration(now - r.sent_at) }} ago {{ r.status|capitalize }}
{{ r.detail }}
{% endif %}

Trades

{% if active %} {% for t in active %}
{{ "Buying" if t.i_receive_lapse else "Selling" }} {{ fmt_lapse_dp(t.lapse_total, 4) }} for {{ fmt_xlm(t.xlm_total) }} XLM {{ "Waiting" if t.status == 'stalled' else "In progress" }}

{{ t.done_steps }} of {{ t.increment_count }} steps delivered · {{ fmt_lapse_dp(t.delivered_lapse, 4) }} so far

{% if t.status == 'stalled' %}

The other side has not moved for a while. Nothing is lost and nothing is being blamed yet: a node restarting or a slow connection looks exactly like this. The trade picks up by itself if they come back. {% if t.at_risk %} Your exposure while you wait is {{ fmt_xlm(t.at_risk) }} XLM, which is one step and the most this can cost you. {% endif %}

{% endif %}
Counterparty{{ t.peer_lapse_addr }}
Started{{ fmt_duration(now - t.created_at) }} ago
Most at risk{{ fmt_xlm(t.step_cap) }} XLM (one step)
Step detail
{% for s in t.steps %} {% endfor %}
#LAPSEXLMYou sendThey send
{{ s.n }}{% if s.i_move_first %} (you first){% endif %} {{ fmt_lapse_dp(s.lapse_amount, 4) }} {{ fmt_xlm(s.xlm_amount) }} {{ leg_label(s.out_state)|safe }} {{ leg_label(s.in_state)|safe }}
{% endfor %} {% else %}

No trades running. Start one from the Market.

{% endif %}

History

{% if history %}
{% for t in history %} {% endfor %}
SideAmountCounterpartyOutcomeWhen
{{ "Bought" if t.i_receive_lapse else "Sold" }} {{ fmt_lapse_dp(t.delivered_lapse, 4) }} {{ short_addr(t.peer_lapse_addr) }} {% if t.status == 'completed' %} Completed {% elif t.status == 'abandoned' %} They walked away
after step {{ t.done_steps }}
{% else %} {{ t.status }} {% endif %}
{{ fmt_duration(now - t.updated_at) }} ago
{% else %}

Nothing yet.

{% endif %} {% if fills.total %}

This node holds {{ fills.total }} accepted trade{{ '' if fills.total == 1 else 's' }} gossiped from across the network, each independently reconstructed and checked against the chain the moment anyone's standing actually needs it - there is nothing to verify ahead of time and nothing cached, so a trade counted above was just re-derived fresh from public data, not taken on anyone's word.

{% endif %}

Your own standing

Computed fresh from the chain, same as anyone else's.

Address{{ my_addr }}
Standing {% if my_standing.abandoned_count %} {{ my_standing.abandoned_count }} currently unresolved "missed" claim{{ '' if my_standing.abandoned_count == 1 else 's' }} {% else %} {{ fmt_score(my_standing.score) }} {% endif %}
Completed (verified){{ my_standing.completed_count }}
Volume (verified){{ fmt_lapse_dp(my_standing.completed_lapse, 2) }}

People you have traded with

{% if peers %}
{% for p in peers %} {% endfor %}
AddressStandingCompletedVolumeWalked away
{{ short_addr(p.addr) }} {% if p.abandoned_count %} None {% else %} {{ fmt_score(p.score) }} {% endif %} {{ p.completed_count }} {% if p.network_completed_count %} ({{ p.network_completed_count }} from others) {% endif %} {{ fmt_lapse_dp(p.completed_lapse, 2) }} {{ p.abandoned_count or "no" }} {% if p.network_abandoned_count %} ({{ p.network_abandoned_count }} reported by others) {% endif %}

Standing decides only how large a single step may be with someone, never whether a trade is safe. A stranger can still trade here; the pieces are just smaller. A score of zero next to a real record means the address is too new or holds too little for that record to count, which is what stops a reputation being rebuilt for free on a throwaway address.

{% else %}

Nobody yet.

{% endif %} {% endblock %}