Gnosco is a Rust-based escrow and badging application that integrates with the AT Protocol ecosystem..

Example Setup: ATmostphereConf#

This is an example setup to award badges to attendees to ATmosphereConf.

Configuration#

The gnosco instance would be available at https://badges.atmosphereconf.com/.

Templates#

The templates would be updated to reflect the theming and branding of the conference.

Records#

The @atprotocol.dev repository would contain the following records:

at://did:plc:lehcqqkwzcwvjvw66uthu5oq/community.lexicon.badge.definition/3lj44kstfzk2n

{
  "$type": "community.lexicon.badge.definition",
  "name": "ATmosphereConf 2025 Attendee",
  "description": "You attended the first ever ATMosphere Conference!",
  "image": {
    "$type": "blob",
    "ref": {
      "$link": "9b45f43f...6f42a947"
    },
    "mimeType": "image/jpeg",
    "size": 281313
  }
}

at://did:plc:lehcqqkwzcwvjvw66uthu5oq/community.lexicon.badge.definition/3lj44kstfzk2o

{
  "$type": "community.lexicon.badge.definition",
  "name": "ATmosphereConf 2025 Early Bird Registration",
  "description": "You were one of the first 100 people to register.",
  "image": {
    "$type": "blob",
    "ref": {
      "$link": "9b45f43f...6f42a947"
    },
    "mimeType": "image/jpeg",
    "size": 281313
  }
}

Escrow Records#

The gnosco instance would have a local file datasource configured with this content:

[
    {
        "aturi": "at://did:plc:cbkjy5n7bk3ax2wplmtjofq2/community.lexicon.badge.award/3ln6mwlzdcr3v#c68666...b7fef8",
        "record": {
            "$type": "community.lexicon.badge.award",
            "badge": {
                "$type": "com.atproto.repo.strongRef,",
                "uri": "at://did:plc:lehcqqkwzcwvjvw66uthu5oq/community.lexicon.badge.definition/3lj44kstfzk2o",
                "cid": "decafbad"
            },
            "did": "did:plc:cbkjy5n7bk3ax2wplmtjofq2",
            "issued": "2025-05-16T14:00:02.000Z"
        },
        "signature": {
            "issuer": "did:plc:lehcqqkwzcwvjvw66uthu5oq",
            "issuedAt": "2025-05-16T14:00:02.000Z",
            "signature": "c68666...b7fef8"
        }
    },
    {
        "aturi": "at://did:plc:cbkjy5n7bk3ax2wplmtjofq2/events.smokesignal.calendar.rsvp/3lcydu5x7at2z#bafyreig...h6tka3wy",
        "record": {
            "$type": "events.smokesignal.calendar.rsvp",
            "status": "events.smokesignal.calendar.rsvp#going",
            "subject": {
                "cid": "bafyreifwvuqm4hhkmrsaj3zxvpfqj7byjefucrb36burwbuu5uv5sk5jqa",
                "uri": "at://did:plc:lehcqqkwzcwvjvw66uthu5oq/events.smokesignal.calendar.event/3lcyaxnwvau2f"
            }
        },
        "signature": {
            "issuer": "did:plc:lehcqqkwzcwvjvw66uthu5oq",
            "issuedAt": "2025-02-01T10:00:02.000Z",
            "signature": "bafyreig...h6tka3wy",
            "role": "presenter"
        }
    },
    {
        "aturi": "at://did:plc:cbkjy5n7bk3ax2wplmtjofq2/community.lexicon.badge.award/3ln6mwlzdcr2v#c68666...b7fef8",
        "record": {
            "$type": "community.lexicon.badge.award",
            "badge": {
                "$type": "com.atproto.repo.strongRef,",
                "uri": "at://did:plc:lehcqqkwzcwvjvw66uthu5oq/community.lexicon.badge.definition/3lj44kstfzk2n",
                "cid": "decafbad"
            },
            "did": "did:plc:cbkjy5n7bk3ax2wplmtjofq2",
            "issued": "2025-05-16T14:00:02.000Z"
        },
        "signature": {
            "issuer": "did:plc:lehcqqkwzcwvjvw66uthu5oq",
            "issuedAt": "2025-05-16T14:00:02.000Z",
            "poap": true,
            "event": "at://did:plc:lehcqqkwzcwvjvw66uthu5oq/events.smokesignal.calendar.event/3lcyaxnwvau2f",
            "signature": "c68666...b7fef8"
        }
    }
]

The first record is a badge award using the badge definition described earlier that says I registered for the conference. This simply says that the identity (@ngerakines.me) has the badge "ATmosphereConf 2025 Early Bird Registration" as attested by the authority (@atprotocol.dev).

The second record is an RSVP. That is a copy of the identity's RSVP to the event and is signed by the event organizer with the additional signature meta-data {"role": "presenter"}.

The third record is a badge award using the badge definition described earlier that says I attended for the conference. This says that the identity (@ngerakines.me) has the badge "ATmosphereConf 2025 Attendee" as attested by the authority (@atprotocol.dev). It includes the event and poap fields in the signature meta-data.