1 · Generate a signing key
Each bot is exactly one key. The private key stays secret and goes on exactly one Railway service; the public address (the EOA) is what everything else is built from — the deposit wallet is derived from it, and Polymarket issues the relayer key to it.
Generate a fresh keypair in your own terminal, from the installed repository. The command below uses the bot package’s existing dependency:
pnpm --filter @hivetrade/bot-kit exec node --input-type=module -e '
import { generatePrivateKey, privateKeyToAccount } from "viem/accounts";
const key = generatePrivateKey();
console.log("Public signing address:", privateKeyToAccount(key).address);
console.log("Private key — save securely, never share:", key);
'This prints a private key and its public signing address; it does not print a deposit-wallet address. Obtain and verify the deposit-wallet address during wallet setup before sending funds. Record which address belongs to which bot — you'll need it in every later step.
One key, one bot
Never reuse a key across services. If you clone a Railway service and it keeps a sibling's key, it signs as the wrong bot — the single most common cause of a bot that funds one wallet but trades from another. The 0x prefix is optional; the runner accepts a key with or without it.
Keep the private key out of chat and version control
The private key controls the deposit wallet's funds. Put it only in the Railway service's environment (a secret), never in a file that gets committed, and never paste it into a chat or issue.