Summary
antseed network browse currently displays peer.peerId as the visible peer/seller identity. For delegated/proxy sellers, that value is the operator EOA / node identity, while the actual on-chain seller is carried separately in peer.metadata.sellerContract.
This makes Venice-style delegated sellers look visually wrong in the CLI: the browse table appears to show the operator wallet as the seller, even though discovery/enrichment and channel accounting are already using the seller contract address correctly.
Current behavior
antseed network browse shows peer.peerId
peer.peerId is the operator EOA / node identity
- delegated/proxy sellers announce the actual on-chain seller in
peer.metadata.sellerContract
- the browse table does not surface
sellerContract, so users can mistake the operator for the seller
Expected behavior
Keep Peer as the pin/connect identity, but explicitly show the on-chain seller when it differs or when metadata.sellerContract exists.
Suggested CLI UX:
antseed network browse
- keep existing
Peer column for peer.peerId
- this is still needed for
antseed buyer connection set --peer <peerId>
- also matches
x-antseed-pin-peer
- add a
Seller / On-chain seller column when metadata.sellerContract exists
- if no seller contract exists, the column can show the peer address or be omitted depending on table width
antseed network peer <id>
Show both identities explicitly:
Peer / operator: <peerId>
On-chain seller: 0x<sellerContract> # or same as peer when not delegated
Also add a short note:
Channel stats/payments are attributed to the seller address.
Why this matters
The underlying data model appears correct:
- sellers announce
sellerContract
- buyer discovery/enrichment resolves
sellerContract.isOperator(peerAddress)
- on-chain stats/payments use the seller contract address, not the operator wallet
But the CLI presentation hides that distinction. This can make delegated/proxy sellers look misconfigured even when channel resolution is doing the right thing.
Likely files
The change should be small, mostly around CLI presentation:
apps/cli/src/cli/commands/network/browse.ts
apps/cli/src/cli/commands/network/peer.ts
Proposed fix
- In browse output, derive something like:
peerId / operator from peer.peerId
sellerAddress from peer.metadata?.sellerContract ?? peer.peerId
- Render both where appropriate.
- Preserve all pin/connect semantics around
peer.peerId.
- In peer detail view, clearly label operator vs on-chain seller and explain payment attribution.
Summary
antseed network browsecurrently displayspeer.peerIdas the visible peer/seller identity. For delegated/proxy sellers, that value is the operator EOA / node identity, while the actual on-chain seller is carried separately inpeer.metadata.sellerContract.This makes Venice-style delegated sellers look visually wrong in the CLI: the browse table appears to show the operator wallet as the seller, even though discovery/enrichment and channel accounting are already using the seller contract address correctly.
Current behavior
antseed network browseshowspeer.peerIdpeer.peerIdis the operator EOA / node identitypeer.metadata.sellerContractsellerContract, so users can mistake the operator for the sellerExpected behavior
Keep
Peeras the pin/connect identity, but explicitly show the on-chain seller when it differs or whenmetadata.sellerContractexists.Suggested CLI UX:
antseed network browsePeercolumn forpeer.peerIdantseed buyer connection set --peer <peerId>x-antseed-pin-peerSeller/On-chain sellercolumn whenmetadata.sellerContractexistsantseed network peer <id>Show both identities explicitly:
Also add a short note:
Why this matters
The underlying data model appears correct:
sellerContractsellerContract.isOperator(peerAddress)But the CLI presentation hides that distinction. This can make delegated/proxy sellers look misconfigured even when channel resolution is doing the right thing.
Likely files
The change should be small, mostly around CLI presentation:
apps/cli/src/cli/commands/network/browse.tsapps/cli/src/cli/commands/network/peer.tsProposed fix
peerId/ operator frompeer.peerIdsellerAddressfrompeer.metadata?.sellerContract ?? peer.peerIdpeer.peerId.