Skip to content

feat(verifier): implement POST /transfer and GET /verify/:hash/history on Stellar#961

Open
mijinummi wants to merge 1 commit into
CodeGirlsInc:mainfrom
mijinummi:feat/stellar-ownership-transfer
Open

feat(verifier): implement POST /transfer and GET /verify/:hash/history on Stellar#961
mijinummi wants to merge 1 commit into
CodeGirlsInc:mainfrom
mijinummi:feat/stellar-ownership-transfer

Conversation

@mijinummi

Copy link
Copy Markdown
Contributor

📝 Summary

Implements POST /transfer and GET /verify/:hash/history in the Rust verifier (#856) to record land document ownership transfers permanently on the Stellar blockchain via ManageData entries and maintain an indexed transfer history.

Closes #856

🛠️ Changes Introduced

  • contract/src/models/transfer.rs:
    • Added request/response structs: TransferRequest, TransferPayload, TransferResponse, TransferRecord, and TransferHistoryResponse.
  • contract/src/stellar/transfer.rs:
    • Implemented key generation helper build_transfer_key() ensuring keys comply with Stellar's 64-byte ManageData limits (transfer_ prefix for initial, tr_ + counter suffix for subsequent transfers).
    • Added record_transfer_on_stellar() to serialize transfer payloads and record ManageData transactions on Stellar.
  • contract/src/handlers/transfer.rs:
    • POST /transfer: Validates document anchor existence in Redis (returns 404 if unanchored), writes transfer record on Stellar, updates the cached owner in Redis, and increments the document's monotonic transfer counter.
    • GET /verify/:hash/history: Validates anchor existence and aggregates transfer history records sequentially in chronological order.
  • contract/src/lib.rs:
    • Wired /transfer and /verify/{hash}/history routes into the Actix web service configuration.

🧪 How to Test

  1. Verify Unanchored Transfer Rejection (404):
    curl -X POST http://localhost:8080/transfer \
      -H "Content-Type: application/json" \
      -d '{
        "hash": "nonexistent_hash_123",
        "fromPublicKey": "GXXX...",
        "toPublicKey": "GYYY...",
        "reason": "sale"
      }'

@vercel

vercel Bot commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

@mijinummi is attempting to deploy a commit to the Mftee's projects Team on Vercel.

A member of the Team first needs to authorize it.

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.

[CT-03] Implement POST /transfer in Rust verifier — record ownership transfer on Stellar

1 participant