 All right, and Nico, let me just make sure the live stream turns on. Cool, all right. So Nico, we can start whenever you want. I am gonna also do a backup recording. And when you wanna start, we're good to go. We are live streaming on YouTube. The YouTube link has been shared in chat in case anybody wants to share it with a colleague. And I will post the links that I shared a little while ago, because we have more folks joining. Links to the Firefly Wiki, Fireflies GitHub, link to our Discord if you wanna keep the conversation going after the workshop. Nico, it is now your show. You can start whenever you want. Thanks. Thank you to Koran for inviting me here today. I don't know if you wanted to open it up and just say a few words here before we start the presentation. I know it looks like a few more people are joining as well, but I just wanted to give you an opportunity to, you had anything to say at the beginning here. Sure, Nico. So first of all, welcome to Hippolygia Chilander community. So we are organizing this event which is getting started with Firefly. And I am organizing this community since 2019. I have organized various events of Hippolygia. So looking forward to our first virtual event for this year. And it's great to have Nico for the Firefly. And let's join with everyone. Thank you so much. All right, thank you so much for organizing this and inviting me here today. I'm excited to share about Firefly and give a little introduction to it and then kind of show it in action as well. So with that, we will jump right in. My name is Nico Geier. I'm a senior software engineer here at Kaleido and I'm also a maintainer of Hippolygia Firefly and the open source community lead as well. So today we're going to talk about Hippolygia Firefly. And to do that, I want to first ask the question about what do you need to build a Web3 app? A lot of us tend to, developer, I'm a developer. So I tend to usually underestimate the amount of work required to do a certain thing, to build a certain thing. So I want to kind of break down the problem. What do we need to build a Web3 app? Then I want to look at Hippolygia Firefly and how is building a Web3 app better with it? And then lastly, we're going to go hands-on and I'm actually going to show you an app that I wrote and we're going to talk through what it does and show you how easy it is to build an app that works with the demo that we're going to walk through uses a public blockchain and it's going to do transfers of both fungible and non-fungible tokens. So we'll look at that in just a little bit. Okay, so let's jump right in. What do you need to build a Web3 app? Let's say, for example, that we wanted to build a game and this is just a hypothetical. This could be many different types of applications. It could be enterprise, track and trace. It could be a variety of things but we'll say hypothetically we're building a game. The game needs some sort of economy with the currency that's backed by blockchain. Our game needs to have a decentralized marketplace that allows end users to buy and sell items that are in the game. They need to have full custody of their assets so they can take those in-game assets, things that they earn or win and take them to other marketplaces and sell them there as well. It would also be really cool to have the ability to exchange in-game currency for fiat in either direction so that you could actually, you could actually earn money by playing if you play the game a lot, that sort of thing. So these are just some hypothetical requirements of a Web3 app. So with that in mind, what do we need to build all of this? Well, let's start at the, we're gonna build a stack diagram here and let's start down at the bottom of the stack. So obviously the first thing that comes to mind is we need some sort of blockchain node. This could be a public chain. Could be a private chain. There's a lot of different decisions into where does the chain run? Who has access to it? Who runs it? How many nodes do we need to run? Do we run on an existing chain or do we create our own? That's, there's a lot of decisions that need to be made there. But the good news is there are lots of open source projects that are kind of down here at this bottom layer of our stack diagram. So we need a blockchain node. Well, that's obviously not enough in and of itself. Not every piece of data needs to go or even should go on the blockchain node itself. So for instance, if you have an in-game asset, say it's a skin or a 3D model or something like that, those things are probably too large to put on the blockchain itself. And so oftentimes what we do is we create, we talk about the concept of pinning something to the blockchain. So we hash the data and then we put the hash of the data on the blockchain, but we keep the actual payload, the actual asset off of the blockchain. So we're gonna have this other column in our stack diagram here, which is our off-chain side of the diagram. So for that, we'd probably wanna use something like IPFS, something that's again, distributed, immutable, has a lot of attributes of blockchain, but is different and is optimized for a different use case like file storage and distribution and handling much larger payloads. Okay, so down here, we kind of got the bottom of our stack diagram moving on. Yeah, so there's lots of great open source projects that do these things. Now we're gonna start writing our own code. We probably need some sort of token smart contract. This may need to be customized to our particular use case. We're gonna need some code to manage transactions to that smart contract. And then we need code that's listening for events that are emitted by it as well, for when tokens get transferred from wallet to wallet. Over on the off-chain side, we're gonna need some code to actually access all of those assets and know how to get them, how to download them, where to put them, that sort of thing. We're gonna need some code that's gonna manage all of our signing keys. We're gonna need some code that is going to keep track of the balances of certain wallets. So we're getting events off of the chain as transfers are happening, but we have to write code that's gonna keep track of who owns what token and how many tokens they have. Now there's gonna be a layer that sits across both of these that's going to correlate all of the data that's on the chain with the data that's off the chain, the payload, whether that's the images or videos or these large files that are off of the blockchain itself. Now in this app, in this game, in this ecosystem, a lot of it is public, a lot of it's open, but there's probably gonna be some amount of data that is private, is sensitive, user-specific data. And so we need to have some code that also manages what things should be shared within our ecosystem and what things should be kept private or only selectively or optionally shared. Now we start getting to the good stuff, the actual business logic, if you will, or the backend API. This is where the actual logic of the game actually sits. It's way up here at the top of the stack diagram. And then lastly, we're gonna need our front end, whether that's a web UI or a mobile app or a native app of some sort that actually is the thing that the user log into and get to experience all of this stuff. So you can see really there's a lot that goes in between that foundational layer and then the very top layer, which is the stuff that our business, our company actually cares about, which is getting users engaged, having a good user experience and those sorts of things. And so this is a lot for us to build. Like I said, as a developer, I tend to underestimate the amount of work that goes into building a certain thing and a Web 3 app is no different. Where Firefly comes in, as Firefly says, hey, just about every Web 3 app needs this, just about all of the pieces in this stack. So wouldn't it be great if there was a platform, especially an open source platform, that standardized and had all of these pieces in the box already and you could just run it and then build your app against its API and it would take care of all of these pieces that sit in the middle. And so that's exactly what Firefly does. Firefly takes care of the entire middle of this stack and then it lets you focus on the top layers, your user experience and your business logic, which are the things that really drive value for your business. And Firefly handles the rest of it. And so we've seen now on the first diagram, we had open source at the very bottom and the rest of it was stuff you have to write or build yourself. And now we've moved the amount of open source software up that we're using to most of the stack, which is really great. Now this absolutely does not prevent you from coming down here and say this token smart contract like, hey, I have my own contract. I don't wanna use Firefly's built-in contracts. That's totally fine. You can absolutely use your own custom contract. In fact, that's what we're gonna demo today. There's nothing stopping you from going down to the lower levels and customizing things as you need or using your own contract and that sort of stuff. So that's kind of where Firefly sits. This really to me as a developer captures the value of it that shows like, oh, it's handling all of these responsibilities that I don't have to go build those things myself. And when we get to the demo in a little bit, we'll see that in action. We'll see how little code I had to write in order to do some cool things. So where does Firefly sit in terms of the, kind of my organization and my business, not just looking at the text stack diagram of what is Firefly, but where does Firefly fit? Well, Firefly is, we often describe it as a Web3 gateway. It's sort of designed to be your company's one-stop shop for everything blockchain. So you can install Firefly within your organization over here and it can be sort of your gateway to the Web3 world. We call it a Web3 gateway. Whether that is a private blockchain running in, you know, a consortium of organizations that have agreed to collaborate in a consortium network and perform business transactions, whether it's transferring value or data or both within a private network, it could be a public layer one or layer two chain, could be an exchange or DeFi apps or whatever it is. Firefly is, as we'll see as we go through, it's very pluggable and extensible. And so it is designed to be the thing that your company can run and connect to all of these things. Firefly has a lot of great features, a lot of these boil down to giving you the ability to write apps flows and build digital assets. So there are super easy to use APIs. And the idea is that we provide technologies that Web2 developers are already familiar with such as REST APIs and WebSockets and make those easy to use and basically provide ways that feel very familiar to developers already to build Web3 apps using technologies they're already familiar with Web2. So a lot of great things in here. Firefly Core is kind of the orchestration engine of all of Firefly. So Firefly, it is a microservice architecture and there are many different services that run within it, but Firefly Core is the thing that connects all of them together and orchestrates transactions across both the blockchain both shared storage or private data exchange as well within a consortium network if that's how you're running Firefly. There's lots of great tools around Firefly as well such as SDKs command line tool that makes it really easy to get up and running on your machine which is kind of what I've used to bootstrap the demo that we'll look at here in a little bit. It is designed as a cloud native application so it's designed to be run in containers in Kubernetes in the cloud or in your own data center and is ready to go with things like Prometheus metrics and a bunch of stuff that make operational work around it really great. So lots of cool features in there. I'm not gonna dig into every single box there. I wanna talk a little bit more about how Firefly works. So Firefly can operate in two different modes. One is called gateway mode and one is called multi-party mode. And I'll preface this by saying, I think just as talks that the maintainers have been having recently, right now there's a pretty hard divide between gateway mode and multi-party mode and it's somewhat arbitrary. So I imagine a future version of Firefly I don't know what version number that will be but we'll sort of blur the line between these two and you'll be able to kind of pick and choose features from either one. So with that said, gateway mode today is you can think of it like, hey, I want to, you know, I have my company and I wanna write an app that my end users are gonna use and I need to connect to either a public chain or a private chain. And I don't really care about anybody else that may or may not be running Firefly. I just need a way to access a blockchain somewhere. That's gateway mode. It's very straightforward, allows you to connect to a chain. There are today, there are blockchain connectors for Ethereum and for fabric networks and that Ethereum connector works with a wide variety of different types of chains that are Ethereum compatible. And like I said, Firefly has a pluggable architecture. So I know the community is working on or exploring several other blockchain connectors including Tezos and there have been some other ones that have been discussed as well. So the types of chains that Firefly can connect to is hopefully a thing that will grow over time as well. So as a business, you can think of this as Firefly, I install as a piece of software in my network and it's sort of the API gateway, if you will, to the web through world. And I could use it as a control point within my organization that, you know, anything that needs to access the blockchain goes through Firefly, anything that comes from the web world to my apps goes through the blockchain as well. Just a quick note, if you wouldn't mind muting your mic if you're not speaking, that would be great. Thank you. Just getting just a little bit of noise from somebody's mic there. All right, let's talk a little bit about multi-party mode. So multi-party mode was the default and it was the only mode that was available when Firefly first launched. And the original use case that Firefly tackled was the ability to have what we call these multi-party networks. And so as an example, you might have several different organizations all in the same, in the same business or in the same, sorry, in the same, say like they're all insurance companies or something like that. And these insurance companies, they need to work together because if it's a car insurance company, for example, a client from company A gets into a wreck with a client from company B, well, they need to exchange data, they need to agree on the facts of what happened, who was at fault, they need to make sure that they both agree on all of those things. And then they may also need to transfer some payment from one to the other for whoever was at fault to pay the other organization and the other client. And so these organizations are competitors though, and they inherently don't trust each other 100%. And so, but they need to work together because that is the nature of their business. And so oftentimes what we see is a group of these companies, a group of these organizations come together in a consortium and they agree, hey, together, we're going to use blockchain to integrate with one another. And the blockchain is going to be the neutral zone in between all of our different organizations. And we will all run an app that talks to the blockchain and we'll use the blockchain to exchange data. And the blockchain will be the single source of truth of here's what happened, here's the data that we have exchanged and what we have agreed on and nobody can tamper with that. And all of the other organizations can hold them accountable. So in this case, each organization can run a Firefly node and they can use the blockchain to exchange data, to exchange value and perform their business transactions. And so some of the cool things about the multi-party features is there's a great messaging feature that's built in that's really fundamental to Firefly, the ability to share either both public broadcast messages that is data that's shared with all the members of the consortium, but you can also share data privately as well. So maybe you wouldn't, for example, you wouldn't want to share like your, the personal contact information for your client with everyone in the network, but maybe the other organization that you're working with needs to know it so they know they can match. Yes, this is the person that we're talking about. And we've both agreed that we're both talking about the same person. So there's some great features there about what's public within the network, what's private within the network and that sort of thing. So kind of behind the scenes and these things Firefly is using, again, it's all pluggable. So right now the default implementation for the shared storage bus is IPFS. So when you publish something in Firefly, the payload of that thing goes to IPFS. By default, it's probably a private IPFS cluster that's only accessible by the organizations that are in that consortium. There's another component, which is a private data bus using a software component we call Data Exchange. That's one of the microservices within the Firefly architecture. And that will transfer either messages or files directly peer-to-peer from different organizations. And lastly, the blockchain itself is used as sort of the layer that notifies all the different organizations of when data is shared and it's available. Some of the other cool things that Firefly can do, whether it's in gateway or multi-party mode is it can turn a smart contract into a set of easy-to-use APIs, complete with a swagger UI and rich documentation of all the inputs of each of the functions. So that's something that's really cool. I'm probably gonna skip over that piece in my demo today because that's been extensively demoed in a lot of our other sessions. If you're interested in seeing that sort of thing, there's some great recordings on YouTube that cover that already, but that's one of the cool features that Firefly can do. You can just upload your smart contract and say, generate me an API that I can use from this and it makes getting up and running with a custom smart contract really quick and easy. The orchestration engine of Firefly is really a key part of the architecture. And it's sort of the thing that connects all of the different pieces of Firefly, whether that's IPFS, Firefly's local database, the data exchange component or the blockchain itself. And so it's the piece that has the context for all of those different things. It is designed to be stateless and to be horizontally scalable. It uses the database to store its state. And so again, it's designed to be cloud native and to be able to run in a container and that sort of thing. Just taking a quick peek at chat here. Is it possible to use Firefly in order to build SSI, self-sovereign identity, I think is what that question is asking about. Yes, very possible. So actually some other members of my team have been doing a lot of work and kind of research or in the self-sovereign base and kind of how Firefly fits into that. I'm hoping to get caught up on that work here very soon. It's not the space that I've been working in personally. So Jim Zhang would be the one to talk to you about that. You can also, he's on Discord in the Firefly channel as well. But he's your guy, if you want to talk about identity and SSI with Firefly. Good question. Yeah, feel free to drop questions in the chat as we go. Before we switch over to the demo, I'll take a pause for some more Q and A as well. We'd love to keep this interactive as we go. All right. I think we've kind of talked about most of the things on this slide already, actually. But I'll just cover a couple of the quick bullet points here that we haven't talked about. Firefly can handle both structured and unstructured data. It has, you can define data types in it for, so you could say you want to define like, this is what a customer looks like in our network and it has these fields and these ones are mandatory and here's all the type information. And Firefly can validate that when somebody publishes data that it matches that schema. So it's got some great stuff there. We'll get into, we'll actually see Firefly's token and digital asset management in live in action. So I'm not gonna spend a lot of time talking about that right now, but we'll see that in a little bit. And yeah, so we'll just kind of keep moving through the slides here. This is the screen that we'll look at. We'll save that for the demo. Firefly has a really cool Explorer, which we'll also look at in the demo. Again, this is just kind of, these are things we've already talked about on the slides here, but just making sure we hit all the highlights. There's great developer tools, great DevOps tools. The Explorer is really useful for kind of like, you know, hey, I did something in Firefly. What happened to it? Did my transaction work? Oh, if it didn't, what went wrong? Let me go dig in and see, what happened and get some more detail about it. We have two questions in the chat. Can we use Firefly as a blockchain interoperability solution? Yeah, so I think the question there is getting at, like, can we use Firefly to talk to multiple chains? And the answer is yes, absolutely. So just real quick on kind of blockchain interop. There are several projects within the Hyperledger Foundation that are kind of within the realm of blockchain and interop. So you had the Cactus project and then the Weaver project, and I believe those joined and became Cacti. Please correct me if I'm wrong on that, but I think I got the naming right there. And those projects are focused more on the integration and interop at the smart contract and at the chain layer. Firefly is, interop is not the primary goal of Firefly, but it is one of the things that it can accomplish. And in Firefly, the interop itself, it happens at the app layer. So basically you set up Firefly with different blockchain connectors that could connect to multiple chains at the same time. And then you have Firefly, that can connect to multiple chains at the same time. They can both deliver events to your application. They can both, your application can submit transactions to both chains through Firefly. And it's up to your application to then define the rules of like, what does it look like for, say you wanted to build a bridge as an example. Firefly is not a bridge in and of itself. I just wanna make that clear, but you could in theory build a bridge with Firefly to bridge assets from one chain to another. But it's up to you to decide for your use case, what are the rules around when I move tokens from one chain to the other? When do I burn? When do I mint? How do I make sure that I don't get duplicates? How do I make sure that I don't accidentally lose value along the way? So in Firefly, those rules get to be defined in your application that can be implemented in any language that you want. So quick question is Firefly is competing with question mark. I'm not sure. Is there a specific thing that you were asking about it, whether it was competing with? Okay, maybe we'll come back to that one if we get some more detail there. Hopefully that answers the interop question though. Great question. Yeah, we've talked about all of these things. It's runs on Kubernetes, it's cloud ready, designed to scale, stateless. Just a few quick highlights of the project itself. Firefly was, so the original source code for Firefly was donated to Hyperledger Foundation by Kaleido, the company that I work for. And it was really, even the first version of it was built and designed from several years of learning of our company, building many web three apps and realizing that we were using the same patterns over and over and over again and having to rebuild them every time. So we did that a couple of times and then we said, hey, we should build a framework that does this. And so we had an internal framework that we started and that was really like generation one. And then we said, hey, this is really powerful and we think it could be even more powerful if it was open source, had a huge community behind it, had lots of people contributing to it and it wasn't just something that we held back for ourselves. So we built what is now Hyperledger Firefly as an open source project from the ground up that launched in June of 2021. We had our 1.0 release in April of 22. So it was a little less than a year later went from like first line of code to 1.0. And back in February, we just released 1.2 and we're up to about 704,000 lines of code when I looked yesterday in the Linux Foundation Insights. So that the project is growing, the number of contributors continues to grow which is super exciting. And I just love to tell people about the project, I love to invite people to get involved. And yep, there's some great links that Karan just posted there, I appreciate that. If you wanna get involved in the project, the best next step is to hop into Discord. Join the Discord link that's there and there's a channel called Firefly in there. I'm in there every day and all the maintainers are in there. And so if you have questions about like, how do I get up and running with Firefly? We would love to chat with you there and help you out. If you wanna get started in contributing, that's a great place to start that conversation as well. Like, hey, I have an idea or have you thought about this or I would love to build a plugin or an enhancement that lets you do this. Would love to talk about that stuff there. So that's a great place to get involved and get connected there too. Just a couple of other quick notes on the project and then we'll switch over to demo time here. It's open source, it's part of the Hyperledger Foundation. So it's an Apache II license. It's very enterprise friendly and is designed as such from the get go. We'll just take a quick peek at this slide. We've talked about a lot of these things, but I think a picture helps. So this is sort of the, this is a really high level view of the architecture of all the different pieces that go into Hyperledger Firefly. Each of these big boxes is a runtime. So you're kind of at the heart of Firefly. We have Firefly Core and it has a bunch of different parts within it. That's sort of what all these little boxes represent. It has an API, it has a UI that hosts, it has smart contract generation. And down here, it has all these plugins that talk to various services. So the various services that it talks to would be either a metric service, which is optional, but highly encouraged if you're running it in production. It does need a database. Right now we support SQL databases and there are database migrations provided for Postgres and also SQLite, which is useful if you're running locally or just debugging, not a production thing though. So there are migrations provided for those, but anything that is compatible with the Go SQL library should work as well. So down here, we have a token connector. We'll talk a little bit about the token connector because we'll be using one in the demo, but essentially it's designed as an abstraction layer between Firefly and the blockchain connector that has some details about how your specific token contract works. And so you may want some special features about your particular contract. You may have things that should work a certain way or certain rules about how tokens work in your app. And so some of those things can be implemented there in the token connector. Down here, we have the blockchain connector. This is a super important part of the ecosystem. There is a framework for building blockchain connectors, especially if you are building it in Go, there's a library that's provided. It's called the Firefly connector toolkit. And it has like 80% of what you need to build a blockchain connector for Firefly already implemented for you. It provides an interface of functions that you need to implement for your specific chain. You can think of it like, how do I, for my particular blockchain, what's the syntax for submitting a transaction or what's the syntax for querying a block or creating an event listener, those sorts of things. And then the library takes care of a lot of the really hard logic of like estimating gas. How do I resubmit, like when and how do I resubmit transactions and sort of all of the stuff around, the stuff that's not fun to implement is all handled by the library there. So you got your blockchain connector down here that's talking to either public chains or private chains, either fabric or Ethereum based blockchains there. Our data exchange connector over here is talking to some sort of data bus, whether that's peer-to-peer directly with another data exchange connector or with some other bus there. And over here we've got the shared storage plugin which talks to IPFS today. So that's just a quick highlight of the different runtimes that are involved in Firefly and kind of the different pieces and areas that plugins can build. And then I didn't talk about the top of the diagrams so we'll touch on that real quick. So up here at the top, obviously you have your application. Your application can use Firefly's API to submit transactions and it can listen to web sockets or receive web hook events from Firefly when things are happening on the chain or events are being emitted by Firefly that your app is interested in. Just real quick on the most recent update, there were some really cool things in there. We had some really expanded support for tokens and the token connectors and the token plugin in Firefly became a lot more flexible. And so now today you can go to the open Zeppelin wizard and create your own smart contract. I think it was like a mother or two ago I did a couple hour workshop on how to do this. So that's on YouTube as well. If you're interested in that, like how to launch your own token from scratch with Firefly, you could just go click through the wizard and have it generate the starting point of your contract and then use that with Firefly and launch that on a public chain. A lot of other features around just quality of life improvements, a lot of things for operations, a better traceability through the system, custom header pass through the just better feedback on the API, that sort of thing. The other big thing, it was more of a symbolic thing than anything was EVM Connect is now the default connector when you create a new Firefly stack. And that's just sort of a, like I said, a symbolic thing of us sort of declaring to the world that EVM Connect is ready for prime time now. It is the newest of all of the three blockchain connectors that Firefly has today. There are two for Ethereum and one for fabric. EVM Connect is now the preferred choice and should do everything that you need that that ETH Connect could do, but better because it's newer and we learned a lot along the way with ETH Connect, which is actually the oldest piece of the Firefly architecture that predates Firefly core itself. So EVM Connect is really a modern Ethereum blockchain connector designed from the ground up to work with Firefly. So, hopefully as we've gone through the slides, you've kind of had some ideas of like, oh, I could use Firefly for that, whether it's offering new digital experiences, building and launching a marketplace or some sort of way to trade value or assets or whether it's modernizing a legacy B2B data flow, putting data on blockchain and using it as the single source of truth for what has happened and who has agreed and tested to what. And there's tons of things that you could build with Firefly would love to chat about some of those if you guys want to after this, but hopefully some of this has sparked your imagination. I would love to show you an example of something that I built, but I think before we do that, I'm just gonna pause. I see there's a few questions in chat and so people have questions. This is kind of a great transition point. I'll take a few questions and then we'll hop over to a quick demo. So, let's see. Somebody asked, can I use Firefly as a bridge for communicating between fabric and a basic network? Sure, like I said, Firefly is not a... I have to be careful when we talk about bridges because if you talk about bridges and you don't get it right, the trolls come out from underneath the bridge and say, oh, that's not how a bridge works. So I always like to preference this by saying, Firefly is not a bridge. It does give you the pieces that you probably need to build a bridge, though. And so like I said, you could set up Firefly to connect to both the Hyperledger fabric network and the basic network at the same time. And then you could have one app that is at that point able to talk to both chains and can define the rules for like, okay, well, how do I... What are the rules around running a transaction on this chain and then running one here? What happens if one fails and the other doesn't? There's some really hard problems there. But Firefly does give you the tools that you would need to build that. What can you recommend in order to run Firefly in a production cloud environment, such as a self-hosted cloud? I would highly recommend Kubernetes. It's what Firefly is designed to run with. It's what we at Kaleido run Firefly with. There are some Helm charts in the open source repo that provide you kind of a starting point for getting all of the different services up and running. And you can, excuse me, you can customize those from there. Pardon me, sorry. Okay, just joined. Yes, okay, the links, great. Yes, and this is being streamed to YouTube. Thanks for posting the links again. Okay, cool. That looks like all the questions in chat. Anybody else have any other questions before we jump to a demo? Okay, if not, then I'm gonna be done with slides. We did talk about this earlier, but I'll come back to that in a second. All right, so for this demo, I usually like to, unfortunately, this is a brand new demo. This is not one that we've run before, which is exciting. The downside is I didn't have time to draw a picture of what we're gonna do, but I'll describe it real quick. So I have, what I've done is I have gone to, and I'll try to make my font bigger as we go here. I've gone to the Firefly docs and I'll just kind of, I'll play back what I've done ahead of time to get everything set up. So I went here. I went to the Getting Started Guide and I followed through the Getting Started Guide. I installed my Firefly CLI and there's some great instructions on how to set it up here. So if you wanna go try this out, this is the place to start. Basically, I got it installed and then I went down to tutorials, connect to remote blockchains and I went to the polygon test net. And then so I followed this guide to set up a Firefly stack. Here's the really important bits here, which is how to configure Firefly to talk to polygon test net. And so I am connected to the test net and I basically just ran through this. I gave my Firefly account somatic and I've set up a couple of token contracts on the test net as well. So what I did after I set everything up is I went to, I deployed some contracts. So there's some guides for that in the docs as well. And I deployed two contracts. I deployed a fungible token and I deployed a non-fungible token. And if you're not familiar with blockchain lingo, that's okay, fungible tokens you can think of as like, it's like currency. Every token is the same as all the other ones. So in the US, it's like dollars. Any one dollar is just as good as the other dollars. They're all worth the same amount. And you can transfer them in lump sums. There's nothing unique about any specific dollar. I mean, okay, so they do have on the surface. A non-fungible token is a, you could think of it as a unique identifier for that can point to some other piece of data. And so each non-fungible token is a very unique thing. And you can also track on the blockchain who owned it and in its entire history of ownership as well. So a little bit different there. So you could think of it like an NFT can represent a collectible item or it could represent some sort of credential or something that you've earned or something like that. And so to get these contracts, what I did is I went to the token connector for Hyperledger Firefly. I went into the solidity samples here and you could find the source code for these here. They're under contracts and here's the source code for them. So here's the ERC-20 that I deployed. It extends the open Zeppelin ERC-20 and you can go check out the source for these if you want to. Here's the ERC-721, which is the non-fungible token contract. And so I've deployed those and set them up. So the reason I'm going fast through this is there have been lots of great videos already on YouTube on like how to set this stuff up. The thing that I really wanna demonstrate today is like the power as a developer that having all of this stuff gives you to like how easy it makes it to build an app with all of this. So I'll walk you through a little bit more of what I have running here. So I just ran, yep, I'll make this a little bigger. So I ran FF start to start up my Firefly stack. Said, okay, here's your URL for your web UI. So we go there. Here is our Firefly Explorer UI. And we can see that I've been doing some stuff here. This was me last night, setting all this up and testing it and failing a couple of times and debugging and going back through it. But this is the dashboard. So if we go down here to the token section, we see there are two token pools that have been configured. So we can click on that. Here's my fungible token pool and my non-fungible token pool. Sound is not working anymore. We can hear you fine, Niko. Okay, okay, great. Maybe it's on your end, Thomas. Sorry, you can't hear it. Well, I guess. It's problems and I guess. Okay. All right, we'll keep going then. If my sound does drop out, please do let me know, Sean. It's working. It's working. All right, great. Yeah, so here's our two token pools that I've set up. And if we click on each one, we can see there were some transfers. And so I minted some and I sent these to another wallet that I own. This is my MetaMask wallet. And I also have, I have a wallet app on my phone that I've set up here, which I will show you in just a second. We'll get that screen share going in just a second and I'll pull it up so you can see that wallet app. Okay, so I've got these two token pools and I've got these two. Oh, the other thing I wanted to show you was where they're at on chain. So here's the address. So if I take this address and I go to polygonscan.com, make sure I switch it to test net and I could paste this address in minus the quotation marks there. And here's my contract. Okay, and I can see all of the transfers that have happened on that contract. And then again, this was just me testing it here. So that's one of them. Let's go look at the, just so I have these tabs open, I'm gonna go look at my fungible contract, sorry, the non-fungible, the NFT contract, open a new tab and look up that one as well. All right, cool. So there's been one transaction here and this was me testing it last night. This was, here was the contract as it was created in this transaction. And here was the one test run that I did nine hours and 36 minutes ago. Okay, so that's kind of, those are the contracts that we have there. The app that I wrote is say I wanted to build an app that can listen for receiving some funds and it's gonna receive those funds as a fungible token. And then what happens is if somebody gives you enough tokens, then you mint them an NFT and send it back to them. So I basically built a small exchange that can, it's a very trivial exchange, but it does, it exchanges some ERC 20 tokens for a single NFT token. And so to do that, I just wrote a little bit of code and I'll show you how little code this is here. It is 40 lines of code and a lot of this is just declaring variables. So I'll walk you through what I wrote here. This is gonna be a very code heavy demo and then in a second we'll push go but I wanna talk you through the code to show you everything that's going on. So this is TypeScript, you can use JavaScript though. It's, and you don't even have to use JavaScript. You could use whatever language you want to access the Firefly API and WebSocket connections. TypeScript and JavaScript are easy because we already have a two-package SDK ready to go that's really easy to use and it's built with TypeScript so it comes with type definitions. It also has a WebSocket listener, a WebSocket client built into the library which is just, it's super easy to get up and going. So I'll walk you through what we're doing here. So first of all, we're gonna initialize the SDK and I'm running everything locally. So it's gonna be on localhost port 5000. I just filled in a couple of constants here with the IDs from my token pools which I got by going to the Firefly Explorer and going to my token pools and looking these up. So each of these, it just came from right here. It's the ID of each of these, okay? And then I put in my address that my Firefly node is using and it's really easy to get that by running FF accounts. You could say FF accounts list and then the name of the stack. I'm just gonna grab by the address and then that's the account address that my Firefly node is using. This is the one that I had to fund with Somatic and this represents me and my Firefly node, okay? And then I just declared a variable for like how much I want the NFT to cost. I just said 10. So you send me 10 ERC 20 tokens on my fungible pool. I'll send you one NFT back on the non-fungible pool, okay? So then I'm gonna create a subscription and I'm gonna filter that based on token transfers. So Firefly can emit lots of different types of events. The thing that I'm most interested in here are token transfers and so we're gonna filter based on that. Then I just say Firefly listen on my subscription that I've set up and then you get this, basically you get a callback function here that you put in and this is your function that runs anytime that listener has an event or that subscription has an event. And so what I'm gonna check here is if the event type is a confirmation on the token transfer and we're already, this is probably redundant because we're already filtering by that. We could probably get rid of that but if we are, if the token pool is the fungible pool and it's to me is basically what I'm looking here. So this event listener will get fired for every token transfer that happens on the pools that Firefly is watching. So it'll happen for when I send a token or when somebody else sends me a token. So we just have to make sure that we're looking at, okay, is it fungible tokens that we're looking at and are they to me? Otherwise we're gonna ignore it. And then we look at is the quantity, so just real quick on why we're dividing by 10 to the 18th here, quick side tangent and I realized we're running out on time so I'm gonna try to go fast but Ethereum virtual machines only, they don't do decimal math. So basically to do fractionalized tokens, what you do is you add a bunch of decimal places to it. So behind the scenes like one NFT may have, sorry, one fungible token may have 18 zeros behind it. That number is defined by the contract. In my case, it's 18. So I'm dividing by 10 to the 18th here to just to log the whole number rather than like with all of the decimals behind it. Okay, so that's what that's about. I will log how much they sent us and if the quantity is greater or equal to the cost that we defined up here, then we will mint an NFT. In our non-fungible pool, we'll mint one and we will send it to whatever account originally sent us those tokens, okay? So that's how that works. I'm gonna run this and what I'm gonna do is, here, we'll run it this way. Let's run MPM start. Okay, we're running. Now I'm gonna open up my wallet app on my phone. I'll go back, I'll screen share my phone as well so that you guys can see what's going on there. Okay, can you guys see the screen share of my phone as well? Yes, we can. Oh, we did a second, now it's back. Perfect, yeah, so I've got my app running. I'll try to get both of these good and visible here. I've got my app running and my phone went to sleep. My wallet here and what I'm gonna do is, so my fungible tokens are called, we really put the fun and fungible here so they're called fun tokens. I'm gonna send some and then I need to get my address of my Firefly node. The easiest way to do that is, because I don't like typing out really long hex numbers is to go find it on polygon scan and this is me and I'm gonna get the QR code for it and I'm gonna use my camera and I'm gonna point it at that QR code. Scan. I think there's a, okay, here we go, we'll call it back up, cool. And I'm gonna transfer, I have to type in the amount first, hit next. Okay, it's gonna estimate gas, hit confirm, it's asking me for my fingerprint, that's why the screen went black there. Okay, no thanks. All right, so the transaction is in progress, that's great. Pending transaction, let's go back here and watch our app. So we received, oh, clearly I did my math wrong there in the logging, but we received some and it was greater than the cost and so we minted an NFT, that's cool. Now let's go in my wallet app and let's go to collectibles and now I have two tokens. So I had one in here a minute ago. I now have refresh, it's refreshing still. I should have index one and two. Yep, so there's one and two. I had one from my test last night and now I have two as well. So you just saw in real time there, my wallet app running on my phone, interacting with a contract on a public chain, Firefly saw those events, emitted those events to my application. My application decided it, yep, you have earned an NFT and it minted it and sent it back to my wallet app and I did all of that in 40 lines of code. I go back and look at the Firefly Explorer now. I should be able to see, I go back to my tokens dashboard. I can see here, here was my transfer that I sent from my phone and here is the transfer, here was the mint that my app did to send back to my phone as well. You can see all the details there. So that's it for the demo. Hopefully this was a good use case. Hopefully you're able to follow that. This is a little bit of a different style demo than we've done in the past. Most of the previous demos have been like, here's how you set all this stuff up in Firefly and I really just wanted to show you like, here's 40 lines of code that's a fully functional exchange of two different types of tokens and to me, this is the real power of Firefly that I can focus on what are the rules around how I want this exchange of value to work and Firefly can handle all of the really challenging nitty gritty stuff and all of the plumbing that's required to get all of that done. So that's it for the demo today. We have a few minutes left and I would be happy to take a Q&A for the rest of the time but thank you so much for watching and coming out to today's session. I really appreciate it. Thank you so much for presentation and demo, Nicole. So we can look at some questions now. So everybody can ask their queries and questions at the moment. So we can answer all your questions. Feel free to come off mute as well if you wanna ask a question. Good question, what are the advantages of using Firefly with fabric? I think it really comes down to what are the needs of your specific use case? What are the needs of your organization and whether Firefly, I'm sorry, whether fabric meets those needs, whether it's, so fabric, for instance, one big difference is the use of channels and the isolation of channels between different members and how chain codes are specific to channels. So maybe for your particular application, maybe you need that or maybe your organization already has a fabric network and it's been running for years and you're like, Hey, this is like, we went all in on fabric five years ago and we're not changing that. So Firefly can work with fabric. There's not a, so the mentality of Firefly is we try not to be what we described as like religious about any one particular type of technology. There are advantages and disadvantages to different types of chains and they're appropriate for different use cases. And so I think you really just have to look at which blockchain itself makes sense for the needs that I have in the app that I'm building. Can you please elaborate on how you can generate the REST API swagger from the apps you created in Firefly? Yeah, let me, I'll share my screen here real quick again and there's some tutorials on this in the docs but if you go to the docs page, the docs site and then if you go into tutorials and work with custom smart contracts, Ethereum is the one that has the generator from, you can go from an ABI all the way to a working API but if you just follow this guide it will show you all, here's a sent just a really trivial sample smart contract it walks you through how to deploy it, how to create the Firefly interface and define that and then if we scroll all the way to the bottom, yeah, then you end up with the swagger UI at the end and you could view that right in your browser and you could click through and actually use it right here in your browser. So there's a great guide to that. Let me, I'll just drop the link to that in the chat as well. Do people use Firefly as a dashboard for a fabric blockchain? I'm not sure, it's a good question. I haven't heard of anyone doing that specifically. The Firefly Explorer is not necessarily meant to be an all-purpose blockchain Explorer. It's really meant to be looking at sort of what's going on inside my Firefly node and with my apps that I have running on it yeah, it's not designed to be a fully functional or like a being a block, a general-purpose block Explorer is not one of the goals of the project. Take a look at, there's a Fabric Explorer lab project as well as a Hyperledger Fabric operator might have the tools you want for that sort of thing. Sorry, I need to go for it. Cool, thank you, Sean. I appreciate the added detail there. Is there a Firefly SDK for Node.js? Absolutely, that is what I used in the demo for today. You can find it on an NPM. You look for Hyperledger Firefly SDK. This is it right here. So you can download that. You can use it in a Node app or I use it in TypeScript, but it works in either. I'll drop the link to that here as well. All right, we are at time, but I'm happy to take any other questions that folks may have. I have a few minutes to spare if folks wanna hang out and you have more questions. Otherwise, if I would love to two requests, if you thought this demo was cool, if you could, if you could go to GitHub slash Hyperledger slash Firefly and come here and push the star button. This is my, thank you for watching my YouTube video. Please like and subscribe. It just helped boost the project a little bit and we'd love to get some more stars on it. So if you thought this is great, we would really appreciate that. And if you wanna keep talking, please join Discord and would be happy to continue the conversation there. If you have more questions or wanna get plugged into the project, we'd love to chat with you all there. But I think that is it. Thank you so much, everyone and I really appreciate you coming out today. Great job, Niko. Thank you. Thank you everybody for the meetup for joining us. I am going to shut this down now. Thanks, everybody. Have a good one. Thanks. Thanks, Niko.