 Good to be working with you, Roland, Mishari, Hongfuk, Mario and the team. Thought I'd take the opportunity this year just to spend about 20 minutes on sharing what's been happening in the open-source space around DM, as it's called, and give you a bit of a taster for that. Really personal curiosity, kind of looking at the tech, looking at some of the media announcements of where this has been going. So I'm going to give you a bit of background and then get into some of the practical playing around and applications with a demo and a bit of a deep dive. But great and thank you for joining because it is, of course, somewhat even contradictory to be calling it an open-source network when historically this concept of Libra, as it was called, was backed by Facebook and that came out somewhere on 2019 already. So it's already been two years where there's been talk about a network and Facebook itself as the social media company being involved in this payment infrastructure. And of course, we saw a lot of regulatory pushback. There was a lot of challenge around crypto custody, custody as a whole, lack of regulation and definitely lack of approvals. And so that kind of piqued my interest and I've been following the story for a while purely because it's very difficult to marry the two, right, between the unregulated space and then having access to a large audience and being able to bring them the convenience of everything that is crypto related without all the headaches of key management, you know, wallets with without all the blockchain complexity behind it. And of course, as soon as a company stands up and says we're going to do something in the space, it attracts a lot of attention. So with that background, I thought I'd look at this open source financial network as they call it. And Libra more recently then rebranded rebranded into a new project name which is called DM. And that's quite recent. That was just in December. So the association is effectively an a neutral body that's overseeing this project, this network and these currencies. What's just been quite telling is that some large names have gotten behind this initiative. And the most recent one is our own Singapore Temasek Holdings, which is to join the association. It's quite an unusual move because it's quite a bit of credibility to the network, at least the project. Maybe the most telling is that like a lot of other projects, it was redesigned to be a permissioned blockchain network. So as opposed to open nodes run by anybody everywhere, the network has been interestingly designed to be more centralized, but still give the transparency and the access to really anybody on the fringes. If we look at the network, it kind of has a validator full node network in the middle, which is this purple block where kind of authorized permission nodes join the network and share information amongst themselves and replicate states. So it's Byzantine fault tolerant. But then beneath that, we've got public nodes that can subscribe to the network and synchronize the state. And that's interesting because it means that there's transparency in the data coming out, but the actual core of it is kind of trolled and restricted. And then core provides these APIs that anybody can talk to, such as for instance, clients who then perform transactions on the network, which then again get replicated through the blockchain infrastructure. So this is all public information that everything I'm going to be talking about is in the open. And so it's out of that curiosity that you can get some access to it. I'm not saying it's at the fully ready state yet for easy adoption by every retail or every engineer. It takes a bit of digging, but it's certainly improving. What's interesting about the network is it's got kind of different types of addresses. And they've done this for very valid reasons is to say, we're really going to create a wallet for an account address that is 16 bytes in length. And that is your primary identifier. Now, on top of that, you can have sub addresses that can be for one time use, or that can be assigned to single wallets. So effectively, you can have a main address that can be that can allow for sub addressing just for separation of functions. But most unique about this is an account identifier, which is effectively a back 32 kind of hashed or translated network address. And these addresses effectively consolidate the main account address and the sub address into a wallet address, which can be used universally for things like merchant payments or other type of transactions. And so they even come up with a bit of a naming convention. I thought I'd share this because it's relevant in how we then use the network. And then of course, these account identifiers can be put into these URIs, which then can be passed along in mobile apps or in blinking or other type of web applications who interact with that counterparty. So if you're doing a peer to peer transfer or you're doing a merchant payment, it will be through this intent identifier. Interesting in the sense that they've separated these addresses, also allowing you to change your private and public key, your private key on the account that you're managing without changing the account address on the network. So there's almost a separation between what is your encryption keys that you can rotate versus the address that you're using on the network, which remains the same. And so unlike Bitcoin or Ethereum, where those two are the same, the private public key is your identifier. Here you've effectively got an proxy account address that you can repurpose and then a separate set of keys that can be rotated. And again, that means that you keep your identity while keeping control of your keys. If we look at network, publish some JSON RPC methods, which are just the basic set of those for public access and those are the ones we're going to be playing with a bit. You can submit instructions, you can look at transaction histories, you can query an account, you can get the account transaction history of an account identifier and various meter data of the network. So again, it kind of shows that there's a robustness and a richness in the data that's coming out of the network, even if it is somewhat centrally run, perhaps comparable to Binance Smart Chain, for example, which is a permissioned parity Ethereum network. First off, I think what we're going to do is just spend some time running a local node. And so what we've done is we pulled the source code from GitHub. It is in Rust, and we're just going to run this node. And so there's two parts that there's obviously the node and then local host, kind of the client side, connecting to the local host. That can either be through a CLI, or it can be through an HTTP call through the JSON RPC. What I'll just do is I'll just switch to my Ubuntu instance and just show you what that looks like. So I'm giving that a moment to load up. And so first off, what we'll do is just simply, this has already been pulled. So if I go, if I just have a look at Windows from testnet, that's my latest pull from the GitHub DM project and just into the branch testnet. And quite simple, after the initial build, right, is just to actually run the DM node and with this parameter test, which kind of spins up the test node. So this is the simplest kind of exercise just to run a local instance. What we'll do later on in this kind of walk through is see how we then connect that up to the testnet, and you'll see the amount of data that then starts kind of publishing through. But in the local node, what we'll see is just obviously basic logging information, configuration that's being used, that's got certain keys in it. We can look at that. Some root keys that are just generated locally for the instance. And then this waypoint is an identifier on the network in terms of the state. And so in terms of here, it just spits it out. In the public network, that's actually published centrally. And we will download that in order to synchronize our local node with the validator network. As you can see, the JSON RPC is up. Then it's just exposing a TCP IP port for access, and then the chain is testing. Quite straightforward. What we've got to do is we've got to now put this in order to connect to the node. We're going to pick up another instance, another console here. We're going to have the CLI. And we're just putting in some commands here. So I'm going to run this type node of the testing network. I've got to connect to the instance of the mint, effectively the instance that we're connecting to in terms of the mint key. So I'm just going to copy that from here, which is my mint key here. And I'm just taking that into my local configuration. Next, I've got to specify what the JSON endpoint that I'm going to connect to. So it will be my RPC API. And lastly, I've got to synchronize my waypoint. And this is again just for the documentation out there of me connecting into this local node network. So actually just a client server between the two. And what you see here is, let me just make that a little bit larger for you. It's effectively a local client running where I've got a number of commands that are listed out on the left-hand side. So that's quite neat. And now I can do different things. I can obviously ask for the help, which is my menu here. I can look it for information on the blockchain network. So it tells me that this is a network in a validator running. So it is in the testing chain. What I can do is I can, for instance, go here into the accounts submenu. I can, for instance, see I can list accounts or cover my seeds. I can write to a seed file just for testing purposes. Quite simply, I can, for instance, go account and create a new account. And what you see here is that create an internal account. And that's just my identifier. And if I list out the accounts, I can see, okay, here's a local account. It's a private key that's shared to me for my testing purposes. What I can also do then is I can, effectively, mint some coins. And let's say I want a thousand coins to this account. And I'm just going to use the kind of index, identify zero. Okay, in this case, I actually need to get my currency right, XUS. And I'm connecting to a faucet and it's going to mint that. And it's going to put that into my account. Let's see if that comes out right. Okay. And it's going to be putting those into my account. So if I go, if I list my account now, I can see that the account has changed from being a local account into a persistent account. And also if I then query the balance, it's a query balance on account identifier zero, I've got a thousand XUSD coins in this wallet. And so I can do that again, right? So I can effectively also create another account and then just create another one. There we go. I might, for instance, in this case, just under the account add a currency, you know, which is XUSD, XUS, because the second account, so again, I can query that balance and say, query balance of the second account, it does not exist yet. So that's still seen as a local account. So maybe I just need to mint some coins for that to get it running. Mint 80, zero, maybe just 10 tokens XUS. Again, I'm just going to top up the second account. And what we can now do is move between the accounts. So the chain behind the scene is already running all of this. And if I do, for instance, now a transfer from zero to 81 of just five coins, I've been submitted and I can query that transaction. So here I can just create that transaction. And I can see, okay, that that was executed. And if I query the balance now from the second account, which was run, I can say, okay, let me see, okay, now the balance is up to 15. So we really have this kind of blockchain mode running, it's local, you know, running through this RTC interface. And if I now, now look at my account identifiers, I can go here and I can pull this out. I can also switch to my node. And I can say, okay, I want to query that on the local network. And I got some, I didn't get a response on that one. Sorry, I'll get back to this method here. I want to query that on my local node. And I get some information back. So the real test here is, you know, there's some code base that's been worked on, it's been supported by the association, been making good progress. And we can actually see that these things are coming together between accounts, the network, the transactions, the faucets, and all the rest. Now what I've done is I've just moved ahead and I'll just running up a full node. What this means is we're going to subscribe to the public network, I'll go to the test net as a replica full node as per this command over here. That's kind of cool. As I mentioned, I just got to reset my waypoint. So if I now head on my local node, I'm going to move my waypoint and just pull that from the network. And I've got this waypoint that indicates the current state of that network there in fire. And I can now start up my local node. If I start up my local node now with a different configuration pointing to the public network, we can start seeing a bit of activity already with it synchronizing. And what you'll see right now is a amount of data coming through. Maybe most telling is that if I look at the amount of data I've already replicated here, we're up to 4.8 gigs with the data in my local data file. And you will see more of the transactions coming through in the background as the network starts synchronizing. You can see the synchronization requests and then various updates affirming that the blocks are being surround and I'm receiving the state from the network. Why is this cool? Why is this relevant? Well, we obviously seen the traffic go through, so this is not simulated. This is real traffic flowing. We can see the amount of data that came through. So last night I was on one gig and now I'm up to four and a half gigs and running. If we just look at the configuration of the full node pointer, we're running a full node. We've set it up to local data directory. For some reason in the testnet, discovering method is none. So there's no dynamic discovery. If you turn it on, it comes up with a lot of private host names that are not legally resolvable at this stage. Yes, it certainly is propagating its peers. And so in this testnet setup, I simply connect to the testnet public endpoint on a certain port and it handshakes. What's interesting is that the documentation on the Githubs is not always synced into master or even in the main branches. So you've got to go into the test branch just to find the documentation. If you're in the wrong branch, pick up some configurations and it will take you a long time to figure out what's what. So just make sure you're in the right branch if you're going to play with this. Effectively, it is a public network that we're connecting to. So it's a big novel. And as I shared, it connects, it works. There's lots of data coming through and it's nicely JSON serialized. It's all written in Rust, so it runs pretty well. And then it'll just keep on collecting all the data in the state from the public network. This is what I highlighted, connected peers, we can see the nodes, we see the synchronization requests and then after a block of transactions have come down, here it's synchronizing in a thousand transactions and the same status is then finished. And there's lots of traffic coming through. So NetNet, it's participating in the main network. Now why that's interesting is because again, if I go to my CLI and I change this to join the testnet effectively, as I've just mentioned earlier, we can also do the same on the testnet. And I can, for instance, query balances. What I'm going to do is I'm going to recover my seed from a wallet or wallet from a seed address. And again, I've got these keys here. And if I query that, you know, let's say here, I go query the balance of this address into the public network, well, the fairly large amount of coins in this wallet. I'm just mindful of time stepping us through. What I can then also do is I can go to the testnet, again, on the same endpoints, I'm just going to use the same address and query that. And again, I can do some transactions between different wallets. So if I were to do a wallet transaction, let's say I go, I do a transfer of, let me just have it here, transfer of the sender, which is my, let's say, one to that one of 10 XUS, let's see if that works. Oops, music transfer. Okay, the sending account does not exist. So we'll have to go to something else. What I wanted to show you on further two is we can now look at something very cool, which is the DM Blockchain Explorer. And so here, for instance, I can put in this, put in my local address. And I find that this has done a fair number of transactions on the network. I can drill down into that. I'll be able to see, you know, my products, wallet address is here. So that's from my locally generated pair. And if I wanted to transfer to this recipient address, or maybe the other way around, let me just do that for my CLI. I'm going to transfer, say from my account zero to this recipient, which I don't own, maybe seven XUS just so we can identify that. Okay, and that was submitted. What's interesting now is if we go to the test network flora, we'll probably see that at the top of the queue. A lot of transactions going through. So if we have a look at the recipient, you know, here's my seven that are in flight within a minute ago. And let's see where they came from. Yes, they indeed came from, from my originating node. So, you know, the network is coming together in terms of, you know, having the visibility and having the insight as to what's going on, lots of different keys and hashes. And what's interesting about the approach here is that the ability to move money between wallets itself is a smart contract program, you know, move kind of logic. So maybe I'm using that terminology wrong. So move is the smart contract language, and to move money between, you know, two coins, which in this case are XUSD, there is a smart contract calling that. So that sets the foundation for a lot more development and innovation to come. But today, we're just playing around with these synthetic type nodes. I think said that testnet is up. And I think there's some very interesting references and things to play around with. One that I found there, in association publishing is the wallet and the merchant. Both are kind of discoverable by just, you know, playing around in their documentation and their browser. What that means is if we have a look at kind of the wallet side, let me just find which, which, which reference I can use. Yes, here the wallet, I can now log into this. And it's not quite as live as it looks to be on the front end. So it's going on in the background. What you can see is that there's a wallet and I've signed up for it. I've just created a balance and I've sent some transactions through the network. And so here I can see that I've actually transacted in what is effectively these derived identifiers, right? These are the Bech32 kind of encoded identifiers. It's a bit telling, it's a bit of playing around here because you can't actually see the underlying network address. So what I've had to do here is literally just, you know, just identify and reverse it. So just jumping back to the documentation, there's a CLI where I can use a function like that. So I can say address from Bech32 address. And I'm just going to try decode that. And so it codes that into its underlying address, which is here. And if I were now to take that address back into the DM Explorer, I can see, okay, this address has done a number of transactions. The reason I'm just calling it out is because wallets, this Republic key pair that's being used here actually has 4 million USD allocated to it. And I've just transferred those 7 dollars in actually within the wallet front end is a bit of, I guess, illustration here of how it should work and what a wallet address would look like. But it's kind of cool because you can go and add a balance. I can choose my funding source, which is just simulated. And let's say I want to add 50 USD to this wallet. And I confirm that transaction. That was done. And now that is reflected here. It does actually publish that onto the blockchain network. So if I refresh this page for this wallet, we'll find that the 50 has been added. So with one way view, but nonetheless, the network is indeed pouring the transactions. This is relevant. And why this goes back to kind of the DM association getting involved is because the same thing is not possible on the merchant side, which is not quite clear to me yet how one exactly transacts. So you want to see transactions moving from a wallet into perhaps a merchant side and you can perhaps choose which currency that is in scanner QR code or perhaps, you know, use a different type of wallet. And what you'll see in the bottom of the screen is this DM identifier, which is that unique address with an amount tied to it. So net net, some interesting playing around worthwhile kind of keeping an eye on it. Very interesting to look at the move smart contracts. And then there's some add-ins and other developer tools that are emerging. So it's interesting to get behind a project a bit more as perhaps there's some interest. So just to close out, I think we're just 25 minutes exactly. Exciting new network, open source, a lot of good code out there in the public. And it's backed by the Alliance. There's certainly a look towards the future with regard to regulators and kind of the service providers and the move programming language. The technical documentation is maturing, so it is experimental and you kind of have to get your hands dirty, but it is taking shape. And then the best guidance is GitHub and developer nodes. And so the media mentions that we'll see more activity in 2021. I hope that was so much informative on kind of what's happening in the open source related to the DM network. Thank you very much, Tharsten. That was very interesting. Could you do us a favor and copy those links and put it in the shared notes under the topic? And so we could take a look at it. So just, well, a question so far from me. So okay, so just to look at DM and before that, we looked at Hyperledger. So what are the time being limited? Why would I choose to spend time exploring one project or the other? Can you give us some insights on that? Quite good question. Yeah, very good question. I think I think very valid question on a basis that, you know, the Hyperledger and such projects, of course, are building infrastructure and tech that will be deployed by corporates and other users for their own purpose of sharing data. I think what we're seeing here is more of a financial infrastructure that is looking to effectively build a centralized platform to which many other ecosystem partners will then join. And that'll take time because unlike something like Hyperledger, which is there for data, perhaps for securing transactions between institutions, this looks more like a financial system. And so you wouldn't be able to just adopt this for your own personal use. But I think where the opportunity is for engineers and developers to look more closely at move as a programming language for smart contracts. And secondly, then to think about what are potentially the use cases that we can build on top of the DM network, if you were to have marketplaces, if you were to have e-commerce platforms, if you were to have booking sites or lending or remittance or anything else that is perhaps then more financial services orientated, which is transactional, as opposed to perhaps something that is more kind of quarter, Hyperledger, I don't know, big chain DB and other blockchains, which is more data orientated. So would you require, say, a bank to be, I don't know, a host for Libra? Will it be connected to a bank? What I've seen and studied on the architecture side is that it's not a big network in the sense that anybody can just come up and be a node that pups stake some coins and mince some crypto and then kind of balances Bitcoin with its 10,000, 12,000 nodes. I think here bit the opposite is that you can participate in the network as kind of a recipient of the data and you could initiate transactions, but through intermediaries. It might not be banks. It might be other ecosystem players, but I think the intent here is to have a very clear landscape of who's who and who's participating as opposed to the crypto world where it's really in the unknown and I think that's where the regulators are most concerned. So who determines who can participate in the DM network? Okay, so good question. What I think is really coming into shape and is worth what's looking into is the DM association and the way that they are setting themselves up, right? So very public with kind of their model, with their kind of approach in terms of they go to market and what they want to address in terms of the challenge that they're taking on. What you'll find is that really just looking at it from what's public and what's on the surface and what's been published is that the association as they call it wants to bring that kind of stability and that control and that means that you'll have this consortium, you'll have people that get together, very smart people. What's very impressive is their kind of protocol improvements that they publish, their DIPs in terms of the governance and kind of the features that they're adding through a kind of formal methodology of accepting and voting on upgrades and protocols which, you know, you might see in some other crypto projects but probably not to this level of rigor and diligence. So you'll probably find that it'll be a very well run tech stack together with a kind of very formal methodology on governance and change control and then open it up for the public to participate. A bit different where a lot of the other projects are trying to bring the governance in as a, I'd say almost as an optional, while they're more focused on the crypto assets themselves and the use cases. So a bit of a different view and take to blockchain. Okay, well, very interesting. All this blockchain is quite interesting. We're still unsure, right, whether it will lead to freedom or tyranny. I think the jury is out about it. It can go both ways. Yeah, absolutely. So just a quick question about the stack. I sort of remember Libra when they started. I think they mentioned that they're writing everything on Elixir. I noticed that you're using Rust. Do you know, like, did the stack change? Oh, I'm not quite sure on some of the evolution of the stack. What I found is in the GitHub that there's lots of resources coming together on top of that. What you're finding now is that a lot of different language support. So there's CLIs, SDKs in Python, there's SDKs in Java. What you'll find is that it's quite an active community. And so on the edge, you'll find that there's a lot of the front ends of the clients being developed in order to support wallets and web portals and interfaces. On the core, the engine is being pulled out in Rust. And I'm not sure if that's part of the three-year, maybe two-year history that this initiative has had. And also, since the separation from Facebook where it was into this separate standalone project called DM, which means today, tomorrow in Latin. So it's got a Latin root. Okay, wonderful. Thank you. Thank you very much.