Skip to content

feat(contracts): credential_badge contract — scaffold, badge types, issuance & revocation#876

Merged
yusuftomilola merged 2 commits intoDistinctCodes:mainfrom
Tinna23:feature/ct-22-25-credential-badge
Apr 26, 2026
Merged

feat(contracts): credential_badge contract — scaffold, badge types, issuance & revocation#876
yusuftomilola merged 2 commits intoDistinctCodes:mainfrom
Tinna23:feature/ct-22-25-credential-badge

Conversation

@Tinna23
Copy link
Copy Markdown
Contributor

@Tinna23 Tinna23 commented Apr 26, 2026

Summary

Implements four issues assigned to @Thommyy7 in a single branch.

Closes #786
Closes #787
Closes #788
Closes #789


Changes

CT-22 — Scaffold credential_badge contract (#786)

New contract at contracts/sandbox/credential_badge/:

  • Cargo.toml with soroban-sdk workspace dependency
  • src/types.rs: BadgeType (id, name, description, created_at), Credential (badge_type_id, holder, issued_at, issuer, is_revoked)
  • src/errors.rs: AdminNotSet, AlreadyInitialized, Unauthorized, BadgeTypeNotFound, CredentialNotFound, AlreadyIssued, CredentialRevoked, BadgeTypeAlreadyExists
  • DataKey: Admin, BadgeType(String), BadgeTypeList, Credential(String, Address), HolderCredentials(Address)
  • initialize stub (admin-only, rejects re-init)

CT-23 — register_badge_type (#787)

  • Admin-gated via require_admin
  • Returns Error::BadgeTypeAlreadyExists if ID already registered
  • Stores BadgeType and appends to BadgeTypeList
  • Emits badge_reg event

CT-24 — issue_credential (#788)

  • Admin-gated
  • Returns Error::BadgeTypeNotFound if badge type doesn't exist
  • Returns Error::AlreadyIssued if holder already has this badge type
  • Stores Credential and indexes under HolderCredentials(holder)
  • Emits issued event

CT-25 — revoke_credential (#789)

  • Admin-gated
  • Returns Error::CredentialNotFound if credential doesn't exist
  • Returns Error::CredentialRevoked if already revoked
  • Sets is_revoked = true on the stored credential
  • Emits revoked event

Workspace

  • sandbox/credential_badge added to contracts/Cargo.toml workspace members

CT-22 (DistinctCodes#786): Scaffold — Cargo.toml, types.rs, errors.rs, DataKey, initialize stub
CT-23 (DistinctCodes#787): Implement register_badge_type (admin-gated, stores BadgeType, emits event)
CT-24 (DistinctCodes#788): Implement issue_credential (admin-gated, stores Credential, emits event)
CT-25 (DistinctCodes#789): Implement revoke_credential (admin-gated, sets is_revoked, emits event)

- BadgeType: id, name, description, created_at
- Credential: badge_type_id, holder, issued_at, issuer, is_revoked
- 8 error variants including BadgeTypeAlreadyExists, AlreadyIssued, CredentialRevoked
- DataKey: Admin, BadgeType(String), BadgeTypeList, Credential(String,Address), HolderCredentials(Address)
- sandbox/credential_badge added to workspace Cargo.toml
@vercel
Copy link
Copy Markdown

vercel Bot commented Apr 26, 2026

@Tinna23 is attempting to deploy a commit to the naijabuz's projects Team on Vercel.

A member of the Team first needs to authorize it.

@yusuftomilola yusuftomilola merged commit da43cdd into DistinctCodes:main Apr 26, 2026
1 of 7 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

2 participants