diff --git a/404.html b/404.html index e93ad9eac..d85ed38c8 100644 --- a/404.html +++ b/404.html @@ -10,7 +10,7 @@ - +
diff --git a/api/index.html b/api/index.html index 6760453c5..e0d7f17f9 100644 --- a/api/index.html +++ b/api/index.html @@ -10,7 +10,7 @@ - + diff --git a/assets/js/e75f3413.df61c91a.js b/assets/js/e75f3413.10c93f6b.js similarity index 62% rename from assets/js/e75f3413.df61c91a.js rename to assets/js/e75f3413.10c93f6b.js index bfab6927c..2559e4ee0 100644 --- a/assets/js/e75f3413.df61c91a.js +++ b/assets/js/e75f3413.10c93f6b.js @@ -1 +1 @@ -"use strict";(self.webpackChunkbee_docs=self.webpackChunkbee_docs||[]).push([[1927],{72045:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>d,contentTitle:()=>r,default:()=>l,frontMatter:()=>t,metadata:()=>a,toc:()=>c});var s=o(74848),i=o(28453);const t={title:"Bee API",id:"bee-api"},r=void 0,a={id:"bee/working-with-bee/bee-api",title:"Bee API",description:"The Bee HTTP API is the primary interfaces to a running Bee node. API-endpoints can be queried using familiar HTTP requests, and will respond with semantically accurate HTTP status and error codes as well as data payloads in JSON format where appropriate.",source:"@site/docs/bee/working-with-bee/bee-api.md",sourceDirName:"bee/working-with-bee",slug:"/bee/working-with-bee/bee-api",permalink:"/docs/bee/working-with-bee/bee-api",draft:!1,unlisted:!1,editUrl:"https://github.com/ethersphere/docs.github.io/blob/master/docs/bee/working-with-bee/bee-api.md",tags:[],version:"current",frontMatter:{title:"Bee API",id:"bee-api"},sidebar:"bee",previous:{title:"Configuration",permalink:"/docs/bee/working-with-bee/configuration"},next:{title:"Logs and Files",permalink:"/docs/bee/working-with-bee/logs-and-files"}},d={},c=[{value:"Interacting With the API",id:"interacting-with-the-api",level:2},{value:"Alternatives for Working with the API",id:"alternatives-for-working-with-the-api",level:3},{value:"Exploring Node Status",id:"exploring-node-status",level:2},{value:"/status
",id:"status",level:3},{value:"/status/peers
",id:"statuspeers",level:3},{value:"/redistributionstate
",id:"redistributionstate",level:3},{value:"/reservestate
",id:"reservestate",level:3},{value:"/chainstate
",id:"chainstate",level:3},{value:"/topology
",id:"topology",level:3},{value:"/node
",id:"node",level:3},{value:"/rchash
",id:"rchash",level:3},{value:"/health
",id:"health",level:3},{value:"Debug API Removal Notice",id:"debug-api-removal-notice",level:2}];function h(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",ul:"ul",...(0,i.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(n.p,{children:["The Bee HTTP API is the primary interfaces to a running Bee node. API-endpoints can be queried using familiar HTTP requests, and will respond with semantically accurate ",(0,s.jsx)(n.a,{href:"https://developer.mozilla.org/en-US/docs/Web/HTTP/Status",children:"HTTP status and error codes"})," as well as data payloads in ",(0,s.jsx)(n.a,{href:"https://www.json.org/json-en.html",children:"JSON"})," format where appropriate."]}),"\n",(0,s.jsxs)(n.p,{children:["The Bee API-endpoint exposes all functionality to upload and download content to and from the Swarm network. By default, it runs on port ",(0,s.jsx)(n.code,{children:":1633"}),"."]}),"\n",(0,s.jsxs)(n.admonition,{type:"danger",children:[(0,s.jsxs)(n.p,{children:["Make sure that your api-addr (default 1633) is never exposed to the internet. If you are not using a firewall or other method to protect your node, make sure to change your Bee API address from the default ",(0,s.jsx)(n.code,{children:"1633"})," to ",(0,s.jsx)(n.code,{children:"127.0.0.1:1633"})," to ensure that it is not publicly exposed to the internet."]}),(0,s.jsxs)(n.p,{children:["You may also consider using the ",(0,s.jsx)(n.a,{href:"/docs/develop/tools-and-features/gateway-proxy",children:"Gateway Proxy tool"})," to protect your node's API endpoint."]})]}),"\n",(0,s.jsxs)(n.p,{children:["Detailed information about Bee API endpoints can be found in the ",(0,s.jsx)(n.a,{href:"/api/",children:"API reference docs"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"interacting-with-the-api",children:"Interacting With the API"}),"\n",(0,s.jsxs)(n.p,{children:["You can use HTTP requests to interact directly with Bee API to access all of your Bee node's various functions such as ",(0,s.jsx)(n.a,{href:"/docs/develop/access-the-swarm/buy-a-stamp-batch",children:"purchasing stamp batches"}),", ",(0,s.jsx)(n.a,{href:"/docs/develop/access-the-swarm/upload-and-download",children:"uploading and downloading"}),", ",(0,s.jsx)(n.a,{href:"/docs/bee/working-with-bee/staking",children:"staking"}),", and more."]}),"\n",(0,s.jsx)(n.h3,{id:"alternatives-for-working-with-the-api",children:"Alternatives for Working with the API"}),"\n",(0,s.jsxs)(n.p,{children:["For developers, the ",(0,s.jsx)(n.a,{href:"/docs/develop/tools-and-features/bee-js",children:"Bee JS library"})," offers a more convenient way to interact with the API in a NodeJS environment."]}),"\n",(0,s.jsxs)(n.p,{children:["For many other common use cases, you may prefer to make use of the ",(0,s.jsx)(n.a,{href:"/docs/bee/working-with-bee/swarm-cli",children:"Swarm CLI"})," tool, as it offers a convenient command line based interface for interacting with your node's API."]}),"\n",(0,s.jsx)(n.h2,{id:"exploring-node-status",children:"Exploring Node Status"}),"\n",(0,s.jsxs)(n.p,{children:["After ",(0,s.jsx)(n.a,{href:"/docs/bee/installation/install",children:"installing"})," and starting up your node, we can begin to understand the node's status by interacting with the API."]}),"\n",(0,s.jsx)(n.p,{children:"First, let's check how many nodes we are currently connected to."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"curl -s http://localhost:1633/peers | jq '.peers | length'\n"})}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:"23\n"})}),"\n",(0,s.jsx)(n.p,{children:"Great! We can see that we are currently connected and sharing data with 23 other nodes!"}),"\n",(0,s.jsx)(n.admonition,{type:"info",children:(0,s.jsxs)(n.p,{children:["Here we are using the ",(0,s.jsx)(n.code,{children:"jq"})," command line utility to count the amount of objects in the ",(0,s.jsx)(n.code,{children:"peers"})," array in the JSON response we have received from our API, learn more about how to install and use ",(0,s.jsx)(n.code,{children:"jq"})," ",(0,s.jsx)(n.a,{href:"https://stedolan.github.io/jq/",children:"here"}),"."]})}),"\n",(0,s.jsx)(n.p,{children:"Let's review a handful of endpoints which will provide you with important information relevant to detecting and diagnosing problems with your nodes."}),"\n",(0,s.jsx)(n.h3,{id:"status",children:(0,s.jsx)(n.code,{children:"/status"})}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"/status"})," endpoint returns a quick summary of some important metrics for your node."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:" curl -s http://localhost:1633/status | jq\n"})}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'{\n "peer": "da7e5cc3ed9a46b6e7491d3bf738535d98112641380cbed2e9ddfe4cf4fc01c4",\n "proximity": 0,\n "beeMode": "full",\n "reserveSize": 3747532,\n "pullsyncRate": 0,\n "storageRadius": 10,\n "connectedPeers": 183,\n "neighborhoodSize": 12,\n "batchCommitment": 133828050944,\n "isReachable": true\n}\n'})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"peer"'})," - Your node's overlay address."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"proximity"'})," - The proximity order (number of shared leading bits) with this node and your node."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"beeMode"'})," - The mode of your node, can be ",(0,s.jsx)(n.code,{children:'"full"'}),", ",(0,s.jsx)(n.code,{children:'"light"'}),", or ",(0,s.jsx)(n.code,{children:'"ultraLight"'}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"reserveSize"'})," - The number of chunks your node is currently storing in its reserve. This value should be roughly similar across nodes in the network. It should be identical for nodes within the same neighborhood."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"pullsyncRate"'})," - The rate at which your node is currently syncing chunks from other nodes in the network."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"storageRadius"'})," - The radius of responsibility - the proximity order of chunks for which your node is responsible for storing. It should generally match the radius shown on ",(0,s.jsx)(n.a,{href:"https://swarmscan.io/neighborhoods",children:"Swarmscan"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"connectedPeers"'})," - The number of peers your node is connected to."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"neighborhoodSize"'})," - The number of total neighbors in your neighborhood, not including your own node. The more nodes in your neighborhood, the lower your chance of winning rewards as a staking node."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"batchCommitment"'})," - The total number of chunks which would be stored on the Swarm network if 100% of all postage batches were fully utilised."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"isReachable"'})," - Whether or not your node is reachable on the p2p API by other nodes on the Swarm network (port 1634 by default)."]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"statuspeers",children:(0,s.jsx)(n.code,{children:"/status/peers"})}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"/status/peers"})," endpoint returns information about all the peers of the node making the request. The type of the object returned is the same as that returned from the ",(0,s.jsx)(n.code,{children:"/status"})," endpoint. This endpoint is useful for diagnosing syncing / availability issues with your node."]}),"\n",(0,s.jsx)(n.p,{children:"The nodes are ordered by distance (Kademlia distance, not spatial / geographic distance) to your node, with the most distant nodes with PO (proximity order) of zero at the top of the list and the closest nodes with higher POs at the bottom of the list. The nodes at the bottom of the list with a PO equal or greater than the storage depth make up the nodes in your own node's neighborhood. It's possible that not all nodes in your neighborhood will appear in this list each time you call the endpoint if the connection between your nodes and the rest of the nodes in the neighborhood is not stable."}),"\n",(0,s.jsx)(n.p,{children:"Here are the last 12 entries:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:" curl -s http://localhost:1633/status/peers | jq\n"})}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:' ...\n {\n "peer": "da33f7a504a74094242d3e542475b49847d1d0f375e0c86bac1c9d7f0937acc0",\n "proximity": 9,\n "beeMode": "full",\n "reserveSize": 3782924,\n "pullsyncRate": 0,\n "storageRadius": 10,\n "connectedPeers": 188,\n "neighborhoodSize": 11,\n "batchCommitment": 133828050944,\n "isReachable": true\n },\n {\n "peer": "da4b529cc1aedc62e31849cf7f8ab8c1866d9d86038b857d6cf2f590604387fe",\n "proximity": 10,\n "beeMode": "full",\n "reserveSize": 3719593,\n "pullsyncRate": 0,\n "storageRadius": 10,\n "connectedPeers": 176,\n "neighborhoodSize": 11,\n "batchCommitment": 133828050944,\n "isReachable": true\n },\n {\n "peer": "da5d39a5508fadf66c8665d5e51617f0e9e5fd501e429c38471b861f104c1504",\n "proximity": 10,\n "beeMode": "full",\n "reserveSize": 3777241,\n "pullsyncRate": 0,\n "storageRadius": 10,\n "connectedPeers": 198,\n "neighborhoodSize": 12,\n "batchCommitment": 133828050944,\n "isReachable": true\n },\n {\n "peer": "da4cb0d125bba638def55c0061b00d7c01ed4033fa193d6e53a67183c5488d73",\n "proximity": 10,\n "beeMode": "full",\n "reserveSize": 3849125,\n "pullsyncRate": 0,\n "storageRadius": 10,\n "connectedPeers": 181,\n "neighborhoodSize": 13,\n "batchCommitment": 133828050944,\n "isReachable": true\n },\n {\n "peer": "da4b1cd5d15e061fdd474003b5602ab1cff939b4b9e30d60f8ff693141ede810",\n "proximity": 10,\n "beeMode": "full",\n "reserveSize": 3778452,\n "pullsyncRate": 0,\n "storageRadius": 10,\n "connectedPeers": 183,\n "neighborhoodSize": 12,\n "batchCommitment": 133827002368,\n "isReachable": true\n },\n {\n "peer": "da49e6c6174e3410edad2e0f05d704bbc33e9996bc0ead310d55372677316593",\n "proximity": 10,\n "beeMode": "full",\n "reserveSize": 3779560,\n "pullsyncRate": 0,\n "storageRadius": 10,\n "connectedPeers": 185,\n "neighborhoodSize": 12,\n "batchCommitment": 133828050944,\n "isReachable": true\n },\n {\n "peer": "da4cdab480f323d5791d3ab8d22d99147f110841e44a8991a169f0ab1f47d8e5",\n "proximity": 10,\n "beeMode": "full",\n "reserveSize": 3778518,\n "pullsyncRate": 0,\n "storageRadius": 10,\n "connectedPeers": 189,\n "neighborhoodSize": 11,\n "batchCommitment": 133828050944,\n "isReachable": true\n },\n {\n "peer": "da4ccec79bc34b502c802415b0008c4cee161faf3cee0f572bb019b117c89b2f",\n "proximity": 10,\n "beeMode": "full",\n "reserveSize": 3779003,\n "pullsyncRate": 0,\n "storageRadius": 10,\n "connectedPeers": 179,\n "neighborhoodSize": 10,\n "batchCommitment": 133828050944,\n "isReachable": true\n },\n {\n "peer": "da69d412b79358f84b7928d2f6b7ccdaf165a21313608e16edd317a5355ba250",\n "proximity": 11,\n "beeMode": "full",\n "reserveSize": 3712586,\n "pullsyncRate": 0,\n "storageRadius": 10,\n "connectedPeers": 189,\n "neighborhoodSize": 12,\n "batchCommitment": 133827002368,\n "isReachable": true\n },\n {\n "peer": "da61967b1bd614a69e5e83f73cc98a63a70ebe20454ca9aafea6b57493e00a34",\n "proximity": 11,\n "beeMode": "full",\n "reserveSize": 3780190,\n "pullsyncRate": 0,\n "storageRadius": 10,\n "connectedPeers": 182,\n "neighborhoodSize": 13,\n "batchCommitment": 133828050944,\n "isReachable": true\n },\n {\n "peer": "da7b6a268637cfd6799a9923129347fc3d564496ea79aea119e89c09c5d9efed",\n "proximity": 13,\n "beeMode": "full",\n "reserveSize": 3721494,\n "pullsyncRate": 0,\n "storageRadius": 10,\n "connectedPeers": 188,\n "neighborhoodSize": 14,\n "batchCommitment": 133828050944,\n "isReachable": true\n },\n {\n "peer": "da7a974149543df1b459831286b42b302f22393a20e9b3dd9a7bb5a7aa5af263",\n "proximity": 13,\n "beeMode": "full",\n "reserveSize": 3852986,\n "pullsyncRate": 0,\n "storageRadius": 10,\n "connectedPeers": 186,\n "neighborhoodSize": 12,\n "batchCommitment": 133828050944,\n "isReachable": true\n }\n ]\n}\n'})}),"\n",(0,s.jsxs)(n.p,{children:["The first entry has a proximity of 9, meaning that it is below the ",(0,s.jsx)(n.code,{children:"storageRadius"})," (depth) of 10 and so does not fall into our node's neighborhood. All the other nodes further down the list have a proximity of 10 or greater with our node, meaning they fall into our node's neighborhood."]}),"\n",(0,s.jsxs)(n.p,{children:["You may notice that there is some variation in ",(0,s.jsx)(n.code,{children:"neighborhoodSize"}),", however they are all close to the same value. This could be due to temporary connection problems between nodes in the neighborhood, but is not considered a problem unless the neighborhood size is much lower than its peers or at zero. As long as each node is connected to most of the other nodes in its neighborhood, each node in the neighborhood will be able to sync the required chunks to its reserve."]}),"\n",(0,s.jsxs)(n.p,{children:["And we can compare these entries to our own node's ",(0,s.jsx)(n.code,{children:"/status"})," results for diagnostic purposes:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:" curl -s http://localhost:1633/status | jq\n"})}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'{\n "peer": "da7e5cc3ed9a46b6e7491d3bf738535d98112641380cbed2e9ddfe4cf4fc01c4",\n "proximity": 0,\n "beeMode": "full",\n "reserveSize": 3747532,\n "pullsyncRate": 0,\n "storageRadius": 10,\n "connectedPeers": 183,\n "neighborhoodSize": 12,\n "batchCommitment": 133828050944,\n "isReachable": true\n}\n'})}),"\n",(0,s.jsxs)(n.p,{children:["From the results we can see that we have a healthy neighborhood size when compared with the other nodes in our neighborhood and also has the same ",(0,s.jsx)(n.code,{children:"batchCommitment"})," value as it should."]}),"\n",(0,s.jsx)(n.h3,{id:"redistributionstate",children:(0,s.jsx)(n.code,{children:"/redistributionstate"})}),"\n",(0,s.jsx)(n.p,{children:"This endpoint provides an overview of values related to storage fee redistribution game (in other words, staking rewards). You can use this endpoint to check whether or not your node is participating properly in the redistribution game."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'curl -s http://localhost:1633/redistributionstate | jq\n{\n "minimumGasFunds": "11080889201250000",\n "hasSufficientFunds": true,\n "isFrozen": false,\n "isFullySynced": true,\n "phase": "claim",\n "round": 212859,\n "lastWonRound": 207391,\n "lastPlayedRound": 210941,\n "lastFrozenRound": 210942,\n "lastSelectedRound": 212553,\n "lastSampleDuration": 491687776653,\n "block": 32354719,\n "reward": "1804537795127017472",\n "fees": "592679945236926714",\n "isHealthy": true\n}\n'})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"minimumGasFunds"'})," - The minimum required xDAI denominated in wei (1 xDAI = 10^18 wei) required for a node to participate in the redistribution game."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"hasSufficientFunds"'})," - Whether your node has at least the ",(0,s.jsx)(n.code,{children:'"minimumGasFunds"'})," amount of xDAI."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"isFrozen"'})," - Whether your node is currently frozen. See ",(0,s.jsx)(n.a,{href:"#",children:"docs"})," for more information on freezing."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"isFullySynced"'})," - Whether your node has fully synced all the chunks in its ",(0,s.jsx)(n.code,{children:'"storageRadius"'})," (the value returned from the ",(0,s.jsx)(n.code,{children:"/reservestate"})," endpoint.)"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"phase"'})," - The current phase of the redistribution game (this does not indicate whether or not your node is participating in the current phase)."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"round"'})," - The current number of the round of the redistribution game."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"lastWonRound"'})," - The last round number in which your node won the redistribtuion game."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"lastPlayedRound"'})," - The last round number in which your node participating in the redistribution game. If this number matches the number of the current round shown in ",(0,s.jsx)(n.code,{children:'"round"'}),", then your node is participating in the current round."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"lastFrozenRound"'})," - The last round in which your node was frozen."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"lastSelectedRound"'})," - The last round in which your node's neighborhood was selected. Note that it is possible for your node's neighborhood to be selected without your node playing in the redistribution game. This may potentially indicate your node's hardware is not sufficient to calculate the commitment hash fast enough. See ",(0,s.jsxs)(n.a,{href:"#",children:["section on the ",(0,s.jsx)(n.code,{children:"/rchash"})," endpoint"]})," for more information."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"lastSampleDuration"'})," - The time it took for your node to calculate the sample commitment hash in nanoseconds."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"block"'})," - current Gnosis block number"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"reward"'})," - The total all-time reward in PLUR earned by your node."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"fees"'})," - The total amount in fees paid by your node denominated in xDAI wei."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"isHealthy"'})," - a check of whether your node\u2019s storage radius is the same as the most common radius from among its peer nodes"]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"reservestate",children:(0,s.jsx)(n.code,{children:"/reservestate"})}),"\n",(0,s.jsx)(n.p,{children:"This endpoint shows key information about the reserve state of your node. You can use it to identify problems with your node related to its reserve (whether it is syncing chunks properly into its reserve for example)."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:' curl -s http://localhost:1633/reservestate | jq\n\n {\n "radius": 15,\n "": 10,\n "commitment": 134121783296\n }\n'})}),"\n",(0,s.jsx)(n.p,{children:"Let's take a look at each of these values:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"radius"'})," - is what the storage radius would be if every available batch was 100% utilised, it is essentially the radius needed for the network to handle all of the batches at 100% utilisation. Radius is measured as a proximity order (PO)."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"storageRadius"'})," - The radius of responsibility - the proximity order of chunks for which your node is responsible for storing. It should generally match the radius shown on ",(0,s.jsx)(n.a,{href:"https://swarmscan.io/neighborhoods",children:"Swarmscan"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"commitment"'})," - The total number of chunks which would be stored on the Swarm network if 100% of all postage batches were fully utilised."]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"chainstate",children:(0,s.jsx)(n.code,{children:"/chainstate"})}),"\n",(0,s.jsx)(n.p,{children:"This endpoint relates to your node's interactions with the Swarm Smart contracts on the Gnosis Chain."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:' curl -s http://localhost:1633/chainstate | jq\n\n{\n "chainTip": 32354482,\n "block": 32354475,\n "totalAmount": "25422512270",\n "currentPrice": "24000"\n}\n'})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"chainTip"'})," - The latest Gnosis Chain block number. Should be as high as or almost as high as the block number shown at ",(0,s.jsx)(n.a,{href:"https://gnosisscan.io/",children:"GnosisScan"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"block"'})," - The block to which your node has synced data from Gnosis Chain. This may be far behind the ",(0,s.jsx)(n.code,{children:'"chainTip"'})," when you first start up your node as it takes some time to sync all the data from the blockchain (especially if you are not using the ",(0,s.jsx)(n.code,{children:"snapshot"})," option). Should be very close to ",(0,s.jsx)(n.code,{children:'"chainTip"'})," if your node has already been operating for a while."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"totalAmount"'})," - Cumulative value of all prices per chunk in PLUR for each block."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"currentPrice"'})," - The price in PLUR to store a single chunk for each Gnosis Chain block."]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"topology",children:(0,s.jsx)(n.code,{children:"/topology"})}),"\n",(0,s.jsx)(n.p,{children:"This endpoint allows you to explore the topology of your node within the Kademlia network. The results are split into 32 bins from bin_0 to bin_32. Each bin represents the nodes in the same neighborhood as your node at each proximity order from PO 0 to PO 32."}),"\n",(0,s.jsxs)(n.p,{children:["As the output of this file can be very large, we save it to the ",(0,s.jsx)(n.code,{children:"topology.json"})," file for easier inspection:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:" curl -s http://localhost:1633/topology | jq '.' > topology.json\n"})}),"\n",(0,s.jsx)(n.p,{children:"We open the file in vim for inspection:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"vim topology.json\n"})}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"/topology"})," results begin with several values describing the entire topology and are followed by the details for each of the 32 bins. Lets first look at the values describing the total topology:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-json",children:' "baseAddr": "da7e5cc3ed9a46b6e7491d3bf738535d98112641380cbed2e9ddfe4cf4fc01c4",\n "population": 20514,\n "connected": 176,\n "timestamp": "2024-02-08T20:57:03.815537925Z",\n "nnLowWatermark": 3,\n "depth": 10,\n "reachability": "Public",\n "networkAvailability": "Available",\n ...\n'})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:'"baseAddr"'})," - Your node's overlay address."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:'"population"'})," - The total number of nodes your node has collected information about. This number should be around ####. If it is far higher or lower it likely indicates a problem."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:'"connected"'})," - The total number of nodes your node is currently connected to."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:'"timestamp"'})," - The time at which this topology snapshot was taken."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:'"nnLowWatermark"'})," - ???"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:'"depth"'})," -"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.code,{children:'"reachability"'})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.code,{children:'"networkAvailability"'})}),"\n",(0,s.jsx)(n.p,{children:"After the first section are 32 sections, one for each bin. At the front of each of these sections is a summary of information about the respective bin followed two list, one of disconnected peers and the other of connected peers. Let's take a look at bin_10 as an example:"}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-json",children:'...\n "bin_10": {\n "population": 3, // The total number of peers in this bin including both connected and disconnected peers.\n "connected": 2, // Number of connected peers\n "disconnectedPeers": [ //List of all disconnected peers\n {\n "address": "3e06e4667260c761f1b6a8539a99621c1af1f945e97667376c13b5f84984bcbc",\n "metrics": {\n "lastSeenTimestamp": 1707426772,\n "sessionConnectionRetry": 2,\n "connectionTotalDuration": 104619,\n "sessionConnectionDuration": 72,\n "sessionConnectionDirection": "outbound",\n "latencyEWMA": 849,\n "reachability": "Public",\n "healthy": true\n }\n }\n ],\n "connectedPeers": [ // List of all connected peers\n {\n "address": "3e09deca28d24a4c6dab9350dd0fb27a2333f03120b9f92f0ac0fd245707c9e3",\n "metrics": {\n "lastSeenTimestamp": 1707426766,\n "sessionConnectionRetry": 2,\n "connectionTotalDuration": 105059,\n "sessionConnectionDuration": 33,\n "sessionConnectionDirection": "outbound",\n "latencyEWMA": 899,\n "reachability": "Public",\n "healthy": true\n }\n },\n {\n "address": "3e1cdf7b1072fcde264c75f70635b9c1e9c1623eab2de55a0380f17b07751955",\n "metrics": {\n "lastSeenTimestamp": 1707426741,\n "sessionConnectionRetry": 1,\n "connectionTotalDuration": 109216,\n "sessionConnectionDuration": 59,\n "sessionConnectionDirection": "outbound",\n "latencyEWMA": 948,\n "reachability": "Public",\n "healthy": true\n }\n }\n ]\n },\n'})}),"\n",(0,s.jsx)(n.h3,{id:"node",children:(0,s.jsx)(n.code,{children:"/node"})}),"\n",(0,s.jsx)(n.p,{children:"This endpoint returns info about options related to your node type and also displays your current node type."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'curl -s http://localhost:1633/node | jq\n\n{\n "beeMode": "full",\n "chequebookEnabled": true,\n "swapEnabled": true\n}\n'})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"beeMode"'})," - The mode of your node, can be ",(0,s.jsx)(n.code,{children:'"full"'}),", ",(0,s.jsx)(n.code,{children:'"light"'}),", or ",(0,s.jsx)(n.code,{children:'"ultraLight"'}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"chequebookEnabled"'})," - Whether or not your node's ",(0,s.jsx)(n.code,{children:"chequebook-enable"})," option is set to ",(0,s.jsx)(n.code,{children:"true"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"swapEnabled"'})," - Whether or not your node's ",(0,s.jsx)(n.code,{children:"swap-enable"})," option is set to ",(0,s.jsx)(n.code,{children:"true"}),"."]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"If your node is not operating in the correct mode, this can help you to diagnose whether you have set your options correctly."}),"\n",(0,s.jsx)(n.h3,{id:"rchash",children:(0,s.jsx)(n.code,{children:"/rchash"})}),"\n",(0,s.jsxs)(n.p,{children:["Calling the /rchash endpoint will make your node generate a reserve commitment hash (the hash used in the ",(0,s.jsx)(n.a,{href:"/docs/learn/technology/incentives#storage-incentives-details",children:"redistribution game"}),"), and will report the amount of time it took to generate the hash. This is useful for getting a performance benchmark to ensure that your node's hardware is sufficient."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sudo curl -sX GET http://localhost:1633/rchash/10/aaaa/aaaa | jq\n"})}),"\n",(0,s.jsx)(n.p,{children:"It should not take much longer than 6 minutes at most for results to be returned:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'{\n "Sample": {\n "Items": [\n "000003dac2b2f75842e410474dfa4c1e6e0b9970d81b57b33564c5620667ba96",\n "00000baace30916f7445dbcc44d9b55cb699925acfbe157e4498c63bde834f40",\n "0000126f48fb1e99e471efc683565e4b245703c922b9956f89cbe09e1238e983",\n "000012db04a281b7cc0e6436a49bdc5b06ff85396fcb327330ca307e409d2a04",\n "000014f365b1a381dda85bbeabdd3040fb1395ca9e222e72a597f4cc76ecf6c2",\n "00001869a9216b3da6814a877fdbc31f156fc2e983b52bc68ffc6d3f3cc79af0",\n "0000198c0456230b555d5261091cf9206e75b4ad738495a60640b425ecdf408f",\n "00001a523bd1b688472c6ea5a3c87c697db64d54744829372ac808de8ec1d427"\n ],\n "Hash": "7f7d93c6235855fedc34e32c6b67253e27910ca4e3b8f2d942efcd758a6d8829"\n },\n "Time": "2m54.087909745s"\n}\n'})}),"\n",(0,s.jsxs)(n.p,{children:["If the ",(0,s.jsx)(n.code,{children:"Time"})," value is much longer than 6 minutes then it likely means that the node's hardware performance is not sufficient. Consider upgrading to use faster memory or processor."]}),"\n",(0,s.jsx)(n.h3,{id:"health",children:(0,s.jsx)(n.code,{children:"/health"})}),"\n",(0,s.jsx)(n.p,{children:"The /health endpoint is primarily used by infra tools such as Docker / Kubernetes to check whether the server is live."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:' curl -s http://localhost:1633/health | jq\n \n {\n "status": "ok",\n "version": "2.0.0-759f56f7",\n "apiVersion": "5.1.1",\n } \n'})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"status"'}),' - "ok" if the server is responsive.']}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"version"'})," - The version of your Bee node. You can find latest version by checking the ",(0,s.jsx)(n.a,{href:"https://github.com/ethersphere/bee",children:"Bee github repo"}),"."]}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.code,{children:'"apiVersion"'})}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"debug-api-removal-notice",children:"Debug API Removal Notice"}),"\n",(0,s.jsx)(n.admonition,{type:"info",children:(0,s.jsxs)(n.p,{children:["The Debug API endpoints have been merged into the Bee API in the Bee version 2.2.0 release, and will be fully removed in the 2.2.0 release. The ",(0,s.jsx)(n.a,{href:"/debug-api/",children:"Debug API reference docs"})," are still available until the 2.2.0 release for your reference."]})})]})}function l(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},28453:(e,n,o)=>{o.d(n,{R:()=>r,x:()=>a});var s=o(96540);const i={},t=s.createContext(i);function r(e){const n=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),s.createElement(t.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
+"use strict";(self.webpackChunkbee_docs=self.webpackChunkbee_docs||[]).push([[1927],{72045:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>d,contentTitle:()=>r,default:()=>l,frontMatter:()=>t,metadata:()=>a,toc:()=>c});var s=o(74848),i=o(28453);const t={title:"Bee API",id:"bee-api"},r=void 0,a={id:"bee/working-with-bee/bee-api",title:"Bee API",description:"The Bee HTTP API is the primary interfaces to a running Bee node. API-endpoints can be queried using familiar HTTP requests, and will respond with semantically accurate HTTP status and error codes as well as data payloads in JSON format where appropriate.",source:"@site/docs/bee/working-with-bee/bee-api.md",sourceDirName:"bee/working-with-bee",slug:"/bee/working-with-bee/bee-api",permalink:"/docs/bee/working-with-bee/bee-api",draft:!1,unlisted:!1,editUrl:"https://github.com/ethersphere/docs.github.io/blob/master/docs/bee/working-with-bee/bee-api.md",tags:[],version:"current",frontMatter:{title:"Bee API",id:"bee-api"},sidebar:"bee",previous:{title:"Configuration",permalink:"/docs/bee/working-with-bee/configuration"},next:{title:"Logs and Files",permalink:"/docs/bee/working-with-bee/logs-and-files"}},d={},c=[{value:"Interacting With the API",id:"interacting-with-the-api",level:2},{value:"Alternatives for Working with the API",id:"alternatives-for-working-with-the-api",level:3},{value:"Exploring Node Status",id:"exploring-node-status",level:2},{value:"/status
",id:"status",level:3},{value:"/status/peers
",id:"statuspeers",level:3},{value:"/redistributionstate
",id:"redistributionstate",level:3},{value:"/reservestate
",id:"reservestate",level:3},{value:"/chainstate
",id:"chainstate",level:3},{value:"/topology
",id:"topology",level:3},{value:"/node
",id:"node",level:3},{value:"/rchash
",id:"rchash",level:3},{value:"/health
",id:"health",level:3},{value:"Debug API Removal Notice",id:"debug-api-removal-notice",level:2}];function h(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",ul:"ul",...(0,i.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(n.p,{children:["The Bee HTTP API is the primary interfaces to a running Bee node. API-endpoints can be queried using familiar HTTP requests, and will respond with semantically accurate ",(0,s.jsx)(n.a,{href:"https://developer.mozilla.org/en-US/docs/Web/HTTP/Status",children:"HTTP status and error codes"})," as well as data payloads in ",(0,s.jsx)(n.a,{href:"https://www.json.org/json-en.html",children:"JSON"})," format where appropriate."]}),"\n",(0,s.jsxs)(n.p,{children:["The Bee API-endpoint exposes all functionality to upload and download content to and from the Swarm network. By default, it runs on port ",(0,s.jsx)(n.code,{children:":1633"}),"."]}),"\n",(0,s.jsxs)(n.admonition,{type:"danger",children:[(0,s.jsxs)(n.p,{children:["Make sure that your api-addr (default 1633) is never exposed to the internet. If you are not using a firewall or other method to protect your node, make sure to change your Bee API address from the default ",(0,s.jsx)(n.code,{children:"1633"})," to ",(0,s.jsx)(n.code,{children:"127.0.0.1:1633"})," to ensure that it is not publicly exposed to the internet."]}),(0,s.jsxs)(n.p,{children:["You may also consider using the ",(0,s.jsx)(n.a,{href:"/docs/develop/tools-and-features/gateway-proxy",children:"Gateway Proxy tool"})," to protect your node's API endpoint."]})]}),"\n",(0,s.jsxs)(n.p,{children:["Detailed information about Bee API endpoints can be found in the ",(0,s.jsx)(n.a,{href:"/api/",children:"API reference docs"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"interacting-with-the-api",children:"Interacting With the API"}),"\n",(0,s.jsxs)(n.p,{children:["You can use HTTP requests to interact directly with Bee API to access all of your Bee node's various functions such as ",(0,s.jsx)(n.a,{href:"/docs/develop/access-the-swarm/buy-a-stamp-batch",children:"purchasing stamp batches"}),", ",(0,s.jsx)(n.a,{href:"/docs/develop/access-the-swarm/upload-and-download",children:"uploading and downloading"}),", ",(0,s.jsx)(n.a,{href:"/docs/bee/working-with-bee/staking",children:"staking"}),", and more."]}),"\n",(0,s.jsx)(n.h3,{id:"alternatives-for-working-with-the-api",children:"Alternatives for Working with the API"}),"\n",(0,s.jsxs)(n.p,{children:["For developers, the ",(0,s.jsx)(n.a,{href:"/docs/develop/tools-and-features/bee-js",children:"Bee JS library"})," offers a more convenient way to interact with the API in a NodeJS environment."]}),"\n",(0,s.jsxs)(n.p,{children:["For many other common use cases, you may prefer to make use of the ",(0,s.jsx)(n.a,{href:"/docs/bee/working-with-bee/swarm-cli",children:"Swarm CLI"})," tool, as it offers a convenient command line based interface for interacting with your node's API."]}),"\n",(0,s.jsx)(n.h2,{id:"exploring-node-status",children:"Exploring Node Status"}),"\n",(0,s.jsxs)(n.p,{children:["After ",(0,s.jsx)(n.a,{href:"/docs/bee/installation/install",children:"installing"})," and starting up your node, we can begin to understand the node's status by interacting with the API."]}),"\n",(0,s.jsx)(n.p,{children:"First, let's check how many nodes we are currently connected to."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"curl -s http://localhost:1633/peers | jq '.peers | length'\n"})}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:"23\n"})}),"\n",(0,s.jsx)(n.p,{children:"Great! We can see that we are currently connected and sharing data with 23 other nodes!"}),"\n",(0,s.jsx)(n.admonition,{type:"info",children:(0,s.jsxs)(n.p,{children:["Here we are using the ",(0,s.jsx)(n.code,{children:"jq"})," command line utility to count the amount of objects in the ",(0,s.jsx)(n.code,{children:"peers"})," array in the JSON response we have received from our API, learn more about how to install and use ",(0,s.jsx)(n.code,{children:"jq"})," ",(0,s.jsx)(n.a,{href:"https://stedolan.github.io/jq/",children:"here"}),"."]})}),"\n",(0,s.jsx)(n.p,{children:"Let's review a handful of endpoints which will provide you with important information relevant to detecting and diagnosing problems with your nodes."}),"\n",(0,s.jsx)(n.h3,{id:"status",children:(0,s.jsx)(n.code,{children:"/status"})}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"/status"})," endpoint returns a quick summary of some important metrics for your node."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:" curl -s http://localhost:1633/status | jq\n"})}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'{\n "peer": "da7e5cc3ed9a46b6e7491d3bf738535d98112641380cbed2e9ddfe4cf4fc01c4",\n "proximity": 0,\n "beeMode": "full",\n "reserveSize": 3747532,\n "pullsyncRate": 0,\n "storageRadius": 10,\n "connectedPeers": 183,\n "neighborhoodSize": 12,\n "batchCommitment": 133828050944,\n "isReachable": true\n}\n'})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"peer"'})," - Your node's overlay address."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"proximity"'})," - The proximity order (number of shared leading bits) with this node and your node."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"beeMode"'})," - The mode of your node, can be ",(0,s.jsx)(n.code,{children:'"full"'}),", ",(0,s.jsx)(n.code,{children:'"light"'}),", or ",(0,s.jsx)(n.code,{children:'"ultraLight"'}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"reserveSize"'})," - The number of chunks your node is currently storing in its reserve. This value should be roughly similar across nodes in the network. It should be identical for nodes within the same neighborhood."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"pullsyncRate"'})," - The rate at which your node is currently syncing chunks from other nodes in the network."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"storageRadius"'})," - The radius of responsibility - the proximity order of chunks for which your node is responsible for storing. It should generally match the radius shown on ",(0,s.jsx)(n.a,{href:"https://swarmscan.io/neighborhoods",children:"Swarmscan"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"connectedPeers"'})," - The number of peers your node is connected to."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"neighborhoodSize"'})," - The number of total neighbors in your neighborhood, not including your own node. The more nodes in your neighborhood, the lower your chance of winning rewards as a staking node."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"batchCommitment"'})," - The total number of chunks which would be stored on the Swarm network if 100% of all postage batches were fully utilised."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"isReachable"'})," - Whether or not your node is reachable on the p2p API by other nodes on the Swarm network (port 1634 by default)."]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"statuspeers",children:(0,s.jsx)(n.code,{children:"/status/peers"})}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"/status/peers"})," endpoint returns information about all the peers of the node making the request. The type of the object returned is the same as that returned from the ",(0,s.jsx)(n.code,{children:"/status"})," endpoint. This endpoint is useful for diagnosing syncing / availability issues with your node."]}),"\n",(0,s.jsx)(n.p,{children:"The nodes are ordered by distance (Kademlia distance, not spatial / geographic distance) to your node, with the most distant nodes with PO (proximity order) of zero at the top of the list and the closest nodes with higher POs at the bottom of the list. The nodes at the bottom of the list with a PO equal or greater than the storage depth make up the nodes in your own node's neighborhood. It's possible that not all nodes in your neighborhood will appear in this list each time you call the endpoint if the connection between your nodes and the rest of the nodes in the neighborhood is not stable."}),"\n",(0,s.jsx)(n.p,{children:"Here are the last 12 entries:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:" curl -s http://localhost:1633/status/peers | jq\n"})}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:' ...\n {\n "peer": "da33f7a504a74094242d3e542475b49847d1d0f375e0c86bac1c9d7f0937acc0",\n "proximity": 9,\n "beeMode": "full",\n "reserveSize": 3782924,\n "pullsyncRate": 0,\n "storageRadius": 10,\n "connectedPeers": 188,\n "neighborhoodSize": 11,\n "batchCommitment": 133828050944,\n "isReachable": true\n },\n {\n "peer": "da4b529cc1aedc62e31849cf7f8ab8c1866d9d86038b857d6cf2f590604387fe",\n "proximity": 10,\n "beeMode": "full",\n "reserveSize": 3719593,\n "pullsyncRate": 0,\n "storageRadius": 10,\n "connectedPeers": 176,\n "neighborhoodSize": 11,\n "batchCommitment": 133828050944,\n "isReachable": true\n },\n {\n "peer": "da5d39a5508fadf66c8665d5e51617f0e9e5fd501e429c38471b861f104c1504",\n "proximity": 10,\n "beeMode": "full",\n "reserveSize": 3777241,\n "pullsyncRate": 0,\n "storageRadius": 10,\n "connectedPeers": 198,\n "neighborhoodSize": 12,\n "batchCommitment": 133828050944,\n "isReachable": true\n },\n {\n "peer": "da4cb0d125bba638def55c0061b00d7c01ed4033fa193d6e53a67183c5488d73",\n "proximity": 10,\n "beeMode": "full",\n "reserveSize": 3849125,\n "pullsyncRate": 0,\n "storageRadius": 10,\n "connectedPeers": 181,\n "neighborhoodSize": 13,\n "batchCommitment": 133828050944,\n "isReachable": true\n },\n {\n "peer": "da4b1cd5d15e061fdd474003b5602ab1cff939b4b9e30d60f8ff693141ede810",\n "proximity": 10,\n "beeMode": "full",\n "reserveSize": 3778452,\n "pullsyncRate": 0,\n "storageRadius": 10,\n "connectedPeers": 183,\n "neighborhoodSize": 12,\n "batchCommitment": 133827002368,\n "isReachable": true\n },\n {\n "peer": "da49e6c6174e3410edad2e0f05d704bbc33e9996bc0ead310d55372677316593",\n "proximity": 10,\n "beeMode": "full",\n "reserveSize": 3779560,\n "pullsyncRate": 0,\n "storageRadius": 10,\n "connectedPeers": 185,\n "neighborhoodSize": 12,\n "batchCommitment": 133828050944,\n "isReachable": true\n },\n {\n "peer": "da4cdab480f323d5791d3ab8d22d99147f110841e44a8991a169f0ab1f47d8e5",\n "proximity": 10,\n "beeMode": "full",\n "reserveSize": 3778518,\n "pullsyncRate": 0,\n "storageRadius": 10,\n "connectedPeers": 189,\n "neighborhoodSize": 11,\n "batchCommitment": 133828050944,\n "isReachable": true\n },\n {\n "peer": "da4ccec79bc34b502c802415b0008c4cee161faf3cee0f572bb019b117c89b2f",\n "proximity": 10,\n "beeMode": "full",\n "reserveSize": 3779003,\n "pullsyncRate": 0,\n "storageRadius": 10,\n "connectedPeers": 179,\n "neighborhoodSize": 10,\n "batchCommitment": 133828050944,\n "isReachable": true\n },\n {\n "peer": "da69d412b79358f84b7928d2f6b7ccdaf165a21313608e16edd317a5355ba250",\n "proximity": 11,\n "beeMode": "full",\n "reserveSize": 3712586,\n "pullsyncRate": 0,\n "storageRadius": 10,\n "connectedPeers": 189,\n "neighborhoodSize": 12,\n "batchCommitment": 133827002368,\n "isReachable": true\n },\n {\n "peer": "da61967b1bd614a69e5e83f73cc98a63a70ebe20454ca9aafea6b57493e00a34",\n "proximity": 11,\n "beeMode": "full",\n "reserveSize": 3780190,\n "pullsyncRate": 0,\n "storageRadius": 10,\n "connectedPeers": 182,\n "neighborhoodSize": 13,\n "batchCommitment": 133828050944,\n "isReachable": true\n },\n {\n "peer": "da7b6a268637cfd6799a9923129347fc3d564496ea79aea119e89c09c5d9efed",\n "proximity": 13,\n "beeMode": "full",\n "reserveSize": 3721494,\n "pullsyncRate": 0,\n "storageRadius": 10,\n "connectedPeers": 188,\n "neighborhoodSize": 14,\n "batchCommitment": 133828050944,\n "isReachable": true\n },\n {\n "peer": "da7a974149543df1b459831286b42b302f22393a20e9b3dd9a7bb5a7aa5af263",\n "proximity": 13,\n "beeMode": "full",\n "reserveSize": 3852986,\n "pullsyncRate": 0,\n "storageRadius": 10,\n "connectedPeers": 186,\n "neighborhoodSize": 12,\n "batchCommitment": 133828050944,\n "isReachable": true\n }\n ]\n}\n'})}),"\n",(0,s.jsxs)(n.p,{children:["The first entry has a proximity of 9, meaning that it is below the ",(0,s.jsx)(n.code,{children:"storageRadius"})," (depth) of 10 and so does not fall into our node's neighborhood. All the other nodes further down the list have a proximity of 10 or greater with our node, meaning they fall into our node's neighborhood."]}),"\n",(0,s.jsxs)(n.p,{children:["You may notice that there is some variation in ",(0,s.jsx)(n.code,{children:"neighborhoodSize"}),", however they are all close to the same value. This could be due to temporary connection problems between nodes in the neighborhood, but is not considered a problem unless the neighborhood size is much lower than its peers or at zero. As long as each node is connected to most of the other nodes in its neighborhood, each node in the neighborhood will be able to sync the required chunks to its reserve."]}),"\n",(0,s.jsxs)(n.p,{children:["And we can compare these entries to our own node's ",(0,s.jsx)(n.code,{children:"/status"})," results for diagnostic purposes:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:" curl -s http://localhost:1633/status | jq\n"})}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'{\n "peer": "da7e5cc3ed9a46b6e7491d3bf738535d98112641380cbed2e9ddfe4cf4fc01c4",\n "proximity": 0,\n "beeMode": "full",\n "reserveSize": 3747532,\n "pullsyncRate": 0,\n "storageRadius": 10,\n "connectedPeers": 183,\n "neighborhoodSize": 12,\n "batchCommitment": 133828050944,\n "isReachable": true\n}\n'})}),"\n",(0,s.jsxs)(n.p,{children:["From the results we can see that we have a healthy neighborhood size when compared with the other nodes in our neighborhood and also has the same ",(0,s.jsx)(n.code,{children:"batchCommitment"})," value as it should."]}),"\n",(0,s.jsx)(n.h3,{id:"redistributionstate",children:(0,s.jsx)(n.code,{children:"/redistributionstate"})}),"\n",(0,s.jsx)(n.p,{children:"This endpoint provides an overview of values related to storage fee redistribution game (in other words, staking rewards). You can use this endpoint to check whether or not your node is participating properly in the redistribution game."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'curl -s http://localhost:1633/redistributionstate | jq\n{\n "minimumGasFunds": "11080889201250000",\n "hasSufficientFunds": true,\n "isFrozen": false,\n "isFullySynced": true,\n "phase": "claim",\n "round": 212859,\n "lastWonRound": 207391,\n "lastPlayedRound": 210941,\n "lastFrozenRound": 210942,\n "lastSelectedRound": 212553,\n "lastSampleDuration": 491687776653,\n "block": 32354719,\n "reward": "1804537795127017472",\n "fees": "592679945236926714",\n "isHealthy": true\n}\n'})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"minimumGasFunds"'})," - The minimum required xDAI denominated in wei (1 xDAI = 10^18 wei) required for a node to participate in the redistribution game."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"hasSufficientFunds"'})," - Whether your node has at least the ",(0,s.jsx)(n.code,{children:'"minimumGasFunds"'})," amount of xDAI."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"isFrozen"'})," - Whether your node is currently frozen. See ",(0,s.jsx)(n.a,{href:"#",children:"docs"})," for more information on freezing."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"isFullySynced"'})," - Whether your node has fully synced all the chunks in its ",(0,s.jsx)(n.code,{children:'"storageRadius"'})," (the value returned from the ",(0,s.jsx)(n.code,{children:"/reservestate"})," endpoint.)"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"phase"'})," - The current phase of the redistribution game (this does not indicate whether or not your node is participating in the current phase)."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"round"'})," - The current number of the round of the redistribution game."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"lastWonRound"'})," - The last round number in which your node won the redistribtuion game."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"lastPlayedRound"'})," - The last round number in which your node participating in the redistribution game. If this number matches the number of the current round shown in ",(0,s.jsx)(n.code,{children:'"round"'}),", then your node is participating in the current round."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"lastFrozenRound"'})," - The last round in which your node was frozen."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"lastSelectedRound"'})," - The last round in which your node's neighborhood was selected. Note that it is possible for your node's neighborhood to be selected without your node playing in the redistribution game. This may potentially indicate your node's hardware is not sufficient to calculate the commitment hash fast enough. See ",(0,s.jsxs)(n.a,{href:"#",children:["section on the ",(0,s.jsx)(n.code,{children:"/rchash"})," endpoint"]})," for more information."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"lastSampleDuration"'})," - The time it took for your node to calculate the sample commitment hash in nanoseconds."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"block"'})," - current Gnosis block number"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"reward"'})," - The total all-time reward in PLUR earned by your node."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"fees"'})," - The total amount in fees paid by your node denominated in xDAI wei."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"isHealthy"'})," - a check of whether your node\u2019s storage radius is the same as the most common radius from among its peer nodes"]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"reservestate",children:(0,s.jsx)(n.code,{children:"/reservestate"})}),"\n",(0,s.jsx)(n.p,{children:"This endpoint shows key information about the reserve state of your node. You can use it to identify problems with your node related to its reserve (whether it is syncing chunks properly into its reserve for example)."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:' curl -s http://localhost:1633/reservestate | jq\n\n {\n "radius": 15,\n "storageRadius": 10,\n "commitment": 134121783296\n }\n'})}),"\n",(0,s.jsx)(n.p,{children:"Let's take a look at each of these values:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"radius"'})," - is what the storage radius would be if every available batch was 100% utilised, it is essentially the radius needed for the network to handle all of the batches at 100% utilisation. Radius is measured as a proximity order (PO)."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"storageRadius"'})," - The radius of responsibility - the proximity order of chunks for which your node is responsible for storing. It should generally match the radius shown on ",(0,s.jsx)(n.a,{href:"https://swarmscan.io/neighborhoods",children:"Swarmscan"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"commitment"'})," - The total number of chunks which would be stored on the Swarm network if 100% of all postage batches were fully utilised."]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"chainstate",children:(0,s.jsx)(n.code,{children:"/chainstate"})}),"\n",(0,s.jsx)(n.p,{children:"This endpoint relates to your node's interactions with the Swarm Smart contracts on the Gnosis Chain."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:' curl -s http://localhost:1633/chainstate | jq\n\n{\n "chainTip": 32354482,\n "block": 32354475,\n "totalAmount": "25422512270",\n "currentPrice": "24000"\n}\n'})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"chainTip"'})," - The latest Gnosis Chain block number. Should be as high as or almost as high as the block number shown at ",(0,s.jsx)(n.a,{href:"https://gnosisscan.io/",children:"GnosisScan"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"block"'})," - The block to which your node has synced data from Gnosis Chain. This may be far behind the ",(0,s.jsx)(n.code,{children:'"chainTip"'})," when you first start up your node as it takes some time to sync all the data from the blockchain (especially if you are not using the ",(0,s.jsx)(n.code,{children:"snapshot"})," option). Should be very close to ",(0,s.jsx)(n.code,{children:'"chainTip"'})," if your node has already been operating for a while."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"totalAmount"'})," - Cumulative value of all prices per chunk in PLUR for each block."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"currentPrice"'})," - The price in PLUR to store a single chunk for each Gnosis Chain block."]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"topology",children:(0,s.jsx)(n.code,{children:"/topology"})}),"\n",(0,s.jsx)(n.p,{children:"This endpoint allows you to explore the topology of your node within the Kademlia network. The results are split into 32 bins from bin_0 to bin_32. Each bin represents the nodes in the same neighborhood as your node at each proximity order from PO 0 to PO 32."}),"\n",(0,s.jsxs)(n.p,{children:["As the output of this file can be very large, we save it to the ",(0,s.jsx)(n.code,{children:"topology.json"})," file for easier inspection:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:" curl -s http://localhost:1633/topology | jq '.' > topology.json\n"})}),"\n",(0,s.jsx)(n.p,{children:"We open the file in vim for inspection:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"vim topology.json\n"})}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"/topology"})," results begin with several values describing the entire topology and are followed by the details for each of the 32 bins. Lets first look at the values describing the total topology:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-json",children:' "baseAddr": "da7e5cc3ed9a46b6e7491d3bf738535d98112641380cbed2e9ddfe4cf4fc01c4",\n "population": 20514,\n "connected": 176,\n "timestamp": "2024-02-08T20:57:03.815537925Z",\n "nnLowWatermark": 3,\n "depth": 10,\n "reachability": "Public",\n "networkAvailability": "Available",\n ...\n'})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:'"baseAddr"'})," - Your node's overlay address."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:'"population"'})," - The total number of nodes your node has collected information about. This number should be around ####. If it is far higher or lower it likely indicates a problem."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:'"connected"'})," - The total number of nodes your node is currently connected to."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:'"timestamp"'})," - The time at which this topology snapshot was taken."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:'"nnLowWatermark"'})," - ???"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:'"depth"'})," -"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.code,{children:'"reachability"'})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.code,{children:'"networkAvailability"'})}),"\n",(0,s.jsx)(n.p,{children:"After the first section are 32 sections, one for each bin. At the front of each of these sections is a summary of information about the respective bin followed two list, one of disconnected peers and the other of connected peers. Let's take a look at bin_10 as an example:"}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-json",children:'...\n "bin_10": {\n "population": 3, // The total number of peers in this bin including both connected and disconnected peers.\n "connected": 2, // Number of connected peers\n "disconnectedPeers": [ //List of all disconnected peers\n {\n "address": "3e06e4667260c761f1b6a8539a99621c1af1f945e97667376c13b5f84984bcbc",\n "metrics": {\n "lastSeenTimestamp": 1707426772,\n "sessionConnectionRetry": 2,\n "connectionTotalDuration": 104619,\n "sessionConnectionDuration": 72,\n "sessionConnectionDirection": "outbound",\n "latencyEWMA": 849,\n "reachability": "Public",\n "healthy": true\n }\n }\n ],\n "connectedPeers": [ // List of all connected peers\n {\n "address": "3e09deca28d24a4c6dab9350dd0fb27a2333f03120b9f92f0ac0fd245707c9e3",\n "metrics": {\n "lastSeenTimestamp": 1707426766,\n "sessionConnectionRetry": 2,\n "connectionTotalDuration": 105059,\n "sessionConnectionDuration": 33,\n "sessionConnectionDirection": "outbound",\n "latencyEWMA": 899,\n "reachability": "Public",\n "healthy": true\n }\n },\n {\n "address": "3e1cdf7b1072fcde264c75f70635b9c1e9c1623eab2de55a0380f17b07751955",\n "metrics": {\n "lastSeenTimestamp": 1707426741,\n "sessionConnectionRetry": 1,\n "connectionTotalDuration": 109216,\n "sessionConnectionDuration": 59,\n "sessionConnectionDirection": "outbound",\n "latencyEWMA": 948,\n "reachability": "Public",\n "healthy": true\n }\n }\n ]\n },\n'})}),"\n",(0,s.jsx)(n.h3,{id:"node",children:(0,s.jsx)(n.code,{children:"/node"})}),"\n",(0,s.jsx)(n.p,{children:"This endpoint returns info about options related to your node type and also displays your current node type."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'curl -s http://localhost:1633/node | jq\n\n{\n "beeMode": "full",\n "chequebookEnabled": true,\n "swapEnabled": true\n}\n'})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"beeMode"'})," - The mode of your node, can be ",(0,s.jsx)(n.code,{children:'"full"'}),", ",(0,s.jsx)(n.code,{children:'"light"'}),", or ",(0,s.jsx)(n.code,{children:'"ultraLight"'}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"chequebookEnabled"'})," - Whether or not your node's ",(0,s.jsx)(n.code,{children:"chequebook-enable"})," option is set to ",(0,s.jsx)(n.code,{children:"true"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"swapEnabled"'})," - Whether or not your node's ",(0,s.jsx)(n.code,{children:"swap-enable"})," option is set to ",(0,s.jsx)(n.code,{children:"true"}),"."]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"If your node is not operating in the correct mode, this can help you to diagnose whether you have set your options correctly."}),"\n",(0,s.jsx)(n.h3,{id:"rchash",children:(0,s.jsx)(n.code,{children:"/rchash"})}),"\n",(0,s.jsxs)(n.p,{children:["Calling the /rchash endpoint will make your node generate a reserve commitment hash (the hash used in the ",(0,s.jsx)(n.a,{href:"/docs/learn/technology/incentives#storage-incentives-details",children:"redistribution game"}),"), and will report the amount of time it took to generate the hash. This is useful for getting a performance benchmark to ensure that your node's hardware is sufficient."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sudo curl -sX GET http://localhost:1633/rchash/10/aaaa/aaaa | jq\n"})}),"\n",(0,s.jsx)(n.p,{children:"It should not take much longer than 6 minutes at most for results to be returned:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'{\n "Sample": {\n "Items": [\n "000003dac2b2f75842e410474dfa4c1e6e0b9970d81b57b33564c5620667ba96",\n "00000baace30916f7445dbcc44d9b55cb699925acfbe157e4498c63bde834f40",\n "0000126f48fb1e99e471efc683565e4b245703c922b9956f89cbe09e1238e983",\n "000012db04a281b7cc0e6436a49bdc5b06ff85396fcb327330ca307e409d2a04",\n "000014f365b1a381dda85bbeabdd3040fb1395ca9e222e72a597f4cc76ecf6c2",\n "00001869a9216b3da6814a877fdbc31f156fc2e983b52bc68ffc6d3f3cc79af0",\n "0000198c0456230b555d5261091cf9206e75b4ad738495a60640b425ecdf408f",\n "00001a523bd1b688472c6ea5a3c87c697db64d54744829372ac808de8ec1d427"\n ],\n "Hash": "7f7d93c6235855fedc34e32c6b67253e27910ca4e3b8f2d942efcd758a6d8829"\n },\n "Time": "2m54.087909745s"\n}\n'})}),"\n",(0,s.jsxs)(n.p,{children:["If the ",(0,s.jsx)(n.code,{children:"Time"})," value is much longer than 6 minutes then it likely means that the node's hardware performance is not sufficient. Consider upgrading to use faster memory or processor."]}),"\n",(0,s.jsx)(n.h3,{id:"health",children:(0,s.jsx)(n.code,{children:"/health"})}),"\n",(0,s.jsx)(n.p,{children:"The /health endpoint is primarily used by infra tools such as Docker / Kubernetes to check whether the server is live."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:' curl -s http://localhost:1633/health | jq\n \n {\n "status": "ok",\n "version": "2.0.0-759f56f7",\n "apiVersion": "5.1.1",\n } \n'})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"status"'}),' - "ok" if the server is responsive.']}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"version"'})," - The version of your Bee node. You can find latest version by checking the ",(0,s.jsx)(n.a,{href:"https://github.com/ethersphere/bee",children:"Bee github repo"}),"."]}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.code,{children:'"apiVersion"'})}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"debug-api-removal-notice",children:"Debug API Removal Notice"}),"\n",(0,s.jsx)(n.admonition,{type:"info",children:(0,s.jsxs)(n.p,{children:["The Debug API endpoints have been merged into the Bee API in the Bee version 2.2.0 release, and will be fully removed in the 2.2.0 release. The ",(0,s.jsx)(n.a,{href:"/debug-api/",children:"Debug API reference docs"})," are still available until the 2.2.0 release for your reference."]})})]})}function l(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},28453:(e,n,o)=>{o.d(n,{R:()=>r,x:()=>a});var s=o(96540);const i={},t=s.createContext(i);function r(e){const n=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),s.createElement(t.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/runtime~main.d48aff15.js b/assets/js/runtime~main.7f484aa6.js
similarity index 99%
rename from assets/js/runtime~main.d48aff15.js
rename to assets/js/runtime~main.7f484aa6.js
index 160d1b684..cf2f4d952 100644
--- a/assets/js/runtime~main.d48aff15.js
+++ b/assets/js/runtime~main.7f484aa6.js
@@ -1 +1 @@
-(()=>{"use strict";var e,a,f,c,b,d={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var f=t[e]={id:e,loaded:!1,exports:{}};return d[e].call(f.exports,f,f.exports,r),f.loaded=!0,f.exports}r.m=d,r.c=t,e=[],r.O=(a,f,c,b)=>{if(!f){var d=1/0;for(i=0;i/r
/reservestate
This endpoint shows key information about the reserve state of your node. You can use it to identify problems with your node related to its reserve (whether it is syncing chunks properly into its reserve for example).
- curl -s http://localhost:1633/reservestate | jq
{
"radius": 15,
"": 10,
"commitment": 134121783296
}
+ curl -s http://localhost:1633/reservestate | jq
{
"radius": 15,
"storageRadius": 10,
"commitment": 134121783296
}
Let's take a look at each of these values:
"radius"
- is what the storage radius would be if every available batch was 100% utilised, it is essentially the radius needed for the network to handle all of the batches at 100% utilisation. Radius is measured as a proximity order (PO).
diff --git a/docs/bee/working-with-bee/bee-dashboard/index.html b/docs/bee/working-with-bee/bee-dashboard/index.html
index 55c4a5e19..d8ba4e88a 100644
--- a/docs/bee/working-with-bee/bee-dashboard/index.html
+++ b/docs/bee/working-with-bee/bee-dashboard/index.html
@@ -10,7 +10,7 @@
-
+
diff --git a/docs/bee/working-with-bee/cashing-out/index.html b/docs/bee/working-with-bee/cashing-out/index.html
index 90c1e3a2f..2243bcba0 100644
--- a/docs/bee/working-with-bee/cashing-out/index.html
+++ b/docs/bee/working-with-bee/cashing-out/index.html
@@ -10,7 +10,7 @@
-
+
diff --git a/docs/bee/working-with-bee/configuration/index.html b/docs/bee/working-with-bee/configuration/index.html
index 13c4206f7..b59932be6 100644
--- a/docs/bee/working-with-bee/configuration/index.html
+++ b/docs/bee/working-with-bee/configuration/index.html
@@ -10,7 +10,7 @@
-
+
diff --git a/docs/bee/working-with-bee/introduction/index.html b/docs/bee/working-with-bee/introduction/index.html
index 52c2d3f79..f20986979 100644
--- a/docs/bee/working-with-bee/introduction/index.html
+++ b/docs/bee/working-with-bee/introduction/index.html
@@ -10,7 +10,7 @@
-
+
diff --git a/docs/bee/working-with-bee/light-nodes/index.html b/docs/bee/working-with-bee/light-nodes/index.html
index c3d3e1f1c..511638894 100644
--- a/docs/bee/working-with-bee/light-nodes/index.html
+++ b/docs/bee/working-with-bee/light-nodes/index.html
@@ -10,7 +10,7 @@
-
+
diff --git a/docs/bee/working-with-bee/logs-and-files/index.html b/docs/bee/working-with-bee/logs-and-files/index.html
index ebc86f720..396b16b5c 100644
--- a/docs/bee/working-with-bee/logs-and-files/index.html
+++ b/docs/bee/working-with-bee/logs-and-files/index.html
@@ -10,7 +10,7 @@
-
+
diff --git a/docs/bee/working-with-bee/monitoring/index.html b/docs/bee/working-with-bee/monitoring/index.html
index 547a61807..c3d2093ed 100644
--- a/docs/bee/working-with-bee/monitoring/index.html
+++ b/docs/bee/working-with-bee/monitoring/index.html
@@ -10,7 +10,7 @@
-
+
diff --git a/docs/bee/working-with-bee/staking/index.html b/docs/bee/working-with-bee/staking/index.html
index 45a94c383..da827b36c 100644
--- a/docs/bee/working-with-bee/staking/index.html
+++ b/docs/bee/working-with-bee/staking/index.html
@@ -10,7 +10,7 @@
-
+
diff --git a/docs/bee/working-with-bee/swarm-cli/index.html b/docs/bee/working-with-bee/swarm-cli/index.html
index ce5deee1a..aaf046fca 100644
--- a/docs/bee/working-with-bee/swarm-cli/index.html
+++ b/docs/bee/working-with-bee/swarm-cli/index.html
@@ -10,7 +10,7 @@
-
+
diff --git a/docs/bee/working-with-bee/ultra-light-nodes/index.html b/docs/bee/working-with-bee/ultra-light-nodes/index.html
index 6912f2bb9..7c2e50ca6 100644
--- a/docs/bee/working-with-bee/ultra-light-nodes/index.html
+++ b/docs/bee/working-with-bee/ultra-light-nodes/index.html
@@ -10,7 +10,7 @@
-
+
diff --git a/docs/bee/working-with-bee/uninstalling-bee/index.html b/docs/bee/working-with-bee/uninstalling-bee/index.html
index 1116d27af..e1dd1f911 100644
--- a/docs/bee/working-with-bee/uninstalling-bee/index.html
+++ b/docs/bee/working-with-bee/uninstalling-bee/index.html
@@ -10,7 +10,7 @@
-
+
diff --git a/docs/bee/working-with-bee/upgrading-bee/index.html b/docs/bee/working-with-bee/upgrading-bee/index.html
index 8a6f6e4a3..1c669b88d 100644
--- a/docs/bee/working-with-bee/upgrading-bee/index.html
+++ b/docs/bee/working-with-bee/upgrading-bee/index.html
@@ -10,7 +10,7 @@
-
+
diff --git a/docs/desktop/access-content/index.html b/docs/desktop/access-content/index.html
index e97990195..91ae70979 100644
--- a/docs/desktop/access-content/index.html
+++ b/docs/desktop/access-content/index.html
@@ -10,7 +10,7 @@
-
+
diff --git a/docs/desktop/backup-restore/index.html b/docs/desktop/backup-restore/index.html
index d83aa317b..fe8f1de7c 100644
--- a/docs/desktop/backup-restore/index.html
+++ b/docs/desktop/backup-restore/index.html
@@ -10,7 +10,7 @@
-
+
diff --git a/docs/desktop/configuration/index.html b/docs/desktop/configuration/index.html
index 55bb8088c..809561361 100644
--- a/docs/desktop/configuration/index.html
+++ b/docs/desktop/configuration/index.html
@@ -10,7 +10,7 @@
-
+
diff --git a/docs/desktop/install/index.html b/docs/desktop/install/index.html
index 5f0d92d5d..3a34d758f 100644
--- a/docs/desktop/install/index.html
+++ b/docs/desktop/install/index.html
@@ -10,7 +10,7 @@
-
+
diff --git a/docs/desktop/introduction/index.html b/docs/desktop/introduction/index.html
index 6b4885ced..dc58a40a9 100644
--- a/docs/desktop/introduction/index.html
+++ b/docs/desktop/introduction/index.html
@@ -10,7 +10,7 @@
-
+
diff --git a/docs/desktop/postage-stamps/index.html b/docs/desktop/postage-stamps/index.html
index 9922735cf..716704869 100644
--- a/docs/desktop/postage-stamps/index.html
+++ b/docs/desktop/postage-stamps/index.html
@@ -10,7 +10,7 @@
-
+
diff --git a/docs/desktop/publish-a-website/index.html b/docs/desktop/publish-a-website/index.html
index 5283475bc..c85ad6a14 100644
--- a/docs/desktop/publish-a-website/index.html
+++ b/docs/desktop/publish-a-website/index.html
@@ -10,7 +10,7 @@
-
+
diff --git a/docs/desktop/start-a-blog/index.html b/docs/desktop/start-a-blog/index.html
index 7bdf719f9..1cfb1a954 100644
--- a/docs/desktop/start-a-blog/index.html
+++ b/docs/desktop/start-a-blog/index.html
@@ -10,7 +10,7 @@
-
+
diff --git a/docs/desktop/upload-content/index.html b/docs/desktop/upload-content/index.html
index d7ec99190..9dd8fce03 100644
--- a/docs/desktop/upload-content/index.html
+++ b/docs/desktop/upload-content/index.html
@@ -10,7 +10,7 @@
-
+
diff --git a/docs/develop/access-the-swarm/buy-a-stamp-batch/index.html b/docs/develop/access-the-swarm/buy-a-stamp-batch/index.html
index 7a57f2735..20d2fdd34 100644
--- a/docs/develop/access-the-swarm/buy-a-stamp-batch/index.html
+++ b/docs/develop/access-the-swarm/buy-a-stamp-batch/index.html
@@ -10,7 +10,7 @@
-
+
diff --git a/docs/develop/access-the-swarm/erasure-coding/index.html b/docs/develop/access-the-swarm/erasure-coding/index.html
index 536b84c8e..92ddde06e 100644
--- a/docs/develop/access-the-swarm/erasure-coding/index.html
+++ b/docs/develop/access-the-swarm/erasure-coding/index.html
@@ -10,7 +10,7 @@
-
+
diff --git a/docs/develop/access-the-swarm/host-your-website/index.html b/docs/develop/access-the-swarm/host-your-website/index.html
index 796455343..0b85598dd 100644
--- a/docs/develop/access-the-swarm/host-your-website/index.html
+++ b/docs/develop/access-the-swarm/host-your-website/index.html
@@ -10,7 +10,7 @@
-
+
diff --git a/docs/develop/access-the-swarm/introduction/index.html b/docs/develop/access-the-swarm/introduction/index.html
index 6e15840f1..68f83fd7a 100644
--- a/docs/develop/access-the-swarm/introduction/index.html
+++ b/docs/develop/access-the-swarm/introduction/index.html
@@ -10,7 +10,7 @@
-
+
diff --git a/docs/develop/access-the-swarm/pinning/index.html b/docs/develop/access-the-swarm/pinning/index.html
index 1ec16f8b3..9bd6fa88f 100644
--- a/docs/develop/access-the-swarm/pinning/index.html
+++ b/docs/develop/access-the-swarm/pinning/index.html
@@ -10,7 +10,7 @@
-
+
diff --git a/docs/develop/access-the-swarm/store-with-encryption/index.html b/docs/develop/access-the-swarm/store-with-encryption/index.html
index 879d94b3a..28d96fa50 100644
--- a/docs/develop/access-the-swarm/store-with-encryption/index.html
+++ b/docs/develop/access-the-swarm/store-with-encryption/index.html
@@ -10,7 +10,7 @@
-
+
diff --git a/docs/develop/access-the-swarm/syncing/index.html b/docs/develop/access-the-swarm/syncing/index.html
index 70993cb84..14256b8a9 100644
--- a/docs/develop/access-the-swarm/syncing/index.html
+++ b/docs/develop/access-the-swarm/syncing/index.html
@@ -10,7 +10,7 @@
-
+
diff --git a/docs/develop/access-the-swarm/ultra-light-nodes/index.html b/docs/develop/access-the-swarm/ultra-light-nodes/index.html
index 6944d23da..e01098b7e 100644
--- a/docs/develop/access-the-swarm/ultra-light-nodes/index.html
+++ b/docs/develop/access-the-swarm/ultra-light-nodes/index.html
@@ -10,7 +10,7 @@
-
+
diff --git a/docs/develop/access-the-swarm/upload-and-download/index.html b/docs/develop/access-the-swarm/upload-and-download/index.html
index 346d80f93..db44b55db 100644
--- a/docs/develop/access-the-swarm/upload-and-download/index.html
+++ b/docs/develop/access-the-swarm/upload-and-download/index.html
@@ -10,7 +10,7 @@
-
+
diff --git a/docs/develop/contribute/introduction/index.html b/docs/develop/contribute/introduction/index.html
index 4b43787da..d65df7012 100644
--- a/docs/develop/contribute/introduction/index.html
+++ b/docs/develop/contribute/introduction/index.html
@@ -10,7 +10,7 @@
-
+
diff --git a/docs/develop/contribute/protocols/index.html b/docs/develop/contribute/protocols/index.html
index 2fa35aedb..e2cc0e341 100644
--- a/docs/develop/contribute/protocols/index.html
+++ b/docs/develop/contribute/protocols/index.html
@@ -10,7 +10,7 @@
-
+
diff --git a/docs/develop/introduction/index.html b/docs/develop/introduction/index.html
index 850e38994..cc36375b2 100644
--- a/docs/develop/introduction/index.html
+++ b/docs/develop/introduction/index.html
@@ -10,7 +10,7 @@
-
+
diff --git a/docs/develop/tools-and-features/act/index.html b/docs/develop/tools-and-features/act/index.html
index 30e1e5897..89d9d9579 100644
--- a/docs/develop/tools-and-features/act/index.html
+++ b/docs/develop/tools-and-features/act/index.html
@@ -10,7 +10,7 @@
-
+
diff --git a/docs/develop/tools-and-features/bee-dev-mode/index.html b/docs/develop/tools-and-features/bee-dev-mode/index.html
index 2d3d93428..dd18f56c2 100644
--- a/docs/develop/tools-and-features/bee-dev-mode/index.html
+++ b/docs/develop/tools-and-features/bee-dev-mode/index.html
@@ -10,7 +10,7 @@
-
+
diff --git a/docs/develop/tools-and-features/bee-js/index.html b/docs/develop/tools-and-features/bee-js/index.html
index 182018eff..2dc035d75 100644
--- a/docs/develop/tools-and-features/bee-js/index.html
+++ b/docs/develop/tools-and-features/bee-js/index.html
@@ -10,7 +10,7 @@
-
+
diff --git a/docs/develop/tools-and-features/chunk-types/index.html b/docs/develop/tools-and-features/chunk-types/index.html
index afc1c9728..7ae63f64c 100644
--- a/docs/develop/tools-and-features/chunk-types/index.html
+++ b/docs/develop/tools-and-features/chunk-types/index.html
@@ -10,7 +10,7 @@
-
+
diff --git a/docs/develop/tools-and-features/feeds/index.html b/docs/develop/tools-and-features/feeds/index.html
index db8c94401..bc1990c1d 100644
--- a/docs/develop/tools-and-features/feeds/index.html
+++ b/docs/develop/tools-and-features/feeds/index.html
@@ -10,7 +10,7 @@
-
+
diff --git a/docs/develop/tools-and-features/gateway-proxy/index.html b/docs/develop/tools-and-features/gateway-proxy/index.html
index c315bac44..a448a5698 100644
--- a/docs/develop/tools-and-features/gateway-proxy/index.html
+++ b/docs/develop/tools-and-features/gateway-proxy/index.html
@@ -10,7 +10,7 @@
-
+
diff --git a/docs/develop/tools-and-features/introduction/index.html b/docs/develop/tools-and-features/introduction/index.html
index 2948ddbe0..4f8a00c7c 100644
--- a/docs/develop/tools-and-features/introduction/index.html
+++ b/docs/develop/tools-and-features/introduction/index.html
@@ -10,7 +10,7 @@
-
+
diff --git a/docs/develop/tools-and-features/pss/index.html b/docs/develop/tools-and-features/pss/index.html
index 5b9df28c9..19ac20b39 100644
--- a/docs/develop/tools-and-features/pss/index.html
+++ b/docs/develop/tools-and-features/pss/index.html
@@ -10,7 +10,7 @@
-
+
diff --git a/docs/develop/tools-and-features/starting-a-test-network/index.html b/docs/develop/tools-and-features/starting-a-test-network/index.html
index de12c8634..9ec7eb406 100644
--- a/docs/develop/tools-and-features/starting-a-test-network/index.html
+++ b/docs/develop/tools-and-features/starting-a-test-network/index.html
@@ -10,7 +10,7 @@
-
+
diff --git a/docs/learn/advanced/erasure-cost-calculation/index.html b/docs/learn/advanced/erasure-cost-calculation/index.html
index 2936b763c..597b2c447 100644
--- a/docs/learn/advanced/erasure-cost-calculation/index.html
+++ b/docs/learn/advanced/erasure-cost-calculation/index.html
@@ -10,7 +10,7 @@
-
+
diff --git a/docs/learn/advanced/neighbourhoods/index.html b/docs/learn/advanced/neighbourhoods/index.html
index 4592d2378..86cc8f4ba 100644
--- a/docs/learn/advanced/neighbourhoods/index.html
+++ b/docs/learn/advanced/neighbourhoods/index.html
@@ -10,7 +10,7 @@
-
+
diff --git a/docs/learn/ecosystem/awesome/index.html b/docs/learn/ecosystem/awesome/index.html
index 9811fd0d8..de46bb6db 100644
--- a/docs/learn/ecosystem/awesome/index.html
+++ b/docs/learn/ecosystem/awesome/index.html
@@ -10,7 +10,7 @@
-
+
diff --git a/docs/learn/ecosystem/community/index.html b/docs/learn/ecosystem/community/index.html
index df9057fdb..9a205452b 100644
--- a/docs/learn/ecosystem/community/index.html
+++ b/docs/learn/ecosystem/community/index.html
@@ -10,7 +10,7 @@
-
+
diff --git a/docs/learn/ecosystem/fair-data-society/index.html b/docs/learn/ecosystem/fair-data-society/index.html
index 9bd45113b..b73e46f0a 100644
--- a/docs/learn/ecosystem/fair-data-society/index.html
+++ b/docs/learn/ecosystem/fair-data-society/index.html
@@ -10,7 +10,7 @@
-
+
diff --git a/docs/learn/ecosystem/grants-bounties/index.html b/docs/learn/ecosystem/grants-bounties/index.html
index d1269aaac..157dbeec8 100644
--- a/docs/learn/ecosystem/grants-bounties/index.html
+++ b/docs/learn/ecosystem/grants-bounties/index.html
@@ -10,7 +10,7 @@
-
+
diff --git a/docs/learn/ecosystem/swarm-foundation/index.html b/docs/learn/ecosystem/swarm-foundation/index.html
index a9ab404ff..22bb5c24d 100644
--- a/docs/learn/ecosystem/swarm-foundation/index.html
+++ b/docs/learn/ecosystem/swarm-foundation/index.html
@@ -10,7 +10,7 @@
-
+
diff --git a/docs/learn/faq/index.html b/docs/learn/faq/index.html
index e1491b804..cd198d2f0 100644
--- a/docs/learn/faq/index.html
+++ b/docs/learn/faq/index.html
@@ -10,7 +10,7 @@
-
+
diff --git a/docs/learn/glossary/index.html b/docs/learn/glossary/index.html
index f95563574..944fbb6ea 100644
--- a/docs/learn/glossary/index.html
+++ b/docs/learn/glossary/index.html
@@ -10,7 +10,7 @@
-
+
diff --git a/docs/learn/introduction/index.html b/docs/learn/introduction/index.html
index 821782248..9ae6412ca 100644
--- a/docs/learn/introduction/index.html
+++ b/docs/learn/introduction/index.html
@@ -10,7 +10,7 @@
-
+
diff --git a/docs/learn/technology/act/index.html b/docs/learn/technology/act/index.html
index f17bcddd8..4d6e21e5a 100644
--- a/docs/learn/technology/act/index.html
+++ b/docs/learn/technology/act/index.html
@@ -10,7 +10,7 @@
-
+
diff --git a/docs/learn/technology/contracts/chequebook/index.html b/docs/learn/technology/contracts/chequebook/index.html
index 80b31172e..9195e0f26 100644
--- a/docs/learn/technology/contracts/chequebook/index.html
+++ b/docs/learn/technology/contracts/chequebook/index.html
@@ -10,7 +10,7 @@
-
+
diff --git a/docs/learn/technology/contracts/overview/index.html b/docs/learn/technology/contracts/overview/index.html
index 6b65d90a1..3e1c8e888 100644
--- a/docs/learn/technology/contracts/overview/index.html
+++ b/docs/learn/technology/contracts/overview/index.html
@@ -10,7 +10,7 @@
-
+
diff --git a/docs/learn/technology/contracts/postage-stamp/index.html b/docs/learn/technology/contracts/postage-stamp/index.html
index b84e7bef6..290f47b32 100644
--- a/docs/learn/technology/contracts/postage-stamp/index.html
+++ b/docs/learn/technology/contracts/postage-stamp/index.html
@@ -10,7 +10,7 @@
-
+
diff --git a/docs/learn/technology/contracts/price-oracle/index.html b/docs/learn/technology/contracts/price-oracle/index.html
index 8fccf143c..2d0eac955 100644
--- a/docs/learn/technology/contracts/price-oracle/index.html
+++ b/docs/learn/technology/contracts/price-oracle/index.html
@@ -10,7 +10,7 @@
-
+
diff --git a/docs/learn/technology/disc/index.html b/docs/learn/technology/disc/index.html
index 1f678cee6..3b8daecb4 100644
--- a/docs/learn/technology/disc/index.html
+++ b/docs/learn/technology/disc/index.html
@@ -10,7 +10,7 @@
-
+
diff --git a/docs/learn/technology/incentives/index.html b/docs/learn/technology/incentives/index.html
index cb766c6a2..4115ad95a 100644
--- a/docs/learn/technology/incentives/index.html
+++ b/docs/learn/technology/incentives/index.html
@@ -10,7 +10,7 @@
-
+
diff --git a/docs/learn/technology/pss/index.html b/docs/learn/technology/pss/index.html
index 3f58eee59..e67263fa3 100644
--- a/docs/learn/technology/pss/index.html
+++ b/docs/learn/technology/pss/index.html
@@ -10,7 +10,7 @@
-
+
diff --git a/docs/learn/technology/what-is-swarm/index.html b/docs/learn/technology/what-is-swarm/index.html
index 3952ed2b7..ffd6e4b16 100644
--- a/docs/learn/technology/what-is-swarm/index.html
+++ b/docs/learn/technology/what-is-swarm/index.html
@@ -10,7 +10,7 @@
-
+
diff --git a/docs/learn/tokens/index.html b/docs/learn/tokens/index.html
index e9e5ecbcc..8a6a58cfe 100644
--- a/docs/learn/tokens/index.html
+++ b/docs/learn/tokens/index.html
@@ -10,7 +10,7 @@
-
+
diff --git a/index.html b/index.html
index 96c554c89..a1acdd2cf 100644
--- a/index.html
+++ b/index.html
@@ -10,7 +10,7 @@
-
+
diff --git a/search/index.html b/search/index.html
index c666de7bb..a40755c9b 100644
--- a/search/index.html
+++ b/search/index.html
@@ -10,7 +10,7 @@
-
+