{"id":41505,"date":"2018-03-06T06:00:38","date_gmt":"2018-03-06T11:00:38","guid":{"rendered":"http:\/\/www.shamusyoung.com\/twentysidedtale\/?p=41505"},"modified":"2018-03-06T13:55:56","modified_gmt":"2018-03-06T18:55:56","slug":"cryptocurrency-and-the-blockchain-what-is-this-stuff","status":"publish","type":"post","link":"https:\/\/www.shamusyoung.com\/twentysidedtale\/?p=41505","title":{"rendered":"Cryptocurrency and the Blockchain: What is This Stuff?"},"content":{"rendered":"<p>Lots of people are curious about Bitcoin and cryptocurrency these days. This is particularly true among PC gamers. Not only is cryptocurrency making headlines, it&#8217;s also <a href=\"https:\/\/www.howtogeek.com\/341365\/thanks-to-bitcoin-buying-a-pc-is-better-than-building-one-for-now\/\">screwing up the graphics card market<\/a>. Which naturally leads people to asking questions like, &#8220;What is this stuff?&#8221;<\/p>\n<p>I am not remotely an expert and I&#8217;ve never had a reason to use Bitcoin, but I understand a little bit of the underlying technology and I think I can help explain it to people.<\/p>\n<p>Essentially, a bunch of math nerds have invented a new form of money and the world is curious what&#8217;s going to happen next. We&#8217;ve never had &#8220;money&#8221; that worked like this before. It&#8217;s not tied to a specific paper currency. It&#8217;s not guaranteed by a bank. It&#8217;s not issued by a government. It&#8217;s not backed by precious metals. Instead the currency is governed by a few simple rules and guaranteed by math. This creates a lot of interesting questions regarding economics, trust, law, and existing financial regulations. <\/p>\n<p>But we&#8217;re not here to have those debates. We&#8217;re here to try and understand what this system is and how it&#8217;s possible to have a secure currency with no centralized power. Do note that every level of simplification is bound to bruise the truth a little. What I&#8217;m going to give is a very rudimentary overview and many, many details have been left out. This will not make you an expert, but I hope I can at least help you understand a couple of basic questions like:<\/p>\n<ol>\n<li>How does cryptocurrency work?<\/li>\n<li>What is this &#8220;block chain&#8221; thing people keep talking about?<\/li>\n<\/ol>\n<p>Cryptocurrency is built using two key technologies: asymmetrical cryptography, and hash functions. Those terms might sound complex and scary, but anyone can grasp them. So before we explain cryptocurrency and the blockchain, let&#8217;s explain these two technologies.<\/p>\n<p><!--more--><\/p>\n<h3>Asymmetrical Cryptography<\/h3>\n<p><div class='imagefull'><img src='https:\/\/www.shamusyoung.com\/twentysidedtale\/images\/bitcoin_keys.jpg' width=100% alt='Asymmetrical cryptography requires two keys to work. But not these kinds of keys.' title='Asymmetrical cryptography requires two keys to work. But not these kinds of keys.'\/><\/div><div class='mouseover-alt'>Asymmetrical cryptography requires two keys to work. But not these kinds of keys.<\/div><\/p>\n<p>You&#8217;re probably familiar with symmetrical cryptography. You&#8217;ve probably even used it. If you&#8217;ve ever accessed a password-protected ZIP file then you&#8217;ve got the basic idea. A password is used to scramble a file, and you can only unscramble by using the password. This scrambling of data to make it unreadable is called &#8220;cryptography&#8221;. This stuff with passwords is &#8220;symmetrical&#8221; because you use the same password to encrypt (scramble) the data as you do to decrypt it.<\/p>\n<p>An asymmetrical system is one where you actually have two passwords: A and B. If you use A to encrypt, you need B to decrypt. If you encrypt with B, then you&#8217;ll need A to decrypt.<br \/>\nActually, A and B aren&#8217;t really &#8220;passwords&#8221; in the classic sense. They&#8217;re numbers. Typically, they&#8217;re numbers that might be a hundred digits long. I can barely follow the mathematics involved and I don&#8217;t feel safe trying to explain them, but if you&#8217;d like to know more then <a href=\"https:\/\/www.youtube.com\/watch?v=YEBfamv-_do\">this 8-minute video<\/a> gives a pretty good overview.<\/p>\n<p>A and B are usually called a <i>key pair<\/i>. You find yourself two very large prime numbers at random and use them to make your key pair. One of them you share openly with anyone that might want to communicate with you, and the other is kept secret. These are called your public key and your private key. This allows us to do two things:<\/p>\n<p>One, my friend can encrypt a message with <strong>my<\/strong> public key. Remember, if you encrypt with one key then you can only decrypt with the other. Since I&#8217;m the only person with access to my private key, my friend can feel confident that I&#8217;m the only person in the world that can open it. This gives us incredibly strong <em>security<\/em>.<\/p>\n<p>But we can also do something else: I can encrypt a message with my private key and send it to you. If you can open it with my public key then you can feel 100% confident that the message came from me and not from someone pretending to be me. This gives us incredibly strong <em>authentication<\/em>.<\/p>\n<p>(If you want to get really fancy then we can combine these techniques. If you want to send me a message you can encrypt it with my public key, and then encrypt it again with <em>your<\/em> private key. This means you can know for sure that I&#8217;m the only one who can open it, and when I do I can be sure you&#8217;re the one who sent it.)<\/p>\n<p>Asymmetrical cryptography is used in a lot of different places, not just in internet funnymoney. Speaking of which, there&#8217;s one more technology we need to understand to make sense of this Bitcoin stuff:<\/p>\n<h3>Hash Functions<\/h3>\n<p><div class='imagefull'><img src='https:\/\/www.shamusyoung.com\/twentysidedtale\/images\/bitcoin_sha256.jpg' width=100% alt='Information in, garbage out. I don&apos;t see what the big deal is. A lot of my programs end up doing this by accident.' title='Information in, garbage out. I don&apos;t see what the big deal is. A lot of my programs end up doing this by accident.'\/><\/div><div class='mouseover-alt'>Information in, garbage out. I don&apos;t see what the big deal is. A lot of my programs end up doing this by accident.<\/div><\/p>\n<p>Above we talked about cryptographic functions, which are designed to scramble some information so that it can be unscrambled later by someone with the right key. For contrast, a hash function is designed to scramble things <em>without hope of recovery<\/em>.<\/p>\n<p>Let&#8217;s say I rolled a handful of dice and added up the rolls to get a total of 28. Based on that number, you can&#8217;t reverse the process to know what numbers I added up. No matter how carefully you study that 28, you&#8217;ll never be able to determine how many dice were rolled, how many faces they had, or what numbers I got. In a case this simple you could come up with lots of <i>plausible<\/i> theories, but you&#8217;d never be able to prove any of them. This adding up of values is a fundamentally one-way function and information is irrevocably lost in the process.<br \/>\nThe above example wouldn&#8217;t be particularly useful in computer science, but a more complex hash can be used to make a system secure almost to the point of invincibility.<\/p>\n<p>The hash we&#8217;re talking about in this case is a hash function called <a href=\"https:\/\/en.wikipedia.org\/wiki\/SHA-2\">SHA256<\/a>. It takes input and outputs 256 bits of complete noise. The input can be anything you like: A password, a list of numbers, or the text of an entire novel. Doesn&#8217;t matter. The input can be short or immense. What matters is that the process is entirely one-way and always outputs noise of the same length.<\/p>\n<p>If you want to see it in action, <a href=\"http:\/\/www.xorbin.com\/tools\/sha256-hash-calculator\">you can try a web-based version of SHA256 here<\/a>. Just type in some random input, hit the button, and look at the gibberish it spits out. For example, if you type &#8220;Shamus Young&#8221; into it, you&#8217;ll get the following:<\/p>\n<div class=\"narrow\"><tt>e671c469c4e2c73c0499dfe74c4792fd3438d6ffe8371ea26dd70ea14bd54bf3<\/tt><\/div>\n<p>This is a hexadecimal representation of the result. You could also express it in binary, but then you&#8217;d wind up looking at a half-page of random 1&#8217;s and 0&#8217;s, which isn&#8217;t very interesting. The trick here is that you&#8217;ll always get this same result from the same input.<\/p>\n<p>Now look at what you get if you enter &#8220;Zhamus Young&#8221;:<\/p>\n<div class=\"narrow\"><tt>849a3f601e417a6bc2d2f5555778529b575831db1af8231574d1663e291a94c6<\/tt><\/div>\n<p>I made a very slight change to the input, and the entire result changed. Most importantly, there&#8217;s no way you could determine what input I used to get this result. You can look at that big string of gibberish all day and you won&#8217;t have any way to reverse the process and discover my secret input of &#8220;Zhamus Young&#8221;. You won&#8217;t even know if the input was a couple of short words or several paragraphs. If you saw that string of gibberish you wouldn&#8217;t have any way to figure out what the input was other than simply brute-force trying every possible combination of words, sentences, numbers, and paragraphs.<\/p>\n<p>How secure is this? Well, <a href=\"https:\/\/www.youtube.com\/watch?v=S9JGmA5_unY\">this video explains<\/a> that even if we had a network of supercomputers that spanned 4 billion galaxies, and even if we let them run for 500 billion years, we&#8217;d still only have a 1 in 4 billion chance at finding the input by brute force.<\/p>\n<p>Okay, that&#8217;s enough about the technology. Let&#8217;s talk about&#8230;<\/p>\n<h3>How Cryptocurrency Works<\/h3>\n<p><div class='imagefull'><img src='https:\/\/www.shamusyoung.com\/twentysidedtale\/images\/bitcoin_facts.jpg' width=100% alt='Bonus fact: You can&apos;t lose bitcoins in your couch cushions.' title='Bonus fact: You can&apos;t lose bitcoins in your couch cushions.'\/><\/div><div class='mouseover-alt'>Bonus fact: You can&apos;t lose bitcoins in your couch cushions.<\/div><\/p>\n<p>There&#8217;s no central bank or government running this thing, so instead cryptobux like Bitcoin use a distributed system. Think of it like a ledger of transactions, like so:<\/p>\n<p><tt>1. Gordon pays $50 to Alyx.<br \/>\n2. Alyx pays $10 to Eli.<br \/>\n3. Isaac pays $10 to Eli.<br \/>\n4. Wallace pays $100 to Judith.<\/tt><\/p>\n<p>You can look at the history of transactions and see how much money each person has at any given time. As two people do a trade, the payer broadcasts their payment to the other people using the system. When the payee sees the transaction show up in the public ledger, they know they&#8217;ve been paid and they can give the payer the goods or services they paid for. (Or whatever they&#8217;re doing.)<\/p>\n<p>So what&#8217;s to stop Wallace from broadcasting a bunch of bogus transactions saying that everyone else gives him all the money? Well, the payer must digitally <i>sign<\/i> each transaction. Remember earlier I said that asymmetrical cryptography allows us to verify identities.<\/p>\n<p>Gordon can take the line, &#8220;1. Gordon pays $50 to Alyx.&#8221; and encrypt it with his private key. This encrypted message can then be the signature for the transaction. Anyone else can decrypt this signature using Gordon&#8217;s public key. When they do, they&#8217;ll see the contents of the signature &#8220;1. Gordon pays $50 to Alyx.&#8221; exactly matches the transaction, &#8220;1. Gordon pays $50 to Alyx.&#8221;, so this signature belongs to this transaction. And since they opened the signature using Gordon&#8217;s public key, they know he created this signature. So there&#8217;s no way for Wallace to create bogus transactions.<\/p>\n<p>However, the other trick Wallace could pull is trying to tamper with the ledger by <i>removing<\/i> legitimate transactions. Maybe Wallace paid $50 to Gordon in exchange for Gordon&#8217;s lucky red crowbar. Now that Wallace has the crowbar, he wants to try to spoof the system by leaving his payment out of the ledger so he gets to keep his money.<\/p>\n<p>This finally brings us to&#8230;<\/p>\n<h3>The Blockchain<\/h3>\n<p><div class='imagefull'><img src='https:\/\/www.shamusyoung.com\/twentysidedtale\/images\/bitcoin_ledger.jpg' width=100% alt='The blockchain ledger doesn&apos;t use real names like in my examples, so the system is both (probably) secure and (theoretically) anonymous.' title='The blockchain ledger doesn&apos;t use real names like in my examples, so the system is both (probably) secure and (theoretically) anonymous.'\/><\/div><div class='mouseover-alt'>The blockchain ledger doesn&apos;t use real names like in my examples, so the system is both (probably) secure and (theoretically) anonymous.<\/div><\/p>\n<p>Ledger entries are grouped. These groups are called &#8220;blocks&#8221;. I guess you can think of a block like a single page of the ledger, but each block has a few thousand transactions and I&#8217;m not sure how far you want to stretch this metaphor.<\/p>\n<p>Sure, Wallace is a participant in the system and maybe he wants to set up some tricky hack to propagate bogus blocks. Maybe he&#8217;s made a lot of poor purchasing decisions and now he&#8217;s looking to erase those transactions after the fact. Since the whole system is distributed, doesn&#8217;t that mean anyone can add new &#8220;pages&#8221; to the ledger? (That is, a new block to the chain.) Some people are saying Wallace spent a bunch of money. But Wallace, having erased his transactions after getting his goods, is offering a block that shows he spent nothing. How does the system tell a correct block from a bogus one? This is the internet. Anyone can be lying about anything at any time. Even if we added some sort of &#8220;voting&#8221; feature and let the crowd vote on what was legit and what isn&#8217;t, there would be nothing to stop Wallace from making hundreds of bogus sock puppet accounts that would all support his version of events. How can we possibly verify <em>anything<\/em> in this world of anonymous participation?<\/p>\n<p>To do this, we use proof-of-work.<\/p>\n<h3>Proof of Work<\/h3>\n<p><div class='imagefull'><img src='https:\/\/www.shamusyoung.com\/twentysidedtale\/images\/bitcoin_bux.jpg' width=100% alt='I have no data on the exchange rate between Memebux and cheevos.' title='I have no data on the exchange rate between Memebux and cheevos.'\/><\/div><div class='mouseover-alt'>I have no data on the exchange rate between Memebux and cheevos.<\/div><\/p>\n<p>Some people on the system have taken it upon themselves to certify blocks as legit. I&#8217;ll tell you what these people are called in a couple of paragraphs, but for now just think of them as accountants. The important thing is that in order to certify a block of transactions as legit, you have to do some computational work. Someone looking to certify a block will listen for all the transactions being broadcast by the people using the system. They can take these entries, check the signatures, and bundle the transactions to make a block. Once they have all the data gathered up and checked, they run the whole thing through SHA256.<\/p>\n<p>Let&#8217;s say we&#8217;ve got a couple thousand entries.<\/p>\n<p><tt>1. Gordon pays $50 to Alyx.<br \/>\n2. Alyx pays $10 to Eli.<br \/>\n3. Isaac pays $10 to Eli.<br \/>\n4. Wallace pays $100 to Judith.<br \/>\n- much later...<br \/>\n1999. Wallace pays $100 to Metro.<br \/>\n2000. Judith pays $45 to Eli.<\/tt><\/p>\n<p>As I said above, you can shove any old data into SHA256 and get a string of gibberish back. Let&#8217;s say the person certifying a particular block runs it through SHA256 and gets out a string like this:<\/p>\n<div class=\"narrow\"><tt>50d858e0985ecc7f60418aaf0cc5ab587f42c2570a884095a9e8ccacd0f6545c<\/tt><\/div>\n<p>The thing is, for a block to be validated the SHA256 value for the block must have an unusual property. It must begin with a whole bunch of zeroes.<\/p>\n<div class=\"narrow\"><tt>00000000000074225559f647571c15a4e4cbf13e9494e89cb556d71b5c7ec515<\/tt><\/div>\n<p>Note the start of the string. Since there&#8217;s no way to control or predict what the output of SHA256 will be, there&#8217;s no quick way to find something like this. The person trying to certify the block can just append a single random number to the end of the block and run it through SHA256 again. When that doesn&#8217;t work, they can try a different random number. The system is set up so that this is basically a lottery. Somewhere out there is a number that you can stick on the end of this ledger block that will cause the whole thing to yield a SHA256 hash that starts with a lot of zeroes. This number is called a &#8220;nonce&#8221;.<\/p>\n<p>Once someone has a winning value, they finalize the block and broadcast it to everyone else. The other people trying to certify the block can check the work and see that the block is indeed valid. The signatures check out, the math checks out, and the nonce does indeed yield a SHA256 value with a bunch of zeroes. So this new block gets added to the chain, and the lottery for the next block begins.<\/p>\n<p>Whoever wins this lottery &#8211; whoever finds the nonce &#8211; is allowed to add a special transaction to the start of the block, granting themselves a modest<span class='snote' title='1'>These days, it&#8217;s not at all modest. Bitcoin is worth so much now that it really is like winning a lottery.<\/span> finders fee.<\/p>\n<p>Now I&#8217;ll tell you what these people doing block certification are called: They&#8217;re called <em>Bitcoin Miners<\/em>.<\/p>\n<p>Yes, that&#8217;s what a &#8220;Bitcoin Miner&#8221; is. The name makes it sound like they&#8217;re somehow mining for virtual money with a pickaxe, but what they&#8217;re really doing is using their computing resources to help certify blocks, and getting paid for their trouble. The money incentive is there so lots of people will participate. Having lots of people playing the lottery makes things even harder for the&#8230;<\/p>\n<h3>Cheaters!<\/h3>\n<p><div class='imagefull'><img src='https:\/\/www.shamusyoung.com\/twentysidedtale\/images\/stock_cheat.jpg' width=100% alt='I mourn the loss of cheat codes in modern games. I do not mourn the loss of brick-shaped controllers. Ow.' title='I mourn the loss of cheat codes in modern games. I do not mourn the loss of brick-shaped controllers. Ow.'\/><\/div><div class='mouseover-alt'>I mourn the loss of cheat codes in modern games. I do not mourn the loss of brick-shaped controllers. Ow.<\/div><\/p>\n<p>So let&#8217;s get back to Wallace, who is trying to certify a bogus block where he didn&#8217;t pay anyone anything. First, he needs to find a nonce to certify his bogus ledger. He&#8217;s the only one working on this bogus block, so he has to find it all by himself. And he needs to find it fast. It won&#8217;t do him any good if his Bitcoin-mining setup certifies the block three days from now. By then the world will have moved on. The real block &#8211; the one with the transactions he&#8217;s trying to erase &#8211; will have long since been accepted.<\/p>\n<p>But it could happen! Maybe Wallace gets lucky and somehow finds a nonce for his bogus block before the other thousands of Bitcoin miners find a nonce for the real one. The trick is that he&#8217;s not done. That magic lottery number? The nonce? That number gets put at the <strong>start<\/strong> of the <strong>next<\/strong> block in the chain. In this way, each block is connected to the one before, and the one that follows. Thus forming a <i>chain<\/i> of them. Hence, &#8220;Blockchain&#8221;. So basically Wallace is working as a Bitcoin miner, except he&#8217;s certifying his bogus block instead of the legit block everyone else is seeing.<\/p>\n<p>However, since the blocks are in a chain, changing THIS block means it will also change the NEXT one, and the one after that, and after that, and so on. Wallace has to certify this bogus block, and then the next block in the chain will require him to win another SHA256 lottery, and so on. Even if he just wants to erase a single transaction, it will put him on the hook, forcing him to forge new blocks to the end of time. These latter blocks might be totally legitimate, but they&#8217;ll be descendants of his one bogus block and thus require different SHA256 solutions.<\/p>\n<p>If you watched American sitcoms in the 80s then I&#8217;m sure you saw an episode where a character tells a single lie at the start. But then later someone calls them out on it and they have to tell another lie to support the first one, then a third lie to cover for the second, and so on. &#8220;Hilarity&#8221; ensues. This is the same deal. If you want to offer a fraudulent block to the system, then you need to maintain that fraud with a never-ending chain of blocks.<\/p>\n<p><div class='imagefull'><img src='https:\/\/www.shamusyoung.com\/twentysidedtale\/images\/bitcoin_chain.jpg' width=100% alt='Note that people can&apos;t TELL these blocks are bogus just by looking at them. (Assuming the signatures are good and the math checks out, I mean.)' title='Note that people can&apos;t TELL these blocks are bogus just by looking at them. (Assuming the signatures are good and the math checks out, I mean.)'\/><\/div><div class='mouseover-alt'>Note that people can&apos;t TELL these blocks are bogus just by looking at them. (Assuming the signatures are good and the math checks out, I mean.)<\/div><\/p>\n<p>People using the system will see Miner #2,954 is offering one block, while Wallace is offering another one. How do they know which one of them is telling the truth? Who has the real block? From the perspective of the rest of the system, it looks like the blockchain has &#8220;forked&#8221; and there are two possible records for everyone&#8217;s transaction history. From the perspective of other people on the system, you can&#8217;t immediately know which fork to trust. Maybe Wallace is trying to erase transactions so he can keep his money, but maybe someone else is trying to add transactions that never took place to steal his money<span class='snote' title='2'>Ignoring the problem of how they could possibly forge his signature.<\/span>. Who do we trust?<\/p>\n<p>But unless Wallace has over half the computing power of all bitcoin miners, he&#8217;ll never be able to keep up. Everyone else on the system &#8211; thousands and thousands of bitcoin miners with tens of thousands of workhorse mining computers &#8211; will build on the legit blocks much faster than poor Wallace can certify blocks on his aberrant branch of the chain. The system is designed to trust whichever blockchain is the longest, and there&#8217;s no way Wallace can outpace everyone else on the system. Sooner or later (probably very soon) the system will leave his sad attempt at fraud behind. Everyone else on the system will agree that Wallace spent that money and that he doesn&#8217;t have it anymore.<\/p>\n<p>Cryptocurrency is a complex technology. Much of this explanation is a watered-down version of the <i>already<\/i> simplified <a href=\"https:\/\/www.youtube.com\/watch?v=bBC-nXj3Ng4\">explanation given by 3Blue1Brown<\/a>. If you&#8217;re looking for a bit more detail but you&#8217;re not ready to do a deep dive on the mathematical theory behind all of this, then his video is the next step up in sophistication.<\/p>\n<p>So that&#8217;s what I can tell you about bitcoin. Next week we&#8217;ll talk about why it matters for PC gaming.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Lots of people are curious about Bitcoin and cryptocurrency these days. This is particularly true among PC gamers. Not only is cryptocurrency making headlines, it&#8217;s also screwing up the graphics card market. Which naturally leads people to asking questions like, &#8220;What is this stuff?&#8221; I am not remotely an expert and I&#8217;ve never had a [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[102],"tags":[],"class_list":["post-41505","post","type-post","status-publish","format-standard","hentry","category-weekly-column"],"_links":{"self":[{"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/posts\/41505","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=41505"}],"version-history":[{"count":11,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/posts\/41505\/revisions"}],"predecessor-version":[{"id":42123,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/posts\/41505\/revisions\/42123"}],"wp:attachment":[{"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=41505"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=41505"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=41505"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}