Skip to content

feat(#675): implement operator approvals (set_approval_for_all / is_approved_for_all) - #709

Merged
Eniola3321 merged 1 commit into
ANYTECHS:mainfrom
ellaevans2323-pixel:feat/675-implement-approvals
Aug 1, 2026
Merged

feat(#675): implement operator approvals (set_approval_for_all / is_approved_for_all)#709
Eniola3321 merged 1 commit into
ANYTECHS:mainfrom
ellaevans2323-pixel:feat/675-implement-approvals

Conversation

@ellaevans2323-pixel

Copy link
Copy Markdown
Contributor

Summary

Closes #675

Adds full NFT marketplace approval support: both per-token approvals (already present via approve) and operator-level approvals that cover all tokens owned by an address.

Changes

Soroban contract (contracts/nft-contract/src/)

storage.rs

  • set_approval_for_all(owner, operator, approved) — stores/removes operator approval under persistent key (op_appr, owner, operator)
  • is_approved_for_all(owner, operator) — reads the same key

lib.rs

  • set_approval_for_all(owner, operator, approved) — owner-authed, pause-checked; emits approval_all event
  • is_approved_for_all(owner, operator) — read-only view
  • transfer_from — updated authorisation check: owner OR token-level approved spender OR operator-approved spender
  • emit_approval_for_all event added to the events module

NestJS backend (src/nft/nft.controller.ts)

  • POST /nfts/tokens/:tokenId/approve — prepares unsigned single-token approve XDR (existing contract function, new endpoint)
  • POST /nfts/approvals/operator — prepares unsigned set_approval_for_all XDR
  • GET /nfts/approvals/operator?ownerAddress=&operatorAddress= — queries is_approved_for_all on-chain via simulation

Acceptance Criteria

  • Token approvals work (approve + get_approved)
  • Operator approvals work (set_approval_for_all + is_approved_for_all)
  • transfer_from honours operator approval
  • Queries return correct values
  • approval_all event emitted on grant/revoke
  • API endpoints documented with Swagger examples

…l / is_approved_for_all)

Soroban contract (contracts/nft-contract/src/):
- storage.rs: add set_approval_for_all / is_approved_for_all using
  persistent key (op_appr, owner, operator)
- lib.rs: add set_approval_for_all(owner, operator, approved) function
  restricted by owner.require_auth() and pause check
- lib.rs: add is_approved_for_all(owner, operator) read-only view
- lib.rs: update transfer_from to accept operator-approved callers
  (owner || token-approved spender || operator-approved spender)
- lib.rs: add emit_approval_for_all event emitted on every grant/revoke

NestJS backend (src/nft/nft.controller.ts):
- POST /nfts/tokens/:tokenId/approve — prepare single-token approve XDR
- POST /nfts/approvals/operator — prepare set_approval_for_all XDR
- GET  /nfts/approvals/operator  — query is_approved_for_all on-chain

Closes ANYTECHS#675
@drips-wave

drips-wave Bot commented Jul 31, 2026

Copy link
Copy Markdown

@ellaevans2323-pixel Great news! 🎉 Based on an automated assessment of this PR, the linked Wave issue(s) no longer count against your application limits.

You can now already apply to more issues while waiting for a review of this PR. Keep up the great work! 🚀

Learn more about application limits

@Eniola3321
Eniola3321 merged commit 873c520 into ANYTECHS:main Aug 1, 2026
2 checks passed
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.

[Soroban] Implement Approvals

2 participants