Build a fully automated system to issue tamper-proof blockchain credentials and notify students in real-time.
Issuing certificates on blockchain is a powerful way to create tamper-proof, verifiable academic or professional credentials. A traditional implementation usually requires:
Backend servers listening to on-chain events
Relayers or cron jobs to call issuing contracts
Notification services to inform students
This increases infrastructure complexity and operational cost.In this use case, we demonstrate how Kwala Workflows can fully automate the end-to-end certificate lifecycle, from student registration to certificate issuance and real-time notification, without writing any backend server logic.
The entire flow is driven by smart contracts, on-chain events and YAML-based Kwala workflows. Kwala acts as the event-driven automation layer, bridging smart contracts and external systems.The complete flow involves two smart contracts and two Kwala workflows working together to automatically issue certificates and notify students when registration occurs.
ActionSend a personalized Telegram message containing:
Student ID
Certificate ID
Wallet address
Workflow YAML: Certificate notification
CertificateNotification.yaml
Copy
Name: certificatenotification4Trigger: TriggerSourceContract: 0x192c91565ed652675FCd88A23e096261b5e290E1 TriggerChainID: 80002 TriggerEventName: CertificateIssued(address,uint256,uint256) TriggerEventFilter: NA TriggerSourceContractABI: W3siYW5vbnltb3VzIjpmYWxzZSwiaW5wdXRzIjpbeyJpbmRleGVkIjp0cnVlLCJpbnRlcm5hbFR5cGUiOiJhZGRyZXNzIiwibmFtZSI6InN0dWRlbnQiLCJ0eXBlIjoiYWRkcmVzcyJ9LHsiaW5kZXhlZCI6dHJ1ZSwiaW50ZXJuYWxUeXBlIjoidWludDI1NiIsIm5hbWUiOiJzdHVkZW50SWQiLCJ0eXBlIjoidWludDI1NiJ9LHsiaW5kZXhlZCI6ZmFsc2UsImludGVybmFsVHlwZSI6InVpbnQyNTYiLCJuYW1lIjoiY2VydGlmaWNhdGVJZCIsInR5cGUiOiJ1aW50MjU2In1dLCJuYW1lIjoiQ2VydGlmaWNhdGVJc3N1ZWQiLCJ0eXBlIjoiZXZlbnQifSx7ImlucHV0cyI6W3siaW50ZXJuYWxUeXBlIjoidWludDI1NiIsIm5hbWUiOiIiLCJ0eXBlIjoidWludDI1NiJ9XSwibmFtZSI6ImNlcnRpZmljYXRlVG9TdHVkZW50Iiwib3V0cHV0cyI6W3siaW50ZXJuYWxUeXBlIjoiYWRkcmVzcyIsIm5hbWUiOiIiLCJ0eXBlIjoiYWRkcmVzcyJ9XSwic3RhdGVNdXRhYmlsaXR5IjoidmlldyIsInR5cGUiOiJmdW5jdGlvbiJ9LHsiaW5wdXRzIjpbeyJpbnRlcm5hbFR5cGUiOiJhZGRyZXNzIiwibmFtZSI6InN0dWRlbnQiLCJ0eXBlIjoiYWRkcmVzcyJ9LHsiaW50ZXJuYWxUeXBlIjoidWludDI1NiIsIm5hbWUiOiJzdHVkZW50SWQiLCJ0eXBlIjoidWludDI1NiJ9XSwibmFtZSI6Imlzc3VlQ2VydGlmaWNhdGUiLCJvdXRwdXRzIjpbXSwic3RhdGVNdXRhYmlsaXR5Ijoibm9ucGF5YWJsZSIsInR5cGUiOiJmdW5jdGlvbiJ9LHsiaW5wdXRzIjpbeyJpbnRlcm5hbFR5cGUiOiJhZGRyZXNzIiwibmFtZSI6IiIsInR5cGUiOiJhZGRyZXNzIn1dLCJuYW1lIjoic3R1ZGVudFRvQ2VydGlmaWNhdGUiLCJvdXRwdXRzIjpbeyJpbnRlcm5hbFR5cGUiOiJ1aW50MjU2IiwibmFtZSI6IiIsInR5cGUiOiJ1aW50MjU2In1dLCJzdGF0ZU11dGFiaWxpdHkiOiJ2aWV3IiwidHlwZSI6ImZ1bmN0aW9uIn0seyJpbnB1dHMiOltdLCJuYW1lIjoidG90YWxDZXJ0aWZpY2F0ZXMiLCJvdXRwdXRzIjpbeyJpbnRlcm5hbFR5cGUiOiJ1aW50MjU2IiwibmFtZSI6IiIsInR5cGUiOiJ1aW50MjU2In1dLCJzdGF0ZU11dGFiaWxpdHkiOiJ2aWV3IiwidHlwZSI6ImZ1bmN0aW9uIn1d TriggerPrice: NA RecurringSourceContract: 0x192c91565ed652675FCd88A23e096261b5e290E1 RecurringChainID: 80002 RecurringEventName: CertificateIssued(address,uint256,uint256) RecurringEventFilter: NA RecurringSourceContractABI: W3siYW5vbnltb3VzIjpmYWxzZSwiaW5wdXRzIjpbeyJpbmRleGVkIjp0cnVlLCJpbnRlcm5hbFR5cGUiOiJhZGRyZXNzIiwibmFtZSI6InN0dWRlbnQiLCJ0eXBlIjoiYWRkcmVzcyJ9LHsiaW5kZXhlZCI6dHJ1ZSwiaW50ZXJuYWxUeXBlIjoidWludDI1NiIsIm5hbWUiOiJzdHVkZW50SWQiLCJ0eXBlIjoidWludDI1NiJ9LHsiaW5kZXhlZCI6ZmFsc2UsImludGVybmFsVHlwZSI6InVpbnQyNTYiLCJuYW1lIjoiY2VydGlmaWNhdGVJZCIsInR5cGUiOiJ1aW50MjU2In1dLCJuYW1lIjoiQ2VydGlmaWNhdGVJc3N1ZWQiLCJ0eXBlIjoiZXZlbnQifSx7ImlucHV0cyI6W3siaW50ZXJuYWxUeXBlIjoidWludDI1NiIsIm5hbWUiOiIiLCJ0eXBlIjoidWludDI1NiJ9XSwibmFtZSI6ImNlcnRpZmljYXRlVG9TdHVkZW50Iiwib3V0cHV0cyI6W3siaW50ZXJuYWxUeXBlIjoiYWRkcmVzcyIsIm5hbWUiOiIiLCJ0eXBlIjoiYWRkcmVzcyJ9XSwic3RhdGVNdXRhYmlsaXR5IjoidmlldyIsInR5cGUiOiJmdW5jdGlvbiJ9LHsiaW5wdXRzIjpbeyJpbnRlcm5hbFR5cGUiOiJhZGRyZXNzIiwibmFtZSI6InN0dWRlbnQiLCJ0eXBlIjoiYWRkcmVzcyJ9LHsiaW50ZXJuYWxUeXBlIjoidWludDI1NiIsIm5hbWUiOiJzdHVkZW50SWQiLCJ0eXBlIjoidWludDI1NiJ9XSwibmFtZSI6Imlzc3VlQ2VydGlmaWNhdGUiLCJvdXRwdXRzIjpbXSwic3RhdGVNdXRhYmlsaXR5Ijoibm9ucGF5YWJsZSIsInR5cGUiOiJmdW5jdGlvbiJ9LHsiaW5wdXRzIjpbeyJpbnRlcm5hbFR5cGUiOiJhZGRyZXNzIiwibmFtZSI6IiIsInR5cGUiOiJhZGRyZXNzIn1dLCJuYW1lIjoic3R1ZGVudFRvQ2VydGlmaWNhdGUiLCJvdXRwdXRzIjpbeyJpbnRlcm5hbFR5cGUiOiJ1aW50MjU2IiwibmFtZSI6IiIsInR5cGUiOiJ1aW50MjU2In1dLCJzdGF0ZU11dGFiaWxpdHkiOiJ2aWV3IiwidHlwZSI6ImZ1bmN0aW9uIn0seyJpbnB1dHMiOltdLCJuYW1lIjoidG90YWxDZXJ0aWZpY2F0ZXMiLCJvdXRwdXRzIjpbeyJpbnRlcm5hbFR5cGUiOiJ1aW50MjU2IiwibmFtZSI6IiIsInR5cGUiOiJ1aW50MjU2In1dLCJzdGF0ZU11dGFiaWxpdHkiOiJ2aWV3IiwidHlwZSI6ImZ1bmN0aW9uIn1d RecurringPrice: NA RepeatEvery: event ExecuteAfter: event ExpiresIn: 1762957800 Meta: NA ActionStatusNotificationPOSTURL: ActionStatusNotificationAPIKey: NAActions: - Name: telegramNoti1 Type: post APIEndpoint: https://api.telegram.org/bot7754368882:AAHS4KbbOkl5rEHoBBIR8eljgwq2PARYLyY/sendMessage APIPayload: chat_id: '968602918' text: Hi re.event(1), your certificate ID re.event(2) is credited on your wallet address re.event(0). TargetContract: NA TargetFunction: NA TargetParams: ChainID: NA EncodedABI: NA Bytecode: NA Metadata: NA RetriesUntilSuccess: 5Execution: Mode: parallel
API payload
Copy
{ "chat_id": "968602918", "text": "Hi re.event(1), your certificate ID re.event(2) is credited on your wallet address re.event(0)."}
Dynamic Parameters:
re.event(0) → student wallet address
re.event(1) → student ID
re.event(2) → certificate ID
Kwala automatically substitutes these placeholders with actual event data at runtime.
This use case demonstrates how Kwala Workflows can be used to build a production-ready, automated certificate issuance system using solidity smart contracts, on-chain events and YAML workflow definitions.By combining StudentRegistry, CertificateIssuer, and Kwala, institutions can issue verifiable certificates at scale securely, transparently, and without infrastructure overhead. Kwala handles the automation. Blockchain guarantees trust.