30 KiB
TX Hash: {{tx.tx_hash}}
{# FIXME {%if config.enable_mixins_details%}TX Prefix Hash: {{tx.tx_prefix_hash}}
{%endif%} #}TX Public Key: {{tx.extra.pubkey}}
{%-for pk in tx.extra.additional_pubkeys%} {%-if not loop.first%}; {%endif-%} {{pk}} {%-endfor-%} {%if tx.extra.payment_id%}Payment ID ({%if tx.extra_payment_id|length == 64%}un{%endif%}encrypted): {{tx.extra.payment_id}}
{%endif%} {# FIXME - what is this? {%if have_prev_hash%}Previous TX: {{prev_hash}}
{%endif%} {%if have_next_hash%}Next TX: {{next_hash}}
{%endif%} #}Metadata
{%if 'block_height' in tx%} In block: {{tx.block_height}} {%else%} In mempool since: {{tx.received_timestamp | from_timestamp | format_datetime('short')}} UTC ({{tx.received_timestamp | from_timestamp | ago}} ago) {%endif%} TX Version/Type: {{tx.version}}/{{sym.display(tx, text=true)}} {%if not have_raw_tx%} {%if 'block_timestamp' in tx%} Timestamp: {{tx.block_timestamp | from_timestamp | format_datetime('short')}} UTC ({{tx.block_timestamp | from_timestamp | ago}} ago) {%endif%} {%endif%} {# FIXME - if in mempool then link to mempool page instead #} Fee (Per kB): {%if tx.coinbase or 'rct_signatures' not in tx%} N/A {%else%} {{fee.display(tx)}} ({{(tx.rct_signatures.txnFee * 1000 / tx.size) | oxen(tag=false, decimals=6)}}) {%endif%} TX Size: {{tx.size|si}}B No. Confirmations: {%if 'block_height' in tx%}{{info.height - tx.block_height}}{%else%}None (in mempool){%endif%} RingCT/RingCT Type: {%if tx.version >= 2 and 'rct_signatures' in tx and not tx.coinbase%}Yes/{{tx.rct_signatures.type}}{%else%}No{%endif%} {%if tx.coinbase and tx.extra.sn_winner%} Service Node Winner: {%if tx.extra.sn_winner == "0000000000000000000000000000000000000000000000000000000000000000"%} None {%else%} {{tx.extra.sn_winner}} {%endif%} {%endif%}
{%- set show_reasons = false -%} {% if tx.extra.sn_state_change.type == 'decom' -%} {% set show_reasons = true -%} 👎 Service Node Decommission Metadata {% elif tx.extra.sn_state_change.type == 'recom' -%} 👍 Service Node Recommission Metadata {% elif tx.extra.sn_state_change.type == 'dereg' -%} {% set show_reasons = true -%} 🚫 Service Node Deregistration Metadata {% elif tx.extra.sn_state_change.type == 'ip' -%} 📋 Service Node IP Change Metadata {% else -%} ❓ Unknown State Change Metadata {% endif -%}
{%set sn_index = tx.extra.sn_state_change.index%} {%if testing_quorum%}Service Node Public Key: {{testing_quorum.workers[sn_index]}}
{%endif%} {%if show_reasons%}{%if tx.extra.sn_state_change.type == 'decom'%}Decommission{%else%}Deregistration{%endif%} Reason(s):
-
{%if tx.extra.sn_state_change.reasons or tx.extra.sn_state_change.reasons_maybe%}
{%if tx.extra.sn_state_change.reasons%}
{%for r in tx.extra.sn_state_change.reasons%}
- {{ readable_reason.display(r) }} {%endfor%} {%endif%} {%if tx.extra.sn_state_change.reasons_maybe%} {%for r in tx.extra.sn_state_change.reasons_maybe%}
- {{ readable_reason.display(r, true) }} {%endfor%} {%endif%} {%else%}
- Reasons not available {%endif%}
Service Node Index: {{sn_index}}
Testing quorum: {{tx.extra.sn_state_change.height}}
🔓 Service Node Unlock
Service Node Public Key: {{tx.extra.sn_pubkey}}
Unlock key image: {{unlock_key_image}}
{# FIXME #}Unlock signature: {{unlock_signature}}
{# FIXME #} {% elif tx.type == 4 and 'lns' in tx.extra %} {% if 'buy' in tx.extra.lns %}🎫 Oxen Name Service Registration
{% elif 'update' in tx.extra.lns %}💾 Oxen Name Service Update
{% endif %} {#FIXME - show some metadata?#} {% elif 'sn_registration' in tx.extra %}🏁 Service Node Register Metadata
Service Node Public Key: {{tx.extra.sn_pubkey}}
Operator fee: {%if tx.extra.sn_registration.contributors[0].portion == 1000000%}N/A (solo registration) {%else%}{{(tx.extra.sn_registration.fee / 10000) | chop0}}% {%endif%}
Contribution Amount: {%if 'stake_amount' in tx%}{{tx.stake_amount | oxen}}{%else%}???{%endif%}
{%if 'expiry' in tx.extra.sn_registration%}Expiration: {{tx.extra.sn_registration.expiry | from_timestamp | format_datetime}} ({{tx.extra.sn_registration.expiry}}), or {{(tx.extra.sn_registration.expiry|from_timestamp - server.datetime) | reltime}}
{%elif 'hardfork' in tx.extra.sn_registration%}Registration Hardfork: {{tx.extra.sn_registration.hardfork}}
{%endif%}Service Node Registration Address(es)
{%for c in tx.extra.sn_registration.contributors%} {%endfor%}Address | Portions |
{{c.wallet}} | {{(c.portion / 10000) | chop0}}% |
⚑ Service Node Contribution
Service Node Public Key: {{tx.extra.sn_pubkey}}
Contributor Address: {{tx.extra.sn_contributor}}
Contribution Amount: {%if 'stake_amount' in tx%}{{tx.stake_amount | oxen}}{%else%}???{%endif%}
{% endif %} {% endif %} {%if tx.vout%}Outputs
{{tx.vout|length}} output(s) for total of {{tx.vout | sum(attribute='amount') | oxen(zero='???') | safe}}
Stealth Address | Amount | Output Index |
{{loop.index0}}: {{out.target.key}} | {{out.amount | oxen(zero='?')}} | {%if 'output_indices' in tx%}{{tx.output_indices[loop.index0]}}{# FIXME: of {{num_outputs}}#}{%endif%} |
Check which outputs belong to given Loki address/subaddress and viewkey
For RingCT transactions, outputs' amounts are also decoded
{%if enable_js%}
Note: Address/Subaddress and viewkey are NOT sent to the server, as the calculations are done on the client side
{%else%}
Note: address/Subaddress and viewkey are sent to the server, as the calculations are done on the server side
{%endif%}
{%if enable_js%} {%else%} {%endif%}
Prove to someone that you have sent them Loki in this transaction
TX private key can be obtained using get_tx_key
command in oxen-wallet-cli command line tool
{%if enable_js%}
Note: Address/Subaddress and TX private key are NOT sent to the server, as the calculations are done on the client side
{%else%}
Note: Address/Subaddress and TX private key are sent to the server, as the calculations are done on the server side
{%endif%}
{%if enable_js%} {%else%} {%endif%}
Inputs
{{tx.vin|length}} input(s) for total of {{tx.vin | sum(attribute='key.amount') | oxen(zero='???') | safe}}
{#FIXME#} {%if enable_mixins_details%}Inputs' ring size time scale (from {{min_mix_time}} till {{max_mix_time}}; resolution: {{timescales_scale}} days{%if have_raw_tx%}; R - real ring member {%endif%})
-
{%if timescales%}
- |{{timescale}}| {%endif%}
Key Image {{loop.index0}}: {{inp.key.k_image}} {#FIXME:#} {%if have_raw_tx%} Already spent: {%if already_spent%} True {%else%} False {%endif%} {%endif%} | Amount: {{inp.key.amount | oxen(zero='?')}} | |||
Ring Members | Is It Real? | Block | Timestamp (UTC) | |
- {{loop.index0}}: {{oinfo.key}} | {{mix_is_it_real}} | {{mix_is_it_real}} | {{binfo.height}} | {{binfo.timestamp | from_timestamp | format_datetime('short')}} ({{(binfo.timestamp|from_timestamp - server.datetime) | reltime}}) |
- {{loop.index0}}: Unknown output ({%if inp.key.amount != 0%}amount {{inp.key.amount}}, {%endif%}index {{kindex}}) |
Show raw details
{%endif%} {%if not have_raw_tx%} {%if with_ring_signatures%}
{{tx_json}}
{%elif show_more_details_link%}
More Details {%if enable_as_hex%} | TX As Hex | TX Ring Members As Hex {%endif%}
{%endif%} {%endif%} {%if show_cache_times%}
TX details construction time: {{construction_time}} s
{%if from_cache%}
TX read from the TX cache
{%endif%}
Attempt failed
{%if error_tx_not_found%}Tx {{tx_hash}} not found.
If this is newly made tx, it can take some time (up to minute)
for it to get propagated to all nodes' txpools.
Please refresh in 10-20 seconds to check if its here then.