Self-sovereign identity (SSI) is a decentralized model for digital identity that gives individuals control over their credentials without relying on intermediaries, using verifiable credentials secured by cryptographic signatures that ensure authenticity, ownership, and data integrity; the Hyperledger Aries JavaScript framework provides an accessible toolkit for building SSI solutions by implementing open standards (Aries RFCs) in JavaScript/TypeScript, supporting both React Native mobile agents and Node.js server implementations, thereby lowering the barrier to entry for developers unfamiliar with blockchain and cryptographic concepts.
Hyperledger Aries JavaScript: A Developer Workshop
Added:you're live okay everyone well thank you very much for joining us for this great hyper ledger aries uh javascript workshop and i'm really pleased to have brend and karen join us today to go through the work that they're doing in the hyperledger uh experience and so what i'd like to say is we're going to try a little bit of pushing you into the discord channel so if anyone hasn't picked up the discord link here or we can look toward engagement in the hyperledger discord channel i'm going to repost it right now and then i'd like to also do is just offer if you don't have access to discord go ahead and raise your hand if you'd like to speak or go ahead and post into the zoom chat if you'd like to go ahead and pose a question to either one of them and then what i also like to do is you know make sure that you know we're live streaming this event on youtube and uh it'll be available on the hyperledger youtube channel after the event and so at this point i'd like to turn it over to brend and cream to go through what they're going to do as far as a showcase of the aries javascript ecosystem and definitely feel free to join in and ask questions as we move along here because this workshop is definitely an interactive experience and we want to really get engagement here and then if you have any specific questions that you want to post in the chat i'll make sure that we address them as we move along as well so at this point i'm going to turn it over to brandon crim and let them go forward thanks yeah sure thank you john and thank you to everybody who has joined in apparently there is there's quite some interest to this it's cool to see um i will try to keep an eye on the uh chat uh while we're doing this presentation um because the first part will be a presentation and then after that we will try to do uh we will then use something and we will do a parent we'll do a live coding session um but john please if if i'm missing any questions or any questions uh you know don't hesitate to jump in um i'll monitor everything as well and then if i see anything come through i'll definitely uh ask you about it perfect and then at the end we'll have a q a as well so if there are any questions left then we'll gladly answer them so um yeah once again thank you all for joining um it's good to see that there's so much interest in this um actually next to me but you can see that is a parent uh sleepless and i'm korean uh stakeholder and we um are both uh we work at animal solutions um and we are here to talk to you about how to make decentralized identity easy or at least easier and we'll do that by showcasing the aries or hyperledger areas javascript ecosystem so a little bit um can you yeah a little bit about us uh again we're from uh animal solutions um our company is about two years old a little over two years we are based in utrecht the netherlands and currently we we build sni solutions and we help other companies to build ssi solutions so we also do a bit of consultancy our main mission uh is to to to drive the adoption uh of self-serving identity um so that's also one of the reasons that we're here um from the beginning uh from the moment we started this company we've been mostly active in the hyperledger aries community and more specifically we try to focus on hyperledger or every stream of javascript um i don't know if this works yeah so um short very short uh agenda for today um i'm not sure if everybody knows what self-serving identity is i'm assuming that most do but for those who don't i will quickly introduce the concept of self-driving identity and why we think we need that then a short introduction on what hyperledger aries is per se or exactly is um i can imagine that a lot of you come from other hyperledger projects fabric so a small or short introduction i think would be good um too much background noise yeah um maybe you can ask them to yeah um yeah we're on it thank you um so uh we'll shortly uh give an introduction on what hyperledger aries uh is exactly um then we'll go into uh the javascript framework itself um um and we'll after that we'll give you a small demo on okay how does a solution look like that is actually built with um with aries framework javascript we'll go a bit over the the documentation that is that is fairly new um and here at the end we'll do a live coding session because the whole point of this uh presentation of the session workshop however you might call it is um to to show you that ssi can actually be quite easy um so oh now we're both doing it so short of the production on self-serving identity and i think um because it's it's basically a decentralized model for um uh digital identity and i hope so too um um and i think uh it's good to to uh to show uh the need to self-serve an identity uh by going over um what i mean what's not working uh what the previous models uh or how we how we have handled digital identity in the uh in the past so um the most common model i think everybody knows um is the uh the username password model or decided the siloed model um here you um for every interaction with or every relationship you maintain digitally um so that could be with twitter with google with your bank whatever you use something that's called a shared secret which is a striped secret is just a basically a fancy word for something like a password um so if i register at a certain website for instance i give them a little secret uh usually a password and the next time i come around they will ask me for a secret um i will give them that secret and based on that they trust that i am the same person who previously registered with that secret um now there are a lot of downsides here i think they are pretty known um it requires us to manage a lot of credentials you preferably uh don't use the same password for everything um which sadly is the result uh often um um so if if you would do it directly you would have to manage a lot of different credentials different passwords um but it also and this is something that a lot of people um i think is overlooked a lot is that it requires every organization um to in a way be a security expert like you're giving them some sensitive information um so they need to be able to protect that and well the examples on this slide here are facebook twitter and google you can assume that they have that in place but a small webshop might not um okay so the next step um is another model the federated model um also known as the identity provider model or single sign-on um i think most of you have also heard or seen or even used this uh yourselves um here we put a uh third party in between the interaction so it's the with with you basically have a free relationship now you don't interact directly um when it comes to authentication with the website you want to go to but um you use identity provider for instance google has google login um facebook has facebook login i believe um and they say uh you know what um just let us handle all this all this identity stuff so you don't have to bother about it or deal with it we will do that for you um so you authenticate with google and if everything is all right google will tell the website you're trying to interact with hey this is in my case green um which is a it's a it's a step forward because now we don't have to manage all these credentials um we just have one or a few um the identity provider again in this case in this example that google has to handle the sensitive data so it doesn't require everybody to be a security expert in that sense um but it has major downsides as well we basically place a third party between every interaction we have so um in this example every time we log in to a certain website using google google knows about it and we all know that they are uh they love to have the data uh and they're not always um too ethical with it um it also has the downside that um [Music] now you're using basically one shared secret one with google for multiple relationships so that secret becomes more valuable if somebody cracks my google account now they have access to many many services whereas previously they wouldn't and i think probably uh in the decentralized world the most important one is um uh we have a intermediate priority um we're not we're not communicating peer-to-peer and that party potentially could say no uh we don't like korean anymore um so if i'm trying to log in they just say no so you give an external party um the power to deny uh access to certain services which is it's a bad thing obviously um so um there are more models um we won't go over all of them um but this gives a somewhat of an overview i think of uh of how digital identity worked and still works in a lot of cases so self-serving identity now this is uh not going to be a super accurate explanation it's definitely not going to cover all of the aspects because there are many but in essence i often use the example of a passport so physical identity if you think about physical identity you receive a passport or a identification card from the government in this case we call the government the issuer because they issue you a passport and you are in control over the passport you have that with you um and you decide who sees the passport and who doesn't um so if i have to fly usually customs will ask me for my passport i can disclose that to them um but it's not under control of another priority like the previous models had um so in a sense it uh also really gives back control um uh over your identity uh to you it gives you the control you decide what happens with your identity or your documents or credentials um like both models partly also it removes the need for managing loads of passwords which is you don't need them and you remove the intermediate party um so in um in in this case as seen on the graphic um somebody gives you a credential again in the example i just mentioned that's the government um we call the government the issuer um you get the credential and you hold it so we call you the holder and if i go to customs they verify the credential so we call them the verifier now very important thing is it's decentralized um so we don't have vendor lock in it's not that we use some kind of service and if that service goes down um we now are are not able to identify ourselves to others um it's decentralized so um whatever vendor party comes and goes which should be okay um ssi or self-sovereign identity is based on open standards very important um and the two most notable ones are decentralized amplifiers which are basically you can view them sort of as as as urls for entities for things um so a url you put into your browser takes you to a certain document online and this identifies a thing a person an animal etc and the most important one i think or both very important but very interesting second one is the verifiable credential um which is basically a a document a digital document which has all kinds of cryptographic magic in it which makes it secure um in essence there are i think three main things um a verifiable credential can assure you of one is um cryptographically um that is one is um so as a verifier if i get a credential from a holder um one thing i can be sure of is that it was actually issued by the issuer that i'm seeing oh oops that is that is written down in the in the credential secondly i can be pretty sure that it's um issued to the holder so to the person that's giving me the credential and lastly um that that person didn't alter any information because you can imagine uh if somebody gives me a passport and they they alter their age now they have different rights um so that is ssi in um in very short there's there's lots more to it but um we are trying to move on so then what is hyperledger areas um well it's uh uh this is a hyperledger meetup so most of you know what hyperledger is i think um but hyperledger areas is um is a is the identity decentralized identity project under the whole hyperledger umbrella um and um it's sort of is part of what i call i don't know if that is an official term but the hyperledger identity stack so ssi sometimes not always but usually relies on a blockchain um and the blockchain side of things is another hyperledger project which you see all the way at the bottom that's hyperledger indy and we use that to register some data that has to be immutable and then we have the hyperledger areas itself an arbitrary area is basically a set of standards that define how software um should or or can um can work and and specifically software that is meant to handle all these credentials so it's really a set of standards you can use and follow to create um hyper or ssi software because as you can imagine um doing all these cryptographic calculations out of your head is a bit a bit tedious um so we need software for that and hyperledger areas defines standards to create that software all the way on the left we see hyperledger ursa which probably a lot of you are familiar with it's a critical library also under the hyperledger umbrella and both hyperledger areas and um uh hybrid gnd rely on uh populator ursa for their crypto stuff um so to yeah yep it went um to uh quickly summarize so what is hyperledger areas itself it is um it's a it's it's a sweet for creating self-serving identity agents and agents is if we have a piece of software that does self-solving identity interactions for us we call that an agent um and it's important to note that it is not a technical implementation itself uh it's a set of standards so it's a set of rfcs instead set of protocols that are written down and they can be used to create technical implementations and there are various technical implementations out there that follow these standards um that are listed below uh we have uh irish club agent python which is a which is a server that can be used to um which exposes a rest api you can call to perform self-serving identity actions let's say there are various frameworks that are listed below that you can use to really create your own ssi solutions um using hyperledger areas um yeah can i hear this um so one of the frameworks help you with questions there uh maybe just touch base on the questions that were posted in the chat real quick just so we're kind of covering those as we go along i know we're going to have q and a at the end but maybe just touch base on those yeah um so i see one is hi how how does the verifier make sure uh the credentials are legit um so that is um for me a bit a bit a bit too much to explain because i'm not a cryptographic uh genius but um there are all kinds of cryptographic things in a verifiable credential um so you usually all base it on signatures on cryptographic signatures and a verifier can check if a signature was made by a certain did in this case the issue or pid so when the credential is issued it is signed by the issuer and when the credential plan is presented by the holder to a verifier they can check was this actually signed by the issuer that is written down there if you alter the information that is in the credential uh the signature would be invalid um i hope that answers your question uh let me see uh multi-chain will work in aries um we'll go over that quickly later um but um in essence we are trying to to slowly uh um implement other or uh to integrate with other trains than indie because um as mentioned oops in this slide hyperledger india is an identity specific blockchain um but there are many other blockchains that can be used for the same um right now we are mainly um still tied to hyperledger indie but we're working hard to integrate with other ledgers let's say fabric or check the new new player in the game so we're working on that let me see we have a few other ones yeah uh recovery is is still um of credentials so the question here says um credentials are uh stored somewhere on the phone or wherever um on a server but what if you lose those credentials and and all the cryptographic things that go along with it this is a difficult question um there are a lot of projects that um that are working on this um and that's try to solve this but indeed um uh right now i guess the way to uh to get your credentials back is a bit silly which is just asked to get those those credentials reissued but there are various solutions in the making [Music] so zero knowledge proves um i see a question on zero knowledge proofs um oh and baron just answered it um uh so yeah indeed um um zero knowledge proves for those who don't know uh is um um i could uh present the credential to or proof of the credential to a verifier for instance the verifier asked me am i older than 21 and the zero knowledge proof is a way to to basically prove that without disclosing my birthday or my age so they basically get a boolean that says yes no and they um are able to trust this again cryptographic magic um i hope that answers your question um and we do have ace a credential format in the credential format or unknown threads that that does support that um cool i will now i think go on just for the sake of time um yeah so uh those i pledge alleys uh now we are here obviously to talk about hyperledger aries uh or uh aries framework javascript which is again the javascript implementation of hyperledger um aries um oops there we go um so why did we choose this framework as a company as opposed to all the other ones that are out there and that has mostly to do with um our mission which i mentioned previously um at the beginning is we want to drive adoption of self-serving identity like we um believe it's it's something that will really make the world a better place hate to learn but there we go um and um so for for for salesforce identity to really take off non-ssi developers have to be able to um understand it um right now it's really complex um but if you think about it like identity is in is everywhere every app used to some form of identity most websites do um so it's everywhere and the developers of these websites are not uh it's not their their core their core business to to do identity stuff so they don't they don't want to spend a half a year or more to learn this stuff enable uh to be able to use it so they usually fall back to the other models we just discussed because they're just easier um we think um it has to be easy we we have to make sort of an identity easy at least as easy as possible for it to really to really become something um and javascript uh is among or the most popular language out there i think still according to stack up overflow uh the most popular one so a lot of developers know it um or have worked with it maybe not work every day with it but um um so it's it's it's not you know people don't have to learn rust first in order to do this kind of stuff to implement into their apps but they can just um use something they're used to secondly is with frameworks or solutions like react native node.js you can use um javascript on multiple platforms so using react native we can write ssi solutions for um for mobile apps so both android and ios um but you can use that same framework um to make server-side solutions which i think is really valuable you don't have to learn three frameworks in order to to get your ssi stuff done um so that is something we uh we value a lot um and that's that's in the end why we chose the javascript framework um so this is a bit vague because we are using the term javascript of every frame of javascript and there is javascript ecosystem um [Music] through another but um it started with every framework javascript and um the framework and um things around it have gained quite some traction lately um so it we have some other things outside of the framework itself that emerged and as you can see in the particular screen here is in blue we have the framework itself so the framework contains a core package which has all the fun the ssi functionality you need in order to create connections between two parties to exchange credentials um all that goodness then we have two packages that are really platform specific so we have a react native package node.js package they are based they basically contain all the dependencies you would need depending on the platform you're working in so if you are going to make a react native app you would install the core package and the native dependencies package the same for node but then you would obviously use the node package um down one once up down in red we have the uh aries framework javascript extensions it's another repository and that basically contains stuff that would help us uh to do common common things um not so common that they belong in the course of framework so for instance if you want to have a rest api around your agent um we have a an extension you can plug into the framework that gives you a rest api the same for if you're creating a react native solution so a mobile wallet or app and you'd like to have some push notification support there is an extension for that then we have um aries mobile agent reaction native in i guess pink or purple i don't know um which is basically a um it's a no it's again another repository it's it's an open source um uh agent a react native agent that is built on top of um every string of javascript um so it's it's a wide label app so you could um uh you could just clone it put your own theme in it and give it give it your own feel um but you can also use it obviously as a reference if you're creating your own um your own mobile agent based on an irish from your javascript and last but not least documentation which is quite important we have noticed but we'll go over that a bit later um so okay that's all good and nice that was a little introduction on the ecosystem um but let's see it in action so what can we actually do with this stuff um parents if you can help me um so we have or one of my um excuse me lovely colleagues um made a a demo which you can if you want to follow along you can it takes the set it takes uh it takes a bit of time because you need to download the wallet but um it's basically it's a website that you can use to get a credential issue to you and then present that credential to others um it's quite uh trying to fix some technical issues here because we're trying to stream um my phone as well it's not just isn't it working try it again anyway um thank you for the brilliant demo comment um yeah it's it's i think it's it's it's a very nice demo it's uh you can choose multiple use cases um so you can choose a a role um all right you can choose a character and a character has a little bit of a story behind it um so one is a student when is the it's not gonna work like this then i have to just show it in the camera which is terrible but i will have to do that um so okay the streaming of my phone to the screen doesn't work so forgive us please but um so this is the demo you can visit yourself or do it later it's demo.animo.id um and first thing it will tell us is um to uh to run through the setup which basically means to do this you need you need a phone uh with a wallet on it and now there are two wallets here they're both not made by us one one intrinsic um probably uh a familiar company um and the other is lizzy wallet which is made by a german company um you can use either of those doesn't really matter um so i will go for lizzy in this case i present you with the qr code if that sends you to to the store if you want to download it i already have it so i won't do that and now it asks you to pick a character i will take john for this which is a student and there is a little i don't know a little uh little story line behind it um so the first thing we need is a credential um it will uh issue us a animal id card we call it but it basically tries to simulate a base credential you would normally get from the government or something that states your name your um uh age for instance uh let me see so the first thing we need to do is create a um because it's pretty beer i have my phone here the website runs a server with an agent and we need to create a connection um i already was connected so um but by scanning that qr code it basically creates a connection between my iphone and the other now going on um um it's great we are connected so it will now tell us i will um give you a starter credential um let me see so in my wallet um i received a credential which is really hard to see for you probably but believe me i received a credential and i can now um [Music] so it first gave me a notification hey this person wanted to send century credential and i accept the credential um i don't know why it is keeps hanging here let's run through this quickly again yeah okay let's take joyce for now so now i'm going to scan the qr code again for the connection great we are connected i have a connection with uh animal um and okay now it's visible here there are two i have two little modifications saying hey um i want to give you this credential these credentials in this case because it's another use case kfs2 the animal id card so the base id and a credit card we can use and i will accept them both and as you can see on the screen it says that i accepted it and there goes the other one boom so i both in my wallet now um i can go on to uh the next step and now it basically gives me a few options um so a few routes in this in this in this example um and it also lists uh you'll be asked for this credential this credential exponential in this case i will just take uh the conference example um gives me a little overview you're connecting with this uh sexual um uh company or uh or organization uh you'll need to present this and in in uh return for presenting that you'll get a conference pass that says that you are enrolled into the conference so now again this is another uh party so we'll need to set up a connection i will scan it again come on boom there we go so it needs some information blah blah blah i will now ask for that information again i have a little little notification here it asks me it's a shame i cannot show this to you but um on screen but basically it's it's asking it's telling me okay um this techcon 2022 uh i would like to have two pieces of information from you your name and your nationality so i can now say send it's fine and as you can see uh that just appeared here um so the first step was the uh the issuer um now they just verified us um and now they this um this conference becomes the issue of another pass and again i have a little uh notification and i can accept it now there are more and more and more way more steps in this demo uh with the two but for the sake of time i will stop here i'm gonna go back to the presentation there yes um but as you can see i hope this just gave you sort of an introduction on how this looks so um in this case the app was not built um because we're using a third-party app um this was not built with a streamer javascript but um it could have could have been an app that was built with uh with this framework um and the the the website you saw um ran the framework so it was built with nodejs um so bearing well now so now you have an introduction to the framework i hope you have an idea of what it what it has and baron will now go over um the current state of the framework um and and give you a slight look of the roadmap ahead um so here in yeah um so with uh the aries ecosystem and every uh framework we basically how we implement the frameworks are according to rfcs which cutting mentioned before the aries rfcs and these basically define what a or how it can communicate with other agents um there are many many rfcs now there are a lot of standards they have different versions different different versions different implementations and we we found out that it would be a good idea to create a profile which is just a set of rfcs which an agent should implement to be compliant with aip 1.0 which is the aries interop profile which is right here so this basically just defines a specific set of rfcs and their version what they should implement in order to be compliant with this and this just means that if you have a an aries cloud agent python ares agent and a retro javascript agent that if they both comply to the aip1 spec they can talk to each other and they can exchange information without being the exact same framework so i will talk about the features like in context of aip so right now afj is fully compliant with the aip1 with ospec which means it supports ditcon v1 which is a communication specification based on decentralized identifiers we are we also support the issuance of credential and the proof presentation v1 this just means what you just saw in the demo that someone gives you a based credential like animo and then techcon wants to get this information aka presenter proof we also support the connection protocol which is the first step in a demo actually where you set up a connection with the other agent or techcon and that way you get a channel in which you can talk to each other we do already support some features of aip2.
which includes issue credential v2 so that's the improved version of it this allows for a lot more uh credential formats but we currently only support the indie credential format which is the same used in the or in the issue credential v1 protocol we're working hard with everyone in the afj community to support the json ld credentials defined by w3c but that is coming in the next slide we also support out of band and did exchange out of band simply means here is that in order for us to establish a secure channel between two agents that we can use to talk to each other we first have to send one message that is not in this channel to establish that communication channel and that exchange just means the communication between the two agents within the channel so when it is established in order to uh fully test the aip specs so the wonder and the 2.0 um we created or as in the aries community created the aries asian test harness which is a quite a nice test harness which just tests all the framework against each other so this basically gives us a way to check the interoperability between different agents because sometimes you can implement the stack spec and understand it in the different way implemented incorrectly and then um you're actually not completely following specification and this would break interrupt so we test it every night to make sure that you know the agents are still compliant with each other you know one of the biggest features of afj is that it simply supports the rig native environment and the node.js environment this would mean that you can create a mobile agent like bifold or you can create a restful api like we used in the demo before that uses that is running in the node.js environment this really makes us allows us to capture the entire ecosystem of software um while still containing in like one code base uh and keeping it very consistent between the different implementations so in the future um as of like today and a couple weeks before we're already working on it uh now we're working on issue credential v2 like i said before uh with ld proofs and vbs plus signatures this is something that will greatly improve the interoperability between non-aries agents this is also something that we're working towards to not only be interoperable with other ares agents but with any kind of self-sovereign identity a agent that you can think of we're also working on percent proof we do this includes the indie credentials as mentioned before and the new ld proof credentials so that we can also verify them uh ditkum v2 is also required for this this is uh i'm not too sure on the details but this is just the improved version of the com v1 with some benefits and generalization outside of the aap 2.0 spec we also want to just improve the framework this includes multi-tenancy so if you want to for example create a sas platform so software as a service then you could have an one single agent instance that could create infinite amount of wallets for example for people that want to use this platform so if someone signs up creates an account and they can get a wallet they can do ssi interactions they can issue credentials they can receive credentials they can do whatever they want with it but it's managed by another entity and it allows you to provide this as a service we also found that the afj is starting to become quite bulky in terms of uh dependencies that we use for example for the bbs plus credentials we have a dependency for any we have a separate dependency and we notice that not every implementation needs all the specific dependencies um so we're trying to modularize the framework so that you can basically pick and choose from like okay i want to support pbs and ld proofs but i don't want indie because they're mad because i don't i don't want to have any specific reason what you want um so this would allow us to a bit more plug and play um framework and we're also looking towards integrating with more blockchains um this would include like the checked network for example what could you mention before and i believe some party is working on fabric support so that would also be really nice i mean there are tons of other blockchains that we would like to integrate with so that is definitely on the roadmap to just make it at support for as many as possible so we could you know be interrupt again with even more standards that's kind of the goal here that is kind of the the most you know the big features on the road map um what is also more on the roadmap is to improve again the usability of the framework and with that of course comes documentation so a couple weeks ago we decided to get started on that and now kareem will go back and show you the documentation website that we've created well i mean the documentation website oh well uh just a screenshot here um the url is is there as a subtitle um yeah so one of the things when we were introduced or when we started um with uh with the whole aries ecosystem uh one thing um we noticed immediately it is it is one very complex like the these rfcs if you're not used to them um um just come from from university like we we did that is very complex and then you just those those just describe the standards themselves then you also have um uh the frameworks so every framework obviously is built a little differently um and um yeah one of the things we struggled with a lot is that there was very few no documentation at all or outdated or um which makes it very difficult for people um [Music] to get started basically um and well again the whole point uh or our our mission is to to to drive uh adoption in this ecosystem so um um [Music] definitely solid documentation uh will help with that um we have also seen from our community and that has grown a lot um lately uh that that they struggle with this um you have to dive through the code which is uh not always um the best way uh or to get started really fast so indeed as bern mentioned a few weeks ago we uh we started writing documentation so we um we recently i think yesterday this website came online um which is basically it tries to um uh to be a sort of one-stop shop for for any documentation you might need on um not just a framework but anything inside of the inside of the ecosystem um it is really new really incomplete um so uh we're still uh it's still under heavy development so don't expect too much but um the whole idea behind this uh documentation is uh not to just give you know uh api talks not like okay here you have you know this function and it it it wants these these parameters in these arguments now we want to really uh put it in a more of a hands-on tutorial way so here we have a little screenshot of issue credential um visual credential is a use case that a lot of people making ssi solutions once it's something that is quite common in ssi to issue a credential so we tried to write this documentation in a way in a sort of tutorial fashion so this is what you need to get set up these are the snippets um with obviously an explanation on what they do but guiding you through uh the most common practices and and we hope to to extend this uh over time with also more advanced um use cases etc etc so really more in a in a tutorial uh-ish way don't please don't look at the callers here they're terrible we're working on them um but um now the colors indicate the different sides because we in an issue credential uh um interaction you obviously have the the issuer and the holder so the issuer sends a credential or issues a credential to the holder um so they both need a piece of software and that's why these code blocks are colored differently um to indicate the roles um but yeah again um this is not perfect at all um and if anyone would like to dive into the afj or aries javascript ecosystem especially beginners your remarks and comments are more than welcome because um as we have been working with this framework for for about three three years now um it's it's not always obvious what is not obvious to people who are starting out um i think that sort of covers it for uh the presentation side of things um parents will uh now yeah go on to the last coding session um so he will demonstrate uh how sort of easy uh hopefully easy it is to create an issuer right in this case yeah i will create an issuer um thank you um so we're gonna create an issuer and it's was supposed to talk with mobile agents which we're still gonna do but yeah we're gonna do the same thing again with the webcam so it might might look a bit weird but we'll try our best see so there we go [Music] just have to set everything up correctly and yes we can go uh so right here i have a completely empty project just one file in there which is an agent in here is just some simple boilerplate functions or code which is not really that important it contains the genesis transaction of the ledger that we want to connect to um we're setting the logs on because we want to you know show a bit more of what the framework is doing uh there's an agent label so that's what other people can see when they connect with your agent there are some auto acceptance so this way we can make the flow a bit easier we don't have to like accept every step of the flow we just issue a credential when it's done this is the ledger that we're connecting with this is our public dead seat and this on this seat is our public death based um you can use it it does network so there's no secrecy here um and we're using an angry tunnel here right now because we're using a local server so we have to expose it to the public so that our mobile agent can connect with it can connect with it and here we're just registering some outbound and inbound transports this is our way of communicating so first i'm going to add some dependencies which is the aries frame i hope it's visible for everyone it's not too small um if so then please mention it and i'll increase my font size red okay thank you um so i added the chord dependency and a note dependency because we're in a node environment right now and i will also add the qr code terminal dependency this is basically just my printed qr code in the terminal it's a very verbose name [Music] so just putting the dependencies in and now as you can see there are there are a couple of dependencies in uh javascript uh you know the standard way um so this is something that we really want to improve that we don't have to put that many dependencies in and that it will take a lot quicker and that the final server package is smaller we also have to add the types dependency because we do everything typescript every stream of javascript is also written in typescript just something that we forgot to mention so right here in the index we will pull in the get agent from the agents file in here we will create a simple main function in which we can define all our cool codes in this function first we have to get our agent uh which is just agent get agents with a label which will be a hyper ledger issuer demo okay so now that we have our agent we will have to create a schema on the ledger and this schema basically defines how our credential is going to look like with which attributes um so we can create it like this schema suite agent dot uh ledger this is a ledger interaction and we're going to register the schema in here we can specify some attributes so here we can say name and page a very standard identity credential the name of our schema will be hyperledger issuer demo schema it's not really important what it is right now so now that we have created our schema we have to create a credential definition which does a lot more than what i'm saying right now but it basically binds the schema to a specific key pair so that if you want to check like hey did the specific issuer issue this credential to a holder then you can use the credential definition to check that if the issuer actually issued that credential and it's not like my mother issuing me my identity instead of the government because that would be quite quite weird um so here we have the credential definition and chem agents ledger interaction so credential definition in here we have to pass in the schema we do not support verification right now um or we're not going to support verification for this uh but that's where you would put it if you support replication for this credential definition after this we have to create the invitation which will be an out of band record and the invitation um and it will be done on agent.ob which stands for out event of course and we'll create a legacy invitation uh we're creating a legacy invitation here and not like the newest invitation is because our wallet that we're going to use for this does not support is not aip2 compliant so we have to use the old connections protocol and that's why we also have a separate invitation here so in order to pass the invitation to the mobile agent we have to get the url from it because we can send urls then to other agents and from this url we have to create a qr code so we will do invitation url and the domain doesn't really matter here so i'll just use https dot example example build.org and now we have a url which contains our invitation in order to of course send it to the mobile site we have to create a qr code so we can use qr code to generate with the url just have to import it quickly qr code terminal and now well now we can send the connection and we basically have a connection but we need some events um to check when the connection is completed so that we can issue the credential so that's what we're going to do right now um [Music] i'll just have to yes i'll create a function which is connection listener and we'll take an agent and an id which will be the out event id and it will return a promise which will resolve with the connection id that's which we can then use to issue the credential um and hopefully it will all make sense uh when i type it out so agents and we have to do events on and then here we can say the connection connection let's see states oh sorry the connection event types and because we use touchscreen we need some typing for our properties so we add generic that says connection state changed event um here we have to define a function which will be called when any ever a credential record is updated so it can go from like different states to another state and then go to the state completed and then when it's completed we want to issue them a credential so right here first we will check if the event is actually from our out-of-band record so we'll do out of band id if it doesn't equal the id that we pass in that we got from the invitation we'll just simply return and if it does then we'll go to the payload again which contains the connection record then we'll do is ready which basically says if this connection is ready we will resolve this promise and then it will contain the payload dot connection record dot id so right here after creating the qr code we're going to wait and wait for a long time until the connection is completed so here with the connection listener contain agent and the ad events record id so after this line of code we will have a established connection that is ready to be to be issued something and here again we'll do agent credentials and we will offer a credential so in this again we have to define some properties which we can see is the connection id we can get the credential for the protocol version uh again because the wallet that we're going to use is no ap2 compliant we're going to use the v1 protocol [Music] and then we have the credential formats so in this credential format we will see indie uh because we're going to use an indie credential which will contain a credential definition id which is what we created before and it also contains some attributes now these attributes are actually just the fields of the credential what you want to give to someone so the name would be the same as in schema which would be my name and then the value would be well my name of course the name here would be h and here value would be 23 because that's how young i am for the connection id we need some typing so i just have to add the return type here okay now to quickly go over it again we created the schema we created the credential definition then we created a connection with a qr code to communicate with mobile agents we get the connection id and then we offer a credential and if i did not make any mistakes we have a very simple issuer service now um for this part i have to take my terminal to a very small font size i'm sorry it's very difficult to read it now but the qr codes how it's rendered in terminal it's quite big um so here i will start the project with ts node and karim will be the person interacting with the wallet and will hopefully show you the credential in the end so i'll start it uh here's some debug information to see that's actually doing something it just registered the credential definition of the schema and there's the big qr code um is now trying to scan it but qr codes are always difficult yeah okay so there's a connection and in this mess of logs it says that there is a credential issued let's see if i can yeah um let's see if we can show it actually yeah here it says offer message successfully created and we've offered a credential um um so on the other side it i have a little request i hope you can see it but it has the same information so it has the parent and the for the name value and the 23 for the h value which i can now accept or decline i just accepted it and it is now in my wallet i have a credential that is amazing so that was the it was the life coding example uh i hope everyone saw that it was relatively easy i think around like 60 lines of codes excluding the agent of course to just set up a whole issuer which is able to issue valid uh verifiable credentials and uh well for production of course you need some code on top of it but it shows that it's a fairly easy api and it's not a lot of complex codes and that's also of course our main goal with aoj is to just make it easy interoperable and everything that you want to use this was our presentation on the air's javascript ecosystem hopefully you've all learned something and would like to get started with ssi development and choose afga as your entry point for ssi development and any further questions we can answer right now i think i see there are some in the chat or not that you answer them cutting awesome i think you guys have done a great job of addressing all the questions as we've gone along here so now i would just say let's go ahead and open it up for maybe live q a so it looks like there's a question about how does it compare to other iii frameworks ssi so maybe you want to just address that one um sure um um yeah we're i am not super familiar with a lot of ssi frameworks outside of aries um but mainly the of course teemo but yeah right now we're mainly focused on the area specifications so i can't myself really give a concrete comparison to other frameworks we are definitely trying to move more towards being interoperable with them and creating less of a difference between them so for me at least it's very difficult to say what the comparison is maybe getting us something i mean i'm not familiar with other frameworks either but um i guess we follow the aries standards um so aries defines a lot of standards that are uh to do certain things so okay if we're gonna um issue a credential various messages are exchanged um how how which messages what what do those messages contain uh et cetera et cetera how is a credential structured um everybody can think of their own um their own uh structure but that wouldn't work because we're not interoperable um and so aries sort of is a i guess an umbrella of of these standards um and i guess other frameworks um uh implement their own standards um outside of the area's ecosystem um or in the in the ares ecosystem because they're kind of tightly coupled um a lot of people are relying on w3c verifiable credentials so that's a that's a it's a verifiable credentials standard using json lt defined by w2c which um well w3c obviously defines a lot of the standards we use every day so um uh i think that that that's the big difference we uh follow um mostly or we have followed mostly every standard um and are now moving towards w3st standards uh to also um uh incorporate those um and other other solutions have their own um have their own standards what i think is good about aries is that there are multiple implementations that all follow the same standards so at least these implementations are interoperable with each other uh instead of having one vendor somewhere creating a wallet that does things on on the way they they do things and it's not interoperable with any anyone else i hope that that answers the question um any more questions you have please raise your hand or do it by voice or in the chat um yeah i have a question for you just around the walls that you showed earlier if i saw that you know you had friendship wallet and then you had another wallet that was from germany yeah so is there any one that you prefer and if there's one that you prefer why is that and you know are both of them active and engaged with the aries community um so well i mean they are interoperable with our demo so um um yeah they are at forensic especially um they um um i think they built the majority of the net framework there is net framework um so that is built on top of of that i believe it's xamarin app um uh lizzie i'm not i'm not too sure what they what what it's uh what they used to build it but um definitely yeah they are interoperable also i guess which one that you prefer more comes to the looks and feels and the features they support um we also again these we have these aip these ares profiles that are [Music] that if everybody follows or implements the same compliant with the same profile then then it should be okay to then you should be interoperable um if uh but but but as with standards always not everybody uh does it exactly how it should should have been done so so sometimes you i um you know there's a little bit difference like hey okay when i'm issuing a credential it works and connections work but presenting a proof there's a little something went wrong error there um but i guess like while it's in the end if they support the same functionality it really comes to look and feel and what you prefer um as a key in the chat yeah question which is a good follow-up question that so there was a mention about aries bifold so can you talk a little bit about that as well definitely as someone i know well uh from the aries community he works a lot on bifold um so iris by fault is a i think little over almost one and a half years old i think um and it's a it's a it's an open source um maybe parent you can look for the link and post it in the chat um it's uh it's well bifold was sort of the old name now the repository is called aries mobile agent react native which also was in one of the slides and that is an open source wallet um completely open sourced built on afj so it uses fj um only relies on afj for for ssi stuff um and the cool thing is it's a it's a white label app so it it's not tied to any uh company itself but you can just clone it you can customize it and you can make your own wallet if you wanted to um and um we're trying or the the by fault community is trying to make it more customizable uh every day so um i believe now we have um it's possible to provide your own team so it would be a little bit stupid if everybody um uh using this project that they're have exactly the same the same wallet with exactly the same look and feel so um bifur can be used to um um [Music] you can provide a theme to buy full to customize a little bit give it your own uh colors and looks and feels um and i also also think it's very valuable to um [Music] look at bifold if you are planning to make your own um to start from scratch and make your own wallet um using react native because it's just a it's a good reference point i hope that answers the questions thank you akif for mentioning that reminding me okay one of the things i just want to touch base on here with everyone is just after we wrap up this nice workshop here anyone who wants to engage with the aries javascript team definitely go back on the discord and really get involved and i think they're always looking for new maintainers and people to help the project so if you're interested definitely reach out to them they posted their emails here and definitely go onto discord and if anybody wants to ask a specific question then rather than go through chat just feel free to raise your hand i'll take you off mute and you can ask your question directly and the other question i'll ask just both of you is are there any specific uh development tasks or other things from a maintainer standpoint that you'd be interested in getting some help with maybe you can just let that know to the community here so that they can maybe get engaged with that um yeah i mean there's always a lot of work to do um so we have been working um lately on getting into aip2 um which is which is easier said than done and there's quite a lot of work involved in that um so definitely developers who want to to to contribute but also as i mentioned earlier um we are trying to make this thing as is usable and and easy for for people outside of the ssi community so we have this documentation stuff um and uh we we really especially people like we're coming into this space who don't know everything and i think it's very valuable to to one have comments on the documentation that is there um but it's also i think it's also great if people who are learning and who are discovering ah this works like this this this this works like that um uh our our these people are also able to to contribute because they are able to uh to to digest and um this stuff and and and probably able to put it into simple terms which which becomes a bit more difficult if you um if you've been in this space for a while so definitely that i think documentation um but also what is the extension repository we have uh it's basically a place for anything that is not really um hardcore uh ssi itself but is something that is interesting to other people so so let's say this notification this push notification extension a lot of people building wallets mobile wallets probably won't push notifications um so also in that regard if you have a nice idea or you think that i would like to build this you can definitely contribute on that side i hope i'm answering the right question um um but yeah no more help is always welcome um regarding the framework itself we have a weekly call on on thursdays um so today there was one which if you're coming into this and you'd like to introduce yourself or or ask questions you can always do that i don't know the exact times in all the times it don't um but we can post a link to it to it later so yeah contributions are definitely welcome also from let's say you are used to work with uh hyperledger fabric for instance or something else or i don't know ethereum or something that's also interesting because again like we are now quite tightly coupled to indy but we'd like to expand that to other ledgers so again i hope that answered the question yeah it looks like there's a couple of new questions i think friends kind of jumped into chat to answer them but maybe if you want to just talk about them in the discussion as well yeah um yeah the first question was about versioning and that was mainly being done by timo on our team i don't think that we have a very [Music] specific methodology for versioning and for releases and release channels it's mainly been bundled in bundled braking changes so we don't like push braking changes all the time and bundle features so you know once you go one up you get a good amount of features um maybe timo can if he's here at least come post a chat yeah there we go exactly so that is uh a guide for updating the agents to if we break something in the storage then like a record changes then we need to update those records and this guide helps you going through the process and then uh let's see we also asked a question about uh knowing whether an issuer is a bad actor which is a very very very valid question [Music] and is how i understand it is primarily just trust based an issuer has a public did which i showed in the agent configuration and well you have to check if that public the id is actually registered by a uh an issuer that you trust so for example uh our government here in the netherlands they would register their public bid and they would be able to issue me a driver's license and then if my co-worker kareem would issue me they would use different public vids and therefore you would not trust the one that kareem issued me of course so just to go on on that a little bit like i think there's a there's there's quite a good comment on this it's it's not something that is solved by um by a a framework or whatever um i mean you're not gonna uh this is this is of course this is mainly i guess a blockchain community but you're not an identity you're not gonna get to a trustless scenario and that's fine um you do take away a bit of trust though um like as a holder if i receive the credential from an issuer it doesn't really matter if i trust that issue or yes or no i get a credential i can see what's inside it and if he gave me like if he said my name is baiden which is not like remember that's him and i'm covering um and then i'll just throw that credential away um it it does take away the um uh for a good part the uh the trust that is needed between the holder and the verifier like you don't have to trust this document now you can actually verify it cryptographically which is a good thing but then um and this is something you will i guess always have is there's always a trust relationship between a verifier and the insurer um i think we're covered it's it's shortly during the during the coding example but like one credential although it might contain the same information um so let's say the information that is typically my passport if it's issued by the by by in my case the dutch government um um customs will probably trust that credential um because they have the trust relationship there is there's a trust relationship between the customs so um and and the dutch government if i present the credential that was given to me by by their end customs will probably be like yeah i don't know um so you're not gonna you're not gonna [Music] make it completely stressless um and it's not needed but you take away uh a lot of the things um a lot of the issues where we have historically um short history just digital and digital identity used intermediate parties for so um for instance um um the google uh like the um the identity provider [Music] but also um uh i think i don't know i think everybody is in another country here but i mean in holland we have a um uh the government has a as a an online environment where we can log in if we have to do taxes and stuff like that you take that away um you don't need somebody else to prove who you are because the verifier can trust what you gave to them is actually legit um so the verifier just has to trust the issue right now and i hope that answers to the question john louis um if the issuer is is the subject of the credential there's no third party needed to trust that's i have to i i need some time to wrap my head around this it's a selfish credential now all right um well yeah but i can do that i could be an issuer i could issue a credential to myself but then um what is the difference between me saying to customs hey customs i'm going or showing them a signed credential that was signed by me um there is a indian no the light coding example wasn't based on a local indian outright it used the test network i believe yeah the test net from bc governing which is always quite stable and they clean it up sometimes maybe once per month or something but yeah you can with the in the sdk guides you can set up a local network relatively easily with docker as well but for this demo we didn't we just then we would also have the wallet to support the local ledger so we just chose for bc government because they always have quite quite stable networks that's an interesting comment i will again i'll have to some time to wrap my head around it but [Music] can anyone write this right schema to the bc network um i don't know what ah um yeah you can um you don't need any any uh special privileges for that you just need to set it up i believe with uh um with the genesis transaction right you did it in the example you can connect to it and um um and and then you are uh free to to to upload the schema just like he did and the credential definition as well yeah um by the way beer and somebody asked like or multiple people asked if we could put this uh code in a repo so they can follow along later i think that's a that's a good idea of course uh people of the ssi community or the aries community especially there is javascript community now teemo yeah um thank you teemo for that i forgot that okay anyone who have any other questions or coming up on the end of the time for this so please feel free to post your remaining questions in here and i do recommend that you get engaged with the community as well so after we wrap up this call you know it sounds like there's some follow-up here and anyone who's on hyperledger discord right now feel free to jump right into the aries channel and then look up aries javascript or aries bifold and you'll see both of those channels available in discord yeah definitely if not on discord feel free to send us an email definitely also for the people who are not uh planning to join the community which is which is fine if you wanna wanna wanna try this out for yourself definitely um try the demo again i will can you post the the url um it's just just it's a public it's a public website you can you can try it um at home it will guide you through downloading a wallet and you can run through through all the use cases just to get a to get a feel of it yeah indeed thank you all for listening for being here um one last call for questions i guess and if not then we'll wrap it up okay well gentlemen you did a wonderful job on this presentation i really appreciate it uh looks like we've come to the end and please go out to the hyperledger youtube channel if you'd like to watch any other portion of this video or any other videos on hyperledger that would be relevant to the aries network so have a great day everyone and we'll catch up on the next workshop that we go through take care thank you john thanks for being by
Up Next

Stanford Seminar: IPFS and the Future of the Permanent Web
@stanfordonline
103K views•2015-10-22

Torrent File Format & Bencoding: A Technical Deep Dive
@AsliEngineering
12.5K views•2022-08-08

Polymesh: A Purpose-Built Blockchain for Capital Markets | Hyperledger
@lfdecentralizedtrust
142 views•2024-03-22

Understanding Ethereum: A Comprehensive Beginner's Overview
@99Bitcoins
3.1M views•2018-06-26
Related Study Plans & Knowledge Roadmaps
Structured learning paths in Blockchain & Crypto























![[r3s] Blockchain 102 (Henryk Plötz)](https://i.ytimg.com/vi/MiLnDe_bX6Y/maxresdefault.jpg)















