Skip to content

Mainnet writes fail on both prod relayers: Enoki dry_run_failed (MoveAbort balance::destroy_zero in sponsored upload) #351

Description

@dun999

Summary

All mainnet memory writes through the MCP server currently fail at the Walrus upload step with an Enoki sponsorship error. Reads (memwal_recall) and auth work fine. Reproduced consistently on both production relayers.

Error (verbatim)

Tool error: remember job failed: walrus upload failed: Internal Error: walrus upload failed:
Enoki API error (400): {"errors":[{"code":"dry_run_failed","message":"Dry run failed, could
not automatically determine a budget: MoveAbort(MoveLocation { module: ModuleId { address:
0000000000000000000000000000000000000000000000000000000000000002, name: Identifier(\"balance\") },
function: 9, instruction: 8, function_name: Some(\"destroy_zero\") }, 0) in command 9"}]}

Repro

  1. @mysten-incubation/memwal-mcp v0.0.5, fresh login via memwal_login (delegate key registered on-chain, credentials saved).
  2. Call memwal_remember with any short text and namespace, e.g. {"text": "[FACT] smoketest :: ...", "namespace": "gardener-smoketest"}.
  3. Fails identically every time. Tried 2026-07-02 between ~11:25 and ~11:40 UTC:
    • https://relayer.memory.walrus.xyz: fails
    • https://relayer.memwal.ai: fails with the same error
  4. memwal_recall on the same account/namespace works (returns "No matching memories found." cleanly), so relayer auth and the read path are healthy.

Account (mainnet): 0x057359bbb9bc3b6eed2b1c04d51bcbee421b9c802e90543b0ca65844c006d7cb. The object is active with 3 registered delegate keys, verified via sui_getObject.

Analysis

The abort is in the Sui framework's balance::destroy_zero (abort code 0 = ENonZero) at command 9 of the sponsored PTB that Enoki dry-runs. That means the transaction being constructed destroys a coin/balance that still has a non-zero value, i.e. the WAL payment split inside the sponsored upload flow leaves a non-zero remainder where the code expects exact change. Nothing client-side affects this (payload size, namespace, relayer choice, fresh login), which points at the sponsor-side coin selection / storage-cost calculation, possibly triggered by a recent storage price or epoch change.

Impact

Every MCP user is currently unable to write memories to mainnet (Session 5 proof runs included). Reads unaffected.

Environment

  • @mysten-incubation/memwal-mcp 0.0.5 (stdio), --prod
  • Node.js 24.14.0, Windows 11

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions