-
Notifications
You must be signed in to change notification settings - Fork 2
/
index.html
243 lines (218 loc) · 21.2 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="description" content="Nano is a decentralized, secure, fast, and feeless cryptocurrency network. This site queries each of the below Public Nano Node APIs (from your browser) to give you a real-time view of the node's availability">
<meta name="nano" content="nano_1somenanerzdzdbyr4y6x996qbo764ifxk8beuhphydmwn1agpzkwquqqick" />
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
<link rel="manifest" href="/site.webmanifest">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
<link href="https://unpkg.com/bootstrap-table@1.18.1/dist/bootstrap-table.min.css" rel="stylesheet">
<link href="/css/index.css" rel="stylesheet">
<title>Public Nano Nodes | SomeNano</title>
</head>
<body>
<div class="container">
<div class="jumbotron py-3">
<h1 class="display-4">Nano Public Nodes</h1>
<p class="lead">Public and free-to-use API to access the Nano network without hosting your own Nano node.</p>
<hr class="my-4">
<p></p>
<p>Nano is a decentralized, secure, fast, and feeless cryptocurrency network. This site queries each of the below Public Nano Node APIs (from your browser) to give you a real-time view of the node's availability.</p>
<p>If you want a simple wallet to receive and send Nano, see the <a href="https://nanowallets.guide/" target="_new">Unofficial Nano Wallets Guide</a>.</p>
<p>If you want more information on running your own Nano node (public or private) as well as more resources on building with Nano, check the <a href="https://nano.org/build" target="_new">Official Nano Website</a>.</p>
<p>If you want your node added to this list, <a href="mailto:info@somenano.com">email me</a> or find me on <a href="https://twitter.com/SomeNanoTweets">Twitter @SomeNanoTweets</a>.</p>
</div>
<div id="content">
<p class="text-center">This data is current and updates on every page refresh.</p>
<div class="alert alert-warning">
<a href="https://nanswap.com/nano-node">Sponsored by Nanswap Nodes - Nano Node API with free plan available</a>
</div>
<table
id="table"
data-toggle="table"
class="text-center">
<thead>
<tr>
<th data-field="name" data-formatter="formatter_name" data-cell-style="name_cell_style" rowspan="2" data-sortable="true">Name</th>
<th colspan="10">Tests</th>
<th data-field="comment" rowspan="2" data-formatter="formatter_comment" data-sortable="true">Comments</th>
</tr>
<tr>
<th class="fs-0-7" data-field="node_api_test_version" data-formatter="formatter_node_api_test_version" data-cell-style="test_cell_style" data-sortable="true">Node Version</th>
<th class="fs-0-7" data-field="node_api_test_blocks" data-formatter="formatter_node_api_test_blocks" data-cell-style="test_cell_style" data-sortable="true">Block Counts</th>
<th class="fs-0-7" data-field="node_api_test_process" data-formatter="formatter_node_api_test_process" data-cell-style="test_cell_style" data-sortable="true">API Supports<br>"process"</th>
<th class="fs-0-7" data-field="node_api_test_receivable" data-formatter="formatter_node_api_test_receivable" data-cell-style="test_cell_style" data-sortable="true">API Supports<br>"receivable"</th>
<th class="fs-0-7" data-field="node_api_test_work" data-formatter="formatter_node_api_test_work" data-cell-style="test_cell_style" data-sortable="true">API Supports<br>"work_generate"</th>
<th class="fs-0-7" data-field="node_api_test_token" data-formatter="formatter_node_api_test_token" data-cell-style="test_cell_style" data-sortable="true">Token Limited</th>
<th class="fs-0-7" data-field="node_websocket_test_setup" data-formatter="formatter_node_websocket_test_setup" data-cell-style="test_cell_style" data-sortable="true">WebSocket<br>Setup</th>
<th class="fs-0-7" data-field="node_websocket_test_ping" data-formatter="formatter_node_websocket_test_ping" data-cell-style="test_cell_style" data-sortable="true">WebSocket<br>Ping</th>
<th class="fs-0-7" data-field="node_websocket_test_subscribe_all" data-formatter="formatter_node_websocket_test_subscribe_all" data-cell-style="test_cell_style" data-sortable="true">WebSocket<br>Subscribe<br>All</th>
<th class="fs-0-7" data-field="node_websocket_test_subscribe_addresses" data-formatter="formatter_node_websocket_test_subscribe_addresses" data-cell-style="test_cell_style" data-sortable="true">WebSocket<br>Subscribe<br>Addresses</th>
<!-- <th class="fs-0-7" data-field="node_websockets_test_available" data-cell-style="test_cell_style" data-sortable="true">Websockets<br>Available</th>
<th class="fs-0-7" data-field="node_websockets_test_voting" data-cell-style="test_cell_style" data-sortable="true">Websockets<br>Voting</th> -->
</tr>
</thead>
</table>
<p class="text-center">See lots of <span class="text-danger">failed tests</span>? Check your browser antivirus for a block of certain top level domains (TLDs) like ".cc"</p>
<p class="text-center">You can also view more data on each test in your browser's console.</p>
</div>
<h3 class="mt-3">More Information</h4>
<div id="accordion">
<div class="card">
<div class="card-header" id="headingOne">
<h5 class="mb-0">
<button class="btn btn-link" data-toggle="collapse" data-target="#collapseOne" aria-expanded="true" aria-controls="collapseOne">
What are these tests?
</button>
</h5>
</div>
<div id="collapseOne" class="collapse show" aria-labelledby="headingOne" data-parent="#accordion">
<div class="card-body">
<p><span class="font-weight-bold">Node Version:</span> Queries the node with <a href="https://docs.nano.org/commands/rpc-protocol/#version" target="_new">action: version</a> and compares against latest version of the <a href="https://github.com/nanocurrency/nano-node/releases" target="_new">Nano Node</a>.</p>
<p><span class="font-weight-bold">Block Counts:</span> Queries the node with <a href="https://docs.nano.org/commands/rpc-protocol/#block_count" target="_new">action: block_count</a> and checks for uncomfirmed blocks. If there are a lot of unconfirmed blocks (see <a href="/js/node_tests.js" target="_new">node_tests.js</a> for specifics) the test fails. If there are only a few unconfirmed, the test is a partial success.</p>
<p><span class="font-weight-bold">API Supports "process":</span> Queries the node with <a href="https://docs.nano.org/commands/rpc-protocol/#process" target="_new">action: process</a> and checks that the node returns an error message indicating it attempted to process the block. I am not attempting to broadcast legitimate blocks for these tests.</p>
<p><span class="font-weight-bold">API Supports "receivable":</span> Queries the node with <a href="https://docs.nano.org/commands/rpc-protocol/#receivable" target="_new">action: receivable</a> and checks for valid return. In Nano Node v23.0, the "pending" terminology became <a href="https://docs.nano.org/releases/release-v23-0/#receivable-instead-of-pending" target="_new">deprecated</a> and replaced with "receivable". Although Nano Nodes may have updated to or beyond V23.0, some have proxies that must be updated. This test shows which APIs support the new "receivable" action.</p>
<p><span class="font-weight-bold">API Supports "work_generate":</span> Queries the node with <a href="https://docs.nano.org/commands/rpc-protocol/#work_generate" target="_new">action: work_generate</a> and checks for a returned work value. Many public nodes won't support this action because of the processing power costs. Some that allow limit requests via tokens/time will charge more than for a work_generate call than any other.</p>
<p><span class="font-weight-bold">Token Limited:</span> Queries the node with an arbitrary action and looks to see if a known token system is in use. Some public nodes use tokens (likely those that have implemented the <a href="https://github.com/Joohansson/NanoRPCProxy" target="_new">NanoRPCProxy</a> to prevent abuse of their free-to-use public node. In this test I check for the response data to include a value for requestsLimit.</p>
<p><span class="font-weight-bold">WebSocket Setup:</span> Attempts to connect to the WebSocket provided.</p>
<p><span class="font-weight-bold">WebSocket Ping:</span> Messages the WebSocket with a ping message as defined <a href="https://docs.nano.org/integration-guides/websockets/#keepalive" target="_new">in the Nano docs</a>. Watches for pong message back with corresponding id.</p>
<p><span class="font-weight-bold">WebSocket Subscribe All:</span> Messages the WebSocket with a a request to subscribe to confirmations (confirmation_type=active) without specifying any particular addresses, as shown in <a href="https://docs.nano.org/integration-guides/websockets/#subscribeunsubscribe" target="_new">in the Nano docs</a>. Watches for "ack" message back with corresponding id.</p>
<p><span class="font-weight-bold">WebSocket Subscribe Addresses:</span> Messages the WebSocket with a subscribe to confirmations (confirmation_type=active) for one specific address, as shown in <a href="https://docs.nano.org/integration-guides/websockets/#subscribeunsubscribe" target="_new">in the Nano docs</a>. Watches for "ack" message back with corresponding id.</p>
<p class="text-center">Please note all tests error out after 10 seconds of no response.</p>
</div>
</div>
</div>
<div class="card">
<div class="card-header" id="headingTwo">
<h5 class="mb-0">
<button class="btn btn-link collapsed" data-toggle="collapse" data-target="#collapseTwo" aria-expanded="false" aria-controls="collapseTwo">
Resources for "Getting Started"
</button>
</h5>
</div>
<div id="collapseTwo" class="collapse" aria-labelledby="headingTwo" data-parent="#accordion">
<div class="card-body">
<p>First I'd like to point you to a "Getting Started" series of articles I wrote and published. They are a great place to start if you are just getting to know Nano.</p>
<p>
<ul>
<li><a href="https://medium.com/nanocurrency/getting-started-developing-with-nano-currency-part-1-build-your-foundation-cec2013657e1" target="_new">Getting Started: Developing with Nano Currency — Part 1: Build your foundation</a></li>
<li><a href="https://medium.com/nanocurrency/getting-started-developing-with-nano-currency-part-2-interacting-with-public-and-private-nano-adb98ef57fbf" target="_new">Getting Started: Developing with Nano Currency — Part 2: Interacting with Public and Private Nano Nodes</a></li>
<li><a href="https://medium.com/nanocurrency/getting-started-developing-with-nano-currency-part-3-interacting-with-programmable-software-f3635dce6803" target="_new">Getting Started: Developing with Nano Currency — Part 3: Interacting with Programmable Software Wallets</a></li>
</ul>
</p>
<p>And here are some additional resources that will help you BUIDL/develop/code with Nano, many of which I cite and rely on heavily in the above articles. This is certainly not a comprehensive list. It is mainly resources/tools that I have personally used and think provide the most value for people just getting into developing with Nano.</p>
<p>
<ul>
<li><a href="https://nano.org/build" target="_new">Official nano.org</a>: Developer resources from the Nano Foundation.</li>
<li><a href="https://docs.nano.org/" target="_new">Nano Documentation</a>: If you are interacting with a Nano node, this is the documentation you need to be reading.</li>
<li><a href="https://nano.org/tools" target="_new">Nano Tools</a>: A phenomenal list of tools (many of which are on this list) that will help you integrate Nano in whatever environment you are developing.</li>
<li><a href="https://github.com/nanocurrency" target="_new">Nano on Github</a>: All official releases of nodes/work servers/etc are found on the Github.</li>
<li><a href="https://tools.nanos.cc/" target="_new">KeyTools</a>: A wide variety of tools that are useful for learning about how the Nano protocol works. These tools can be used offline as well.</li>
<li><a href="https://nanoo.tools/" target="_new">nanoo.tools</a>: Another wide variety of tools that are useful for learning about how the Nano protocol works. Includes an <a href="https://nanoo.tools/nano-rpc-playground" target="_new">RPC Playground</a> that will let you query a public node (similar to how tests on this page are run).</li>
<li><a href="https://github.com/appditto/pippin_nano_wallet" target="_new">Pippin Nano Wallet</a>: Advertised as a "production-ready, high-performance developer wallet", this service can be used to as middleware to interact with your node or a public node. It provides wallet features such as send/receive and account management. While a Nano node allows you to interact with the network, a wallet is what maintains the state of your accounts.</li>
<li><a href="https://github.com/guilhermelawless/nano-dpow" target="_new">Nano DPoW</a>: Nano uses a hashing/proof of work system to combat spam in the network. While the POW is minimal compared to other cryptocurrencies, if you are developing on a minimum specs VPS/RPI/etc, you may not want to waste time calculating proof of work on your own. DPoW is a service that is free for non-commercial use, integrates seamlessly into Pippin, and provides a pool of GPU workers to give near instant POW actions. Great for hobby or just getting started.</li>
</ul>
</p>
<p>If you have resources you think I should add, <a href="mailto:info@somenano.com">email me</a> or find me on <a href="https://twitter.com/SomeNanoTweets">Twitter @SomeNanoTweets</a></p>
</div>
</div>
</div>
<div class="card">
<div class="card-header" id="headingThree">
<h5 class="mb-0">
<button class="btn btn-link collapsed" data-toggle="collapse" data-target="#collapseThree" aria-expanded="false" aria-controls="collapseThree">
This site is awesome, can I give you a donation?
</button>
</h5>
</div>
<div id="collapseThree" class="collapse" aria-labelledby="headingThree" data-parent="#accordion">
<div class="card-body">
<p>Aww, thanks for the kind words.</p>
<p>I will gratefully allow you to buy me a beer. If you are so inclined, please donate here: <a href="https://nanocrawler.cc/explorer/account/nano_1somenanerzdzdbyr4y6x996qbo764ifxk8beuhphydmwn1agpzkwquqqick/history" target="_new">nano_1somenanerzdzdbyr4y6x996qbo764ifxk8beuhphydmwn1agpzkwquqqick</a></p>
</div>
</div>
</div>
<div class="card">
<div class="card-header" id="headingFour">
<h5 class="mb-0">
<button class="btn btn-link collapsed" data-toggle="collapse" data-target="#collapseFour" aria-expanded="false" aria-controls="collapseFour">
//TODO
</button>
</h5>
</div>
<div id="collapseFour" class="collapse" aria-labelledby="headingFour" data-parent="#accordion">
<div class="card-body">
<p>So many side projects, and this is one of them. Here are some of the "todo" items for this site...</p>
<p>
<ul>
<li>Make it prettier (help?)</li>
<li>Add an RPC Playground</li>
<li>Expand the number of actions tested</li>
<li>Integrate a faucet to enable testing with funds</li>
<li>Provide better "benchmark" testing</li>
</ul>
</p>
</div>
</div>
</div>
</div>
<footer class="pt-4 my-md-5 pt-md-5 border-top">
<div class="row">
<div class="col-12 col-md">
<img class="mb-2" src="/somenano.svg" alt="" width="24" height="24">
<small class="d-block mb-3 text-muted">© 2021 SomeNano</small>
</div>
<div class="col-6 col-md">
<h5>More of my sites</h5>
<ul class="list-unstyled text-small">
<li><a class="text-muted" target="_new" href="https://snow.somenano.com">SomeNano Snow</a></li>
<li><a class="text-muted" target="_new" href="https://plinko.somenano.com">SomeNano Plinko</a></li>
<li><a class="text-muted" target="_new" href="https://marketcapcompare.com">MarketCapCompare.com</a></li>
</ul>
</div>
<div class="col-6 col-md">
<h5>Contact</h5>
<ul class="list-unstyled text-small">
<li><a class="text-muted" href="https://twitter.com/SomeNanoTweets">@SomeNanoTweets</a></li>
<li><a class="text-muted" href="mailto:jason@somenano.com">jason@somenano.com</a> (<a class="text-muted" href="https://somenano.com/keys/publickey.jason@somenano.com.asc">PGP</a>)</li>
</ul>
</div>
<div class="col-6 col-md">
<h5>About</h5>
<ul class="list-unstyled text-small">
<li><a class="text-muted" href="https://github.com/somenano/publicnodes.somenano.com">Open Source</a></li>
</ul>
</div>
</div>
</footer>
</div>
<script>
if (window.navigator.userAgent.match(/(MSIE|Trident)/)) {
// IE detected...
document.getElementById('content').innerHTML = '<div class="alert alert-danger" role="alert">Hello, it looks as though you are running Internet Explorer. This site only works with modern browsers. Please switch to Chrome/Firefox/Brave.</div>';
}
</script>
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>
<script src="https://unpkg.com/bootstrap-table@1.18.1/dist/bootstrap-table.min.js"></script>
<script src="/js/public_nodes.js"></script>
<script src="/js/nano_node.js"></script>
<script src="/js/node_tests.js"></script>
<script src="/js/formatter.js"></script>
<script src="/js/index.js"></script>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-82KZX0YPCX"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-82KZX0YPCX');
</script>
</body>
</html>