Addresses
Every address Selinos uses on Elysium, 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.
A node is bought by sending a plain 0.6 HYPE transfer to the payments wallet below. That is the only Selinos address you should ever send HYPE to. Sending to the factory does not buy a node: a bare transfer to it is recorded as Funded and becomes unattached contract balance, not a node and not your balance.
The chain
| Field | Value |
|---|---|
| Network | Elysium |
| Chain id | 99901 decimal, 0x1863d hex |
| Currency | HYPE, 18 decimals, native on the chain. Gas, node purchases, credits and withdrawals are all paid in it, with no wrapped token. |
| Settles to | HyperEVM, chain id 999 |
| RPC | https://rpc.elysium.kinetiq.xyz |
| Explorer | https://elysium.kinetiq.xyz |
Selinos is built for Elysium mainnet, chain id 99901. There is no Selinos deployment on any other network. Anything claiming to be Selinos elsewhere is not this project.
The contract
There is one. SelinosFactory records nodes and holds their balances. There is no treasury contract, no voucher contract and no proxy.
withdraw. Verified on the explorer. Its interface is documented on Factory interface. Do not send HYPE 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.
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.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.creditBatch, which is payable, so this is the wallet that actually sends the HYPE that lands on node balances. It carries the payout float and nothing more.cast calls below.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.
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:
- Open it on the explorer. The source is verified, so you can read the exact code that is deployed.
- Ask the contract about itself. A copy with different roles or a different node count will answer differently.
- Compare against the repository. Build the contract and check that the deployed bytecode matches what you built.
cast call $FACTORY "owner()(address)" --rpc-url https://rpc.elysium.kinetiq.xyz
cast call $FACTORY "relayer()(address)" --rpc-url https://rpc.elysium.kinetiq.xyz
cast call $FACTORY "distributor()(address)" --rpc-url https://rpc.elysium.kinetiq.xyz
cast call $FACTORY "maxPerWallet()(uint256)" --rpc-url https://rpc.elysium.kinetiq.xyz
cast call $FACTORY "outstanding()(uint256)" --rpc-url https://rpc.elysium.kinetiq.xyz
cast call $FACTORY "isSolvent()(bool)" --rpc-url https://rpc.elysium.kinetiq.xyzThe 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 replace 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.