Troubleshooting
Things that go wrong, what each one actually means, and the shortest way out. Almost none of them put funds at risk, and this page says which ones do.
The wallet did not open
Usually a popup blocker, an extension that is locked, or a second wallet that has claimed the connection. Try in order:
- Unlock the extension and press the button again.
- Allow popups for this site.
- Disable the wallets you are not using for a moment. Several extensions announce themselves under the same name, and the one that answers is not always the one you meant.
- Reload the page. The connection is re-established on load.
Wrong network
Sitowise only exists on Robinhood Chain, chain id 4663 (0x1237). A wallet on another network cannot see your nodes, and any transaction it sends goes to a different chain entirely. A payment sent on another chain does not reach the payments wallet here and cannot mint anything.
The dashboard offers to switch and, if needed, to add the network. If the prompt does not appear, add it manually with the parameters on Requirements. If your wallet already has an entry for 4663 pointing at a stale RPC, correct the URL to https://rpc.mainnet.chain.robinhood.com rather than adding a second entry.
The transaction is pending forever
A transaction that has been broadcast but not mined is usually underpriced or stuck behind an earlier one from the same address. Nonces are sequential: nothing after a stuck transaction can confirm until it does.
- Find it on the explorer at
https://robinhoodchain.blockscout.comby pasting your address. - If your wallet offers "speed up", use it. That resends the same nonce with a higher fee.
- Otherwise cancel it, which sends a zero-value transaction to yourself with the same nonce, then retry.
A pending payment has not left your wallet and has not created a node. A pending withdrawal has not moved any balance. Neither is lost while it waits.
The payment confirmed but no node appeared
Buying a node is a plain transfer to the payments wallet, not a contract call. A watcher reads blocks for transfers to that wallet, and once one is recorded the relayer calls mintFor and pays the gas for it. So there is always a short gap between your transfer confirming and the node existing. Work through it in this order:
- Confirm the transfer itself confirmed, rather than still being pending or having reverted.
- Confirm the amount was exactly 0.02 ETH. Anything under or over is recorded and parked for a human rather than minted, because deciding between a refund and a top-up is not something the software should guess. Send the operator the transaction hash.
- Confirm it went to the payments wallet the deploy flow showed you, and not to the factory contract. ETH sent straight to the factory is accepted as unattached contract funds, no node is created, and the watcher never sees it. That one needs the operator to sort out.
- Look for the mint on the explorer. The node is created by
NodeMinted(id, owner, paymentRef, createdAt), wherepaymentRefis the hash of your payment transaction. That is how a node is tied back to the payment that bought it, and it is the field to search on. - Read the chain directly. If this returns your id, the node exists.
cast call $FACTORY "nodesOf(address)(uint256[])" $YOUR_ADDRESS \
--rpc-url https://rpc.mainnet.chain.robinhood.comIndexing runs behind the chain, so a node can exist for a short while before the dashboard lists it. If the chain says you own it, you own it, whatever any interface shows.
The transaction reverted
Withdrawals are your own transactions, so their errors land in your wallet. Mints are the relayer’s transaction, so those errors show up as a node that never appeared; they are listed here because the reason is worth knowing.
| Error | What happened | Fix |
|---|---|---|
NotNodeOwner | The wallet sending the withdrawal does not own that node | Switch to the wallet that bought it. Check with nodesOf(address). |
NothingToWithdraw | The balance is zero, either because nothing has been credited yet or because a previous withdrawAll already swept it | Read nodeInfo(id). Nothing was lost; there was nothing to send. |
BadInput | The destination passed to a withdrawal was the zero address | Pass a real address |
TransferFailed | The destination rejected the ETH | Withdraw to an address that can receive plain transfers, see Destination addresses |
WalletLimit | The wallet already holds 25 nodes, the per-wallet cap | Use another wallet, see Limits |
IsPaused | Minting is paused, so the relayer cannot create new nodes | Wait. Withdrawals are never blocked by pausing. |
A revert undoes everything in the transaction except the gas. Nothing is half applied, and no balance is left in a strange state. The full list of errors is on Factory interface.
Not enough gas
Gas is paid in ETH on chain 4663, separately from the node price. Two common situations:
- Spent everything on the node. A wallet holding exactly 0.02 ETH cannot buy one, because the transfer costs the price plus gas.
- Cannot afford to withdraw. The withdrawal is sent by you, so you need gas even though the ETH being sent comes from the contract. It is around 55,000 gas for one node, more for a sweep across several, so keep a small balance for it. Figures are on Withdrawing.
A balance looks wrong
Read the node straight from the chain. One call returns the balance, everything ever credited and everything ever withdrawn, and those three are the only figures involved.
cast call $FACTORY "nodeInfo(uint256)(address,uint64,uint256,uint256,uint256)" $NODE_IDIf the balance reads zero after a sweep, that is withdrawAll having done its job: it empties every node the wallet owns, not just the one you were looking at. Display truncates to six decimals, so very small balances can read as zero while being non-zero underneath; a withdrawal still takes the exact figure. See Balances.
Signed in, then signed out again
The session is a cookie tied to the address that signed. It ends when it expires, when you switch accounts in the wallet, or when cookies are cleared. Sign in again; nothing about your nodes or your balances depends on the session, which only decides what the dashboard will show you. Withdrawing does not use it at all.