This tutorial provides a comprehensive guide to using TrustWeave’s Wallet API. You’ll learn how to create wallets, store credentials, organize them, and create presentations.
Result: Gives you the wallet DSL, trust layer builders, and in-memory implementations used throughout this tutorial.
Tip: The runnable quick-start sample (./gradlew :TrustWeave-examples:runQuickStartSample) mirrors the core flows below. Clone it as a starting point before wiring more advanced wallet logic.
importcom.trustweave.credential.models.VerifiableCredentialimportkotlinx.serialization.json.buildJsonObjectimportkotlinx.serialization.json.put// Create a credentialvalcredential=VerifiableCredential(id="https://example.com/credentials/123",type=listOf("VerifiableCredential","PersonCredential"),issuer="did:key:issuer",credentialSubject=buildJsonObject{put("id","did:key:subject")put("name","Alice")put("email","alice@example.com")},issuanceDate="2023-01-01T00:00:00Z")// Store itvalcredentialId=wallet.store(credential)println("Stored credential: $credentialId")
Outcome: Persists a credential in the wallet and returns its storage identifier.
if(walletisCredentialOrganization){// Create a collectionvalworkCollection=wallet.createCollection(name="Work Credentials",description="Professional credentials and certifications")// Add credentials to collectionwallet.addToCollection(credentialId,workCollection)// Get credentials in collectionvalworkCreds=wallet.getCredentialsInCollection(workCollection)println("Work credentials: ${workCreds.size}")// List all collectionsvalcollections=wallet.listCollections()collections.forEach{collection->println("Collection: ${collection.name} (${collection.credentialCount} credentials)")}}
Outcome: Creates collections, adds credentials, and lists collection metadata when the wallet supports organization.
Tags
Tag credentials for easy filtering:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
if(walletisCredentialOrganization){// Tag a credentialwallet.tagCredential(credentialId,setOf("important","verified","work"))// Get tags for a credentialvaltags=wallet.getTags(credentialId)println("Tags: $tags")// Find credentials by tagvalimportantCreds=wallet.findByTag("important")// Get all tagsvalallTags=wallet.getAllTags()println("All tags: $allTags")// Remove tagswallet.untagCredential(credentialId,setOf("work"))}
Outcome: Demonstrates tagging workflows—ideal for building saved searches or UI filters.
Metadata
Add custom metadata to credentials:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
if(walletisCredentialOrganization){// Add metadatawallet.addMetadata(credentialId,mapOf("source"to"issuer.com","verified"totrue,"priority"to"high"))// Get metadatavalmetadata=wallet.getMetadata(credentialId)println("Metadata: ${metadata?.metadata}")// Add noteswallet.updateNotes(credentialId,"This credential was verified manually")}
valvalidWorkCredentials=wallet.query{byTypes("WorkCredential","EmploymentCredential","CertificationCredential")bySubject("did:key:subject")notExpired()notRevoked()valid()// Has proof, not expired, not revoked}
Query Examples
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// Find expired credentialsvalexpired=wallet.query{expired()}// Find revoked credentialsvalrevoked=wallet.query{revoked()}// Find credentials by issuer and typevalspecific=wallet.query{byIssuer("did:key:university")byType("DegreeCredential")}
Creating Presentations
Basic Presentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
importcom.trustweave.credential.PresentationOptionsif(walletisCredentialPresentation){valpresentation=wallet.createPresentation(credentialIds=listOf(credentialId1,credentialId2),holderDid="did:key:holder",options=PresentationOptions(holderDid="did:key:holder",proofType="Ed25519Signature2020",challenge="random-challenge-123",domain="example.com"))println("Created presentation with ${presentation.verifiableCredential.size} credentials")}
if(walletisCredentialLifecycle){// Archive old credentialswallet.archive(oldCredentialId)// Get archived credentialsvalarchived=wallet.getArchived()println("Archived credentials: ${archived.size}")// Unarchive if neededwallet.unarchive(oldCredentialId)}
Refreshing Credentials
1
2
3
4
5
6
7
if(walletisCredentialLifecycle){// Refresh a credential (if refresh service available)valrefreshed=wallet.refreshCredential(credentialId)if(refreshed!=null){println("Credential refreshed")}}
Manage multiple wallets with an instance-scoped directory:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
importcom.trustweave.credential.wallet.WalletDirectoryvaldirectory=WalletDirectory()// Register walletsvalwallet1=BasicWallet()valwallet2=InMemoryWallet()directory.register(wallet1)directory.register(wallet2)// Find walletsvalretrieved=directory.get(wallet1.walletId)valbyDid=directory.getByDid("did:key:wallet")// Find wallets with specific capabilitiesvalorgWallets=directory.findByCapability(CredentialOrganization::class)valwalletsWithCollections=directory.findByCapability("collections")