Sitowise
Contracts

Addresses

Every address Sitowise uses on Robinhood Chain, what each one does, which single one you ever send money to, and how to check that the one you are looking at is the real one.

The chain

FieldValue
NetworkRobinhood Chain
Chain id4663 decimal, 0x1237 hex
RPChttps://rpc.mainnet.chain.robinhood.com
Explorerhttps://robinhoodchain.blockscout.com

There is no Sitowise deployment on any other network, and no testnet deployment. Anything claiming to be Sitowise elsewhere is not this project.

The contract

There is one. SitowiseFactory records nodes and holds their balances. There is no treasury contract, no voucher contract and no proxy.

SitowiseFactory
0x389699d7C3A754d6b82EbBBa0ebE5757ccfA1dD7
Records nodes, holds node balances, and pays them out when the node’s own owner calls withdraw. Verified on the explorer. Its interface is documented on Factory interface. Do not send ETH here to buy a node.

Wallets and roles

Four wallets, kept deliberately separate so that each one can only cost what it is worth. The payments wallet is configuration. The other three are roles the contract itself enforces, so the addresses below are read from the contract, not from a config file.

Payments wallet
0x6873e18db91d14252ae56d085a60b419b82e073e
Safe to send to, and the only one. Send exactly 0.02 ETH here to buy one node. A watcher sees the transfer and the relayer mints your node against that transaction’s hash. It is an ordinary wallet, not a contract: it runs no code and can never mint anything by itself. See Deploying a node.
0xD5bfa4665c563ee36E30bCb8D2cABEA637a4a0a0
Never send anything here. The cold key that deployed the contract. It can change roles, pause new mints, set maxPerWallet, and rescue contract funds that belong to no node. It cannot touch a node balance. Ownership moves only in two steps, transferOwnership then acceptOwnership. See Security model.
Relayer
0x20e8c5Ff45dB9dD8c5C8d146477b6EBddc120F1E
Never send anything here. A server key whose only power is mintFor. It creates your node and pays the gas for it. It holds gas and nothing else, so if it leaked the cost would be unauthorised mints and gas, never anyone’s balance.
Distributor
0xFB9790f579062A77745C52c7Ce3b8c844E980d6a
Never send anything here. A server key whose only power is creditBatch, which is payable, so this is the wallet that actually sends the ETH that lands on node balances. It carries the payout float and nothing more.

No role can move a node balance. withdraw and withdrawAll check the caller against the node’s own owner and against nothing else, which is why the list above has no entry that is able to pay you or to take from you.

The Uniswap v4 hook

SitowiseHook
Not deployed yet
Not deployed. Its address will be published here once it exists, and it has to be mined so that its low bits encode its permissions. Until it is deployed and pools are initialised naming it, it accrues nothing and no part of today’s numbers comes from it. See The hook lifecycle.

Uniswap v4 on Robinhood Chain

These are not Sitowise contracts and nothing here interacts with them yet. They are listed because the hook will be built on them, and because the PoolManager would be the only contract permitted to call it.

ContractAddressRole
PoolManager0x8366a39CC670B4001A1121B8F6A443A643e40951Holds every v4 pool and calls hooks
PositionManager0x58daec3116aae6D93017bAAea7749052E8a04fA7v4 liquidity positions. Confirms the manager above through poolManager()
CREATE2 factory0x4e59b44847b379578588920cA78FbF26c0B4956CDeterministic deployer needed to hit a mined hook address

Verifying an address

Do not trust a contract address from a message, a reply, or a search result, including this one if you can check it another way. Three checks, in increasing strength:

  1. Open it on the explorer. The source is verified, so you can read the exact code that is deployed.
  2. Ask the contract about itself. A copy with different roles or a different node count will answer differently.
  3. Compare against the repository. Build the contract and check that the deployed bytecode matches what you built.
cast
cast call $FACTORY "owner()(address)"        --rpc-url https://rpc.mainnet.chain.robinhood.com
cast call $FACTORY "relayer()(address)"      --rpc-url https://rpc.mainnet.chain.robinhood.com
cast call $FACTORY "distributor()(address)"  --rpc-url https://rpc.mainnet.chain.robinhood.com
cast call $FACTORY "maxPerWallet()(uint256)" --rpc-url https://rpc.mainnet.chain.robinhood.com
cast call $FACTORY "outstanding()(uint256)"  --rpc-url https://rpc.mainnet.chain.robinhood.com
cast call $FACTORY "isSolvent()(bool)"       --rpc-url https://rpc.mainnet.chain.robinhood.com

The strongest single check on the money is the last two together. outstanding is the sum of every node balance, and isSolvent() says whether the contract holds at least that much. A factory that cannot answer both is not this one. See Settlement.

There is nothing equivalent to check about the payments wallet, because it is a plain wallet with no code and no state. The check that matters there is the sale itself: your payment transaction hash appears as paymentRef in the NodeMinted log of the mint, and it can only ever appear once.

If an address changes

The contract is not upgradeable. There is no proxy and no admin key that can swap the implementation, so the factory at a given address is the code that was deployed there and stays that way. A new deployment would be a new address, announced as such, and the old one would keep working for the nodes it holds, including their withdrawals.

What can change without a redeployment are the things the owner controls: the relayer, the distributor, the per-wallet cap and the pause flag. Each emits an event when it changes, so the history is public and this page reads the current values rather than remembering the old ones. The payments wallet can also change, which is why you should take it from this page or from the deploy flow at the moment you pay rather than from a saved copy. See Events and Security model.