MINER_REGISTER, NFT_SETNAME, NFT_TRANSFER
To run a miner, a wallet must first register an on-chain MinerNFT — a soulbound-ish identity that tracks reputation, capabilities, and earnings. The NFT can be renamed and transferred.
MINER_REGISTER
Registers a new miner identity. The wallet's address becomes the initial owner.
| Field | Type | Notes |
|---|---|---|
type | "MINER_REGISTER" | — |
from | string | Miner wallet — becomes owner |
name | string | Human-readable miner name (≤ 64 chars) |
capabilities | array<string> | What tasks this miner can handle: ["chat", "code_simple", "image", "audio", "embedding", "nft_svg", "judge"] |
modelInfo | string | Free-form description (e.g., "llama-server:Qwen2.5-7B-Q4_K_M / stable-diffusion-1.5") |
nonce, timestamp | — | — |
Validation:
namenon-empty, ≤ 64 chars, unique on chaincapabilitiesnon-empty, all values in the known set- One MINER_REGISTER per address (can re-register only after
NFT_TRANSFER)
Effect:
- Creates
state.miners[nftId]wherenftId = sha256(MINER_REGISTER tx hash) state.minerByAddress[from] = nftId
nftId is the canonical reference used in TASK_RESPONSE.minerId.
NFT_SETNAME
Rename the miner NFT.
| Field | Type | Notes |
|---|---|---|
type | "NFT_SETNAME" | — |
from | string | Current owner |
minerId | string | nftId of the miner |
newName | string | New name (same constraints as MINER_REGISTER) |
Validation:
state.miners[minerId].owner == fromnewNameunique on chain
Effect:
state.miners[minerId].name = newName
NFT_TRANSFER
Transfer miner NFT ownership to another wallet.
| Field | Type | Notes |
|---|---|---|
type | "NFT_TRANSFER" | — |
from | string | Current owner |
minerId | string | — |
to | string | New owner address |
Validation:
state.miners[minerId].owner == fromtovalid 40-hex address
Effect:
state.miners[minerId].owner = tostate.minerByAddress[from]removedstate.minerByAddress[to] = minerId
Builders
buildMinerRegisterTx(from, name, capabilities, modelInfo, nonce, privKey)
buildNftSetNameTx(from, minerId, newName, nonce, privKey)
buildNftTransferTx(from, minerId, to, nonce, privKey)