⛏ Witness School · MELEK · PRANA pool
SchoolDevTokenServicesLearnAcademyBuildWhitepaperRunPoolMineFeesServersWalletHathorLibrary

Launch a SCOT side-token · MELEK-Engine is our Hive-Engine

If you've launched a token or a tribe (SCOT / Nitrous) on Hive-Engine, you already know this. MELEK-Engine is our Hive-Engine: a layer-2 side-token layer on the MELEK Graphene chain. APIS is our BEE (the fee coin), and a SCOT side-token is a tribe token — a community coin that pays authors and curators for posts, with its own front-end. No Solidity, no EVM: it's custom_json on the MELEK L1.

If you know Hive-Engine, this is the map

Hive-EngineMELEK-EngineWhat it is
BEEAPISthe engine's utility/fee coin — burned to create tokens & pay resource fees
WORKERBEEforever-locked wMELEK → APIS-Hashmining/issuance stake (mainnet). Testnet keeps a DRONE governance token
Scotbotscot.enable / rewards.setRewardconfig-driven tribe reward emission (no user JS)
Nitrousengine/nitrous/render.mjsa per-token branded, read-only front-end generator
Hive-Engine contracts APIsame /contracts/* shapeexisting Hive-Engine tooling ports over

The engine node holds no key and never broadcasts: it streams MELEK L1 blocks, folds the custom_json ops deterministically, and publishes a SHA-256 state hash at /status. Same L1 history → same state. Open source in the Bot repo under engine/; Hive-Engine's own Nitrous / Scotbot are at github.com/hive-engine.

1 · Create a token

One custom_json. Symbol is 1-10 uppercase letters, precision 0-8, and you may set an immutable supply cap:

// Broadcast as a Graphene custom_json on MELEK L1 (keys stay in your wallet/browser).
{
  "required_auths": ["youraccount"],
  "required_posting_auths": [],
  "id": "mse-testnet-melek",            // the engine sidechain id (mainnet: mse-mainnet-melek)
  "json": {
    "contractName": "tokens",
    "contractAction": "create",
    "contractPayload": {
      "symbol": "SCROLL",               // 1-10 uppercase A-Z
      "name": "Scroll",
      "precision": 3,                   // 0-8 decimals
      "maxSupply": "1000000"            // optional immutable cap
    }
  }
}
// tokens.create burns 100 APIS (the creation fee).

2 · Add a Scot Bot (make it a tribe)

Turn the token into a tribe by attaching a reward rule — a config object, never user JavaScript (that closes the sandbox-escape class by construction). Every field below is a real field scot.enable validates:

{
  "required_auths": ["youraccount"],
  "required_posting_auths": [],
  "id": "mse-testnet-melek",
  "json": {
    "contractName": "scot",
    "contractAction": "enable",         // add a Scot Bot to an EXISTING token
    "contractPayload": {
      "symbol": "SCROLL",
      "emissionPerWindow": "10",        // tokens minted to authors+curators each window
      "windowBlocks": 1200,             // reward window length, in L1 blocks
      "authorBps": 5000,                // author share in basis points (5000 = 50%)
      "curve": "linear"                 // "linear" | "quadratic" | "sqrt"
    }
  }
}
// scot.enable burns 100 APIS the first time. (scot.createTribe bundles create + enable
// + an optional founder issue in one op.)

How rewards flow: posts on the MELEK L1 accrue token-stake-weighted votes; each windowBlocks window the pool emits emissionPerWindow of your token, split author/curator by authorBps and the curve, via the deterministic rewards.payout crank (cap-respecting, idempotent). This is the Scotbot model — as a rule object.

3 · The Nitrous front-end

Hive-Engine's Nitrous gives each tribe its own condenser. Ours is a generator: engine/nitrous/render.mjsrenderTokenSite(state, SYMBOL, theme) returns a branded, read-only page (supply / holders / posts / rewards / leaderboard) for any token; makeNitrousHandler(state, themeFor) serves / + /:SYMBOL. One function, many tribes — nothing hardcoded. (A tokenized social app built this way is the APPICS-style pattern — see Build a front-end.)

4 · The read API (Hive-Engine-shaped)

Read-only, same endpoint shape as Hive-Engine so existing tooling ports:

GET /status                                  sidechain id, last block, STATE HASH, seam flags
GET /contracts/tokens[?symbol=APIS]          token(s)
GET /contracts/balances?account=x[&symbol=]  balances
GET /contracts/holders?symbol=APIS           holders
GET /contracts/issuance?symbol=APIS          append-only issuance log
POST /rpc/contracts                          JSON-RPC find { params:{contract,table,query} }
curl -s https://engine.alpha.melek.salon/status
# -> { sidechainId, chainId, lastBlock, stateHash, feeToken:"APIS", tokenCount, seams }
curl -s "https://engine.alpha.melek.salon/contracts/tokens?symbol=APIS"   # the fee token, live on testnet

Honest status — testnet live, mainnet coming

Or deploy an EVM token on PRANA → · Build a front-end (APPICS / PIZZA patterns) → · Token Academy →