Skip to content

feat(rust/go): 07-external-signer examples (V2-312, 3-4/15)#100

Merged
Nic-dorman merged 2 commits into
mainfrom
nic/v2-312-group-a-mature-web3-libs
May 19, 2026
Merged

feat(rust/go): 07-external-signer examples (V2-312, 3-4/15)#100
Nic-dorman merged 2 commits into
mainfrom
nic/v2-312-group-a-mature-web3-libs

Conversation

@Nic-dorman
Copy link
Copy Markdown
Collaborator

Two more SDK examples for V2-312. antd-rust is the compiled-language reference (alloy 1.x — same lib antd uses internally via evmlib); antd-go uses go-ethereum's bind.NewBoundContract for ABI-driven calls.

What this adds

antd-rust (3/15)

  • antd-rust/examples/07-external-signer.rs — sol! macro declares IERC20 + IPaymentVault contract bindings inline
  • antd-rust/Cargo.toml — adds alloy = { version = "1", features = ["full"] } + hex as dev-dependencies, registers [[example]] entry
  • ant-dev dispatcher entry

antd-go (4/15)

  • antd-go/examples/07-external-signer/main.go — uses bind.NewBoundContract for ABI-driven contract calls. ERC-20 approve inline, IPaymentVault loaded from docs/abi/IPaymentVault.json via findRepoRoot helper
  • antd-go/go.mod, antd-go/go.sum — adds go-ethereum v1.17.3, transitively upgrades golang.org/x/*, grpc, protobuf
  • ant-dev dispatcher entry

Validation

Both validated end-to-end on dev2:

rust:
  File:  4 payments, data_map=9e7bcc307cac1eea4e26dc22730ce699c74ee6c4c81f52cd6541b3e66e7c2fa5
  Chunk: 1 payment, address=f97a9c7ae5123d5814cf4f7517f497dba63cc5d14557a04b816f45089a75f719

go:
  File:  4 payments, data_map=81f9e01b8be5f038c80c5e89bc1e178a85c858833f972da5b4bbccee86753b29
  Chunk: 1 payment, address=2967872ee0cc6d849410290862b750b2c5b4e2c561100e63e5b31db446b9a65f

Patterns confirmed

Both examples use distinct content (hello external signer from rust / from go) and handle the empty-payments short-circuit (mirrors antd-py + antd-js).

Nonce handling: alloy's contract instance handles it implicitly; go-ethereum's bind.NewKeyedTransactorWithChainID + Transact does the same. No manual NonceManager needed for these libs (unlike ethers v6).

Remaining Group A SDKs (csharp/java/kotlin/dart/swift) and Groups B (ruby/php) and C (elixir/lua/zig/cpp) follow in subsequent PRs.

Closes 3-4/15 of V2-312.

Uses alloy 1.x (the same lib antd uses internally via evmlib). sol! macro
declares IERC20 + IPaymentVault contract bindings inline; PrivateKeySigner
+ EthereumWallet + ProviderBuilder drive the on-chain signing.

Validated end-to-end on dev2:
  File:  4 payments, data_map=9e7bcc30...
  Chunk: 1 payment, address=f97a9c7a...

Adds alloy/hex as dev-dependencies (only pulled when building examples)
and registers [[example]] 07-external-signer in Cargo.toml.

Adds rust adapter's external_signer short-name to ant-dev dispatcher.
Uses go-ethereum's bind.NewBoundContract for ABI-driven contract calls.
ERC-20 approve declared inline; IPaymentVault loaded from the bundled
docs/abi/IPaymentVault.json via abi.JSON + findRepoRoot helper.

Validated end-to-end on dev2:
  File:  4 payments, data_map=81f9e01b...
  Chunk: 1 payment, address=2967872e...

Adds go-ethereum v1.17.3 + transitively-required upgrades (golang.org/x/*,
grpc, protobuf) to go.mod/go.sum.

Adds go adapter's external_signer short-name to ant-dev dispatcher.
@Nic-dorman Nic-dorman merged commit a7f4ebf into main May 19, 2026
2 of 3 checks passed
Nic-dorman added a commit that referenced this pull request May 21, 2026
Cuts v0.8.0 atop v0.7.1. Substantial breaking-change roll-up of the
put/get rename, the private-file PUT/GET gap close, and several minor
surface cleanups -- bundled here so the v1.0 cut can ship stable on top.

## Breaking (antd daemon)

- feat(antd)!: bind to 127.0.0.1 by default on REST and gRPC (#107).
  Previously bound 0.0.0.0; use --bind-rest / --bind-grpc to override.
- chore: remove dead graph_entry surface from antd proto + 5 SDKs (#92).
  GraphService and its 4 RPCs are gone; REST mounts dropped.
- chore: remove dir_upload_public / dir_download_public surface (#95).
  Use file_put_public on a directory path instead; the daemon recurses.
- feat(antd)!: normalize put/get convention + close private-file PUT and
  GET gaps (#115). Method renames across proto + REST + SDKs:
    data_put_private    -> data_put
    data_get_private    -> data_get
    file_upload_public  -> file_put_public
    file_download_public -> file_get_public
  New: file_put / file_get for the private file path (previously only
  the public variant existed). New typed results: DataPutResult,
  DataPutPublicResult, FilePutResult, FilePutPublicResult; PutResult
  is now annotated as chunk_put only.

## Additive

- feat(antd): honor payment_mode on gRPC put/cost paths and REST cost
  endpoints (#114). Optional kwarg threaded through every put/cost
  signature; empty/omitted maps to "auto" so older clients keep working.
- feat: external-signer public uploads + single-chunk prepare/finalize
  across 15 SDKs (#90).
- docs+spec: openapi.yaml refreshed for the v1.0 surface, including
  POST /v1/chunks/prepare and /v1/chunks/finalize for single-chunk
  external-signer publish (#126).

## SDK fan-out (PaymentMode + put/get convention, all 15)

#116 antd-go, #117 antd-py/ruby/elixir, #118 antd-rust, #119 antd-csharp,
#120 antd-java, #121 antd-swift, #122 antd-dart, #123 antd-kotlin,
#124 antd-cpp, #125 antd-js/php/zig/lua, #127 antd-mcp.

## SDK example + build fixes

- fix(antd-go): make 03-files example self-contained and runnable (#91)
- fix(examples): make 04-files runnable across cpp/rust/elixir/lua/php/ruby/zig (#93)
- fix(examples): runnable dart 04_files + java Example03Files; add java Example03Chunks (#94)
- feat: gRPC transport example for antd-py and antd-rust (#113)
- feat(antd-py): 07_external_signer example + ant-dev dispatcher entry (#98)
- feat(antd-js): 07-external-signer example + antd-py empty-payments fix (#99)
- feat(rust/go): 07-external-signer examples (#100)
- feat(antd-csharp): 07_external_signer example (#101)
- feat(antd-java): 07_external_signer example (#102)
- feat(antd-kotlin): 07_external_signer example (#103)
- feat(antd-dart): 07_external_signer example (#104)
- feat(antd-ruby): 07_external_signer example (#105)
- feat(antd-php): 07_external_signer example (#106)
- chore(antd-kotlin): drop stale GraphDescendant from local proto copy (#108)

## Docs / infra

- docs: external-signer flow reference + ABI + python smoke test (#97)
- docs: add SECURITY.md with threat model and disclosure policy (#109)
- docs!: refresh per-SDK READMEs + llms-full.txt + openapi.yaml for v1.0 surface (#126)
- ci: add Go lint + test + vuln scanning for antd-go (#112)
- ci: extend antd-rust to sibling-repo parity (fmt + clippy + audit + doc) (#111)
- ci: skip antd/openapi.yaml and llms-full.txt from triggering CI (#128)
- chore(scripts): add full-stack + integration sweep helpers (#96)
- fix(antd-rust): regenerate Cargo.lock to unbreak --locked CI (#110)

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.

1 participant