Skip to content

fix(antd-elixir): print cost-estimate fields in examples to avoid stringification crash#75

Merged
Nic-dorman merged 1 commit into
mainfrom
fix/elixir-example-cost-stringification
May 14, 2026
Merged

fix(antd-elixir): print cost-estimate fields in examples to avoid stringification crash#75
Nic-dorman merged 1 commit into
mainfrom
fix/elixir-example-cost-stringification

Conversation

@Nic-dorman
Copy link
Copy Markdown
Collaborator

Fixes #67.

The Elixir examples interpolated whole Antd.UploadCostEstimate structs into strings, which raises Protocol.UndefinedError (the struct has no String.Chars impl):

** (Protocol.UndefinedError) protocol String.Chars not implemented for
   Antd.UploadCostEstimate (a struct)
    02_data.exs:19: (file)

Same shape as the PHP fix in #74. The SDK return types are correct (data_cost/2 etc. correctly return {:ok, %UploadCostEstimate{}}); only the example interpolations are wrong.

Changes

  • 02_data.exs — rewritten end-to-end to match the Python / Rust / PHP examples: estimate-then-store ordering, print individual estimate fields, add a round-trip assertion and an "OK" marker so the example self-verifies.
  • 04_files.exs:28 — single-line fix on the file_cost print.
  • 05_graph.exs:30 — single-line fix on the graph_entry_cost print.

Test plan

  • cd antd-elixir/examples && elixir 02_data.exs against a local devnet — exits 0, prints estimate fields, address, "Public data round-trip OK!"
  • Verified via the cross-SDK e2e harness used to find this bug
  • 04_files.exs and 05_graph.exs visually verified only — they have independent unrelated issues (e.g. 04 calls file_cost/4 but the SDK exports file_cost/3) that should be addressed separately

Sample output

```
Estimate: 16 bytes in 3 chunks, storage 0 atto, gas 0 wei, mode single
Stored at address: 01b06330e4f4a8c565087e4087caabf860bdadbe96b7b8f0447493b0081c2335
Actual cost: atto tokens
Retrieved: Hello, Autonomi!
Public data round-trip OK!
```

(Several pre-existing compile warnings about Antd.V1.FileService.Stub.get_file_cost/2 being undefined surface during the run — that's unrelated to this PR and worth its own ticket.)

…ingification crash

The examples interpolated a whole UploadCostEstimate struct into a string,
which raises Protocol.UndefinedError (String.Chars not implemented for the
struct):

  ** (Protocol.UndefinedError) protocol String.Chars not implemented for
     Antd.UploadCostEstimate (a struct)
      02_data.exs:19: (file)

Print individual fields (matching what the Python/Rust/PHP examples do).
For 02_data.exs the example is also reordered to estimate-then-store and
gains a round-trip assertion + OK marker.

Affected examples:
- 02_data.exs (rewritten end-to-end, mirrors antd-py/antd-rust shape)
- 04_files.exs (single-line interpolation fix)
- 05_graph.exs (single-line interpolation fix)

Closes #67
@Nic-dorman Nic-dorman merged commit da52155 into main May 14, 2026
@Nic-dorman Nic-dorman deleted the fix/elixir-example-cost-stringification branch May 14, 2026 11:03
Nic-dorman added a commit that referenced this pull request May 14, 2026
Cuts v0.7.1 atop v0.7.0. Primarily refreshes the upstream `ant-core`
pin to the `ant-cli-v0.2.3` release tag (no API change for antd
consumers). Bundles a substantial round of cross-SDK example/build
fixes, dispatcher improvements, and CI/release workflow hardening.

## antd

- chore(antd): bump ant-core to v0.2.3 (#85)

## SDK example/build fixes

- fix(antd-php): use cost-estimate fields in example 02 (#74)
- fix(antd-elixir): print cost-estimate fields in examples (#75)
- fix(antd-lua): add missing discover module to rockspec (#76)
- fix(antd-kotlin): make put-response cost optional + ship gradle wrapper (#77)
- fix(antd-zig): pass payment_mode to dataPutPublic/dataPutPrivate (#79)
- fix(antd-java): make examples runnable via gradle :examples subproject (#80)
- fix(antd-zig): align stdlib API to declared 0.14.x minimum (#82)
- fix(antd-swift): port to Linux + populate cost-estimate fields (#87)

## ant-dev (developer CLI)

- fix(ant-dev): clean up orphan anvil/antnode and stale node identities on stop (#81)
- fix(ant-dev): tooling cluster — flag alias, sys.executable, anvil preflight, README (#83)
- feat(ant-dev): expand `ant dev example` to dispatch all 15 SDKs (#84)
- fix(ant-dev): dispatcher swift no-skip + lua LUA_PATH wrap (#86)
- feat(ant-dev): expose --preset flag on `ant dev start` (default: small) (#88)

## CI / release

- ci: authenticate arduino/setup-protoc on ci.yml too (#60)
- feat(release): publish antd-linux-arm64 artifact (#89)

## Validation

15/15 SDKs round-tripped end-to-end against a daemon built from this
commit on a Linux dev box (Ubuntu 24.04, 0.7.1 atop ant-core v0.2.3).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

antd-elixir: PutResult.cost returns UploadCostEstimate struct instead of cost scalar; example crashes

1 participant