Skip to content

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

Open
Nic-dorman wants to merge 1 commit into
mainfrom
fix/elixir-example-cost-stringification
Open

fix(antd-elixir): print cost-estimate fields in examples to avoid stringification crash#75
Nic-dorman wants to merge 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
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