This guide explains how to issue a self-attestation credential for the Support Office. This process is performed by the Support Office itself, acting as both the issuer and the subject of the credential.
The Support Office self-attestation is automatically performed during the bootstrap process in the EBSI Deployment. This tutorial is useful when you need to issue a new credential, update an existing one, or perform the process manually outside of the bootstrap script.
Prerequisites
Before starting this process, ensure you have:
- Support Office credentials with appropriate permissions
- TIR:setAttributeMetadata attribute defined in the Trusted Policies Registry
- DID registration completed in the DID Registry
- Node.js v22 installed on your system
- Hardware wallet setup (recommended for security) - see Hardware Wallet Setup
This process uses proxyledger
commands to interact directly with the Besu blockchain, bypassing the authorisation API and Trusted Issuers Registry API. This is a special privilege available only to Support Office. For more information about proxyledger
commands, see Ledger API.
Step 1: Load the Support Office Wallet
Load the keys of the Support Office:
==> using user ES256K did1 <SUPPORT_OFFICE_PRIVATE_KEY_ES256K> <SUPPORT_OFFICE_DID>
==> using user ES256 did1 <SUPPORT_OFFICE_PRIVATE_KEY_ES256> <SUPPORT_OFFICE_DID>
Now connect the wallet with the pilot environment:
==> env pilot
Step 2: Load the VC Payload
Load the predefined payload for the Support Office self-attestation credential:
==> payloadVc: load assets/CredentialToAttestVerifiableAuthorisationForTrustChain.json
==> reservedAttributeId: compute randomID
==> set payloadVc.issuer user.did
==> set payloadVc.credentialSubject.id user.did
==> set payloadVc.credentialSubject.accreditedFor[0].schemaId tsrUrl /schemas/zH74MKkYTbQ6ZfTxufi6A3Aw8giS4piGm8dpgxFmkJjmu
==> set payloadVc.credentialSchema.id tsrUrl /schemas/zH74MKkYTbQ6ZfTxufi6A3Aw8giS4piGm8dpgxFmkJjmu
==> set payloadVc.credentialSubject.reservedAttributeId reservedAttributeId
This payload contains an attestation to authorise the issuance of VerifiableAuthorisationForTrustChain
credentials, that is, to authorise new Root TAOs to onboard in EBSI.
Step 3: Issue the VC
Create and sign the verifiable credential:
==> vcSupportOffice: compute createVcJwt payloadVc {} ES256
eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6ImRpZDplYnNpOnppeWJiUkNxTHFieEp3NEh5NVFTRUtRI3NqN29tTm5ycjhLWVlhQmtaWFpnTWZNYk90WGxPOGw3cUU5TVRadmdYbEkifQ.eyJpYXQiOjE3NTcwNjUxMTcsImp0aSI6InVybjp1dWlkOjkwNTMzNTkyLTRhYzQtNDhjYi04YzE1LTc1YWUzNDRmYzE4MCIsIm5iZiI6MTc1NzA2NTExNywiZXhwIjoxOTE0NzQ1MTE3LCJzdWIiOiJkaWQ6ZWJzaTp6aXliYlJDcUxxYnhKdzRIeTVRU0VLUSIsImlzcyI6ImRpZDplYnNpOnppeWJiUkNxTHFieEp3NEh5NVFTRUtRIiwidmMiOnsiQGNvbnRleHQiOlsiaHR0cHM6Ly93d3cudzMub3JnLzIwMTgvY3JlZGVudGlhbHMvdjEiXSwiaWQiOiJ1cm46dXVpZDo5MDUzMzU5Mi00YWM0LTQ4Y2ItOGMxNS03NWFlMzQ0ZmMxODAiLCJ0eXBlIjpbIlZlcmlmaWFibGVDcmVkZW50aWFsIiwiVmVyaWZpYWJsZUF0dGVzdGF0aW9uIiwiVmVyaWZpYWJsZUFjY3JlZGl0YXRpb24iLCJWZXJpZmlhYmxlQWNjcmVkaXRhdGlvblRvQXR0ZXN0Il0sImlzc3VlciI6ImRpZDplYnNpOnppeWJiUkNxTHFieEp3NEh5NVFTRUtRIiwiaXNzdWFuY2VEYXRlIjoiMjAyNS0wOS0wNVQwOTozODozN1oiLCJpc3N1ZWQiOiIyMDI1LTA5LTA1VDA5OjM4OjM3WiIsInZhbGlkRnJvbSI6IjIwMjUtMDktMDVUMDk6Mzg6MzdaIiwiZXhwaXJhdGlvbkRhdGUiOiIyMDMwLTA5LTA0VDA5OjM4OjM3WiIsImNyZWRlbnRpYWxTdWJqZWN0Ijp7ImlkIjoiZGlkOmVic2k6eml5YmJSQ3FMcWJ4Snc0SHk1UVNFS1EiLCJhY2NyZWRpdGVkRm9yIjpbeyJzY2hlbWFJZCI6Imh0dHBzOi8vYXBpLXBpbG90LmVic2kuZXUvdHJ1c3RlZC1zY2hlbWFzLXJlZ2lzdHJ5L3YzL3NjaGVtYXMvekg3NE1La1lUYlE2WmZUeHVmaTZBM0F3OGdpUzRwaUdtOGRwZ3hGbWtKam11IiwidHlwZXMiOlsiVmVyaWZpYWJsZUNyZWRlbnRpYWwiLCJWZXJpZmlhYmxlQXR0ZXN0YXRpb24iLCJWZXJpZmlhYmxlQXV0aG9yaXNhdGlvbkZvclRydXN0Q2hhaW4iXX1dLCJyZXNlcnZlZEF0dHJpYnV0ZUlkIjoiYzNlNDI3MDFlMmY3MjAxNTI4ZmU4YWU4YmY1YzIwN2I1MTVhMTRkY2IwNGZjN2Q1NTE4ZmNhZDE0MjlkOWMwYiJ9LCJjcmVkZW50aWFsU2NoZW1hIjp7ImlkIjoiaHR0cHM6Ly9hcGktcGlsb3QuZWJzaS5ldS90cnVzdGVkLXNjaGVtYXMtcmVnaXN0cnkvdjMvc2NoZW1hcy96SDc0TUtrWVRiUTZaZlR4dWZpNkEzQXc4Z2lTNHBpR204ZHBneEZta0pqbXUiLCJ0eXBlIjoiRnVsbEpzb25TY2hlbWFWYWxpZGF0b3IyMDIxIn19fQ.lQDrkgwa67uHt3MopUDPo_XpQd9iEPTUD_nNOlZ9ecKm0DISG1nalVh3jisUd4uKqhjaBLjOBK7KIZDWRguXxg
Step 4: Pre-register the VC
Pre-register the credential in the Trusted Issuers Registry using proxyledger
to interact directly with the blockchain:
==> proxyledger tir setAttributeMetadata user.did reservedAttributeId roottao
The CLI will automatically use the values from the loaded variables:
user.did
: The DID of the currently loaded user (Support Office)reservedAttributeId
: The random ID generated in Step 2
Issuer did:ebsi:zzcJJuM4Z4AUKdL8kdMEKNw
{
"attributeId": "c3e42701e2f7201528fe8ae8bf5c207b515a14dcb04fc7d5518fcad1429d9c0b",
"issuerType": "roottao"
}
Step 5: Register the VC
Register the credential data in the Trusted Issuers Registry using proxyledger
:
==> proxyledger tir setAttributeData user.did reservedAttributeId vcSupportOffice
The CLI will automatically use the values from the loaded variables:
user.did
: The DID of the currently loaded user (Support Office)reservedAttributeId
: The random ID generated in Step 2vcSupportOffice
: The verifiable credential created in Step 3
This command registers the actual verifiable credential in the registry, completing the self-attestation process.
Verify the Registration
To verify that the Support Office self-attestation has been properly registered:
==> tir get /issuers/ user.did
{
"did": "did:ebsi:zzcJJuM4Z4AUKdL8kdMEKNw",
"attributes": [
{
"hash": "06bcfc35a6c342bd12d9975df3de5a2659e70318f208999341bc634006e32233",
"body": "eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6ImRpZDplYnNpOnpaZUt5RUpmVVRHd2FqaE55Tlg5Mjh6I2tleXMtMiJ9...",
"issuerType": "ROOTTAO",
"tao": "did:ebsi:zzcJJuM4Z4AUKdL8kdMEKNw",
"rootTao": "did:ebsi:zzcJJuM4Z4AUKdL8kdMEKNw"
}
]
}
You have successfully issued and registered a self-attestation credential for the Support Office. The Support Office is now properly registered in the EBSI ecosystem.
Key Differences from Standard Onboarding
This process differs from the standard onboarding tutorial in several important ways:
- Single Actor: Only the Support Office is involved (both issuer and subject)
- Direct Blockchain Access: Uses
proxyledger
commands instead of authorisation API - No Access Tokens: Bypasses the authorisation API entirely
- No Proxy Registration: Support Office doesn't need to register an issuer proxy
Related Documentation
- Onboarding Tutorial: Standard onboarding process for new entities
- Hardware Wallet Setup: Secure key management
- CLI Commands: Complete command reference
- Trusted Issuers Registry API: API documentation