 You're live Okay, everyone. Well, thank you very much for joining us for this great hyper ledger Aries JavaScript workshop and I'm really pleased to have Brenda and Corinne join us today to go through the work that they're doing in the hyper ledger 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 hyper ledger discord channel, I'm going to repost it right now and Then what 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'd also like to do is you know make sure that you know, we're live streaming this event on YouTube and it'll be available on the hyper ledger YouTube channel after the event and So at this point, I'd like to turn it over to Brenda and Corinne 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 Brenda and Karim and let them go full. Thanks Yeah, sure. Thank you, John and thank you to everybody who was joined in currently. There's there's quite some interest to this So cool to see I will try to keep an eye on the chat We're doing this presentation Because the first part will be a presentation and then after that we will try to We will then use something and we will do a variant will do a live coding session But John, please if if I'm missing any question or any questions Yeah, don't hesitate to jump in I'll monitor everything as well. And then if I see anything come through I'll definitely 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, yeah, once again, thank you all for joining It's good to see that there's so much interest in this Actually next to me But you can see that is there in Sleevef and I'm Karim steak member and we are both We work at animal solutions 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 Aries JavaScript ecosystem and so a Little bit Yeah, a little bit about us again, we're from animal solutions Our company is about two years old a little over two years. We're based in Utrecht and Netherlands and currently we Built as a nice solutions and we help other companies to build SSI solutions. So we also do a bit of consultancy Our main mission is to to to drive the adoption of self-serving identity So that's also One of the reasons that we're here From the beginning from the moment we started this company We've been mostly active in the Hyperledger Aries community and and more specifically We try to focus on Hyperledger for every friend of JavaScript Yeah, so I'm short very short agenda for today 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-serving identity and why we think we need that Then a short introduction on what Hyperledger Aries is per se or exactly is I Can imagine that a lot of you come from other hyperledger projects fabric so small or short introduction Think would be good Too much background noise. Yeah Maybe you can ask them Yeah, we're on it. Thank you So we'll shortly give an introduction on what hyperledger Aries is exactly Then we'll go into the JavaScript framework itself 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 with Aries framework JavaScript We'll go a bit over the documentation that this that was fairly new and there in the end will Do a live coding session because the whole point of this Presentation of the session workshop. However, you might call it is to to show you that SSI can actually be quite easy so We're both doing it so a short introduction on self-serving identity and I think Because it's it's basically a decentralized model for digital identity and I Hope so too and I Think it's good to to to show the need to self-serving identity by going over what What's not working? What the previous models of or how we how we have handled digital identity in the in the past so The most common model. I think everybody knows is the username password model or the side of the siloed model Here you for every interaction with or every relationship you maintain digitally So that could be with Twitter with Google with your bank Whatever you do something that's called a shared secret Which is a shared secret is just a basically a fancy word for something like a password so If I register at a certain website, for instance, I give them a little secret Usually a password and the next time I come around They will ask me for a secret. I Will give them that secret and based on that they trust that I am the same person who previously Registered with that secret Now there are a lot of outsides here. I think they are pretty known It requires us to Manage a lot of credentials You Preferably don't use the same password for everything Which sadly is the result of them So if you would do it the right way you would have to manage a lot of different credentials different passwords But it also and this is something that a lot of people Because I overlooked a lot is that it requires every organization To in a way be a security expert like you're giving them some sensitive information 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 web shop might not Okay, so the next step is another model the federated model Also known as the identity provider model or single sign-on I think most of you have also heard or seen or even used this yourselves here we put a Third party in between the interaction so it's the with with you basically have a free relationship now. You don't interact directly When it comes to authentication with the website you want to go to but You use identity provider for instance Google has Google login Facebook has Facebook login. I believe And they say, you know what? 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 So you authenticate with Google and if everything is alright Google will tell the website you're trying to interact with hey This indeed is in my case Korean Which is a it's it's a step forward because now we don't have to manage all these credentials We just have one or a few The identity provider again in this case in this example that's Google Has to handle the sensitive data. So it doesn't require everybody to be a security expert in that sense But it has major downsides as well We basically place a third party between every interaction we have so 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 They love to have the data and they're not always too ethical with it and it also has the downside that Now you're using basically one shared secret the 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 in the decentralized world the most important one is We have a intermediate party We're not we're not communicating beer to beer and that party potentially could say no, we don't like her anymore So if I'm trying to log in they just say no, so you give an external party the power to deny a access to a certain services, which is It's a bad thing obviously So There are more models. We won't go over all of them but this gives a somewhat of an overview I think of of how digital identity works and still works in those cases so Self-serving identity now. This is 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 an 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 And you decide who sees the passport and who doesn't So if I have to fly Usually customs will ask me for my passport. I can disclose that to them But it's not under control of another party like the previous models had So in a sense it also really gives back control Over your identity to you it gives you the control you decide what happens with your identity or your documents or credentials Like Both models partly also did it removes the need for managing loads of passwords. Just you don't need them And you remove the intermediate party So in in in this case as seen on the graphic Somebody gives you a credential again in the example. I just mentioned that's the government We call the government the issuer And you get the credential and you hold it So we call you the holder and if I go to customs and they verify the credential, so We call them you verify it now Very important thing is it's decentralized So we don't have vendor lock-in. It's not that we use some kind of service and if that service goes down We now are not able to identify ourselves to others it's decentralized so Whatever vendor party comes and goes we should be okay SSI or self-sovereign identity is based on open standards very important and the two most notable ones are decentralized identifiers, which are basically You can view them sort of as URLs that for entities for things So a URL you put into your browser takes you to a certain document online this identifies I think a person an animal, etc. and the most important one I think or the both very important but Very interesting second one is the first level credential, which is basically a Document the digital document which has all kinds of cryptographic magic in it Which makes it secure? In essence, there are I think three main things a verifiable credential can assure you off one is a cryptographically that is one is So as a verifier if I get a credential from a holder One thing I can be sure of is that it was actually issued by the issuer that I'm seeing That I'm That is that is written down in the in the in the credential. Secondly, I can be pretty sure that it's Issued to do the holder. So do the person that gives me the credential and lastly that that person didn't alter any information because you can imagine If somebody gives me a passport then they they alter their age now they have different rights so that is SSI in In very short, there's there's lots more to it that We are trying to move on so then What is hyperledger areas? Well, it's a This is a hyperledger meetup. So most of you know what hyperledger is I think But hyperledger areas is is a is a is the identity decentralized identity project under the whole hyperledger umbrella And 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 This is I sometimes not always but usually relies on a blockchain and The blockchain side of things is another hyperledger project which you see all the way to bottom That's hyperledger indie and we use that to To register some data that has to be immutable Now we have the hyperledger areas itself and hyperledger areas is basically a set of standards that define how software Should work or can can work and specifically software that is meant to handle all these Credentials, so it's it's really a set of standards. You can use and follow to create Hyperbler or SSI software because as you can imagine doing all these cryptographic calculations out of your head. It's a bit a bit to tedious 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 critical library also under the hyperledger umbrella and both hyperledger areas and Hyperledger indie rely on hyperledger Ursa for their crypto stuff So to yeah, yep it went To quickly summarize. So what is hyperledger areas itself? It is it's a it's a it's a it's a sweet for Creating self-sovereign identity agents and agents is if we have a Piece of software that does self-sovereign identity interactions for us. We call that an agent And it's important to note that it is not a technical implementation itself. It's a set of standards. So it's a set of RFCs a 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 that are listed below We have Irish class agent Python Which is a Which is a server that can be used to Which exposes a rest API you can call to perform self-sovereign identity Action, let's say There are various frameworks that are listed below that you can use to really create your own SSI solutions using hyperledger Yeah So one of the frame There Maybe just touch base on the questions that are posted in the chat real quick Just so we're kind of covering those as we go along and know we're gonna have Q&A at the end But maybe just touch base on the Yeah So I see one is hi how how does the verifier make sure the credentials are legit so that is For me a bit a bit a bit too much to explain because I'm not a cryptographic Genius, but there are all kinds of cryptographic Things in a in a in a verifiable credential So you usually all base it on signatures on cryptographic signatures and a verifier can check If a signature was made by a certain the ID In this case the issuer the ID so when the credentials issue 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 the signature would be invalid. I Hope that answers your question Let me see Multi-chain work in areas will go over that quickly later But in a sense we are trying to slowly implement other or Deintegrate with other trains than Indy because as mentioned oops In this slide hyperledger Indy is a is a identity specific blockchain But there are many other blockchains that can be used for the same Right now we are mainly Still tied to hyperledger Indy, 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 you have a few other ones Yeah, the recovery is is still credentials are the question here says Credentials are stored somewhere on the phone or wherever 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. There are a lot of projects that That are working on this that's right to solve this but indeed Right now I guess it the way to to get your credentials back is a bit silly which Is just to ask to get those those credentials reissued But there are various solutions in the making So zero knowledge proves I see a question on zero knowledge proves Oh, I'm beer and just answered it So, yeah, indeed zero knowledge proves for those who don't know is I could present the credential to or proof of Credential to a verifier for instance the verifier asked me am I older than 21? And zero knowledge proof is a way to basically prove that without disclosing my birthday or my age So they basically get a Boolean that says yes. No, and they Are able to trust this again cryptographic magic. I Hope that answers your question and We do have ace the credential format the in the credential format or unimpressed that that does support that Cool, I will now I think go on just for the sake of time Yeah, so those have ledger Aries now we are here obviously talk about how to let your Aries or Aries frame of JavaScript, which is again the JavaScript implementation of hyperledger Aries Oops, there we go 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 our mission which I mentioned previously at the beginning is we want to drive adoption of self-suffering identity like we Believe it's it's something that will really make the world a better place hate to burn, but there we go and So for for for self-suffering identity to really take off None as society developers have to be able to understand it Right now. It's really complex But if you think about it like identity isn't is everywhere every app used to some form of identity most websites do So it's everywhere and the developers of these websites are not It's not their their core their core business 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 to be able to use it. So they usually fall back to The other models we just discussed because they're just easier We think It has to be easy. We have to make self-suffering identity easy at least it's as easy as possible for it to really To really become something and JavaScript is Among or the most popular language out there, I think still according to a second slow The most popular one. So a lot of developers know it Or have worked with it. Maybe not work every day with it, but 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 use something they're used to Secondly is with Frameworks or solutions like react native Node.js you can use JavaScript on multiple platforms. So using react native You can write SSI solutions for for mobile apps so both Android and iOS, but you can use the same framework To make service I solution which I think is really valuable You don't have to learn three frameworks in order to to to get your SSI stuff done So that is something we We value a lot And that's that's in the end why we chose the JavaScript framework So This is a bit vague because we are using the term JavaScript of every frame of JavaScript and every JavaScript ecosystem Through another but It started with every frame of JavaScript and Framework and things around it have Gained quite some traction lately So it we have some other things outside of the framework itself that emerged As you can see in the figure on the 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 All that goodness Then we have two packages that are really platform-specific, so we have a react native package No 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 gonna make a react native app You would install the core package and the react native dependencies The same for node, but then you would obviously use the node package Down One one step down in red we have the every framework JavaScript extensions It's another repository and that basically contains Stuff that would help us To do common common things But not so common that they belong in the core of the framework So for instance, if you want to have the rest API around your agent We have 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 notifications support. There is an extension for that Then we have Aries mobile agent react native in I guess pink or purple and all Which is basically a it's another it's again another repository. It's an it's an open source Agent that react native agent that is built on top of every framework JavaScript So it's a wide label app. So you could You could just clone it put your own theme in it and Give it give it your own feel But you can also use it obviously as a reference if you're creating your own your own mobile agents based on marriage from your JavaScript And last but not least documentation Which is quite important? We have noticed that we'll go over that a bit later So, okay, that's all good and nice. That was a little introduction on on the ecosystem But let's see it in action. So what can we actually do with this stuff? Irons can help me So we have or one of my Excuse me lovely colleagues Made a demo which You can if you want to follow along you can fix a bit of time because you need to download the wallet but It's basically it's a website that you can use to Get a credential issue to you and then presented credential to others It's quite parents is trying to Fix some technical issues here because we're trying to stream My phone as well It's not working Try it again. Anyway Thank you for the brilliant demo coming Yeah, it's it's I think it's it's a very nice demo. It's a you can choose multiple use cases So you can choose a role All right, you can choose a character and a character has a little bit of a story behind it So one is a student one just the okay, 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 So, okay, the streaming of my phone to the screen doesn't work. So forgive us please, but So this is the demo you can visit it yourself or do it later is demo dot animal dot ID and First thing it would tell us is to To run through the setup which basically means to do this you need that you need a phone With a wallet on it and now there are two wallets here They're both not made by us. So when one is intrinsic Probably a familiar company and the other is Lizzie wallet, which is made by a German company You can use either of those doesn't really matter So I will go for Lizzie In this case, I present you with a QR code If that's sent you to do the store if you want to download it. I already have it So I wouldn't do that and now it's as you take a character And I will take young for this which is a student and there is a little I don't know a little storyline behind it So the first thing we need is a credential It will 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 in your Age for instance, let me see So the first thing we need to do is create a Because it's great to bear. I have my phone here The website runs a server with an agent and we need to create a connection I already was connected. So But scanning that QR code basically creates a connection between my phone and the other Now going on It's a great we are connected so it will tell us I will Give you a starter credential Let me see So in my wallet I received a credential Which is really hard to see for you probably but believe me I received credential and I can now So it first gave me a notification. Hey, this person wanted to send sent you a credential and I accept the credential Don't know why it is Keeps hanging here Let's run through this quickly again Yeah Okay, let's say Joyce for now. I'm gonna scan the QR code again for the connection great We are connected. I have a connection with animal And okay now Here there are two I have two level modifications saying hey I want to give you this credential these credentials in this case because it's another use case that gives us to 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 both in my wallet now I can go on to The next step and now it basically gives me a few options So a few routes in this in this in this example And it also lists You'll be asked for this credential this credential this credential in this case. I will just take the conference Example gives me a little overview. You're connecting with this sexual Company or organization You'll need to present this and in in 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 party. So we'll need to set up a connection There we go, so it needs some information blah blah blah they will now ask For that information again, I have a little little notification here It asked me It's a shame. I cannot show this to you but On screen But basically it's it's asking it's telling me. Okay. Um this teccon 2022 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 that just appeared here So The first step was the the issuer Now they just verified us And now they this This conference becomes the issuer of another pass and again I have a little Notification and I can accept it Now There are more and more and more way more steps in this demo. We could do between six times. I will stop here No, we go back to the presentation there um But as you can see, I hope this is gave you a sort of An introduction on how this looks so In this case the app was not built because we're using a third party app This was not built with air streamer javascript, but It could have Could have been an app that was built with this framework Um, and the the the website you saw um, uh, ran the framework. So it was built with no javas um So baron will know, uh 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 The current state of the framework um and and look, uh, give you a A slight look of the roadmap ahead Um, so baron Yes So with the aries ecosystem and every uh framework we 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 we can communicate with other agents There are many many rfcs Um, now there are a lot of standards. They have different versions different Now different versions different implementations and we Uh 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 Uh compliant with aip 1.0, which is the aries interoper profile Which is right here So this basically just defines the 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 Aries agent and a aries from a javascript agent That if they both comply to the aip one spec they can talk to each other and they can exchange information without Being the exact same framework So i'll talk about the features like in context of aip So right now afj is fully compliant with the aip one with ospec Which means it supports titcom p1, which is a communication Specification based on decentralized identifiers We are we also support the issuance of credential and the proof presentation p1 This just means what you just saw in a demo that someone Gives you a based credential like animo And then tech con wants to get this information aka present the 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 agents or tech con and that way you get a channel in which you can talk to each other We do already support some features of aip 2.0 Which includes Issue credential v2 so that's the improved version of it. This allows for a lot more Credential formats, but we currently only support the any credential format, which is the same used in In the or in the issue credential v1 protocol We're working hard with everyone in the afj community to support The jason 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 and that is established In order to Fully test the aip specs. So the one of the on the tool of though We created or as in the areas community created the areas agent 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 spec and understand it in the different way implemented incorrectly and then They're actually not completely following the 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 reignitive environment and the nojess environment This would mean that you can create a mobile agent like by fold Or you can create a restful api like we used in the demo before That uses that is running in a nojess environment. This really makes us Allows us to capture the entire ecosystem of software While still containing in like one code base and keeping it very consistent between the different implementations So in the future As of like today and a couple weeks before already working on it Now we're working on issue credential fee to like I said before With ld proofs and bbs plus signatures. This is something that will Um greatly improve the interoperability between non areas agents This is also something that we're working towards to not only be interoperable with other areas agents But with any kind of self sovereign identity agents 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 Did comfy too is also required for this. This is a I'm not too sure on the details, but this is just the improved version of the comfy one with some benefits and generalization Outside of the api 2.0 spec. We also want to just improve the framework. Uh, this includes multi tenancy So if you want to for example create a sass platform, so software as a service then you could have 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 um, we also found that the A fj is starting to become quite bulky in terms of Dependencies that we use for example for the bbs plus credentials. We have a dependency for indie. We have a separate dependency and we noticed 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 like okay. I want to support bbs and ld proofs But I don't want indy because they're not because I don't I don't want to have Any specific reason what you want um So this book allows a bit more plug and play Framework and we're also looking towards integrating with more blockchains This would include like the check network for example, what could you mention before and I believe some party is working on fabric support So that will 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 road map to just make it At support for as many as possible so we could you know Be interupt again with even more standards. That's kind of the goal here um That is kind of the the most you know the big features on the road map What is also More on the road map is to improve again the usability of the framework and with that of course Comes the documentation so A couple weeks ago. We decided to get started on that and now Karim will Go back and show you my the documentation website that we've created Well, I mean the documentation website I will Just a screenshot here. The url is Is there as a subtitle? Yeah, so one of the things when we Who were introduced or when we started? With with the whole areas ecosystem one thing we Notice immediately it is it is one very complex like these rfcs if you're not used to them 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 The frameworks so every framework obviously is built a little differently and Yeah, one of the things we struggled with a lot is that There was very few no no documentation at all or updated or Which makes it very difficult for people It started basically And well again the whole point Or our mission is to to to drive adoption in this ecosystem. So Definitely solid documentation Will help with that We have also seen from our community that has grown a lot lately That that they struggle with this. You have to drive to through the code, which is not always The best way Or to get started really fast. So Indeed as bern mentioned a few weeks ago. We We started writing documentation. So we Recently I think yesterday this website came online Which is basically it tries to To be a sort of one-stop shop for for any documentation you might need on Not just a framework with anything inside of the inside of the ecosystem it is Really new really incomplete. So we're still it's still under heavy development So don't expect too much But the whole idea behind this documentation Is not to just give, you know API talks not like, okay, here you have, you know, this function and it Wants these these parameters and these arguments. No, we want to really Put it in a more of a hands-on tutorial way. So Here we have a little screenshot of issue credential Issue credential is a use case that a lot of people making ssi solutions once it's Something that is quite common in 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 with obviously an explanation on what they do But guiding you through the most common practices and and we hope to to extend this Over time with also more advanced use cases, etc, etc So really more in a in a tutorial Issue way don't please don't look at the callers here. They're terrible. We're working on them but Now the callers indicates the different sides because we In an issue credential Interaction you obviously have the issue the issuer and the holder So the issuer sends a credential or issues a credential to the holder So they both need a piece of software and that's why these Co-blocks are colored differently To indicate the roles But yeah, again, this is Not perfect at all 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 As we have been working with this framework for for about three three years now 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 the presentation side of things parents will now Yeah, go on to the last coding session. Um, so he will Demonstrate How sort of easy Hopefully easy. Uh, it is to create an issuer right in this case. Yeah, I'll create an issuer Can you thank you So we're gonna create an issuer And it 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 Which will try our best So There we go Stuff stuff stuff everything up correctly and Yes, we can go 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 for A code which is not really that important. It contains the genesis transaction of the ledger that we want to connect to We're setting the logs on because we want to you know, show a bit more of what the framework is doing There's an agent label. So that's what other people can see When they connect with your agents, 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 and it's done Um, this is the ledger that we're connecting with. This is our public dit seat on this on this seat is our public dit based You can use it. It does not work. So There's no secrecy here And we're using an Angro 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't connect with it can connect with it And here we're just registering some outbound and inbound transports. This is our Uh way of communicating so first I'm going to add some dependencies Uh, which is the aries frame. I hope it's uh visible for everyone. It's not too small Um, if so then please mention it and I'll increase my font size Let's get the room red Okay, thank you Um, so I added the core dependency and a note dependency because we're in a note environment right now And I will also add the qr code terminal dependency This is basically just printed the qr code in the terminal. It's a very verbose name um So just pulling the dependencies in Um, as you can see there 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 pull that many dependencies in And that it can take a lot quicker and that the Final server package is smaller Um, we also have to add the types dependency because we do everything type script Every string with javascript is also written in type script Uh Which is something that we forgot to mention um So right here in the index we will pull in the get agents 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 agents, 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 agents 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 so wait agents dot Uh ledger because 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 age a very standard identity credential Yeah, uh, the name of our schema will be hyper ledger issuer demo schema Uh, it's not really important what it is right now um So now that we have created our schema, we have to create a credential definition which, um 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 this 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 So here we'll have the credential definition and 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 verification for this credential definition um After this we have to create the invitation Which will be an out of band records and the invitation And it will be done on agent dot ob which stands for out of band, 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 It's not a ip 2 compliant. So we have to use the old connections protocol And that's why we also have a separate invitation here um so in order to pass the Invitation to the mobile agent we have to get the url from it because we can send urls them To other agents and from this url. We have to create a qr code So we will do invitation Dot to url And the domain doesn't really matter here. So I will just use htps.example Exxon dot org And now we have a url which contains our invitation um 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 I'll just have to Yes, I'll create a function which is connection listener And it will take an agent And an id which will be the out of 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, I'm hopefully it will all make sense 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 um And because we use that we need some typing for our Uh properties so we have generic that says Connection states changed event Um Here we have to define a function which will be called whenever a credential record Uh is updated So it can go from like different states to another states and then go to the state completed and then when it's completed We want to issue them a credential Um, 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 which is simply return And if it does then we'll go To the payload again, which contains the connection record Then we'll do uh is Ready which basically says, um 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 as you're creating the qr code, we're gonna wait I'm gonna wait for a long time until the connection is completed So here with the connection listener contain agent and out of bands record dot id So after this line of code, we will have a established connection that is ready to be Issued something and here again for the 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 a credential or the protocol version Again because the wallet that we're going to use is not ap2 compliant. We're going to use the v1 protocol And then we have to credential formats so in this credential formats We will see indy Because we're going to use an indy credential Uh, which will contain a credential definition id Which is what we created before And it also contains some attributes These attributes are actually just the fields of the credential what you want to give to someone Um, so the name would be the same as in the 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 Uh For the connection id we need some typing. So I just have to have a 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 the qr codes to communicate with the mobile agent we, um 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 For this part I have to take my terminal to a very small phone size I'm sorry. It's very difficult to read it now, but the qr codes How is rendered in a terminal? It's quite big um So here I will start the project with uh t as notes and kareem will be the person interacting with the wallet And we'll 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 in the schema and there's the big qr codes Um, kareem is now trying to scam 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 I can show it actually. Yeah Here it says offer message successfully created and we've offered a credential um And so on the other side, I have a little request. I hope you can see it, but it has the same information So it has the bearing from the for the name value and the 23 for the h value Which I can now accept or decline um I just accepted it and it is now in my wallet. I have a credential So that is amazing. So That was the That was the live 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 Uh, 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's it shows that it's a fairly easy API and it's not all of complex codes And it is also of course our main goal with a of j's to just make it easy interoperable And everything that you want to use This was uh our presentation On the aries javascript ecosystem Hopefully you have all learned something and Would like to get started with fsi development and choose afj as your entry point um For fsi development and any further questions we can answer right now. I think I see there are some in the chat Or not that you answered i'm kidding 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 and a so it looks like There's a question about how does it compare to other? II frameworks ssi So maybe you want to just address that one? Um, sure Yeah, we're I am a little super familiar with a lot of ssi frameworks outside of aries um but mainly the Of course timo but Yeah, right now we're mainly focused on the aries specification. So I can't myself really give a concrete Comparison to other frameworks. We are definitely trying to more move to 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'm not familiar with other frameworks either, but I guess we follow the aries standards So aries defines a lot of standards that are To do certain things. Okay, if we're going to issue a credential various messages are exchanged How how which messages what what what do those messages contain etc. Etc. How is a credential structured? Everybody can think of their own their own 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 And I guess other frameworks Uh, implement their own standards and outside of the aries ecosystem Um, or in the in the aries ecosystem because they're kind of tightly coupled Um, a lot of people are relying on w 3c credential verifiable credentials. So that's a that's a it's a verifiable credential standard using uh, today's not defined by w 2c, which Well, w 3c obviously defined a lot of the the standards we use every day um, so I think That that that's the big difference. We follow Mostly or we have followed mostly every standards And are now moving towards w 3c standards to also incorporate those And other other solutions have their own 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 Instead of having one vendor somewhere Creating a wallet that does things on on on the way they they they do things and it's not Interoperable with with any anyone else. Um I hope that that answers the question Any more questions? Yeah, please raise your hand or do it by voice or chat um Yeah, I have a question for you just around the walls that you showed earlier I saw that you know, you had friends with 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 frinsic, especially. Um, they um, um I think they built the majority of the dot net framework. There is dot net framework Um, so that is built on top of of that. I believe it's xamarin app Um, uh, lisi. I'm not I'm not too sure what they what what it's What they used to build it, but um, 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 We also again, because we have these aip these aries Interop profiles that are That if everybody follows or implements the same It's 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 Does it exactly how it should should should have been done. So so sometimes you You know, there's a little difference like hey, okay, uh, when I'm issuing a credential it works and connections work But presenting a proof There's a little uh, 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 at what you prefer um, as Which is a good follow-up question that so there was mention about aries bifold So can you talk a little bit about that as well? Definitely so akif is Someone I know well from the aries community. He works a lot on bifold. Um, so every bifold is a I think a little over almost one and a half years old. I think And it's uh, it's uh, it's an open source. Um, maybe there and you can look for the link and post in the chat it's uh, um, it's well bifold was sort of the old name another request very is called, um aries Mobile agent react native, um, which also was in one of the slides and that is an open source wallet Um completely open source Built on afj. So it uses afj 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 company itself, but it You can just clone it you can customize it and you can make your own wallet if you wanted to And um, we're trying or the the bifold community is trying to make it Um, more customizable every day. So, um, I believe now we have um It's it's possible to provide your own team So it would be a little bit stupid if everybody Using this project that they're had exactly the same the same wallet with exactly the same look and feel so, um bifold can be used to um You can provide a team to bifold to customize a little bit to give it your own colors and looks and feels and I also also think it's very valuable to um Look at bifold if you are planning to make your own, um to start from scratch and make your own wallet Using react native because it's just a it's a good reference point Um, 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 ari's 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 on the discord and if anybody wants to ask a specific question Then uh, rather than go through chat. Just feel free to at 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 So we have been working lately on getting into afp2 Which is which is easier said than done. There's quite a lot of work involved in that So definitely developers who want to to to contribute but also as I mentioned earlier We are trying to make this thing as As 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 That who are coming into this space who don't know everything Um, I think it's very valuable to to one have comments on the documentation that is there Um, but it's also, uh, I think it's also great if people who are learning And who are discovering this works like this this this this works like that um, uh are are These people are also able to to contribute because they are able to 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 the extension repository we have It's basically a place for anything that is not really um hardcore SSI itself But is 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 want push notification 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 uh 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 um a weekly call on Um on uh 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 and all the time zones. Um, but we can post a link to it. Uh, do it later Um, so yeah contributions are definitely welcome. Um, uh, also from let's say You are used to work with, uh Hypometric fabric for instance or or something else or or I don't know ethereum or something That's also interesting because again, like you're now quite tightly coupled to indy that we'd like to expand that um to other letters so Again, I hope that answered the question Yeah, looks like there's a couple of new questions I think for rents kind of jumped into chat to answer them But hey if you want to just talk about them in the discussion as well Yeah, um, yeah the first question was about the versioning and Um, that was mainly being done by uh, Timo On our team. Um, I don't think that we have a very Specific methodology for versioning and for releases and release channels Uh, it's mainly been bundled in Bundled breaking changes. So we don't like push breaking changes all the time. Um and bundle features. So You know once you go one up you get a good amount of features Maybe Timo can if he's here at least can post a chat. Yeah, there we go So that is a guide for updating the agents to If we break something in the storage then like a records changes then we need to update those records and this guide helps you going through the process Um, and then uh, let's see Sean we also asked a question about uh, knowing whether an issuer is a bad actor Which is a very very very valid question. Um, and is, um, how I understand it is primarily just trust-based An issuer has a public DID which I showed in the agent configuration and uh Well, you have to check if that public DID 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 DID and they would be able to issue me a driver's license And then if my co-worker Karim would issue me They would use different public DIDs and therefore you would not trust the one that Karim issued me, of course Yeah So just just to to go on on that a little bit like I think there's there's there's quite a good comment on this It's it's not something that is solved by By a a framework or whatever. Um, I mean you're not gonna This is this is of course, this is mainly I guess a blockchain community But you're not an identity you're not going to 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 a credential from an issuer Doesn't really matter if I trust that issuer. 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 Beaton, which is not like remember That's him and I'm Karim Um, and I'll just throw that credential away um, it does is take away the Um, for a good part the the trust that is needed between the holder and the verifier Like you don't have to trust this document. No, 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 issuer um I think Beard covered it it shortly during the during the coding example But like one credential although it might contain the same information So let's say the information that is typically in a passport If it's issued by the by in my case the Dutch the Dutch government Customs will probably trust that credential Because they have the trust relationship. There's there's a trust relationship between the customs. So And and the Dutch government if I present the credential that was given to me by by bearing Customs will probably be like. Yeah, I don't know So you're not gonna you're not gonna Make it completely trustless And it's not needed but you take away a lot of the things A lot of the issues where we have historically In the short history just digital in digital identity Used intermediate parties for so, um, for instance The google Like the the identity provider But also, um Everybody is in another country here, but I mean in Holland we have a The government has a as an online environment where we can log in if we have to do taxes and stuff like that you take that away You don't need somebody else to prove who you are because the verifier can trust what you gave to them Is actually legit So the verifier just has to trust the issue right now, and I hope that answers the question John Louie Is the issuer is is the subject of the credential There's no third party Needed to trust that's I have to I need some time to wrap my head around this It's a self-issued credential now Well, yeah, but I can do that. I could be an issuer. I could issue a credential to myself, but then What is the difference between me saying to customs take customs I'm cream or showing them a side credential that was signed by me There's a Indian No, the life coding example wasn't based on a local Indian outright. We used a test network, I believe Yeah, the test net from basic over in 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 guys, you can set up a local network relatively easily with Booker as well But for this demo we we didn't we just Then we would also have the wallet to Support the local ledger. So we just chose for basic over in Because they always have quite quite stable networks. That's an interesting comment. I will Again, I'll have to Need some time to wrap my head around it, but Can anyone write this right schema to the BC network? Um, I don't know what the Ah, yeah, you can You don't need any any Special privileges for that. You just need to set it up. I believe with With the Genesis transaction, right? You did it in the example you can connect to it and And then you are free to to to upload the schema just like he did And the credential definition as well Yeah, um, by the way there and somebody asked like or multiple people asked if we could put this Code in a repo so they can follow along later. I think that's a that's a good idea demo, of course demo People of the SSI community or the areas community, especially the areas from the JavaScript community now demo. Yeah Thank you demo for that Okay, anyone 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 hyper ledger discord right now Feel free to jump right into the areas channel and then look up areas javascript or areas by fold And you'll see both of those channels available on discord. Yeah, definitely If not on discord, feel free to send us an email And I definitely also for the people who are not planning to join The community which is which is fine If you want to want to when I try this out for yourself, definitely try the the demo again, I will Can you post the the URL? It's just it's a public it's a public website. You can you can try it at home it will Guide you through download a wallet and you can run through Through all the use cases just To get to get a feel of it. Yeah, indeed. Thank you all for listening for being here 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 Looks like we've come to the end and please go out to the hyper ledger youtube channel If you'd like to watch any other portion of this Video or any other videos on hyper ledger that would be relevant to the areas 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