feat(plugins): Solana DePIN node — solana-core + depin-attest + depin-uptime-watch#126
Open
darkty0x wants to merge 23 commits into
Open
feat(plugins): Solana DePIN node — solana-core + depin-attest + depin-uptime-watch#126darkty0x wants to merge 23 commits into
darkty0x wants to merge 23 commits into
Conversation
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Drop substring fallback that let a short prompt-injected device_id falsely report OK. Also normalize manifests/docs and drop internal planning files. Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Document bounty traps and “what next” in plugin READMEs, tighten output budgets and fund-move/RPC injection tests, and add SUBMISSION.md for Superteam Earn. Co-authored-by: Cursor <cursoragent@cursor.com>
Add timeouts/retries, watch pagination and CPI memo scans, and emoji structured tool summaries so channel replies stay clear under T0/T1 custody. Co-authored-by: Cursor <cursoragent@cursor.com>
Author
UpdatePushed production harden + polished Telegram cards (
Demo video being refreshed to ≥2 min with Telegram channel scenes for Earn. |
Co-authored-by: Cursor <cursoragent@cursor.com>
Ship scripts, runner, and agent workspace prompts while gitignoring keys, live config, recordings, and other local secrets/runtime state. Co-authored-by: Cursor <cursoragent@cursor.com>
Remove make-final-demo, wire-telegram, keep-channel, and related helpers; keep the host runner and example config only. Co-authored-by: Cursor <cursoragent@cursor.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The $40 Pi that talks to Solana
ZeroClaw already runs on a Raspberry Pi with GPIO, MQTT, and cron SOPs. It just had no chain. This PR is the reference DePIN path: a sensor reading becomes an unsigned Solana memo attestation that survives the approval queue, then a cron tool tells you when the node goes quiet.
Tracks C (DePIN) and E (shared core). Custody is T0/T1 only — the agent never holds a key and never calls
sendTransaction.What's in it
solana-coresolana-sdk.depin-attestpayer/nonce_account. Metric allowlist + reading caps fail closed.depin-uptime-watchprefix|device_idmatch. ReturnsOK/STALE/MISSINGin ≤800 chars for Telegram cron alerts.Why durable nonce here
The bounty brief calls blockhash expiry the structural problem with approval-gated agent txs. Attestations hit the same trap: the agent builds, Telegram queues, the human is away, the blockhash dies.
depin-attestanchors the memo tx to a durable nonce account so the approval queue stays valid until the human signs.Hard requirements
plugins/redact-text(pure core +#[cfg(target_family = "wasm")]shim,crate-type = ["cdylib", "rlib"])cargo testcargo build --target wasm32-wasip2 --releasecleanlog-recordonly; nothing on stdoutrpc_urlrequired in config — never hardcoded with a key; arg overrides rejectedcapabilities = ["tool"], permissions onlyhttp_client+config_readtests/injection.rs) including fund-move /sendTransaction/rpc_urlinjectiongetProgramAccountscontains()fallback./tools/sync-solana-core.sh --checkkeeps vendored copies drift-free for isolated CIoverflow-checks = truein release profilesBounty traps
solana-sdkon wasip2solana-core+bs58/base64/sha2+wakishim onlygetProgramAccountswit/v0tool-pluginworld; expect rebuildrpc_urlviaconfig_readCustody
depin-attestunsigned_tx_base64+ short summarydepin-uptime-watchOK/STALE/MISSINGWhat fought us on wasm32-wasip2
solana-sdk/solana-clientare a non-starter inside a WIT component. What worked:bs58+base64+sha2+ hand-rolled legacy message / compact-u16 / durable-nonce layout, JSON-RPC behind an injectableHttpClient, andwakionly in the wasm shim. Each plugin vendorssolana-coreundersrc/vendor/solana_core/so isolated CI (plugins/<name>+wit/v0only) still builds. Canonical source: repo-rootsolana-core/. Sync with./tools/sync-solana-core.sh; drift check with--check.wit/v0has no.frozenmarker — rebuild when ABI moves.What we'd build next
Demo / Earn
SUBMISSION.md@zeroclaw_plugin_bot