github.com/cryptohub-digital/blockbook@v0.3.5-0.20240403155730-99ab40b9104c/server/public_ethereumtype_test.go (about)

     1  //go:build unittest
     2  // +build unittest
     3  
     4  package server
     5  
     6  import (
     7  	"net/http"
     8  	"net/http/httptest"
     9  	"testing"
    10  	"time"
    11  
    12  	"github.com/cryptohub-digital/blockbook/bchain"
    13  	"github.com/cryptohub-digital/blockbook/bchain/coins/eth"
    14  	"github.com/cryptohub-digital/blockbook/common"
    15  	"github.com/cryptohub-digital/blockbook/db"
    16  	"github.com/cryptohub-digital/blockbook/tests/dbtestdata"
    17  	"github.com/golang/glog"
    18  	"github.com/linxGnu/grocksdb"
    19  )
    20  
    21  func httpTestsEthereumType(t *testing.T, ts *httptest.Server) {
    22  	tests := []httpTests{
    23  		{
    24  			name:        "explorerAddress " + dbtestdata.EthAddr7b,
    25  			r:           newGetRequest(ts.URL + "/address/" + dbtestdata.EthAddr7b),
    26  			status:      http.StatusOK,
    27  			contentType: "text/html; charset=utf-8",
    28  			body: []string{
    29  				`<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1.0,shrink-to-fit=no"><link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-Zenh87qX5JnK2Jl0vWa8Ck2rdkQ2Bzep5IDxbcnCeuOxjzrPF/et3URy9Bv1WTRi" crossorigin="anonymous"><link rel="stylesheet" href="/static/css/main.min.3.css"><script>var hasSecondary=true;</script><script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-OERcA2EqjJCMA+/3y+gxIOqMEjwtxJY7qPCqsdltbNJuaOe923+mo//f6V8Qbsw3" crossorigin="anonymous"></script><script src="/static/js/main.min.3.js"></script><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="description" content="Blockindex Fake Coin Explorer"><title>Blockindex Fake Coin Explorer</title></head><body><header id="header"><nav class="navbar navbar-expand-lg"><div class="container"><a class="navbar-brand" href="/" title="Home"><span class="trezor-logo"></span><span style="padding-left: 50px;">Fake Coin Explorer</span></a><button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation"><span class="navbar-toggler-icon"></span></button><div class="collapse navbar-collapse" id="navbarSupportedContent"><ul class="navbar-nav m-md-auto"><li class="nav-item pe-xl-4"><a href="/blocks" class="nav-link">Blocks</a></li><li class="nav-item"><a href="/" class="nav-link">Status</a></li></ul><span class="navbar-form"><form class="d-flex" id="search" action="/search" method="get"><input name="q" type="text" class="form-control form-control-lg" placeholder="Search for block, transaction, address or xpub" focus="true"><button class="btn" type="submit"><span class="search-icon"></span></button></form></span><div class="bb-group ms-lg-2 mt-2 mt-lg-0" role="group" aria-label="Currency switch"><input type="radio" class="btn-check" name="btnradio" id="primary-coin" autocomplete="off" checked><label class="btn" for="primary-coin">FAKE</label><input type="radio" class="btn-check" name="btnradio" id="secondary-coin" autocomplete="off"><label class="btn" for="secondary-coin">USD</label><button type="button" class="btn dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false"></button><div class="dropdown-menu row"><div class="col-3"><a href="?secondary=EUR&use_secondary=true">EUR</a></div><div class="col-3"><a href="?secondary=USD&use_secondary=true">USD</a></div></div></div></div></div></nav></header><main id="wrap"><div class="container"><div class="row g-0 ms-2 ms-lg-0"><div class="col-md-10 order-2 order-md-1"><h1>Address address7b.eth</h1><h5 class="col-12 d-flex h-data pb-2"><span class="ellipsis copyable">0x7B62EB7fe80350DC7EC945C0B73242cb9877FB1b</span></h5><h4 class="row"><div class="col-lg-6"><span class="copyable">0.<span class="amt-dec">000<span class="ns">000</span><span class="ns">000</span><span class="ns">123</span><span class="ns">450</span><span class="ns">123</span></span> FAKE</span></div><div class="col-lg-6"><span>0.<span class="amt-dec">00</span> USD</span></div></h4></div><div class="col-md-2 order-1 order-md-2 d-flex justify-content-center justify-content-md-end mb-3 mb-md-0"><div id="qrcode"></div><script type="text/javascript" src="/static/js/qrcode.min.js"></script><script type="text/javascript">new QRCode(document.getElementById("qrcode"), { text: "payto://xcb/0x7B62EB7fe80350DC7EC945C0B73242cb9877FB1b", width: 120, height: 120 });</script></div></div><table class="table data-table info-table"><tbody><tr><td style="white-space: nowrap;"><h5>Confirmed</h5></td><td></td></tr><tr><td style="width: 25%;">Balance</td><td><span class="amt copyable" cc="0.000000000123450123 FAKE"><span class="prim-amt">0.<span class="amt-dec">000<span class="ns">000</span><span class="ns">000</span><span class="ns">123</span><span class="ns">450</span><span class="ns">123</span></span> FAKE</span><span class="sec-amt">0.<span class="amt-dec">00</span> USD</span></span></td></tr><tr><td>Transactions</td><td>2</td></tr><tr><td>Non-contract Transactions</td><td>0</td></tr><tr><td>Internal Transactions</td><td>0</td></tr><tr><td>Nonce</td><td>123</td></tr></tbody></table><div class="accordion mt-2 mb-2" id="erc20"><div class="accordion-item"><div class="accordion-header" id="erc20Heading"><button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#erc20Body" aria-expanded="false" aria-controls="erc20Body"><div class="row g-0 w-100"><h5 class="col-md-4 mb-md-0">ERC20 Tokens <span class="badge bg-secondary">2</span></h5><h5 class="col-md-8 mb-md-0"><span tt="Total value of tokens">-</span></h5></div></button></div><div id="erc20Body" class="accordion-collapse collapse" aria-labelledby="erc20Heading" data-bs-parent="#erc20"><div class="accordion-body"><table class="table data-table mt-0 mb-0"><tbody><tr><th style="width: 25%;">Contract</th><th style="width: 30%;">Quantity</th><th style="width: 35%;">Value</th><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></tr><tr><td class="ellipsis"><a href="/address/0x0d0F936Ee4c93e25944694D6C121de94D9760F11"><span class="copyable" cc="0x0d0F936Ee4c93e25944694D6C121de94D9760F11" alias-type="Contract">Contract 13</span></a></td><td><span class="copyable">0.<span class="amt-dec">000<span class="ns">000</span><span class="ns">001</span><span class="ns">000</span><span class="ns">123</span><span class="ns">013</span></span> S13</span></td><td>-</span></td><td class="text-end">1</td></tr><tr><td class="ellipsis"><a href="/address/0x4af4114F73d1c1C903aC9E0361b379D1291808A2"><span class="copyable" cc="0x4af4114F73d1c1C903aC9E0361b379D1291808A2" alias-type="Contract">Contract 74</span></a></td><td><span class="copyable">0.<span class="amt-dec">001<span class="ns">000</span><span class="ns">123</span><span class="ns">074</span></span> S74</span></td><td>-</span></td><td class="text-end">1</td></tr></tbody></table></div></div></div></div><div class="accordion mt-2 mb-2" id="erc721"><div class="accordion-item"><div class="accordion-header" id="erc721Heading"><button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#erc721Body" aria-expanded="false" aria-controls="erc721Body"><div class="row g-0 w-100"><h5 class="col-12 mb-md-0">ERC721 Tokens <span class="badge bg-secondary">1</span></h5></div></button></div><div id="erc721Body" class="accordion-collapse collapse" aria-labelledby="erc721Heading" data-bs-parent="#erc721"><div class="accordion-body"><table class="table data-table mt-0 mb-0"><tbody><tr><th style="width: 25%;">Contract</th><th style="width: 65%;">Tokens</th><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></tr><tr><td class="ellipsis"><a href="/address/0xcdA9FC258358EcaA88845f19Af595e908bb7EfE9"><span class="copyable" cc="0xcdA9FC258358EcaA88845f19Af595e908bb7EfE9" alias-type="Contract">Contract 205</span></a></td><td><a href="/nft/0xcdA9FC258358EcaA88845f19Af595e908bb7EfE9/1">1</a></td><td class="text-end">1</td></tr></tbody></table></div></div></div></div><div class="row pt-3 pb-1"><h3 class="col-sm-6 col-lg-3 m-0 align-self-center">Transactions</h3><div class="col-sm-6 col-lg-3 my-2 my-lg-0 align-self-center"><select  class="w-100" onchange="self.location='?filter='+options[selectedIndex].value"><option>All</option><option  value="inputs">Address on input side</option><option  value="outputs">Address on output side</option><option  value="0">Non-contract</option><option  value="1">Internal</option><option  value="3">Contract 13 (ERC20)</option><option  value="2">Contract 74 (ERC20)</option><option  value="4">Contract 205 (ERC721)</option></select></div><div class="col-lg-6"></div></div><div><div class="tx-detail"><div class="row head"><div class="col-xs-7 col-md-8"><a href="/tx/0xca7628be5c80cda77163729ec63d218ee868a399d827a4682a478c6f48a6e22a" class="ellipsis copyable txid">0xca7628be5c80cda77163729ec63d218ee868a399d827a4682a478c6f48a6e22a</a><span class="ps-1" tt="Replace-by-Fee (RBF) transaction, could be overridden"> RBF</span></div><div class="col-12 small txvalue"><span tt="4-byte signature">0x23b872dd</span></div></div><div class="row body"><div class="col-md-4"><div class="row tx-in"><div class="col-12"><span class="ellipsis"><a href="/address/0x837E3f699d85a4b0B99894567e9233dFB1DcB081"><span class="copyable">0x837E3f699d85a4b0B99894567e9233dFB1DcB081</span></a></span></div></div></div><div class="col-md-1 col-xs-12 text-center">&nbsp;<span class="octicon"></span></div><div class="col-md-4"><div class="row tx-out"><div class="col-12"><span class="ellipsis"><a href="/address/0xcdA9FC258358EcaA88845f19Af595e908bb7EfE9"><span class="copyable" cc="0xcdA9FC258358EcaA88845f19Af595e908bb7EfE9" alias-type="Contract">Contract 205</span></a></span></div></div></div><div class="col-md-3 amt-out"><span class="amt tx-out copyable" cc="0 FAKE"><span class="prim-amt">0 FAKE</span><span class="sec-amt" tm="1969-12-31">0.<span class="amt-dec">00</span> USD</span><span class="csec-amt">0.<span class="amt-dec">00</span> USD</span></span></div></div><div class="row subhead">ERC721 Token Transfers</div><div class="row body"><div class="col-md-4"><div class="row tx-addr"><div class="col-12 ellipsis"><a href="/address/0x837E3f699d85a4b0B99894567e9233dFB1DcB081"><span class="copyable">0x837E3f699d85a4b0B99894567e9233dFB1DcB081</span></a></div></div></div><div class="col-md-1 col-xs-12 text-center">&nbsp;<span class="octicon"></span></div><div class="col-md-4"><div class="row tx-addr"><div class="col-12 ellipsis tx-own"><span class="copyable" cc="0x7B62EB7fe80350DC7EC945C0B73242cb9877FB1b" alias-type="ENS">address7b.eth</span></div></div></div><div class="col-md-3 amt-out">ID <a href="/nft/0xcdA9FC258358EcaA88845f19Af595e908bb7EfE9/1">1</a> S205</div></div><div class="row footer"><div class="col-sm-12 col-md-6">Fee <span class="amt txvalue copyable ms-3" cc="0.00008794500041041 FAKE"><span class="prim-amt">0.<span class="amt-dec">000<span class="ns">087</span><span class="ns">945</span><span class="ns">000</span><span class="ns">410</span><span class="ns">41</span></span> FAKE</span><span class="sec-amt" tm="1969-12-31">0.<span class="amt-dec">18</span> USD</span><span class="csec-amt">0.<span class="amt-dec">78</span> USD</span></span> <span class="fw-normal small">(<span cc="1.500000007"><span>1.<span class="amt-dec">500<span class="ns">000</span><span class="ns">007</span></span></span></span> Gwei/gas)</span></div><div class="col-sm-12 col-md-6 text-end"><span class="me-4"><span class="txvalue unconfirmed">Unconfirmed Transaction!</span></span><span class="amt txvalue copyable" cc="0 FAKE"><span class="prim-amt">0 FAKE</span><span class="sec-amt" tm="1969-12-31">0.<span class="amt-dec">00</span> USD</span><span class="csec-amt">0.<span class="amt-dec">00</span> USD</span></span></div></div></div><div class="tx-detail"><div class="row head"><div class="col-xs-7 col-md-8"><a href="/tx/0xc92919ad24ffd58f760b18df7949f06e1190cf54a50a0e3745a385608ed3cbf2" class="ellipsis copyable txid">0xc92919ad24ffd58f760b18df7949f06e1190cf54a50a0e3745a385608ed3cbf2</a><span class="ps-1" tt="Replace-by-Fee (RBF) transaction, could be overridden"> RBF</span></div><div class="col-12 small txvalue"><span tt="4-byte signature">0x4f150787</span></div></div><div class="row body"><div class="col-md-4"><div class="row tx-in"><div class="col-12"><span class="ellipsis"><a href="/address/0x4Bda106325C335dF99eab7fE363cAC8A0ba2a24D"><span class="copyable">0x4Bda106325C335dF99eab7fE363cAC8A0ba2a24D</span></a></span></div></div></div><div class="col-md-1 col-xs-12 text-center">&nbsp;<span class="octicon"></span></div><div class="col-md-4"><div class="row tx-out"><div class="col-12"><span class="ellipsis"><a href="/address/0x479CC461fEcd078F766eCc58533D6F69580CF3AC"><span class="copyable">0x479CC461fEcd078F766eCc58533D6F69580CF3AC</span></a></span></div></div></div><div class="col-md-3 amt-out"><span class="amt tx-out copyable" cc="0 FAKE"><span class="prim-amt">0 FAKE</span><span class="sec-amt" tm="1969-12-31">0.<span class="amt-dec">00</span> USD</span><span class="csec-amt">0.<span class="amt-dec">00</span> USD</span></span></div></div><div class="row subhead">ERC20 Token Transfers</div><div class="row body"><div class="col-md-4"><div class="row tx-addr"><div class="col-12 ellipsis"><a href="/address/0x555Ee11FBDDc0E49A9bAB358A8941AD95fFDB48f"><span class="copyable">0x555Ee11FBDDc0E49A9bAB358A8941AD95fFDB48f</span></a></div></div></div><div class="col-md-1 col-xs-12 text-center">&nbsp;<span class="octicon"></span></div><div class="col-md-4"><div class="row tx-addr"><div class="col-12 ellipsis"><a href="/address/0x4Bda106325C335dF99eab7fE363cAC8A0ba2a24D"><span class="copyable">0x4Bda106325C335dF99eab7fE363cAC8A0ba2a24D</span></a></div></div></div><div class="col-md-3 amt-out"><span class="amt tx-out copyable" cc="7.675000000000000001 S13"><span class="prim-amt">7.<span class="amt-dec">675<span class="ns">000</span><span class="ns">000</span><span class="ns">000</span><span class="ns">000</span><span class="ns">001</span></span> S13</span><span class="sec-amt">-</span></span></div></div><div class="row body"><div class="col-md-4"><div class="row tx-addr"><div class="col-12 ellipsis"><a href="/address/0x4Bda106325C335dF99eab7fE363cAC8A0ba2a24D"><span class="copyable">0x4Bda106325C335dF99eab7fE363cAC8A0ba2a24D</span></a></div></div></div><div class="col-md-1 col-xs-12 text-center">&nbsp;<span class="octicon"></span></div><div class="col-md-4"><div class="row tx-addr"><div class="col-12 ellipsis"><a href="/address/0x555Ee11FBDDc0E49A9bAB358A8941AD95fFDB48f"><span class="copyable">0x555Ee11FBDDc0E49A9bAB358A8941AD95fFDB48f</span></a></div></div></div><div class="col-md-3 amt-out"><span class="amt tx-out copyable" cc="854.307892726464 S74"><span class="prim-amt">854.<span class="amt-dec">307<span class="ns">892</span><span class="ns">726</span><span class="ns">464</span></span> S74</span><span class="sec-amt">-</span></span></div></div><div class="row body"><div class="col-md-4"><div class="row tx-addr"><div class="col-12 ellipsis tx-own"><span class="copyable" cc="0x7B62EB7fe80350DC7EC945C0B73242cb9877FB1b" alias-type="ENS">address7b.eth</span></div></div></div><div class="col-md-1 col-xs-12 text-center">&nbsp;<span class="octicon"></span></div><div class="col-md-4"><div class="row tx-addr"><div class="col-12 ellipsis"><a href="/address/0x4Bda106325C335dF99eab7fE363cAC8A0ba2a24D"><span class="copyable">0x4Bda106325C335dF99eab7fE363cAC8A0ba2a24D</span></a></div></div></div><div class="col-md-3 amt-out"><span class="amt tx-out copyable" cc="871.180000950184 S74"><span class="prim-amt">871.<span class="amt-dec">180<span class="ns">000</span><span class="ns">950</span><span class="ns">184</span></span> S74</span><span class="sec-amt">-</span></span></div></div><div class="row body"><div class="col-md-4"><div class="row tx-addr"><div class="col-12 ellipsis"><a href="/address/0x4Bda106325C335dF99eab7fE363cAC8A0ba2a24D"><span class="copyable">0x4Bda106325C335dF99eab7fE363cAC8A0ba2a24D</span></a></div></div></div><div class="col-md-1 col-xs-12 text-center">&nbsp;<span class="octicon"></span></div><div class="col-md-4"><div class="row tx-addr"><div class="col-12 ellipsis tx-own"><span class="copyable" cc="0x7B62EB7fe80350DC7EC945C0B73242cb9877FB1b" alias-type="ENS">address7b.eth</span></div></div></div><div class="col-md-3 amt-out"><span class="amt tx-out copyable" cc="7.674999999999991915 S13"><span class="prim-amt">7.<span class="amt-dec">674<span class="ns">999</span><span class="ns">999</span><span class="ns">999</span><span class="ns">991</span><span class="ns">915</span></span> S13</span><span class="sec-amt">-</span></span></div></div><div class="row footer"><div class="col-sm-12 col-md-6">Fee <span class="amt txvalue copyable ms-3" cc="0.000216368 FAKE"><span class="prim-amt">0.<span class="amt-dec">000<span class="ns">216</span><span class="ns">368</span></span> FAKE</span><span class="sec-amt" tm="1969-12-31">0.<span class="amt-dec">43</span> USD</span><span class="csec-amt">1.<span class="amt-dec">93</span> USD</span></span> <span class="fw-normal small">(<span cc="1"><span>1</span></span> Gwei/gas)</span></div><div class="col-sm-12 col-md-6 text-end"><span class="me-4"><span class="txvalue unconfirmed">Unconfirmed Transaction!</span></span><span class="amt txvalue copyable" cc="0 FAKE"><span class="prim-amt">0 FAKE</span><span class="sec-amt" tm="1969-12-31">0.<span class="amt-dec">00</span> USD</span><span class="csec-amt">0.<span class="amt-dec">00</span> USD</span></span></div></div></div></div></div></main><footer id="footer"><div class="container"><nav class="navbar navbar-dark"><span class="navbar-nav"><a class="nav-link" href="https://github.com/bchainhub" target="_blank" rel="noopener noreferrer">Blockchain Hub</a></span><span class="navbar-nav ml-md-auto"><a class="nav-link" href="mailto:contact@blockindex.net" target="_blank" rel="noopener noreferrer">Contact</a></span><span class="navbar-nav ml-md-auto"><a class="nav-link" href="mailto:verify@blockindex.net" target="_blank" rel="noopener noreferrer">Get Verified</a></span><span class="navbar-nav ml-md-auto"><a class="nav-link" href="/sendtx">Send Transaction</a></span><span class="navbar-nav ml-md-auto d-md-flex d-none"><a class="nav-link" href="https://txms.info/" target="_blank" rel="noopener noreferrer">Send Tx Offline</a></span><span class="navbar-nav ml-md-auto d-lg-flex d-none"><a class="nav-link" href="payto://xcb/cb7147879011ea207df5b35a24ca6f0859dcfb145999" target="_blank" rel="noopener noreferrer">Support Us</a></span></nav></div></footer></body></html>`,
    30  			},
    31  		},
    32  		{
    33  			name:        "explorerAddress " + dbtestdata.EthAddr5d,
    34  			r:           newGetRequest(ts.URL + "/address/" + dbtestdata.EthAddr5d),
    35  			status:      http.StatusOK,
    36  			contentType: "text/html; charset=utf-8",
    37  			body: []string{
    38  				`<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1.0,shrink-to-fit=no"><link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-Zenh87qX5JnK2Jl0vWa8Ck2rdkQ2Bzep5IDxbcnCeuOxjzrPF/et3URy9Bv1WTRi" crossorigin="anonymous"><link rel="stylesheet" href="/static/css/main.min.3.css"><script>var hasSecondary=true;</script><script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-OERcA2EqjJCMA+/3y+gxIOqMEjwtxJY7qPCqsdltbNJuaOe923+mo//f6V8Qbsw3" crossorigin="anonymous"></script><script src="/static/js/main.min.3.js"></script><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="description" content="Blockindex Fake Coin Explorer"><title>Blockindex Fake Coin Explorer</title></head><body><header id="header"><nav class="navbar navbar-expand-lg"><div class="container"><a class="navbar-brand" href="/" title="Home"><span class="trezor-logo"></span><span style="padding-left: 50px;">Fake Coin Explorer</span></a><button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation"><span class="navbar-toggler-icon"></span></button><div class="collapse navbar-collapse" id="navbarSupportedContent"><ul class="navbar-nav m-md-auto"><li class="nav-item pe-xl-4"><a href="/blocks" class="nav-link">Blocks</a></li><li class="nav-item"><a href="/" class="nav-link">Status</a></li></ul><span class="navbar-form"><form class="d-flex" id="search" action="/search" method="get"><input name="q" type="text" class="form-control form-control-lg" placeholder="Search for block, transaction, address or xpub" focus="true"><button class="btn" type="submit"><span class="search-icon"></span></button></form></span><div class="bb-group ms-lg-2 mt-2 mt-lg-0" role="group" aria-label="Currency switch"><input type="radio" class="btn-check" name="btnradio" id="primary-coin" autocomplete="off" checked><label class="btn" for="primary-coin">FAKE</label><input type="radio" class="btn-check" name="btnradio" id="secondary-coin" autocomplete="off"><label class="btn" for="secondary-coin">USD</label><button type="button" class="btn dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false"></button><div class="dropdown-menu row"><div class="col-3"><a href="?secondary=EUR&use_secondary=true">EUR</a></div><div class="col-3"><a href="?secondary=USD&use_secondary=true">USD</a></div></div></div></div></div></nav></header><main id="wrap"><div class="container"><div class="row g-0 ms-2 ms-lg-0"><div class="col-md-10 order-2 order-md-1"><h1>Address </h1><h5 class="col-12 d-flex h-data pb-2"><span class="ellipsis copyable">0x5Dc6288b35E0807A3d6fEB89b3a2Ff4aB773168e</span></h5><h4 class="row"><div class="col-lg-6"><span class="copyable">0.<span class="amt-dec">000<span class="ns">000</span><span class="ns">000</span><span class="ns">123</span><span class="ns">450</span><span class="ns">093</span></span> FAKE</span></div><div class="col-lg-6"><span>0.<span class="amt-dec">00</span> USD</span></div></h4></div><div class="col-md-2 order-1 order-md-2 d-flex justify-content-center justify-content-md-end mb-3 mb-md-0"><div id="qrcode"></div><script type="text/javascript" src="/static/js/qrcode.min.js"></script><script type="text/javascript">new QRCode(document.getElementById("qrcode"), { text: "payto://xcb/0x5Dc6288b35E0807A3d6fEB89b3a2Ff4aB773168e", width: 120, height: 120 });</script></div></div><table class="table data-table info-table"><tbody><tr><td style="white-space: nowrap;"><h5>Confirmed</h5></td><td></td></tr><tr><td style="width: 25%;">Balance</td><td><span class="amt copyable" cc="0.000000000123450093 FAKE"><span class="prim-amt">0.<span class="amt-dec">000<span class="ns">000</span><span class="ns">000</span><span class="ns">123</span><span class="ns">450</span><span class="ns">093</span></span> FAKE</span><span class="sec-amt">0.<span class="amt-dec">00</span> USD</span></span></td></tr><tr><td>Transactions</td><td>1</td></tr><tr><td>Non-contract Transactions</td><td>1</td></tr><tr><td>Internal Transactions</td><td>0</td></tr><tr><td>Nonce</td><td>93</td></tr></tbody></table><div class="accordion mt-2 mb-2" id="erc1155"><div class="accordion-item"><div class="accordion-header" id="erc1155Heading"><button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#erc1155Body" aria-expanded="false" aria-controls="erc1155Body"><div class="row g-0 w-100"><h5 class="col-12 mb-md-0">ERC1155 Tokens <span class="badge bg-secondary">1</span></h5></div></button></div><div id="erc1155Body" class="accordion-collapse collapse" aria-labelledby="erc1155Heading" data-bs-parent="#erc1155"><div class="accordion-body"><table class="table data-table mt-0 mb-0"><tbody><tr><th style="width: 25%;">Contract</th><th style="width: 65%;">Tokens</th><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></tr><tr><td class="ellipsis"><a href="/address/0x6Fd712E3A5B556654044608F9129040A4839E36c"><span class="copyable" cc="0x6Fd712E3A5B556654044608F9129040A4839E36c" alias-type="Contract">Contract 111</span></a></td><td><span>1 S111</span> of ID <a href="/nft/0x6Fd712E3A5B556654044608F9129040A4839E36c/1776">1776</a>, <span>10 S111</span> of ID <a href="/nft/0x6Fd712E3A5B556654044608F9129040A4839E36c/1898">1898</a></td><td class="text-end">1</td></tr></tbody></table></div></div></div></div><div class="row pt-3 pb-1"><h3 class="col-sm-6 col-lg-3 m-0 align-self-center">Transactions</h3><div class="col-sm-6 col-lg-3 my-2 my-lg-0 align-self-center"><select  class="w-100" onchange="self.location='?filter='+options[selectedIndex].value"><option>All</option><option  value="inputs">Address on input side</option><option  value="outputs">Address on output side</option><option  value="0">Non-contract</option><option  value="1">Internal</option><option  value="2">Contract 111 (ERC1155)</option></select></div><div class="col-lg-6"></div></div><div><div class="tx-detail"><div class="row head"><div class="col-xs-7 col-md-8"><a href="/tx/0x6942c79c04ae981a2d194deb0ae5ae5e9d5d7a90fd9f52246b162fa645155e3a" class="ellipsis copyable txid">0x6942c79c04ae981a2d194deb0ae5ae5e9d5d7a90fd9f52246b162fa645155e3a</a><span class="ps-1" tt="Replace-by-Fee (RBF) transaction, could be overridden"> RBF</span></div><div class="col-12 small txvalue"><span tt="4-byte signature">0x78627919</span></div></div><div class="row body"><div class="col-md-4"><div class="row tx-in"><div class="col-12 tx-own"><span class="ellipsis"><span class="copyable">0x5Dc6288b35E0807A3d6fEB89b3a2Ff4aB773168e</span></span></div></div></div><div class="col-md-1 col-xs-12 text-center">&nbsp;<span class="octicon"></span></div><div class="col-md-4"><div class="row tx-out"><div class="col-12"><span class="ellipsis"><a href="/address/0x6Fd712E3A5B556654044608F9129040A4839E36c"><span class="copyable" cc="0x6Fd712E3A5B556654044608F9129040A4839E36c" alias-type="Contract">Contract 111</span></a></span></div></div></div><div class="col-md-3 amt-out"><span class="amt tx-out copyable" cc="0 FAKE"><span class="prim-amt">0 FAKE</span><span class="sec-amt" tm="1969-12-31">0.<span class="amt-dec">00</span> USD</span><span class="csec-amt">0.<span class="amt-dec">00</span> USD</span></span></div></div><div class="row subhead">ERC1155 Token Transfers</div><div class="row body"><div class="col-md-4"><div class="row tx-addr"><div class="col-12 ellipsis"><a href="/address/0x0000000000000000000000000000000000000000"><span class="copyable">0x0000000000000000000000000000000000000000</span></a></div></div></div><div class="col-md-1 col-xs-12 text-center">&nbsp;<span class="octicon"></span></div><div class="col-md-4"><div class="row tx-addr"><div class="col-12 ellipsis tx-own"><span class="copyable">0x5Dc6288b35E0807A3d6fEB89b3a2Ff4aB773168e</span></div></div></div><div class="col-md-3 amt-out"><span>1 S111</span> of ID <a href="/nft/0x6Fd712E3A5B556654044608F9129040A4839E36c/1776">1776</a>, <span>10 S111</span> of ID <a href="/nft/0x6Fd712E3A5B556654044608F9129040A4839E36c/1898">1898</a></div></div><div class="row footer"><div class="col-sm-12 col-md-6">Fee <span class="amt txvalue copyable ms-3" cc="0.000081891755740665 FAKE"><span class="prim-amt">0.<span class="amt-dec">000<span class="ns">081</span><span class="ns">891</span><span class="ns">755</span><span class="ns">740</span><span class="ns">665</span></span> FAKE</span><span class="sec-amt" tm="1969-12-31">0.<span class="amt-dec">16</span> USD</span><span class="csec-amt">0.<span class="amt-dec">73</span> USD</span></span> <span class="fw-normal small">(<span cc="1.110803355"><span>1.<span class="amt-dec">110<span class="ns">803</span><span class="ns">355</span></span></span></span> Gwei/gas)</span></div><div class="col-sm-12 col-md-6 text-end"><span class="me-4"><span class="txvalue unconfirmed">Unconfirmed Transaction!</span></span><span class="amt txvalue copyable" cc="0 FAKE"><span class="prim-amt">0 FAKE</span><span class="sec-amt" tm="1969-12-31">0.<span class="amt-dec">00</span> USD</span><span class="csec-amt">0.<span class="amt-dec">00</span> USD</span></span></div></div></div></div></div></main><footer id="footer"><div class="container"><nav class="navbar navbar-dark"><span class="navbar-nav"><a class="nav-link" href="https://github.com/bchainhub" target="_blank" rel="noopener noreferrer">Blockchain Hub</a></span><span class="navbar-nav ml-md-auto"><a class="nav-link" href="mailto:contact@blockindex.net" target="_blank" rel="noopener noreferrer">Contact</a></span><span class="navbar-nav ml-md-auto"><a class="nav-link" href="mailto:verify@blockindex.net" target="_blank" rel="noopener noreferrer">Get Verified</a></span><span class="navbar-nav ml-md-auto"><a class="nav-link" href="/sendtx">Send Transaction</a></span><span class="navbar-nav ml-md-auto d-md-flex d-none"><a class="nav-link" href="https://txms.info/" target="_blank" rel="noopener noreferrer">Send Tx Offline</a></span><span class="navbar-nav ml-md-auto d-lg-flex d-none"><a class="nav-link" href="payto://xcb/cb7147879011ea207df5b35a24ca6f0859dcfb145999" target="_blank" rel="noopener noreferrer">Support Us</a></span></nav></div></footer></body></html>`,
    39  			},
    40  		},
    41  		{
    42  			name:        "explorerTx " + dbtestdata.EthTxidB1T2,
    43  			r:           newGetRequest(ts.URL + "/tx/0x" + dbtestdata.EthTxidB1T2),
    44  			status:      http.StatusOK,
    45  			contentType: "text/html; charset=utf-8",
    46  			body: []string{
    47  				`<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1.0,shrink-to-fit=no"><link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-Zenh87qX5JnK2Jl0vWa8Ck2rdkQ2Bzep5IDxbcnCeuOxjzrPF/et3URy9Bv1WTRi" crossorigin="anonymous"><link rel="stylesheet" href="/static/css/main.min.3.css"><script>var hasSecondary=true;</script><script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-OERcA2EqjJCMA+/3y+gxIOqMEjwtxJY7qPCqsdltbNJuaOe923+mo//f6V8Qbsw3" crossorigin="anonymous"></script><script src="/static/js/main.min.3.js"></script><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="description" content="Blockindex Fake Coin Explorer"><title>Blockindex Fake Coin Explorer</title></head><body><header id="header"><nav class="navbar navbar-expand-lg"><div class="container"><a class="navbar-brand" href="/" title="Home"><span class="trezor-logo"></span><span style="padding-left: 50px;">Fake Coin Explorer</span></a><button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation"><span class="navbar-toggler-icon"></span></button><div class="collapse navbar-collapse" id="navbarSupportedContent"><ul class="navbar-nav m-md-auto"><li class="nav-item pe-xl-4"><a href="/blocks" class="nav-link">Blocks</a></li><li class="nav-item"><a href="/" class="nav-link">Status</a></li></ul><span class="navbar-form"><form class="d-flex" id="search" action="/search" method="get"><input name="q" type="text" class="form-control form-control-lg" placeholder="Search for block, transaction, address or xpub" focus="true"><button class="btn" type="submit"><span class="search-icon"></span></button></form></span><div class="bb-group ms-lg-2 mt-2 mt-lg-0" role="group" aria-label="Currency switch"><input type="radio" class="btn-check" name="btnradio" id="primary-coin" autocomplete="off" checked><label class="btn" for="primary-coin">FAKE</label><input type="radio" class="btn-check" name="btnradio" id="secondary-coin" autocomplete="off"><label class="btn" for="secondary-coin">USD</label><button type="button" class="btn dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false"></button><div class="dropdown-menu row"><div class="col-3"><a href="?secondary=EUR&use_secondary=true">EUR</a></div><div class="col-3"><a href="?secondary=USD&use_secondary=true">USD</a></div></div></div></div></div></nav></header><main id="wrap"><div class="container"><div class="row"><h1 class="col-12">Transaction</h1></div><div class="row pt-3"><h5 class="col-12 d-flex h-data"><span class="ellipsis copyable">0xa9cd088aba2131000da6f38a33c20169baee476218deea6b78720700b895b101</span></h5></div><table class="table data-table info-table"><tbody><tr><td>In Block</td><td class="ellipsis" style="max-width: 280px"><span class="badge bg-danger">Unconfirmed</span></td></tr><tr><td>Status</td><td><span class="badge bg-success">Success</span></td></tr><tr><td>Value</td><td><span class="amt copyable" cc="0 FAKE"><span class="prim-amt">0 FAKE</span><span class="sec-amt" tm="1969-12-31">0.<span class="amt-dec">00</span> USD</span><span class="csec-amt">0.<span class="amt-dec">00</span> USD</span></span></td></tr><tr><td>Gas Used / Limit</td><td>52<span class="ns">025</span> / 78<span class="ns">037</span></td></tr><tr><td>Gas Price</td><td><span class="amt copyable" cc="0.00000004 FAKE"><span class="prim-amt">0.<span class="amt-dec">000<span class="ns">000</span><span class="ns">04</span></span> FAKE</span><span class="sec-amt" tm="1969-12-31">0.<span class="amt-dec">00</span> USD</span><span class="csec-amt">0.<span class="amt-dec">00</span> USD</span></span> <span class="fw-normal ps-3">(<span class="copyable" cc="40"><span>40</span></span> Gwei)</span></td></tr><tr><td>Fees</td><td><span class="amt copyable" cc="0.002081 FAKE"><span class="prim-amt">0.<span class="amt-dec">002<span class="ns">081</span></span> FAKE</span><span class="sec-amt" tm="1969-12-31">4.<span class="amt-dec">16</span> USD</span><span class="csec-amt">18.<span class="amt-dec">55</span> USD</span></span></td></tr><tr><td><span tt="Replace by fee">RBF</span></td><td><span tt="Replace-by-Fee transaction, could be overridden by a new transaction">ON</span></td></tr></tbody></table><div class="pt-1"><div class="tx-detail"><div class="row head"><div class="col-xs-7 col-md-8"><a href="/tx/0xa9cd088aba2131000da6f38a33c20169baee476218deea6b78720700b895b101" class="ellipsis copyable txid">0xa9cd088aba2131000da6f38a33c20169baee476218deea6b78720700b895b101</a><span class="ps-1" tt="Replace-by-Fee (RBF) transaction, could be overridden"> RBF</span></div><div class="col-12 small"><span class="txvalue">Transfer</span><span class="ms-1" tt="4-byte signature"> (0xa9059cbb)</span></div></div><div class="row body"><div class="col-md-4"><div class="row tx-in"><div class="col-12"><span class="ellipsis"><a href="/address/0x20cD153de35D469BA46127A0C8F18626b59a256A"><span class="copyable" cc="0x20cD153de35D469BA46127A0C8F18626b59a256A" alias-type="ENS">address20.eth</span></a></span></div></div></div><div class="col-md-1 col-xs-12 text-center">&nbsp;<span class="octicon"></span></div><div class="col-md-4"><div class="row tx-out"><div class="col-12"><span class="ellipsis"><a href="/address/0x4af4114F73d1c1C903aC9E0361b379D1291808A2"><span class="copyable" cc="0x4af4114F73d1c1C903aC9E0361b379D1291808A2" alias-type="Contract">Contract 74</span></a></span></div></div></div><div class="col-md-3 amt-out"><span class="amt tx-out copyable" cc="0 FAKE"><span class="prim-amt">0 FAKE</span><span class="sec-amt" tm="1969-12-31">0.<span class="amt-dec">00</span> USD</span><span class="csec-amt">0.<span class="amt-dec">00</span> USD</span></span></div></div><div class="row subhead">ERC20 Token Transfers</div><div class="row body"><div class="col-md-4"><div class="row tx-addr"><div class="col-12 ellipsis"><a href="/address/0x20cD153de35D469BA46127A0C8F18626b59a256A"><span class="copyable" cc="0x20cD153de35D469BA46127A0C8F18626b59a256A" alias-type="ENS">address20.eth</span></a></div></div></div><div class="col-md-1 col-xs-12 text-center">&nbsp;<span class="octicon"></span></div><div class="col-md-4"><div class="row tx-addr"><div class="col-12 ellipsis"><a href="/address/0x555Ee11FBDDc0E49A9bAB358A8941AD95fFDB48f"><span class="copyable">0x555Ee11FBDDc0E49A9bAB358A8941AD95fFDB48f</span></a></div></div></div><div class="col-md-3 amt-out"><span class="amt tx-out copyable" cc="10000000000 S74"><span class="prim-amt">10<span class="nc">000</span><span class="nc">000</span><span class="nc">000</span> S74</span><span class="sec-amt">-</span></span></div></div><div class="row footer"><div class="col-sm-12 col-md-6">Fee <span class="amt txvalue copyable ms-3" cc="0.002081 FAKE"><span class="prim-amt">0.<span class="amt-dec">002<span class="ns">081</span></span> FAKE</span><span class="sec-amt" tm="1969-12-31">4.<span class="amt-dec">16</span> USD</span><span class="csec-amt">18.<span class="amt-dec">55</span> USD</span></span> <span class="fw-normal small">(<span cc="40"><span>40</span></span> Gwei/gas)</span></div><div class="col-sm-12 col-md-6 text-end"><span class="me-4"><span class="txvalue unconfirmed">Unconfirmed Transaction!</span></span><span class="amt txvalue copyable" cc="0 FAKE"><span class="prim-amt">0 FAKE</span><span class="sec-amt" tm="1969-12-31">0.<span class="amt-dec">00</span> USD</span><span class="csec-amt">0.<span class="amt-dec">00</span> USD</span></span></div></div></div></div><div class="pt-2"><h5>Input Data</h5><div class="accordion" id="inputData"><div class="accordion-item"><h2 class="accordion-header" id="inputDataHeading"><button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#inputDataBody" aria-expanded="false" aria-controls="inputDataBody"><h5 class="mb-0">Transfer  <span class="fw-normal small" tt="4-byte signature">0xa9059cbb</span></h5></button></h2><div id="inputDataBody" class="accordion-collapse collapse" aria-labelledby="inputDataHeading" data-bs-parent="#inputData"><div class="accordion-body"><div class="row"><div class="col-12 mx-1 mx-md-0"><span class="copyable" style="overflow-wrap: break-word;">0xa9059cbb000000000000000000000000555ee11fbddc0e49a9bab358a8941ad95ffdb48f00000000000000000000000000000000000000000000021e19e0c9bab2400000</span></div><div class="col-12 mx-1 mx-md-0 pt-2"><span class="copyable">transfer(address, uint256)</span></div><div class="col-12"><table class="table data-table mt-2 mb-0"><thead><tr><th style="width: 5%;">#</th><th style="width: 20%;">Type</th><th>Data</th></tr></thead><tbody><tr><td>0</td><td>address</td><td><a href="/address/0x555Ee11FBDDc0E49A9bAB358A8941AD95fFDB48f"><span class="copyable">0x555Ee11FBDDc0E49A9bAB358A8941AD95fFDB48f</span></a></td></tr><tr><td>1</td><td>uint256</td><td><span class="copyable">10000000000000000000000</span></td></tr></tbody></table></div></div></div></div></div></div></div><div class="pt-4"><h5>Raw Transaction</h5><div class="json"><pre id="raw"></pre></div><script type="text/javascript">var raw = {"tx":{"nonce":"0xd0","gasPrice":"0x9502f9000","gas":"0x130d5","to":"0x4af4114F73d1c1C903aC9E0361b379D1291808A2","value":"0x0","input":"0xa9059cbb000000000000000000000000555ee11fbddc0e49a9bab358a8941ad95ffdb48f00000000000000000000000000000000000000000000021e19e0c9bab2400000","hash":"0xa9cd088aba2131000da6f38a33c20169baee476218deea6b78720700b895b101","blockNumber":"0x41eee8","from":"0x20cD153de35D469BA46127A0C8F18626b59a256A","transactionIndex":"0x0"},"internalData":{"type":0,"transfers":[{"type":1,"from":"9f4981531fda132e83c44680787dfa7ee31e4f8d","to":"4af4114f73d1c1c903ac9e0361b379d1291808a2","value":1000000},{"type":0,"from":"3e3a3d69dc66ba10737f531ed088954a9ec89d97","to":"9f4981531fda132e83c44680787dfa7ee31e4f8d","value":1000001},{"type":0,"from":"3e3a3d69dc66ba10737f531ed088954a9ec89d97","to":"3e3a3d69dc66ba10737f531ed088954a9ec89d97","value":1000002}],"Error":""},"receipt":{"gasUsed":"0xcb39","status":"0x1","logs":[{"address":"0x4af4114F73d1c1C903aC9E0361b379D1291808A2","topics":["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef","0x00000000000000000000000020cd153de35d469ba46127a0c8f18626b59a256a","0x000000000000000000000000555ee11fbddc0e49a9bab358a8941ad95ffdb48f"],"data":"0x00000000000000000000000000000000000000000000021e19e0c9bab2400000"}]}};document.getElementById('raw').innerHTML = syntaxHighlight(raw);</script></div></div></main><footer id="footer"><div class="container"><nav class="navbar navbar-dark"><span class="navbar-nav"><a class="nav-link" href="https://github.com/bchainhub" target="_blank" rel="noopener noreferrer">Blockchain Hub</a></span><span class="navbar-nav ml-md-auto"><a class="nav-link" href="mailto:contact@blockindex.net" target="_blank" rel="noopener noreferrer">Contact</a></span><span class="navbar-nav ml-md-auto"><a class="nav-link" href="mailto:verify@blockindex.net" target="_blank" rel="noopener noreferrer">Get Verified</a></span><span class="navbar-nav ml-md-auto"><a class="nav-link" href="/sendtx">Send Transaction</a></span><span class="navbar-nav ml-md-auto d-md-flex d-none"><a class="nav-link" href="https://txms.info/" target="_blank" rel="noopener noreferrer">Send Tx Offline</a></span><span class="navbar-nav ml-md-auto d-lg-flex d-none"><a class="nav-link" href="payto://xcb/cb7147879011ea207df5b35a24ca6f0859dcfb145999" target="_blank" rel="noopener noreferrer">Support Us</a></span></nav></div></footer></body></html>`,
    48  			},
    49  		}, {
    50  			name:        "explorerTokenDetail " + dbtestdata.EthAddr7b,
    51  			r:           newGetRequest(ts.URL + "/nft/" + dbtestdata.EthAddrContractCd + "/" + "1"),
    52  			status:      http.StatusOK,
    53  			contentType: "text/html; charset=utf-8",
    54  			body:        []string{`<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1.0,shrink-to-fit=no"><link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-Zenh87qX5JnK2Jl0vWa8Ck2rdkQ2Bzep5IDxbcnCeuOxjzrPF/et3URy9Bv1WTRi" crossorigin="anonymous"><link rel="stylesheet" href="/static/css/main.min.3.css"><script>var hasSecondary=true;</script><script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-OERcA2EqjJCMA+/3y+gxIOqMEjwtxJY7qPCqsdltbNJuaOe923+mo//f6V8Qbsw3" crossorigin="anonymous"></script><script src="/static/js/main.min.3.js"></script><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="description" content="Blockindex Fake Coin Explorer"><title>Blockindex Fake Coin Explorer</title></head><body><header id="header"><nav class="navbar navbar-expand-lg"><div class="container"><a class="navbar-brand" href="/" title="Home"><span class="trezor-logo"></span><span style="padding-left: 50px;">Fake Coin Explorer</span></a><button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation"><span class="navbar-toggler-icon"></span></button><div class="collapse navbar-collapse" id="navbarSupportedContent"><ul class="navbar-nav m-md-auto"><li class="nav-item pe-xl-4"><a href="/blocks" class="nav-link">Blocks</a></li><li class="nav-item"><a href="/" class="nav-link">Status</a></li></ul><span class="navbar-form"><form class="d-flex" id="search" action="/search" method="get"><input name="q" type="text" class="form-control form-control-lg" placeholder="Search for block, transaction, address or xpub" focus="true"><button class="btn" type="submit"><span class="search-icon"></span></button></form></span><div class="bb-group ms-lg-2 mt-2 mt-lg-0" role="group" aria-label="Currency switch"><input type="radio" class="btn-check" name="btnradio" id="primary-coin" autocomplete="off" checked><label class="btn" for="primary-coin">FAKE</label><input type="radio" class="btn-check" name="btnradio" id="secondary-coin" autocomplete="off"><label class="btn" for="secondary-coin">USD</label><button type="button" class="btn dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false"></button><div class="dropdown-menu row"><div class="col-3"><a href="?secondary=EUR&use_secondary=true">EUR</a></div><div class="col-3"><a href="?secondary=USD&use_secondary=true">USD</a></div></div></div></div></div></nav></header><main id="wrap"><div class="container"><h1>NFT Token Detail</h1><div class="row"><div class="col-md-6"><table class="table data-table info-table"><tbody><tr><td style="width: 25%;">Token ID</td><td><span class="copyable">1</span></td></tr><tr id="name" style="display: none;"><td>NTF Name</td><td class="copyable"></td></tr><tr id="description" style="display: none;"><td>NTF Description</td><td></td></tr><tr><td>Contract</td><td><a href="/address/0xcdA9FC258358EcaA88845f19Af595e908bb7EfE9"><span class="copyable">0xcdA9FC258358EcaA88845f19Af595e908bb7EfE9</span></a><br>Contract 205</td></tr><tr><td>Contract type</td><td>ERC20</td></tr></tbody></table></div><div class="col-md-6 mt-4" id="image"></div></div><div id="metadatablock"><h5>Metadata</h5><div class="json"><pre id="raw">Loading metadata from <a href="https://ipfs.io/ipfs/cda9fc258358ecaa88845f19af595e908bb7efe9.json">https://ipfs.io/ipfs/cda9fc258358ecaa88845f19af595e908bb7efe9.json</a>...</pre></div></div><script type="text/javascript">function showImage(s) {const img = document.createElement("img");img.className="border w-100 bg-white";img.src = s;const src = document.getElementById("image");src.appendChild(img);src.style.display="block";}function nftInfo(id,text) {const src = document.getElementById(id);src.getElementsByTagName("td")[1].innerText=text;src.style.display='';}async function getMetadata(url) {try {const uri="https://ipfs.io/ipfs/cda9fc258358ecaa88845f19af595e908bb7efe9.json";if(uri) {const response = await fetch(uri);const contentType=response.headers.get('content-type');if(contentType&&contentType.toString().startsWith("image/")) {showImage(uri);document.getElementById("metadatablock").style.display='none';} else {const data = await response.json();document.getElementById("raw").innerHTML = syntaxHighlight(data);if (data.name) {nftInfo('name',data.name)}if (data.description) {nftInfo('description',data.description)}if (data.image||data.image_url) {let s=data.image?.toString();if(!s) {s=data.image_url;}if(s.startsWith("ipfs://")) {s=s.replace("ipfs://","https://ipfs.io/ipfs/");}if(s.startsWith("https://")) {showImage(s);}}}} else {document.getElementById("raw").innerText = "Error: cannot get metadata link from blockchain";}} catch(e) {document.getElementById("raw").innerText = "Error loading metadata: "+e;}}getMetadata();</script></div></main><footer id="footer"><div class="container"><nav class="navbar navbar-dark"><span class="navbar-nav"><a class="nav-link" href="https://github.com/bchainhub" target="_blank" rel="noopener noreferrer">Blockchain Hub</a></span><span class="navbar-nav ml-md-auto"><a class="nav-link" href="mailto:contact@blockindex.net" target="_blank" rel="noopener noreferrer">Contact</a></span><span class="navbar-nav ml-md-auto"><a class="nav-link" href="mailto:verify@blockindex.net" target="_blank" rel="noopener noreferrer">Get Verified</a></span><span class="navbar-nav ml-md-auto"><a class="nav-link" href="/sendtx">Send Transaction</a></span><span class="navbar-nav ml-md-auto d-md-flex d-none"><a class="nav-link" href="https://txms.info/" target="_blank" rel="noopener noreferrer">Send Tx Offline</a></span><span class="navbar-nav ml-md-auto d-lg-flex d-none"><a class="nav-link" href="payto://xcb/cb7147879011ea207df5b35a24ca6f0859dcfb145999" target="_blank" rel="noopener noreferrer">Support Us</a></span></nav></div></footer></body></html>`},
    55  		},
    56  		{
    57  			name:        "apiIndex",
    58  			r:           newGetRequest(ts.URL + "/api"),
    59  			status:      http.StatusOK,
    60  			contentType: "application/json; charset=utf-8",
    61  			body: []string{
    62  				`{"blockbook":{"coin":"Fakecoin"`,
    63  				`"bestHeight":4321001`,
    64  				`"decimals":18`,
    65  				`"backend":{"chain":"fakecoin","blocks":2,"headers":2,"bestBlockHash":"0x2b57e15e93a0ed197417a34c2498b7187df79099572c04a6b6e6ff418f74e6ee"`,
    66  				`"version":"001001","subversion":"/Fakecoin:0.0.1/"`,
    67  			},
    68  		},
    69  		{
    70  			name:        "apiAddress EthAddr4b",
    71  			r:           newGetRequest(ts.URL + "/api/v2/address/" + dbtestdata.EthAddr4b),
    72  			status:      http.StatusOK,
    73  			contentType: "application/json; charset=utf-8",
    74  			body: []string{
    75  				`{"page":1,"totalPages":1,"itemsOnPage":1000,"address":"0x4Bda106325C335dF99eab7fE363cAC8A0ba2a24D","balance":"123450075","unconfirmedBalance":"0","unconfirmedTxs":0,"txs":1,"nonTokenTxs":1,"internalTxs":1,"txids":["0xc92919ad24ffd58f760b18df7949f06e1190cf54a50a0e3745a385608ed3cbf2"],"nonce":"75","tokens":[{"type":"ERC20","name":"Contract 13","contract":"0x0d0F936Ee4c93e25944694D6C121de94D9760F11","transfers":2,"symbol":"S13","decimals":18,"balance":"1000075013"},{"type":"ERC20","name":"Contract 74","contract":"0x4af4114F73d1c1C903aC9E0361b379D1291808A2","transfers":2,"symbol":"S74","decimals":12,"balance":"1000075074"}]}`,
    76  			},
    77  		},
    78  		{
    79  			name:        "apiAddress EthAddr7b details=txs",
    80  			r:           newGetRequest(ts.URL + "/api/v2/address/" + dbtestdata.EthAddr7b + "?details=txs"),
    81  			status:      http.StatusOK,
    82  			contentType: "application/json; charset=utf-8",
    83  			body: []string{
    84  				`{"page":1,"totalPages":1,"itemsOnPage":1000,"address":"0x7B62EB7fe80350DC7EC945C0B73242cb9877FB1b","balance":"123450123","unconfirmedBalance":"0","unconfirmedTxs":0,"txs":2,"transactions":[{"txid":"0xca7628be5c80cda77163729ec63d218ee868a399d827a4682a478c6f48a6e22a","vin":[{"n":0,"addresses":["0x837E3f699d85a4b0B99894567e9233dFB1DcB081"],"isAddress":true}],"vout":[{"value":"0","n":0,"addresses":["0xcdA9FC258358EcaA88845f19Af595e908bb7EfE9"],"isAddress":true}],"blockHeight":-1,"confirmations":0,"blockTime":0,"value":"0","fees":"87945000410410","rbf":true,"coinSpecificData":{"tx":{"nonce":"0x2","gasPrice":"0x59682f07","gas":"0x173a9","to":"0xcdA9FC258358EcaA88845f19Af595e908bb7EfE9","value":"0x0","input":"0x23b872dd000000000000000000000000837e3f699d85a4b0b99894567e9233dfb1dcb0810000000000000000000000007b62eb7fe80350dc7ec945c0b73242cb9877fb1b0000000000000000000000000000000000000000000000000000000000000001","hash":"0xca7628be5c80cda77163729ec63d218ee868a399d827a4682a478c6f48a6e22a","blockNumber":"0xb33b9f","from":"0x837E3f699d85a4b0B99894567e9233dFB1DcB081","transactionIndex":"0x1"},"receipt":{"gasUsed":"0xe506","status":"0x1","logs":[{"address":"0xcdA9FC258358EcaA88845f19Af595e908bb7EfE9","topics":["0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925","0x000000000000000000000000837e3f699d85a4b0b99894567e9233dfb1dcb081","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000001"],"data":"0x"},{"address":"0xcdA9FC258358EcaA88845f19Af595e908bb7EfE9","topics":["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef","0x000000000000000000000000837e3f699d85a4b0b99894567e9233dfb1dcb081","0x0000000000000000000000007b62eb7fe80350dc7ec945c0b73242cb9877fb1b","0x0000000000000000000000000000000000000000000000000000000000000001"],"data":"0x"}]}},"tokenTransfers":[{"type":"ERC721","from":"0x837E3f699d85a4b0B99894567e9233dFB1DcB081","to":"0x7B62EB7fe80350DC7EC945C0B73242cb9877FB1b","contract":"0xcdA9FC258358EcaA88845f19Af595e908bb7EfE9","name":"Contract 205","symbol":"S205","decimals":18,"value":"1"}],"ethereumSpecific":{"status":1,"nonce":2,"gasLimit":95145,"gasUsed":58630,"gasPrice":"1500000007","data":"0x23b872dd000000000000000000000000837e3f699d85a4b0b99894567e9233dfb1dcb0810000000000000000000000007b62eb7fe80350dc7ec945c0b73242cb9877fb1b0000000000000000000000000000000000000000000000000000000000000001","parsedData":{"methodId":"0x23b872dd","name":""}}},{"txid":"0xc92919ad24ffd58f760b18df7949f06e1190cf54a50a0e3745a385608ed3cbf2","vin":[{"n":0,"addresses":["0x4Bda106325C335dF99eab7fE363cAC8A0ba2a24D"],"isAddress":true}],"vout":[{"value":"0","n":0,"addresses":["0x479CC461fEcd078F766eCc58533D6F69580CF3AC"],"isAddress":true}],"blockHeight":-1,"confirmations":0,"blockTime":0,"value":"0","fees":"216368000000000","rbf":true,"coinSpecificData":{"tx":{"nonce":"0x1df76","gasPrice":"0x3b9aca00","gas":"0x3d090","to":"0x479CC461fEcd078F766eCc58533D6F69580CF3AC","value":"0x0","input":"0x4f15078700000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000003c00000000000000000000000000000000000000000000000000000000000000420000000000000000000000000000000000000000000000000000000000000048000000000000000000000000000000000000000000000000000000000000004e00000000000000000000000000000000000000000000000000000000000000002000000000000000000000000555ee11fbddc0e49a9bab358a8941ad95ffdb48f0000000000000000000000004bda106325c335df99eab7fe363cac8a0ba2a24d0000000000000000000000000d0f936ee4c93e25944694d6c121de94d9760f110000000000000000000000004af4114f73d1c1c903ac9e0361b379d1291808a200000000000000000000000000000000000000000000000000000000000000000000000000000000000000007b62eb7fe80350dc7ec945c0b73242cb9877fb1b0000000000000000000000004bda106325c335df99eab7fe363cac8a0ba2a24d0000000000000000000000004af4114f73d1c1c903ac9e0361b379d1291808a20000000000000000000000000d0f936ee4c93e25944694d6c121de94d9760f110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000a5ef5a7656bfb0000000000000000000000000000000000000000000000000000004ba78398d5c5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000166cfe0b9579b4ecf7a2801880f644009a324671a79754ea57c3a103c6e70d3dbef6ba69a08000000000000000000000000000000000000000000000000004f937d86afb90000000000000000000000000000000000000000000000000ab280fd8037d500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000166cfb784b7c1f3fbe8b75484603ab8adc58aaee3a46245a6579fac7077b5570018b4e0d4eb0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000308fd0e798ac00000000000000000000000000000000000000000000000006a8313d60b1f606b0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000001b000000000000000000000000000000000000000000000000000000000000001b00000000000000000000000000000000000000000000000000000000000000029de0ccec59e8948e3d905b40e5542335ebc1eb4674db517d2f6392ec7fdeb3d45f3449d313ee2589819c6c79eb1c1b047adae68565c1608e3a1d1d70823febb0000000000000000000000000000000000000000000000000000000000000000234d06fe17f1202e8b07177a30eb64d14adc08cdb3fa1b3e3e0bea0f9672c02175b77c01c51d3c7e460723b27ecbc7801fd6482559a8c9999593f9a4d149c7384","hash":"0xc92919ad24ffd58f760b18df7949f06e1190cf54a50a0e3745a385608ed3cbf2","blockNumber":"0x41eee9","from":"0x4Bda106325C335dF99eab7fE363cAC8A0ba2a24D","transactionIndex":"0x24"},"internalData":{"type":1,"contract":"0d0f936ee4c93e25944694d6c121de94d9760f11","transfers":[{"type":0,"from":"4bda106325c335df99eab7fe363cac8a0ba2a24d","to":"9f4981531fda132e83c44680787dfa7ee31e4f8d","value":1000010},{"type":2,"from":"4af4114f73d1c1c903ac9e0361b379d1291808a2","to":"9f4981531fda132e83c44680787dfa7ee31e4f8d","value":1000011}],"Error":""},"receipt":{"gasUsed":"0x34d30","status":"0x1","logs":[{"address":"0x0d0F936Ee4c93e25944694D6C121de94D9760F11","topics":["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef","0x000000000000000000000000555ee11fbddc0e49a9bab358a8941ad95ffdb48f","0x0000000000000000000000004bda106325c335df99eab7fe363cac8a0ba2a24d"],"data":"0x0000000000000000000000000000000000000000000000006a8313d60b1f8001"},{"address":"0x4af4114F73d1c1C903aC9E0361b379D1291808A2","topics":["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef","0x0000000000000000000000004bda106325c335df99eab7fe363cac8a0ba2a24d","0x000000000000000000000000555ee11fbddc0e49a9bab358a8941ad95ffdb48f"],"data":"0x000000000000000000000000000000000000000000000000000308fd0e798ac0"},{"address":"0x479CC461fEcd078F766eCc58533D6F69580CF3AC","topics":["0x0d0b9391970d9a25552f37d436d2aae2925e2bfe1b2a923754bada030c498cb3","0x000000000000000000000000555ee11fbddc0e49a9bab358a8941ad95ffdb48f","0x0000000000000000000000000000000000000000000000000000000000000000","0x5af266c0a89a07c1917deaa024414577e6c3c31c8907d079e13eb448c082594f"],"data":"0x0000000000000000000000004bda106325c335df99eab7fe363cac8a0ba2a24d0000000000000000000000000d0f936ee4c93e25944694d6c121de94d9760f110000000000000000000000004af4114f73d1c1c903ac9e0361b379d1291808a20000000000000000000000000000000000000000000000006a8313d60b1f8001000000000000000000000000000000000000000000000000000308fd0e798ac0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005e083a16f4b092c5729a49f9c3ed3cc171bb3d3d0c22e20b1de6063c32f399ac"},{"address":"0x4af4114F73d1c1C903aC9E0361b379D1291808A2","topics":["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef","0x0000000000000000000000007b62eb7fe80350dc7ec945c0b73242cb9877fb1b","0x0000000000000000000000004bda106325c335df99eab7fe363cac8a0ba2a24d"],"data":"0x00000000000000000000000000000000000000000000000000031855667df7a8"},{"address":"0x0d0F936Ee4c93e25944694D6C121de94D9760F11","topics":["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef","0x0000000000000000000000004bda106325c335df99eab7fe363cac8a0ba2a24d","0x0000000000000000000000007b62eb7fe80350dc7ec945c0b73242cb9877fb1b"],"data":"0x0000000000000000000000000000000000000000000000006a8313d60b1f606b"},{"address":"0x479CC461fEcd078F766eCc58533D6F69580CF3AC","topics":["0x0d0b9391970d9a25552f37d436d2aae2925e2bfe1b2a923754bada030c498cb3","0x0000000000000000000000007b62eb7fe80350dc7ec945c0b73242cb9877fb1b","0x0000000000000000000000000000000000000000000000000000000000000000","0xb0b69dad58df6032c3b266e19b1045b19c87acd2c06fb0c598090f44b8e263aa"],"data":"0x0000000000000000000000004bda106325c335df99eab7fe363cac8a0ba2a24d0000000000000000000000004af4114f73d1c1c903ac9e0361b379d1291808a20000000000000000000000000d0f936ee4c93e25944694d6c121de94d9760f1100000000000000000000000000000000000000000000000000031855667df7a80000000000000000000000000000000000000000000000006a8313d60b1f606b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f2b0d62c44ed08f2a5adef40c875d20310a42a9d4f488bd26323256fe01c7f48"}]}},"tokenTransfers":[{"type":"ERC20","from":"0x555Ee11FBDDc0E49A9bAB358A8941AD95fFDB48f","to":"0x4Bda106325C335dF99eab7fE363cAC8A0ba2a24D","contract":"0x0d0F936Ee4c93e25944694D6C121de94D9760F11","name":"Contract 13","symbol":"S13","decimals":18,"value":"7675000000000000001"},{"type":"ERC20","from":"0x4Bda106325C335dF99eab7fE363cAC8A0ba2a24D","to":"0x555Ee11FBDDc0E49A9bAB358A8941AD95fFDB48f","contract":"0x4af4114F73d1c1C903aC9E0361b379D1291808A2","name":"Contract 74","symbol":"S74","decimals":12,"value":"854307892726464"},{"type":"ERC20","from":"0x7B62EB7fe80350DC7EC945C0B73242cb9877FB1b","to":"0x4Bda106325C335dF99eab7fE363cAC8A0ba2a24D","contract":"0x4af4114F73d1c1C903aC9E0361b379D1291808A2","name":"Contract 74","symbol":"S74","decimals":12,"value":"871180000950184"},{"type":"ERC20","from":"0x4Bda106325C335dF99eab7fE363cAC8A0ba2a24D","to":"0x7B62EB7fe80350DC7EC945C0B73242cb9877FB1b","contract":"0x0d0F936Ee4c93e25944694D6C121de94D9760F11","name":"Contract 13","symbol":"S13","decimals":18,"value":"7674999999999991915"}],"ethereumSpecific":{"status":1,"nonce":122742,"gasLimit":250000,"gasUsed":216368,"gasPrice":"1000000000","data":"0x4f15078700000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000003c00000000000000000000000000000000000000000000000000000000000000420000000000000000000000000000000000000000000000000000000000000048000000000000000000000000000000000000000000000000000000000000004e00000000000000000000000000000000000000000000000000000000000000002000000000000000000000000555ee11fbddc0e49a9bab358a8941ad95ffdb48f0000000000000000000000004bda106325c335df99eab7fe363cac8a0ba2a24d0000000000000000000000000d0f936ee4c93e25944694d6c121de94d9760f110000000000000000000000004af4114f73d1c1c903ac9e0361b379d1291808a200000000000000000000000000000000000000000000000000000000000000000000000000000000000000007b62eb7fe80350dc7ec945c0b73242cb9877fb1b0000000000000000000000004bda106325c335df99eab7fe363cac8a0ba2a24d0000000000000000000000004af4114f73d1c1c903ac9e0361b379d1291808a20000000000000000000000000d0f936ee4c93e25944694d6c121de94d9760f110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000a5ef5a7656bfb0000000000000000000000000000000000000000000000000000004ba78398d5c5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000166cfe0b9579b4ecf7a2801880f644009a324671a79754ea57c3a103c6e70d3dbef6ba69a08000000000000000000000000000000000000000000000000004f937d86afb90000000000000000000000000000000000000000000000000ab280fd8037d500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000166cfb784b7c1f3fbe8b75484603ab8adc58aaee3a46245a6579fac7077b5570018b4e0d4eb0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000308fd0e798ac00000000000000000000000000000000000000000000000006a8313d60b1f606b0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000001b000000000000000000000000000000000000000000000000000000000000001b00000000000000000000000000000000000000000000000000000000000000029de0ccec59e8948e3d905b40e5542335ebc1eb4674db517d2f6392ec7fdeb3d45f3449d313ee2589819c6c79eb1c1b047adae68565c1608e3a1d1d70823febb0000000000000000000000000000000000000000000000000000000000000000234d06fe17f1202e8b07177a30eb64d14adc08cdb3fa1b3e3e0bea0f9672c02175b77c01c51d3c7e460723b27ecbc7801fd6482559a8c9999593f9a4d149c7384","parsedData":{"methodId":"0x4f150787","name":""}}}],"nonce":"123","tokens":[{"type":"ERC20","name":"Contract 13","contract":"0x0d0F936Ee4c93e25944694D6C121de94D9760F11","transfers":1,"symbol":"S13","decimals":18,"balance":"1000123013"},{"type":"ERC721","name":"Contract 205","contract":"0xcdA9FC258358EcaA88845f19Af595e908bb7EfE9","transfers":1,"symbol":"S205","decimals":18,"ids":["1"]},{"type":"ERC20","name":"Contract 74","contract":"0x4af4114F73d1c1C903aC9E0361b379D1291808A2","transfers":1,"symbol":"S74","decimals":12,"balance":"1000123074"}],"addressAliases":{"0x7B62EB7fe80350DC7EC945C0B73242cb9877FB1b":{"Type":"ENS","Alias":"address7b.eth"},"0xcdA9FC258358EcaA88845f19Af595e908bb7EfE9":{"Type":"Contract","Alias":"Contract 205"}}}`,
    85  			},
    86  		},
    87  		{
    88  			name:        "apiTx EthTxidB1T2",
    89  			r:           newGetRequest(ts.URL + "/api/v2/tx/0x" + dbtestdata.EthTxidB1T2),
    90  			status:      http.StatusOK,
    91  			contentType: "application/json; charset=utf-8",
    92  			body: []string{
    93  				`{"txid":"0xa9cd088aba2131000da6f38a33c20169baee476218deea6b78720700b895b101","vin":[{"n":0,"addresses":["0x20cD153de35D469BA46127A0C8F18626b59a256A"],"isAddress":true}],"vout":[{"value":"0","n":0,"addresses":["0x4af4114F73d1c1C903aC9E0361b379D1291808A2"],"isAddress":true}],"blockHeight":-1,"confirmations":0,"blockTime":0,"value":"0","fees":"2081000000000000","rbf":true,"coinSpecificData":{"tx":{"nonce":"0xd0","gasPrice":"0x9502f9000","gas":"0x130d5","to":"0x4af4114F73d1c1C903aC9E0361b379D1291808A2","value":"0x0","input":"0xa9059cbb000000000000000000000000555ee11fbddc0e49a9bab358a8941ad95ffdb48f00000000000000000000000000000000000000000000021e19e0c9bab2400000","hash":"0xa9cd088aba2131000da6f38a33c20169baee476218deea6b78720700b895b101","blockNumber":"0x41eee8","from":"0x20cD153de35D469BA46127A0C8F18626b59a256A","transactionIndex":"0x0"},"internalData":{"type":0,"transfers":[{"type":1,"from":"9f4981531fda132e83c44680787dfa7ee31e4f8d","to":"4af4114f73d1c1c903ac9e0361b379d1291808a2","value":1000000},{"type":0,"from":"3e3a3d69dc66ba10737f531ed088954a9ec89d97","to":"9f4981531fda132e83c44680787dfa7ee31e4f8d","value":1000001},{"type":0,"from":"3e3a3d69dc66ba10737f531ed088954a9ec89d97","to":"3e3a3d69dc66ba10737f531ed088954a9ec89d97","value":1000002}],"Error":""},"receipt":{"gasUsed":"0xcb39","status":"0x1","logs":[{"address":"0x4af4114F73d1c1C903aC9E0361b379D1291808A2","topics":["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef","0x00000000000000000000000020cd153de35d469ba46127a0c8f18626b59a256a","0x000000000000000000000000555ee11fbddc0e49a9bab358a8941ad95ffdb48f"],"data":"0x00000000000000000000000000000000000000000000021e19e0c9bab2400000"}]}},"tokenTransfers":[{"type":"ERC20","from":"0x20cD153de35D469BA46127A0C8F18626b59a256A","to":"0x555Ee11FBDDc0E49A9bAB358A8941AD95fFDB48f","contract":"0x4af4114F73d1c1C903aC9E0361b379D1291808A2","name":"Contract 74","symbol":"S74","decimals":12,"value":"10000000000000000000000"}],"ethereumSpecific":{"status":1,"nonce":208,"gasLimit":78037,"gasUsed":52025,"gasPrice":"40000000000","data":"0xa9059cbb000000000000000000000000555ee11fbddc0e49a9bab358a8941ad95ffdb48f00000000000000000000000000000000000000000000021e19e0c9bab2400000","parsedData":{"methodId":"0xa9059cbb","name":"Transfer","function":"transfer(address, uint256)","params":[{"type":"address","values":["0x555Ee11FBDDc0E49A9bAB358A8941AD95fFDB48f"]},{"type":"uint256","values":["10000000000000000000000"]}]}},"addressAliases":{"0x20cD153de35D469BA46127A0C8F18626b59a256A":{"Type":"ENS","Alias":"address20.eth"},"0x4af4114F73d1c1C903aC9E0361b379D1291808A2":{"Type":"Contract","Alias":"Contract 74"}}}`,
    94  			},
    95  		},
    96  		{
    97  			name:        "apiFiatRates get rate by timestamp",
    98  			r:           newGetRequest(ts.URL + "/api/v2/tickers?currency=usd&timestamp=1574340000"),
    99  			status:      http.StatusOK,
   100  			contentType: "application/json; charset=utf-8",
   101  			body: []string{
   102  				`{"ts":1574380800,"rates":{"usd":7914.5}}`,
   103  			},
   104  		},
   105  		{
   106  			name:        "apiFiatRates get token rate by timestamp",
   107  			r:           newGetRequest(ts.URL + "/api/v2/tickers?currency=usd&timestamp=1574340000&token=0xA4DD6Bc15Be95Af55f0447555c8b6aA3088562f3"),
   108  			status:      http.StatusOK,
   109  			contentType: "application/json; charset=utf-8",
   110  			body: []string{
   111  				`{"ts":1574380800,"rates":{"usd":1.2}}`,
   112  			},
   113  		},
   114  		{
   115  			name:        "apiFiatRates get token rate by timestamp for all currencies",
   116  			r:           newGetRequest(ts.URL + "/api/v2/tickers?timestamp=1574340000&token=0xA4DD6Bc15Be95Af55f0447555c8b6aA3088562f3"),
   117  			status:      http.StatusOK,
   118  			contentType: "application/json; charset=utf-8",
   119  			body: []string{
   120  				`{"ts":1574380800,"rates":{"eur":1.0816754,"usd":1.2}}`,
   121  			},
   122  		},
   123  		{
   124  			name:        "apiFiatRates get token rate for unknown token by timestamp",
   125  			r:           newGetRequest(ts.URL + "/api/v2/tickers?currency=usd&timestamp=1574340000&token=0xFFFFFFFFFFe95Af55f0447555c8b6aA3088562f3"),
   126  			status:      http.StatusOK,
   127  			contentType: "application/json; charset=utf-8",
   128  			body: []string{
   129  				`{"ts":1574340000,"rates":{"usd":-1}}`,
   130  			},
   131  		},
   132  	}
   133  
   134  	performHttpTests(tests, t, ts)
   135  }
   136  
   137  func initEthereumTypeDB(d *db.RocksDB) error {
   138  	// add 0xa9059cbb transfer(address,uint256)	signature
   139  	wb := grocksdb.NewWriteBatch()
   140  	defer wb.Destroy()
   141  	if err := d.StoreFourByteSignature(wb, 2835717307, 145, &bchain.FourByteSignature{
   142  		Name:       "transfer",
   143  		Parameters: []string{"address", "uint256"},
   144  	}); err != nil {
   145  		return err
   146  	}
   147  	return d.WriteBatch(wb)
   148  }
   149  
   150  // initTestFiatRatesEthereumType initializes test data for /api/v2/tickers endpoint
   151  func initTestFiatRatesEthereumType(d *db.RocksDB) error {
   152  	if err := insertFiatRate("20180320000000", map[string]float32{
   153  		"usd": 2000.0,
   154  		"eur": 1300.0,
   155  	}, map[string]float32{
   156  		"0xdac17f958d2ee523a2206206994597c13d831ec7": 2000.1,
   157  		"0x2260fac5e5542a773aa44fbcfedf7c193bc2c599": 123.0,
   158  	}, d); err != nil {
   159  		return err
   160  	}
   161  	if err := insertFiatRate("20180321000000", map[string]float32{
   162  		"usd": 2001.0,
   163  		"eur": 1301.0,
   164  	}, map[string]float32{
   165  		"0xdac17f958d2ee523a2206206994597c13d831ec7": 2001.1,
   166  		"0x2260fac5e5542a773aa44fbcfedf7c193bc2c599": 199.0,
   167  	}, d); err != nil {
   168  		return err
   169  	}
   170  	if err := insertFiatRate("20180322000000", map[string]float32{
   171  		"usd": 2002.0,
   172  		"eur": 1302.0,
   173  	}, map[string]float32{
   174  		"0xdac17f958d2ee523a2206206994597c13d831ec7": 2002.1,
   175  		"0x2260fac5e5542a773aa44fbcfedf7c193bc2c599": 99.0,
   176  	}, d); err != nil {
   177  		return err
   178  	}
   179  	if err := insertFiatRate("20180323000000", map[string]float32{
   180  		"usd": 2003.0,
   181  		"eur": 1303.0,
   182  	}, map[string]float32{
   183  		"0xdac17f958d2ee523a2206206994597c13d831ec7": 2003.1,
   184  		"0x2260fac5e5542a773aa44fbcfedf7c193bc2c599": 101.0,
   185  	}, d); err != nil {
   186  		return err
   187  	}
   188  	if err := insertFiatRate("20190321000000", map[string]float32{
   189  		"usd": 7814.5,
   190  		"eur": 7100.0,
   191  	}, map[string]float32{
   192  		"0xdac17f958d2ee523a2206206994597c13d831ec7": 7814.1,
   193  		"0x2260fac5e5542a773aa44fbcfedf7c193bc2c599": 499.0,
   194  		"0xa4dd6bc15be95af55f0447555c8b6aa3088562f3": 0.8,
   195  	}, d); err != nil {
   196  		return err
   197  	}
   198  	if err := insertFiatRate("20191122000000", map[string]float32{
   199  		"usd": 7914.5,
   200  		"eur": 7134.1,
   201  	}, map[string]float32{
   202  		"0xdac17f958d2ee523a2206206994597c13d831ec7": 7914.1,
   203  		"0x2260fac5e5542a773aa44fbcfedf7c193bc2c599": 599.0,
   204  		"0xa4dd6bc15be95af55f0447555c8b6aa3088562f3": 1.2,
   205  	}, d); err != nil {
   206  		return err
   207  	}
   208  
   209  	return d.FiatRatesStoreSpecialTickers("CurrentTickers", &[]common.CurrencyRatesTicker{
   210  		{
   211  			Timestamp: time.Unix(1592821931, 0),
   212  			Rates: map[string]float32{
   213  				"usd": 8914.5,
   214  				"eur": 8134.1,
   215  			},
   216  			TokenRates: map[string]float32{
   217  				"0xdac17f958d2ee523a2206206994597c13d831ec7": 8914.1,
   218  				"0x2260fac5e5542a773aa44fbcfedf7c193bc2c599": 899.0,
   219  				"0xa4dd6bc15be95af55f0447555c8b6aa3088562f3": 8.2,
   220  			},
   221  		},
   222  	})
   223  }
   224  
   225  func Test_PublicServer_EthereumType(t *testing.T) {
   226  	timeNow = fixedTimeNow
   227  	parser := eth.NewEthereumParser(1, true)
   228  	chain, err := dbtestdata.NewFakeBlockChainEthereumType(parser)
   229  	if err != nil {
   230  		glog.Fatal("fakechain: ", err)
   231  	}
   232  
   233  	s, dbpath := setupPublicHTTPServer(parser, chain, t, false)
   234  	defer closeAndDestroyPublicServer(t, s, dbpath)
   235  	s.ConnectFullPublicInterface()
   236  	// take the handler of the public server and pass it to the test server
   237  	ts := httptest.NewServer(s.https.Handler)
   238  	defer ts.Close()
   239  
   240  	httpTestsEthereumType(t, ts)
   241  }