github.com/trezor/blockbook@v0.4.1-0.20240328132726-e9a08582ee2c/static/templates/tx.html (about) 1 {{define "specific"}}{{$tx := .Tx}}{{$data := .}} 2 <div class="row"> 3 <h1 class="col-12">Transaction</h1> 4 </div> 5 <div class="row pt-3"> 6 <h5 class="col-12 d-flex h-data"><span class="ellipsis copyable">{{$tx.Txid}}</span></h5> 7 </div> 8 <table class="table data-table info-table"> 9 <tbody> 10 {{if $tx.Confirmations}} 11 <tr> 12 <td>Mined Time</td> 13 <td>{{unixTimeSpan $tx.Blocktime}}</td> 14 </tr> 15 {{end}} 16 <tr> 17 <td>In Block</td> 18 <td class="ellipsis" style="max-width: 280px">{{if $tx.Confirmations}}{{$tx.Blockhash}}{{else}}<span class="badge bg-danger">Unconfirmed</span>{{end}}</td> 19 </tr> 20 {{if $tx.Confirmations}} 21 <tr> 22 <td>In Block Height</td> 23 <td><a href="/block/{{$tx.Blockheight}}">{{formatInt $tx.Blockheight}}</a></td> 24 </tr>{{end}} 25 {{if $tx.EthereumSpecific}} 26 <tr> 27 <td>Status</td> 28 {{if $tx.EthereumSpecific.Status}} 29 {{if eq $tx.EthereumSpecific.Status 1}} 30 <td><span class="badge bg-success">Success</span></td> 31 {{else}} 32 {{if eq $tx.EthereumSpecific.Status -1}} 33 <td>Pending</td> 34 {{else}} 35 <td>Unknown</td> 36 {{end}} 37 {{end}} 38 {{else}} 39 <td><span class="badge bg-danger">Failed</span>{{if $tx.EthereumSpecific.Error}}<span class="text-danger small fw-normal ms-1"> {{$tx.EthereumSpecific.Error}}{{end}}</td> 40 {{end}} 41 </tr> 42 <tr> 43 <td>Value</td> 44 <td>{{amountSpan $tx.ValueOutSat $data "copyable"}}</td> 45 </tr> 46 <tr> 47 <td>Gas Used / Limit</td> 48 <td>{{if $tx.EthereumSpecific.GasUsed}}{{formatBigInt $tx.EthereumSpecific.GasUsed}}{{else}}pending{{end}} / {{formatBigInt $tx.EthereumSpecific.GasLimit}}</td> 49 </tr> 50 <tr> 51 <td>Gas Price</td> 52 <td>{{amountSpan $tx.EthereumSpecific.GasPrice $data "copyable"}} <span class="fw-normal ps-3">({{amountSatsSpan $tx.EthereumSpecific.GasPrice $data "copyable"}} Gwei)</span></td> 53 </tr> 54 {{else}} 55 <tr> 56 <td>Total Input</td> 57 <td>{{amountSpan $tx.ValueInSat $data "copyable"}}</td> 58 </tr> 59 <tr> 60 <td>Total Output</td> 61 <td>{{amountSpan $tx.ValueOutSat $data "copyable"}}</td> 62 </tr> 63 {{if $tx.VSize}} 64 <tr> 65 <td>Size / vSize</td> 66 <td>{{formatInt $tx.Size}} / {{formatInt $tx.VSize}}</td> 67 </tr> 68 {{else}} 69 {{if $tx.Size}} 70 <tr> 71 <td>Size</td> 72 <td>{{formatInt $tx.Size}}</td> 73 </tr> 74 {{end}} 75 {{end}} 76 {{end}} 77 {{if $tx.FeesSat}} 78 <tr> 79 <td>Fees</td> 80 <td>{{amountSpan $tx.FeesSat $data "copyable"}}{{if $tx.Size}} ({{feePerByte $tx}}){{end}}</td> 81 </tr>{{end}} 82 {{if not $tx.Confirmations}} 83 {{if $tx.ConfirmationETABlocks}} 84 <tr> 85 <td>Confirmation ETA</td> 86 <td> 87 <span tt="Estimated first potential confirmation of this transaction.">in approx. {{relativeTime $tx.ConfirmationETASeconds}} <span class="fw-normal ps-1">({{$tx.ConfirmationETABlocks}} blocks)</span></span> 88 </td> 89 </tr> 90 {{end}} 91 <tr> 92 <td><span tt="Replace by fee">RBF</span></td> 93 <td> 94 {{if $tx.Rbf}} 95 <span tt="Replace-by-Fee transaction, could be overridden by a new transaction">ON</span> 96 {{else}} 97 <span tt="Final transaction that can not be replaced unless it is dropped from the mempool.">OFF️</span> 98 {{end}} 99 </td> 100 </tr> 101 {{end}} 102 </tbody> 103 </table> 104 <div class="pt-1"> 105 {{template "txdetail" .}} 106 </div> 107 {{if eq .ChainType 1}} 108 {{if $tx.EthereumSpecific.ParsedData}} 109 {{if $tx.EthereumSpecific.ParsedData.Function }} 110 <div class="pt-2"> 111 <h5>Input Data</h5> 112 <div class="accordion" id="inputData"> 113 <div class="accordion-item"> 114 <h2 class="accordion-header" id="inputDataHeading"> 115 <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#inputDataBody" aria-expanded="false" aria-controls="inputDataBody"> 116 <h5 class="mb-0">{{if $tx.EthereumSpecific.ParsedData.Name}}{{$tx.EthereumSpecific.ParsedData.Name}} {{end}}{{if $tx.EthereumSpecific.ParsedData.MethodId}} <span class="fw-normal small" tt="4-byte signature">{{$tx.EthereumSpecific.ParsedData.MethodId}}</span>{{end}}</h5> 117 </button> 118 </h2> 119 <div id="inputDataBody" class="accordion-collapse collapse" aria-labelledby="inputDataHeading" data-bs-parent="#inputData"> 120 <div class="accordion-body"> 121 <div class="row"> 122 <div class="col-12 mx-1 mx-md-0"><span class="copyable" style="overflow-wrap: break-word;">{{$tx.EthereumSpecific.Data}}</span></div> 123 <div class="col-12 mx-1 mx-md-0 pt-2"><span class="copyable">{{$tx.EthereumSpecific.ParsedData.Function}}</span></div> 124 {{if $tx.EthereumSpecific.ParsedData.Params}} 125 <div class="col-12"> 126 <table class="table data-table mt-2 mb-0"> 127 <thead> 128 <tr> 129 <th style="width: 5%;">#</th> 130 <th style="width: 20%;">Type</th> 131 <th>Data</th> 132 </tr> 133 </thead> 134 <tbody> 135 {{range $i,$p := $tx.EthereumSpecific.ParsedData.Params}} 136 <tr> 137 <td>{{$i}}</td> 138 <td>{{$p.Type}}</td> 139 <td> 140 {{range $j,$v := $p.Values}} 141 {{if $j}}<br>{{end}} 142 {{if hasPrefix $p.Type "address"}}<a href="/address/{{$v}}">{{addressAliasSpan $v $data}}</a>{{else}}<span class="copyable">{{$v}}</span>{{end}} 143 {{end}} 144 </td> 145 </tr> 146 {{end}} 147 </tbody> 148 </table> 149 </div> 150 {{end}} 151 </div> 152 </div> 153 </div> 154 </div> 155 </div> 156 </div> 157 {{end}} 158 {{end}} 159 {{end}} 160 <div class="pt-4"> 161 <h5>Raw Transaction</h5> 162 <div class="json"> 163 <pre id="raw"></pre> 164 </div> 165 <script type="text/javascript"> 166 var raw = {{$tx.CoinSpecificData}}; 167 document.getElementById('raw').innerHTML = syntaxHighlight(raw); 168 </script> 169 </div> 170 {{end}}