- Learn
- The-market
- Specifications
SNIP-05: Miner & Pool Identity
Status
Draft
Abstract
This specification defines identity events for participants in the Sharenote mining ecosystem. Two distinct event kinds allow miners and pool operators to publish their profiles, chain addresses, and operational parameters over Nostr.
1. Miner Identity (Kind 10520)
A miner publishes a single replaceable event declaring which chain addresses they control. This allows pools, dashboards, and settlement systems to discover where to send payouts.
Content: Empty string.
Tag Structure:
| Tag | Format | Required | Description |
|---|---|---|---|
a | ["a", "<chain_id>", "<address>"] | Yes | Chain address binding. Hex-encoded chain ID and the miner’s receiving address. One or more a tags allowed. |
payout | ["payout", "<scheme>"] | No | Miner’s preferred payout scheme (e.g., "pplns", "pps"). |
Multi-Chain Support
A miner operating on multiple chains publishes a single event containing multiple a tags, one for each chain.
Example (Multi-chain miner):
{
"kind": 10520,
"content": "",
"tags": [
["a", "15", "fc1q0vw9cmzqqc3vxfhd7m4zcqf8n82s9gsmagr02a"],
["a", "01", "bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq"],
["payout", "pplns"]
]
}
2. Pool Identity (Kind 10521)
A pool operator publishes a single replaceable event declaring their pool profile, accepted chains with fee schedules, supported payout schemes, and operational parameters.
Content: Optional JSON object following the NIP-01 set_metadata convention (name, about, picture, website).
Tag Structure:
| Tag | Format | Required | Description |
|---|---|---|---|
a | ["a", "<chain_id>", "<address>", "<fee_bps>"] | Yes | Chain address with pool fee in basis points (1 bps = 0.01%). One or more a tags allowed. |
payout | ["payout", "<scheme>", "<key:value>", ...] | Yes | Supported payout scheme (e.g., pps, pplns, prop, solo). |
sharenote | ["sharenote", "<min_label>"] | No | Minimum accepted sharenote denomination floor (e.g., "30z00"). |
threshold | ["threshold", "<chain_id>", "<amount>"] | No | Minimum payout threshold in satoshis. |
Supported Payout Schemes
| Scheme | ID | Description | Parameters |
|---|---|---|---|
| Pay Per Share | pps | Fixed payment per valid share. | — |
| PPLNS | pplns | Proportional to shares in a sliding window. | n:<window_size> |
| Proportional | prop | Simple proportional split of block reward. | — |
| Solo | solo | Miner receives full block reward (infrastructure only). | — |
Example (Multi-chain PPLNS pool):
{
"kind": 10521,
"content": "{\"name\":\"AlphaPool\",\"website\":\"https://alphapool.io\"}",
"tags": [
["a", "15", "fc1qpoolalpha...", "150"],
["a", "01", "bc1qpoolalpha...", "200"],
["payout", "pplns", "n:10000"],
["sharenote", "30z00"],
["threshold", "15", "100000"]
]
}
3. Validation Rules
- Miner Identity (10520): At least one
atag MUST be present. Each MUST contain exactly 3 elements. - Pool Identity (10521): At least one
atag and onepayouttag MUST be present.atags MUST contain exactly 4 elements. - Chain IDs: MUST be valid hex strings (e.g.,
"15"for chain 21). - Uniqueness: Duplicate chain IDs within a single event are NOT allowed.
Rationale
Using replaceable events (10000–19999) ensures that users only ever need to discover the latest identity for a given pubkey. Moving the accounting and identity logic to Nostr eliminates the need for miners to trust centralized pool dashboards.
Vibe Coding Integration
Builders do not need to manually parse or construct identity arrays. By invoking npx skills add soprinter/skills, your AI assistant natively understands the identity schemas outlined in this specification.