github.com/trezor/blockbook@v0.4.1-0.20240328132726-e9a08582ee2c/static/templates/address.html (about) 1 {{define "specific"}}{{$addr := .Address}}{{$data := .}} 2 <div class="row g-0 ms-2 ms-lg-0"> 3 <div class="col-md-10 order-2 order-md-1"> 4 <h1>{{if $addr.ContractInfo}}Contract {{$addr.ContractInfo.Name}}{{if $addr.ContractInfo.Symbol}} ({{$addr.ContractInfo.Symbol}}){{end}}{{else}}Address {{addressAlias $addr.AddrStr $data}}{{end}}</h1> 5 <h5 class="col-12 d-flex h-data pb-2"><span class="ellipsis copyable">{{$addr.AddrStr}}</span></h5> 6 <h4 class="row"> 7 <div class="col-lg-6">{{formattedAmountSpan $addr.BalanceSat 0 $data.CoinShortcut $data "copyable"}}</div> 8 {{if $addr.SecondaryValue}}<div class="col-lg-6">{{summaryValuesSpan 0 $addr.SecondaryValue $data}}</div>{{end}} 9 </h4> 10 {{if gt $addr.TotalSecondaryValue $addr.SecondaryValue}} 11 <div class="row g-0 small text-muted">Including Tokens</div> 12 <h4 class="row"> 13 <div class="col-lg-6">{{summaryValuesSpan $addr.TotalBaseValue 0 $data}}</div> 14 <div class="col-lg-6">{{summaryValuesSpan 0 $addr.TotalSecondaryValue $data}}</div> 15 </h4> 16 {{end}} 17 </div> 18 <div class="col-md-2 order-1 order-md-2 d-flex justify-content-center justify-content-md-end mb-3 mb-md-0"> 19 <div id="qrcode"></div> 20 <script type="text/javascript" src="/static/js/qrcode.min.js"></script> 21 <script type="text/javascript"> 22 new QRCode(document.getElementById("qrcode"), { text: "{{$addr.AddrStr}}", width: 120, height: 120 }); 23 </script> 24 </div> 25 </div> 26 <table class="table data-table info-table"> 27 <tbody> 28 <tr> 29 <td style="white-space: nowrap;"><h5>Confirmed</h5></td> 30 <td></td> 31 </tr> 32 {{if eq .ChainType 1}} 33 <tr> 34 <td style="width: 25%;">Balance</td> 35 <td>{{amountSpan $addr.BalanceSat $data "copyable"}}</td> 36 </tr> 37 <tr> 38 <td>Transactions</td> 39 <td>{{formatInt $addr.Txs}}</td> 40 </tr> 41 <tr> 42 <td>Non-contract Transactions</td> 43 <td>{{formatInt $addr.NonTokenTxs}}</td> 44 </tr> 45 <tr> 46 <td>Internal Transactions</td> 47 <td>{{formatInt $addr.InternalTxs}}</td> 48 </tr> 49 <tr> 50 <td>Nonce</td> 51 <td>{{$addr.Nonce}}</td> 52 </tr> 53 {{if $addr.ContractInfo}} 54 {{if $addr.ContractInfo.Type}} 55 <tr> 56 <td style="width: 25%;">Contract type</td> 57 <td>{{$addr.ContractInfo.Type}}</td> 58 </tr> 59 {{end}} 60 {{if $addr.ContractInfo.CreatedInBlock}} 61 <tr> 62 <td style="width: 25%;">Created in Block</td> 63 <td><a href="/block/{{$addr.ContractInfo.CreatedInBlock}}">{{formatUint32 $addr.ContractInfo.CreatedInBlock}}</a></td> 64 </tr> 65 {{end}} 66 {{if $addr.ContractInfo.DestructedInBlock}} 67 <tr> 68 <td style="width: 25%;">Destructed in Block</td> 69 <td><a href="/block/{{$addr.ContractInfo.DestructedInBlock}}">{{formatUint32 $addr.ContractInfo.DestructedInBlock}}</a></td> 70 </tr> 71 {{end}} 72 {{end}} 73 {{else}} 74 <tr> 75 <td style="width: 25%;">Total Received</td> 76 <td>{{amountSpan $addr.TotalReceivedSat $data "copyable"}}</td> 77 </tr> 78 <tr> 79 <td>Total Sent</td> 80 <td>{{amountSpan $addr.TotalSentSat $data "copyable"}}</td> 81 </tr> 82 <tr> 83 <td>Final Balance</td> 84 <td>{{amountSpan $addr.BalanceSat $data "copyable"}}</td> 85 </tr> 86 <tr> 87 <td>No. Transactions</td> 88 <td>{{formatInt $addr.Txs}}</td> 89 </tr> 90 {{end}} 91 </tbody> 92 </table> 93 {{if $addr.UnconfirmedTxs}} 94 <table class="table data-table info-table"> 95 <tbody> 96 <tr> 97 <td style="white-space: nowrap;"><h5>Unconfirmed</h5></td> 98 <td></td> 99 </tr> 100 <tr> 101 <td style="width: 25%;">Unconfirmed Balance</td> 102 <td>{{amountSpan $addr.UnconfirmedBalanceSat $data "copyable"}}</td> 103 </tr> 104 <tr> 105 <td>No. Transactions</td> 106 <td>{{formatInt $addr.UnconfirmedTxs}}</td> 107 </tr> 108 </tbody> 109 </table> 110 {{end}} 111 {{if eq .ChainType 1}} 112 {{if tokenCount $addr.Tokens .FungibleTokenName}} 113 <div class="accordion mt-2 mb-2" id="erc20"> 114 <div class="accordion-item"> 115 <div class="accordion-header" id="erc20Heading"> 116 <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#erc20Body" aria-expanded="false" aria-controls="erc20Body"> 117 <div class="row g-0 w-100"> 118 <h5 class="col-md-4 mb-md-0">{{.FungibleTokenName}} Tokens <span class="badge bg-secondary">{{tokenCount $addr.Tokens .FungibleTokenName}}</span></h5> 119 <h5 class="col-md-8 mb-md-0"><span tt="Total value of tokens">{{summaryValuesSpan $addr.TokensBaseValue $addr.TokensSecondaryValue $data}}</span></h5> 120 </div> 121 </button> 122 </div> 123 <div id="erc20Body" class="accordion-collapse collapse" aria-labelledby="erc20Heading" data-bs-parent="#erc20"> 124 <div class="accordion-body"> 125 <table class="table data-table mt-0 mb-0"> 126 <tbody> 127 <tr> 128 <th style="width: 25%;">Contract</th> 129 <th style="width: 30%;">Quantity</th> 130 <th style="width: 35%;">Value</th> 131 <th class="text-end" style="width: 10%;"><span class="d-none d-md-block">Transfers</span><span class="d-block d-md-none">#</span></th> 132 </tr> 133 {{range $t := $addr.Tokens}} 134 {{if eq $t.Type $.FungibleTokenName}} 135 <tr> 136 <td class="ellipsis"><a href="/address/{{$t.Contract}}">{{if $t.Name}}<span class="copyable" cc="{{$t.Contract}}" alias-type="Contract">{{$t.Name}}</span>{{else}}<span class="copyable">{{$t.Contract}}</span>{{end}}</a></td> 137 <td>{{formattedAmountSpan $t.BalanceSat $t.Decimals $t.Symbol $data "copyable"}}</td> 138 <td>{{summaryValuesSpan $t.BaseValue $t.SecondaryValue $data}}</span></td> 139 <td class="text-end">{{formatInt $t.Transfers}}</td> 140 </tr> 141 {{end}} 142 {{end}} 143 </tbody> 144 </table> 145 </div> 146 </div> 147 </div> 148 </div> 149 {{end}} 150 {{if tokenCount $addr.Tokens .NonFungibleTokenName}} 151 <div class="accordion mt-2 mb-2" id="erc721"> 152 <div class="accordion-item"> 153 <div class="accordion-header" id="erc721Heading"> 154 <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#erc721Body" aria-expanded="false" aria-controls="erc721Body"> 155 <div class="row g-0 w-100"> 156 <h5 class="col-12 mb-md-0">{{.NonFungibleTokenName}} Tokens <span class="badge bg-secondary">{{tokenCount $addr.Tokens .NonFungibleTokenName}}</span></h5> 157 </div> 158 </button> 159 </div> 160 <div id="erc721Body" class="accordion-collapse collapse" aria-labelledby="erc721Heading" data-bs-parent="#erc721"> 161 <div class="accordion-body"> 162 <table class="table data-table mt-0 mb-0"> 163 <tbody> 164 <tr> 165 <th style="width: 25%;">Contract</th> 166 <th style="width: 65%;">Tokens</th> 167 <th class="text-end" style="width: 10%;"><span class="d-none d-md-block">Transfers</span><span class="d-block d-md-none">#</span></th> 168 </tr> 169 {{range $t := $addr.Tokens}} 170 {{if eq $t.Type $.NonFungibleTokenName}} 171 <tr> 172 <td class="ellipsis"><a href="/address/{{$t.Contract}}">{{if $t.Name}}<span class="copyable" cc="{{$t.Contract}}" alias-type="Contract">{{$t.Name}}</span>{{else}}<span class="copyable">{{$t.Contract}}</span>{{end}}</a></td> 173 <td> 174 {{range $i, $iv := $t.Ids}}{{if $i}}, {{end}}<a href="/nft/{{$t.Contract}}/{{formatAmountWithDecimals $iv 0}}">{{formatAmountWithDecimals $iv 0}}</a>{{end}} 175 </td> 176 <td class="text-end">{{$t.Transfers}}</td> 177 </tr> 178 {{end}} 179 {{end}} 180 </tbody> 181 </table> 182 </div> 183 </div> 184 </div> 185 </div> 186 {{end}} 187 {{if tokenCount $addr.Tokens .MultiTokenName}} 188 <div class="accordion mt-2 mb-2" id="erc1155"> 189 <div class="accordion-item"> 190 <div class="accordion-header" id="erc1155Heading"> 191 <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#erc1155Body" aria-expanded="false" aria-controls="erc1155Body"> 192 <div class="row g-0 w-100"> 193 <h5 class="col-12 mb-md-0">{{.MultiTokenName}} Tokens <span class="badge bg-secondary">{{tokenCount $addr.Tokens .MultiTokenName}}</span></h5> 194 </div> 195 </button> 196 </div> 197 <div id="erc1155Body" class="accordion-collapse collapse" aria-labelledby="erc1155Heading" data-bs-parent="#erc1155"> 198 <div class="accordion-body"> 199 <table class="table data-table mt-0 mb-0"> 200 <tbody> 201 <tr> 202 <th style="width: 25%;">Contract</th> 203 <th style="width: 65%;">Tokens</th> 204 <th class="text-end" style="width: 10%;"><span class="d-none d-md-block">Transfers</span><span class="d-block d-md-none">#</span></th> 205 </tr> 206 {{range $t := $addr.Tokens}} 207 {{if eq $t.Type $.MultiTokenName}} 208 <tr> 209 <td class="ellipsis"><a href="/address/{{$t.Contract}}">{{if $t.Name}}<span class="copyable" cc="{{$t.Contract}}" alias-type="Contract">{{$t.Name}}</span>{{else}}<span class="copyable">{{$t.Contract}}</span>{{end}}</a></td> 210 <td> 211 {{range $i, $iv := $t.MultiTokenValues}}{{if $i}}, {{end}}{{formattedAmountSpan $iv.Value 0 $t.Symbol $data ""}} of ID <a href="/nft/{{$t.Contract}}/{{$iv.Id}}">{{$iv.Id}}</a>{{end}} 212 </td> 213 <td class="text-end">{{formatInt $t.Transfers}}</td> 214 </tr> 215 {{end}} 216 {{end}} 217 </tbody> 218 </table> 219 </div> 220 </div> 221 </div> 222 </div> 223 {{end}} 224 {{if $addr.StakingPools }} 225 <div class="accordion mt-2 mb-2" id="stakingPools"> 226 <div class="accordion-item"> 227 <div class="accordion-header" id="stakingPoolsHeading"> 228 <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#stakingPoolsBody" aria-expanded="false" aria-controls="stakingPoolsBody"> 229 <div class="row g-0 w-100"> 230 <h5 class="col-12 mb-md-0">Staking Pools <span class="badge bg-secondary">{{len $addr.StakingPools}}</span></span></h5> 231 </div> 232 </button> 233 </div> 234 <div id="stakingPoolsBody" class="accordion-collapse collapse" aria-labelledby="stakingPoolsHeading" data-bs-parent="#stakingPools"> 235 <div class="accordion-body"> 236 {{range $sp := $addr.StakingPools}} 237 <table class="table data-table info-table mt-0 mb-2 ml-0"> 238 <tbody> 239 <tr> 240 <td colspan="2" style="white-space: nowrap;"><span class="h5" style="color: var(--bs-body-color);">{{$sp.Name}}</span> {{$sp.Contract}}</td> 241 </tr> 242 <tr> 243 <td style="width: 25%;">Pending Balance</td> 244 <td>{{amountSpan $sp.PendingBalance $data "copyable"}}</td> 245 </tr> 246 <tr> 247 <td>Pending Deposited Balance</td> 248 <td>{{amountSpan $sp.PendingDepositedBalance $data "copyable"}}</td> 249 </tr> 250 <tr> 251 <td style="width: 25%;">Deposited Balance</td> 252 <td>{{amountSpan $sp.DepositedBalance $data "copyable"}}</td> 253 </tr> 254 <tr> 255 <td>Withdrawal Total Amount</td> 256 <td>{{amountSpan $sp.WithdrawTotalAmount $data "copyable"}}</td> 257 </tr> 258 <tr> 259 <td style="width: 25%;">Claimable Amount</td> 260 <td>{{amountSpan $sp.ClaimableAmount $data "copyable"}}</td> 261 </tr> 262 <tr> 263 <td>Restaked Reward</td> 264 <td>{{amountSpan $sp.RestakedReward $data "copyable"}}</td> 265 </tr> 266 <tr> 267 <td>Autocompound Balance</td> 268 <td>{{amountSpan $sp.AutocompoundBalance $data "copyable"}}</td> 269 </tr> 270 </tbody> 271 </table> 272 {{end}} 273 </div> 274 </div> 275 </div> 276 </div> 277 {{end}} 278 {{end}} 279 {{if or $addr.Transactions $addr.Filter}} 280 <div class="row pt-3 pb-1"> 281 <h3 class="col-sm-6 col-lg-3 m-0 align-self-center">Transactions</h3> 282 <div class="col-sm-6 col-lg-3 my-2 my-lg-0 align-self-center"> 283 <select class="w-100" onchange="self.location='?filter='+options[selectedIndex].value"> 284 <option>All</option> 285 <option {{if eq $addr.Filter "inputs"}}selected{{end}} value="inputs">Address on input side</option> 286 <option {{if eq $addr.Filter "outputs"}}selected{{end}} value="outputs">Address on output side</option> 287 {{if $addr.Tokens}} 288 <option {{if eq $addr.Filter "0"}}selected{{end}} value="0">Non-contract</option> 289 <option {{if eq $addr.Filter "1"}}selected{{end}} value="1">Internal</option> 290 {{range $t := $addr.Tokens}} 291 {{if eq $t.Type $.FungibleTokenName}} 292 <option {{if eq $addr.Filter $t.ContractIndex}}selected{{end}} value="{{$t.ContractIndex}}">{{if $t.Name}}{{$t.Name}}{{else}}{{$t.Contract}}{{end}} ({{$.FungibleTokenName}})</option> 293 {{end}} 294 {{end}} 295 {{range $t := $addr.Tokens}} 296 {{if eq $t.Type $.NonFungibleTokenName}} 297 <option {{if eq $addr.Filter $t.ContractIndex}}selected{{end}} value="{{$t.ContractIndex}}">{{if $t.Name}}{{$t.Name}}{{else}}{{$t.Contract}}{{end}} ({{$.NonFungibleTokenName}})</option> 298 {{end}} 299 {{end}} 300 {{range $t := $addr.Tokens}} 301 {{if eq $t.Type $.MultiTokenName}} 302 <option {{if eq $addr.Filter $t.ContractIndex}}selected{{end}} value="{{$t.ContractIndex}}">{{if $t.Name}}{{$t.Name}}{{else}}{{$t.Contract}}{{end}} ({{$.MultiTokenName}})</option> 303 {{end}} 304 {{end}} 305 {{end}} 306 </select> 307 </div> 308 <div class="col-lg-6"> 309 {{template "paging" $data}} 310 </div> 311 </div> 312 <div> 313 {{range $tx := $addr.Transactions}}{{$data := setTxToTemplateData $data $tx}}{{template "txdetail" $data}}{{end}} 314 </div> 315 {{template "paging" $data }} 316 {{end}}{{end}}