{
  "episodeId": "SLP46",
  "speakers": {
    "stephan": {
      "name": "Stephan Livera",
      "role": "host",
      "tag": "STEPHAN"
    },
    "sjors_provoost": {
      "name": "Sjors Provoost",
      "role": "guest",
      "tag": "SJORS"
    }
  },
  "segments": [
    {
      "speaker": "stephan",
      "time": "00:08",
      "start": 8.33,
      "text": "You're listening to the Stephan Livera podcast focused on Bitcoin and Austrian economics. Listen in as I interview the best and brightest such as Bitcoin software developers, entrepreneurs and business leaders, analysts, economists and more. This is episode forty six with Bitcoin core developer Sjors Provoost. He is from the Netherlands and his work on Bitcoin core is sponsored by the company. Blockchain. But before we begin, a quick advertisement on behalf of my sponsor for this episode. Bittl Bootcamp is an online Bitcoin programming course taught by former podcast guest Justin Moon. See SLP thirty-six for my interview with Justin. Justin is well known for giving some Bitcoin talks and educating with great reviews from his prior students. In Bittl Bootcamp, you will join an online Slack community with other students and some alumni of his course, and together, here is what you can learn. First, you build an A miniature implementation of Bitcoin in Python with all major features: peer-to-peer networking, Nakamoto consensus, monetary policy, and more. Deploy the network along with your classmates, build some simple infrastructure for it, and exchange in a mining pool and practice attacking it. Second, program the real Bitcoin peer-to-peer network, connect to peers, send and receive messages, write a crawler that can visit every public node in the network, implement naive headers-first initial block download, and build a basic SPV client. Third, build a hardware wallet with MicroPython firmware Just like Trezor, generate seed words, create HD wallets, construct and sign transactions, and lastly, build a project of your own choosing. The next course begins January 21st and will repeat monthly through 2019. Completion of an introductory Python programming course is the only prerequisite. Visit biddlbootcamp dot com to learn more, that's b u i d l b o o t c a m p dot com. Now, on to the interview with Shores. Welcome to the show, Sjors. Thanks very much for coming on. Thanks for having me on. Yeah, so Sjors, I've seen you've been doing a lot of, interesting work recently. you've written some articles and you've been talking about things like hardware wallets. I thought it'd be great to get you on for some discussion. So maybe, you wanna just tell us a little bit about how you got into Bitcoin Core development?"
    },
    {
      "speaker": "sjors_provoost",
      "time": "02:20",
      "start": 140.15,
      "text": "Yeah, let's see. I think I started getting involved into Bitcoin Core in Sort of August, September 2017, sort of around the, UASF, drama. Mostly by coincidence, I was actually playing around with, something called the Drive Chain by Paul Stoertz, and as I was experimenting with that code, I wanted to fix a test in Bitcoin Core for some reason, and so I did that, and then from there on, I just did more, mostly reviewing, but, also contributing some pull requests. And then towards the end of the year, Blockchain.net info, which is my previous employer, offered to, sponsor me to keep doing that, so"
    },
    {
      "speaker": "stephan",
      "time": "03:02",
      "start": 182.03,
      "text": "that's been fun. Right. And so previously, at what, at what time period were you working with them for, directly?"
    },
    {
      "speaker": "sjors_provoost",
      "time": "03:08",
      "start": 188.24,
      "text": "directly from, late twenty fourteen to, mid twenty seventeen."
    },
    {
      "speaker": "stephan",
      "time": "03:14",
      "start": 193.64,
      "text": "I see, yeah, yeah. Okay. And so at, at their, at, at, on their side, you were more doing like application development on their side or what were you doing there?"
    },
    {
      "speaker": "sjors_provoost",
      "time": "03:22",
      "start": 202.39,
      "text": "Yeah, so when I joined, they had a, a web wallet was built in mostly jQuery and HTML, and I helped at the time, partially rebuilt that into Angular JS, and I think now they've, they've done it all over again in, React JS. So, you know,"
    },
    {
      "speaker": "stephan",
      "time": "03:39",
      "start": 219.44,
      "text": "you have to keep working on these things. Right, right. I see you've just gotta, it's just that process of continually updating and so on."
    },
    {
      "speaker": "sjors_provoost",
      "time": "03:46",
      "start": 226.22,
      "text": "Yeah, and I mean, you know, the wallet has gotten a lot more complicated as well. Right. So, you, you start with the simplest thing, and then as you add more features, at some The whole foundation just has to be redone. That's, that's often how that goes."
    },
    {
      "speaker": "stephan",
      "time": "04:00",
      "start": 239.91,
      "text": "I see. So let's talk a little bit then about what you've been mainly working on, thinking about, reviewing. Let's talk a little bit about those."
    },
    {
      "speaker": "sjors_provoost",
      "time": "04:10",
      "start": 249.64,
      "text": "yeah, I don't know what you wanna-- if, if there's anything specific you're interested in. I mean, we could talk about hardware wallets, for example. I've been looking at that most recently, so that's probably freshes on my mind."
    },
    {
      "speaker": "stephan",
      "time": "04:20",
      "start": 259.9,
      "text": "Okay, so sure,"
    },
    {
      "speaker": "sjors_provoost",
      "time": "04:21",
      "start": 261.1,
      "text": "let's, let's go into- Started, right? I think one of the first feature pull requests I did was to-- was something extremely trivial, you'd think, which was to enable RBF by default in the, graphical user interface, which is just a matter of changing the default in a checkbox. But if you look at that pull request, I think there's like a hundred comments about it. So one of the things you'll learn is that people start bikeshedding over the exact wording and, you know, whether the default should apply only to the graphical user interface or also to the-- The command line system, et cetera, et cetera. So that was a really interesting way to, to get started."
    },
    {
      "speaker": "stephan",
      "time": "05:02",
      "start": 301.55,
      "text": "Yeah, okay. So what, in, in terms of your background, like having been a developer for, you know, professionally a developer for some time, was that a difficult process for you to adjust to, or were you already associated, you, you had already been doing sort of open source development and used to that kind of mechanic of review comments and so on?"
    },
    {
      "speaker": "sjors_provoost",
      "time": "05:22",
      "start": 321.5,
      "text": "I don't know, actually. I mean, for me, the one barrier was that I just I started C++ from nothing essentially because I have more experience in, Objective C, but it's quite different and Ruby and JavaScript and some of these things. so just learning C++ is a lot of work and then trying to understand the code base is a lot of work. But the nice thing about all this feedback is that you learn, right? So every line of code gets a comment essentially saying, \"Hey, you should look, you should do maybe this way or that way.\" And then you read a bunch of documentation and so the, the, the The feedback is actually quite useful if you're trying to ramp up your knowledge."
    },
    {
      "speaker": "stephan",
      "time": "05:59",
      "start": 359.27,
      "text": "Right. So what would be a good place to start then? W- I, I know there are various talks, I think there was one done talking about, \"Here's the overall architecture of Bitcoin Core that you should, you know, learn that before then you try and fiddle around and actually-"
    },
    {
      "speaker": "sjors_provoost",
      "time": "06:15",
      "start": 374.77,
      "text": "I would say compile it locally on your own computer, that's the first thing. So, you know, you, you check out the, the Git repository and you build it, and you probably need some dependencies on your computer, and once you figure that out, you, you start the thing in testnet You put some coins on it, and then I guess the first thing you'll do after, after you've done that is you look through the open pool requests, so the things that are already there, and you find something that looks simple enough that you can review it. So probably, the, the issues of tags, so they might have a tag like UI, so user interface or wallet, kind of the thing that, that's easy to understand what, you know, what's going on. and maybe the pull request will say, fixed typo in menu entry, right? Let's say that's the name of the pull request. Okay, so you, then you need to find out in, you know, figure out how Git works, kind of how do you, check out somebody else's code at adding a remote. It's all, it's not rocket science, but then it's, that's why it's nice to pick a simple issue so you can focus on figuring all the tooling out. then you build their version and you check by running it yourself, hey, is this actually fixed? so then, you know, the minimum you've done is at least test it, because if it doesn't do what, what it's supposed to do, then you just write a comment on the GitHub ticket saying, hey, I'm, you know, I'm not seeing this fix, looks like you missed something. So then you don't even need to review any code, 'cause it doesn't actually fix it. And then you can look at the, the code differences and, and try to say something intelligent about that. Right. And then you just pick a more complicated one. I find reviewing quite useful. Just lots of testing, you become familiar with the code as you go, and then you can read some documentation if you want to, but there's not that much documentation. It's mostly the code itself."
    },
    {
      "speaker": "stephan",
      "time": "08:06",
      "start": 486.45,
      "text": "Right, and you mentioned also you've done some reviewing. What sort of split do you do in terms of writing new code versus reviewing existing?"
    },
    {
      "speaker": "sjors_provoost",
      "time": "08:15",
      "start": 494.88,
      "text": "It's hard to track and it depends on my mood, but it's probably like three to one reviewing to writing code, if not like even a stronger ratio. The other thing about reviewing is it's quite addictive, because, GitHub, once you review something, you leave a comment on a GitHub issue, and then you get, you know, notifications when somebody else leaves a comment. And so you tend to check on those comments, and then, you know, you, you've suggested a fix Then the author actually makes the fix and then says, \"Hey, I, I fixed this, so you try it again.\" And so it's quite easy to get into this sort of cycle of, of testing stuff, testing whether now the fix finally works."
    },
    {
      "speaker": "stephan",
      "time": "08:55",
      "start": 534.66,
      "text": "Yeah, sure. And so the other thing that I've, I've often been interested by or just under, just wanting to understand how that works is, I understand that at any given point there may be many different pull requests and there may be many different things all happening at the same time in that Bitcoin Core repository. How do you try to keep in ta- you know, keep that all conceptually in your mind at the same time just to understand, oh, well, if we, if we put in this change, but then we've also got to consider there's this other potential change, that kind of thing."
    },
    {
      "speaker": "sjors_provoost",
      "time": "09:29",
      "start": 569.04,
      "text": "Well, at the simplest level, that's a problem you have to deal with with your own pool requests. So, I think at the moment, I haven't checked now, but I think I have maybe about ten pool requests open. some of them like very simple text changes, others a little bit more complicated. And whenever somebody changes something else somewhere else that gets merged into master, at some point my changes would no longer be compatible. So then you have to do something called rebasing, which is you, you kind of take your changes and you replay them or rebase them on top of the latest version of the, the master branch, right? And sometimes that's trivial, and sometimes it's really hard because something completely changed from right from under you, like, like for example, the, the way the, the documentation is put into the code, that Could completely change and then you have to figure out what changed. I mean, the changes are always incremental, right? There is one master branch and, and, and basically at any possible time, in theory at least, it could be released. So it always has to be in a working state, so that's nice. Now, there's also other pull requests that aren't merged yet. So what I just described is if, if I have a pull request and somebody else changed something and that is merged, then I, then I'll be the one who has to fix it. But let's say you have two people who are working on two different features, but that have some code in common. then you kind of get in each other's way, right? And then it depends on who gets merged first. It's a race, in theory. It's kind of a race, but obviously, you know, you try not to be stupid or annoying. and there are some nice tools, recently added, I think it's pronounced \"Drawbot,\" but I'm not sure, it's by, Marco Falke. And it-- what it does is, it's a bot that crawls through all the different pool requests. And, and looks at conflicts between poll requests, and then it'll leave a comment, basically across those two poll requests. So if poll request A is, is incompatible with B, it'll leave a comment on A saying, \"Hey, maybe you should also check out B,\" and it'll leave a comment on B saying, \"Hey, maybe check out A.\" So that kind of encourages you to, have a look at what this other person is doing."
    },
    {
      "speaker": "stephan",
      "time": "11:38",
      "start": 698.08,
      "text": "Right. Yeah, that's interesting to learn a little bit further about this. I think, I, I only Of this, having done, just, Andreas' book, Mastering Bitcoin, a little while ago, and in that, in that book, he, as part of the process, you actually, you know, you download the, the, you use Git and you download Bitcoin Core and you build it from the, you know, from, from that repository. So I have sort of, so, yeah, but, but I suppose in that book, what it's doing is essentially teaching you how to download the latest version, whereas what you're talking about more is Go about setting up your own little branch, running your own little tests in that, and then once you're sort of satisfied with that, that's where you may then make the pull request for, you know, for it to then, once it's gone through the right levels of review, to then be merged into the master."
    },
    {
      "speaker": "sjors_provoost",
      "time": "12:32",
      "start": 752.02,
      "text": "Right. And as the progress is being reviewed, you'll probably have to keep pushing updates to keep up with what's happening on master, though only-- You, you generally only do that when, get complaints. So GitHub will tell you at some point, \"Hey, I Can't automatically merge this, because Git is pretty smart in, in a lot of things. If, if somebody adds one line in the same file and another person adds a, another line in the same file, Git can usually figure it out, you don't have to do anything. But sometimes you're really just editing the same line in two different ways, and, and then you have to do something about it, and GitHub will tell you, and all these other tools will tell you."
    },
    {
      "speaker": "stephan",
      "time": "13:05",
      "start": 785.48,
      "text": "Right, I"
    },
    {
      "speaker": "sjors_provoost",
      "time": "13:06",
      "start": 785.96,
      "text": "see. So it's a surprising amount of plumbing involved in, software development, and, you So many different areas of the code and so many different things that need to be done that quite often you, you know, you can all change it, change something without getting in each other's way."
    },
    {
      "speaker": "stephan",
      "time": "13:26",
      "start": 805.69,
      "text": "Right, because you're all working on your own little separate pieces."
    },
    {
      "speaker": "sjors_provoost",
      "time": "13:29",
      "start": 809.28,
      "text": "Yes. So it's, it's interesting that people, I guess, have different motivations of what they're working on. And of course, you need some level of review in order to get anything you're doing merged. So maybe you, you try to figure out who the right person for that is, and maybe you help review some of their You can't force anyone. So there's, there's some really great pull requests, I don't, I can't really think of examples right now, but that have been open for more than a year because there's not enough people reviewing it or, or sometimes somebody does review it, but then the original author might be, you know, occupied for a few months and not actually Change the things that need to be changed, and then by the time they've, they finally get time to change what they need to change, then the reviewers are gone again, and, and so these things can drag on for a while. But sometimes people are all excited about the same thing, and then review happens really quickly. And really back and forth. So it's nice, once you have the momentum, that would be my advice, keep the momentum going. Like, if you receive feedback, just-- and you have the time to fix it immediately, just do it immediately, 'cause, 'cause then you might just keep the ball rolling and get it merged fairly quickly."
    },
    {
      "speaker": "stephan",
      "time": "14:33",
      "start": 872.79,
      "text": "Right. It's sort of like strike when the iron is hot, hey? Yeah. So what are some examples of things, you know, right now that you think are quite-- there's a lot of people interested in them?"
    },
    {
      "speaker": "sjors_provoost",
      "time": "14:45",
      "start": 884.82,
      "text": "so there"
    },
    {
      "speaker": "sjors_provoost",
      "time": "14:49",
      "start": 888.84,
      "text": "Okay. Yeah. So descriptors are a way to describe, I guess it's, it's to describe how you turn a key into an address in an abstract way. So normally, you know, if you have the, the old style addresses that start with the one, you take a public key and you take the hash, and so you would describe that as SH opening bracket, public key, and then closing bracket, or you would describe it as SH opening bracket, and private key, and a closing bracket. Because the software will understand, you know, it has to take the private key, turn it into a public key. Or you can, you can use, these, these deterministic hierarchical wallets. So then you might say SH, and then you start with the master key, and then you take, and then you say slash zero, slash zero, slash one, slash whatever the, the derivation path is. and for SegWit, it would be called, WSA, as in, witness, sorry, WPK, the witness public key hash. So that That describes the SegWit address, the ones that start with PC1. And there's also a way to write down what a multisig address looks like, so you know, take multisig of these two keys, and you need one of them. And That abstraction is pretty helpful. So what we find is that there's a lot of commands in the wallet, say for importing new keys or for scanning certain things, and also in the future for hardware wallet support, you also need that type of abstraction. So what you see is people are adding it to all sorts of places. So those existing commands in the client And now these commands are giving, this descriptive functionality, and people seem to be, at least, you know, at least two or three or four, whatever, people seem to be excited about that. So those changes get a lot of review quite quickly. Yeah. but there's probably-- there could be entire areas of focus where like there's an entire sub-community super active, and I wouldn't even notice it. It's kinda like on Twitter, right? You have these little bubbles where you, you know, once you dive into the bubble, you see a lot of activity, but it's not showing up on your timeline."
    },
    {
      "speaker": "stephan",
      "time": "16:52",
      "start": 1011.98,
      "text": "Yeah, I see, I see. Okay, so let's, go now to hardware wallets. So I know that's something you've been, you know, doing talks about and you're just doing some work on. Do you wanna give a bit of a, background on, you know, what is it and why?"
    },
    {
      "speaker": "sjors_provoost",
      "time": "17:08",
      "start": 1028.07,
      "text": "Yeah, I guess I could start with the why."
    },
    {
      "speaker": "sjors_provoost",
      "time": "17:14",
      "start": 1033.99,
      "text": "Thing you have is actually Bitcoin, you're checking all the transactions yourself, it's kinda how you're supposed to use it. but the problem is, where do you keep your private keys? And if the answer is on a hard disk on your Windows laptop that you're carrying around to every coffee shop you're going to, it's not optimal. I guess. So hardware wallets, on the other hand, are like dedicated devices, that keep your keys safe, kind of. at least they're not on the internet. And you know, there's, there's all sorts of talks of what could go wrong with them, but I think it, it's still, they're still much better than a, a insecure computer that you're using daily and you, you might be installing all sorts of stuff on, maybe accidentally put malware on it, et cetera the problem with hardware wallets though, is that they have their own, software support. So when you insert the physical device, something has to open on your computer, and usually that's kind of a A website inside of an application, and that website, what it usually does is it sends the public keys of your wallet, the, the master keys, not, well, the, the account keys, sends them to the server of the company that made the hardware wallet, and then their server figures out what your balance is. And that's how you see, when you plug in the hardware wallet, you very quickly get to see your balance, and that's a very good user experience, maybe not a good privacy experience, because now, you know, their server kind of could know the, you know, correlation between your IP address and how much Bitcoin you have. And then they've also shipped the wallet to you, and some, you know, overly curious law enforcement agency might then try to put those pieces together and, and figure out, you know, or some evil hacker, figure out who the good targets are. So from a privacy point of view, that's not ideal, and you don't get any of the benefits of the full node. So the idea would be to try and combine that, and that's been on, on people's wishlists, I think, forever. Yeah, sure. and I think it'll be a while before it's, it's, it's really ready, but that's, that's why, so the question then is how to do it. one of the things is there's no universal way to do There's no universal way hardware wallets communicate. Like, usually they're USB, but they don't fundamentally have to be USB. they all have different drivers, different protocols, et cetera. So do you then want to, you know, take every single hardware device and, and put the driver right into Bitcoin Core? that, that would add a lot of dependencies and a lot of extra code, and then you, you kind of have to keep track of the manufacturer, making sure they're not making any breaking changes, and the manufacturer might be releasing software updates very quickly, but Bitcoin Core moves at a slower pace. So that, that's probably not a very practical way yet. Maybe one day there will be a standard, and then maybe, you know, we could add five hundred lines of code to Bitcoin Core that just works with every single hardware wallet out of the box. but there's a slightly different solution now that I think people are interested in at least, and that's, work by Andrew Chow. And what he did is he wrote a Python library and that Python library kind of pulls in all the Python drivers from, I think, about five different hardware wallets, and so it creates a universal wallet. So you, you call that command, I think it's called HWI, and you say, enumerate, and then it just looks at all your USB ports and says, \"Okay, I can see this device and this device, and here's the fingerprint of this device so you can identify it. \" And then you can call a new command and say, \"Give me, give me your keys, your, your public keys. \" And that'll work on every device. So now you have a universal way of communicating with hardware wallets, which is nice. and now the idea, just the way I'm seeing it Is we take this universal way of communicating, so not necessarily his driver, but just the way his driver, the way his commands work, so anybody could make something similar, and then we make Bitcoin Core talk to that. So then all Bitcoin Core needs to do is, is be able to talk to a external application and say, \"Give me your keys, sign this transaction, please,\" et cetera. But the external application wouldn't be part of Bitcoin Core, so it's still the user's responsibility to download a driver for their wallet, for their hardware wallet. but Bitcoin, Bitcoin Core would have one way of communicating to this, right? And I think, I might have to re-explain that in some other way to make a little bit more sense. Yeah, no, I think"
    },
    {
      "speaker": "stephan",
      "time": "21:45",
      "start": 1304.71,
      "text": "I, I think I'm mostly following, but the-- I, I guess just to try and sort of bring it back for, you know, the average listener, it might be that In the past, they, they might have used, like, let's say they were using Armory, and they were using offline Armory, and in that model, they had to u- they had to have an offline computer with the keys, and then bring that over, you know, using a USB, and then bring that offline message to the online computer to broadcast a message."
    },
    {
      "speaker": "sjors_provoost",
      "time": "22:16",
      "start": 1335.92,
      "text": "Yeah, but, but even that wasn't that easy, right? It involved a lot of-- probably, I haven't actually looked that deeply into these techniques, but it probably involved a lot of command line magic. And so- I mean, in, in principle, there's nothing wrong with having an offline laptop, you know, to use as your hardware wallet, but even then you want it to be easy. You want, you know, for some, somehow if you just plug this thing in and, and you, you know, enter a few standard commands and it just works,"
    },
    {
      "speaker": "stephan",
      "time": "22:46",
      "start": 1365.81,
      "text": "yeah, sure. And, I, I think the other component that I think might be interesting to touch on is this concept of PSBT, the partially signed Bitcoin transaction. could you outline a little bit on that? And how that relates."
    },
    {
      "speaker": "sjors_provoost",
      "time": "23:02",
      "start": 1381.98,
      "text": "Right. So there's, there's indeed a couple of ingredients I think we need in order to be able to use hardware wallets with Bitcoin Core in an, in an easy way without putting in too much new code into Bitcoin Core. So one of them is, is some standard way of communicating with the driver, so some sort of commands that, you know, you know, accepts calls like enumerate, give me your keys, sign this transaction. but the other way is how do you communicate the transactions themselves? And that is again work by Andrew Chow and I believe someone else too, which is a standard called partially signed Bitcoin transactions. And what that does is it takes a transaction, that kind of literally what it says, it takes a transaction that isn't signed yet, or if it's a multisig, like part, part of it is signed. And communicates that in a format. So then, for example, your Bitcoin Core wallet might, might know all the public keys, so it creates a transaction, but it doesn't have the private keys, so it can't put the signatures, and it uses this PSBT format. To, to say, okay, this is what I have, this is my draft transaction, gives it to the hardware device, the hardware device says, \"Thank you, I understand this, this format, let me add the keys for you.\" And then he gives it back."
    },
    {
      "speaker": "stephan",
      "time": "24:13",
      "start": 1452.54,
      "text": "Right. And I guess the other question people might be thinking is, why bother with hardware wallet support in Core? Is it that, Bitcoin Core has a more well-reviewed, you know, software and therefore it's kind of easier to kind of, for everyone to sort of use the main software that way? Or what are some of the benefits there?"
    },
    {
      "speaker": "sjors_provoost",
      "time": "24:34",
      "start": 1473.56,
      "text": "Well, if you want a full node, then you have to use either Bitcoin Core or some other full node implementation, so you don't really have much choice Choice, right? And if you then also want the advantage of, the security advantage of a physical hardware device, well then you need some way to combine them, or you get the privacy trade-offs I just mentioned."
    },
    {
      "speaker": "stephan",
      "time": "24:52",
      "start": 1491.72,
      "text": "Yeah, exactly, yeah."
    },
    {
      "speaker": "sjors_provoost",
      "time": "24:53",
      "start": 1493.48,
      "text": "And indeed, perhaps also the review, I mean, I don't know, some of the popular hardware wallet companies, they, they probably, you know, they have open source all their work and they do get a lot of eyes on it too. So I don't necessarily wanna do a like, \"Oh, Bitcoin Core is more secure because it has more review than that specific wallet.\" I just think fundamentally, a full node plus a hardware wallet is a very natural combination to have, is a very strong combination. And I guess in the beginning it'll be more for advanced users, but at least I want it to be easy. Like, I'd, I'd like it to be, from a user point of view, you would open Bitcoin Core, which is just a graphical wallet, looks a little old-fashioned, but it's, you know, not terrible. Then you plug in your USB key. and then you have some menu entry that says like \"Pair Hardware Wallets\" or some, some language like that. it automatically finds the hardware wallet, it, it just creates a new wallet, pops open on your screen, and, and then you can just create a receive address. You can unplug it because you can simply receive on it now. And then when you wanna send a transaction, you just use that wallet as always, and it says, \"Hey, plug in your hardware wallet.\" You plug it in, you click OK on the hardware wallet, and boom, it sends out the transaction. That's, that's how I would like the user experience to be, and, and all the plumbing is what I talked about."
    },
    {
      "speaker": "stephan",
      "time": "26:09",
      "start": 1568.96,
      "text": "Yeah, no, I think, I think that sounds like a, a good, Improvement mainly on the privacy point of view to me. The"
    },
    {
      "speaker": "sjors_provoost",
      "time": "26:16",
      "start": 1576.44,
      "text": "descriptors come into play there as well that I talked about. So one question is, how does the hardware wallet tell the environment what its keys are? and descriptors could be one way, universal way for the hardware wallet to say, okay, this is the series of keys you should use. And I don't know if you're familiar with all the different derivation standards for that, so, bit 44, bit 32, that sort of stuff. there's different ways to go from the master seed to the actual addresses. And there's some commonality between wallets, but it's not exact, and, and some wallets might have their preferences. So these descriptors can also be used to express those preferences, to say, okay, use this derivation path for"
    },
    {
      "speaker": "stephan",
      "time": "26:59",
      "start": 1619.16,
      "text": "this hardware wallet. I see. Yeah, so it's sort of saying, okay, this is the style that Trezor are using, and this is the style that Ledger are using, and so on and so forth."
    },
    {
      "speaker": "sjors_provoost",
      "time": "27:09",
      "start": 1628.61,
      "text": "Right. And maybe, maybe some wallet doesn't support SegWit or some new future feature that we might have, like, I don't know Well, it's supported and others don't, so they could also use those descriptors to kind of indicate what, what stuff they can do, and then Bitcoin Core can figure out what the best solution is then Maybe not use this new address format."
    },
    {
      "speaker": "stephan",
      "time": "27:29",
      "start": 1648.9,
      "text": "Right. And I, I understand you've been doing your own experiments with this as well to try and, you know, to prove it out."
    },
    {
      "speaker": "sjors_provoost",
      "time": "27:36",
      "start": 1656.26,
      "text": "Right. So I have a proof of concept pull request out to Bitcoin Core, that takes, that basically, makes the changes inside of Bitcoin Core that are needed to talk to the scripts that Andrew Chow wrote. And it, it kinda works, like, you know, you can, you can use it on testnet and, yeah, well, you could use it on mainnet, but obviously that is, at your own risk. But feel free to try it on testnet. But that's still only at the command line level, so that's still, when you're talking to Bitcoin Core through the command line And what I really wanna get to is, is having this work in the user interface."
    },
    {
      "speaker": "stephan",
      "time": "28:10",
      "start": 1689.99,
      "text": "Right, I see. Yeah."
    },
    {
      "speaker": "sjors_provoost",
      "time": "28:11",
      "start": 1691.14,
      "text": "And then, there's basically a pile of other poll requests that are out there that I kinda need to be merged in to build on top of. So then, you know, I tend to focus my review work on, on those pull requests to make sure that those get merged, the stuff that's upstream, 'cause otherwise it's too much stuff to wrap your head around all the prerequisites."
    },
    {
      "speaker": "stephan",
      "time": "28:31",
      "start": 1710.66,
      "text": "Right, I see. And so it tends to be that, you know, people have a certain specialization or something they're interested in, and then they tend to review and code things in that same area."
    },
    {
      "speaker": "sjors_provoost",
      "time": "28:41",
      "start": 1721.2,
      "text": "Yeah, I think that's, that's kinda how that goes. yeah, you should If you, if you can talk to say Matt Corallo, he worked, you know, he's been doing a lot of work on this new standard for miners, the BetterHash, for mining pools, and, you know, he, he makes a lot of changes I think you made a lot of changes, especially the last year, that are kind of little prerequisites to, to move in that direction, so that you, you can see that pattern. I, I'm not saying everyone does that."
    },
    {
      "speaker": "stephan",
      "time": "29:08",
      "start": 1747.97,
      "text": "Yeah, no, but that's, that's totally, I think it's, it's fair enough because, you know, everyone's got certain interests that they, you know, that they are into, and it makes the most sense to work on the things that you're most interested in. So I don't, I don't,"
    },
    {
      "speaker": "sjors_provoost",
      "time": "29:21",
      "start": 1761.37,
      "text": "I don't blame anyone for"
    },
    {
      "speaker": "sjors_provoost",
      "time": "29:29",
      "start": 1768.9,
      "text": "And it works exactly the same way. It's a lot of, you know, a lot of times engineers are expected to kind of understand what they should work on, have a sense of responsibility. Right, I see, I see. And, and it's not, not as top-down as some people think."
    },
    {
      "speaker": "stephan",
      "time": "29:41",
      "start": 1781.39,
      "text": "Yeah, sure. Okay. Alright. So anything else you wanted to mention in terms of, hardware wallets or Bitcoin Core development?"
    },
    {
      "speaker": "sjors_provoost",
      "time": "29:48",
      "start": 1788.49,
      "text": "Oh, no, I mean, if you have any questions about, anything else there, let me"
    },
    {
      "speaker": "stephan",
      "time": "29:52",
      "start": 1792.42,
      "text": "know. Yeah, well, I think, Of Bitcoin Core, what, what are some, interesting things that you might see coming? And I suppose, actually, let's start, let's maybe start with a little bit of an, a more open question. What do you think is likely to get merged in this year into Bitcoin Core?"
    },
    {
      "speaker": "sjors_provoost",
      "time": "30:15",
      "start": 1815.17,
      "text": "So that's always unpredictable. I would say. I don't know. I mean, I hope some of the prerequisite stuff for hardware wallets makes it in. I, I think the changes are simple enough that they could make it in this year, but it, it does depend on, you know, how much people work on it and how much people review it, and if And if people agree on the concept, so it could be that there's some, there, there might be some, more difficult, some hairy security trade-off that, you know, you might not immediately agree on. Say, do you use a, do you call an external command or do you call a server or something like that? And, and if those type of discussions can slow down, things down a lot. because generally when people can't really agree, then the, the default is to just kind of hold off and, and wait for some new information. But, but if you look at the, if you look at, if you look at the open pull requests right now, there's two hundred and fifty-five of them, and most of them are like surprisingly nitty gritty. So when you ask what's gonna get merged this year, it's gonna be mostly very small, random-seeming stuff, like some improved, if I just look now, I see something related to probably Windows UDF, Support or"
    },
    {
      "speaker": "stephan",
      "time": "31:27",
      "start": 1887.36,
      "text": "so. How about, how about this one then? Aside from the, hardware wallet stuff, what's on your wish list for merging, into Bitcoin Core?"
    },
    {
      "speaker": "sjors_provoost",
      "time": "31:37",
      "start": 1897.4,
      "text": "Well, my own stuff would be nice, but, other stuff too. The, like I said, basically anything related to that hardware wallet stuff. So that means anything related to descriptors. oh, one big thing, Peter Wylie is sort of taking a lead on that one, which is really revamping the wallet itself. Because the wallet is one of the older components and quite confusing, and there's some good ideas on how to, how to make it better, also using those descriptors as a way to describe what is in the wallet. And the nice thing about that is, is Generally, when code gets refactored, it's just easier to read. But right now, it's still really, really hard to understand what the wallet is doing. Now, in terms of bigger features, like I'd, I'd love to see things like Schnorr and, and Taproot. I think, one of those types come in to the code, but I feel like I can't really do anything there. Like, I can test it, but I don't understand the cryptography well enough, so I can't really review it at that level. So it's really just waiting for the two or three people in the world that can actually write that code and actually do it, and then I'll happily like review it as quickly as possible and find any obvious problems with it. But that's, that's about as much as I can contribute to, to those things. And unfortunately the people who have to do this, they also do a lot of other things. So I guess what I can do there is I'm at least try to take some work away from them there, so they can only focus on the things that they're, you know, exclusively good at."
    },
    {
      "speaker": "stephan",
      "time": "33:04",
      "start": 1984.48,
      "text": "Yeah, that's fascinating. yeah, I guess it's just a very highly specialized field, and there's just literally just not that many people who can do that."
    },
    {
      "speaker": "sjors_provoost",
      "time": "33:14",
      "start": 1993.91,
      "text": "Yeah. There's, there's a, there's a smaller one, for example, this been, been open for more than a year and has to do with how the settings are saved. gets a little bit nitty gritty, but if you, if you open the wallet, the graphical wallet, there's a bunch of, you can have a configuration file, you can put settings in there, but there's also settings that are stored in, In the graphical client itself, the problem is then if you close it and you start this, the non-graphical version, and it doesn't remember those settings, and that creates some bit of a mess, and there's a nice podcast by, Luke Junior that, That fixes that. So that's, that's one I would like to see merged. It's getting more attention recently. So"
    },
    {
      "speaker": "stephan",
      "time": "33:58",
      "start": 2037.6,
      "text": "let's, save a bit of time now to speak about, one of the articles you've written recently, which I thought would be good to discuss. So you wrote this article called \"A Crime on Testnet.\" Can you just give a bit of an overview on that?"
    },
    {
      "speaker": "sjors_provoost",
      "time": "34:10",
      "start": 2050.11,
      "text": "Yes. So I'm just opening it right in front of me also to remember. So what I did is I, Recently, I'd say over the last year or so, I've been reading sort of Dutch court cases that are published, and they, they all involve mentions of this, this mythical, chainalysis. thing and, and similar tools, that have been used to bust people who were, you know, accused of money laundering."
    },
    {
      "speaker": "sjors_provoost",
      "time": "34:40",
      "start": 2079.68,
      "text": "but And from reading the, the, the problem is when you're reading these published documents, you don't really know what-- you don't know everything, 'cause they're not, you know, they're written by somebody who's probably not technical, who's just there to write down what's being said in court, and probably during the court hearing itself was already confusing enough. Like, we don't have video recordings of these things. so it's kind of hard to reconstruct what's going on, but my impression is, quite often that they're sort of, they're too optimistic about how good the evidence is from these tools. especially for in a criminal case where you really have to say, okay, somebody, you know, actually laundered money. You know, you can't just like, like, like a lot of these tools are meant for exchanges to just do some risk guessing, saying, maybe we shouldn't, you know, maybe we should ask more questions to this customer or more questions to that customer, and then it's fine if you're wrong every now and then. but in a criminal situation, you can't have that. You have to have a, you know, strong evidence. So I got pretty critical of that, but then I decided I need to articulate my criticisms a little bit better, and how do you do that? Well, so what I came up with is I, I wrote a blog post called \"A, A Crime on Testnet,\" and there I am describing a hypothetical simple scenario where, starts out with somebody who wants to drink coffee, and we kind of imagine a dystopian future where that is totally illegal,"
    },
    {
      "speaker": "sjors_provoost",
      "time": "36:02",
      "start": 2161.58,
      "text": "And, and how does he do that? Well, he knows a guy, and the guy takes Bitcoin, so he goes to the guy. He, yeah, he buys his coffee. Well, first he has to buy the Bitcoin, so he goes to a regular website, 'cause in this future that's, that's perfectly legal. And he buys the coins, he, he buys his coffee. At the end of the day, the coffee, the coffee guy has a bunch of coins in his wallet and he needs to do his own shopping. So he actually wants to go back into the fiat system, but he can't use the, the online exchanges for, for some reason, and so he, he needs to find someone who's, who takes Bitcoin for cash. And then I kind of move the story following the guy who's taking the Bitcoin for cash, because he's actually the main character in this story. so the guy who takes, Bitcoin for cash, he, he's trading with, with our, coffee guy. But he's also trading with an undercover police officer, and then at the end of the story, we kind of look at the blockchain where the undercover police officer says, \"Hey,\" I'm seeing my transaction, and I'm also seeing some other transaction, and I can see that these two are related. and therefore I'm going to assume that, that all of that was your volume. For the money laundering. Right, so you, you kind of drip a little bit of coins into somebody's wallet by doing a trade with them physically perhaps, and then you say, \"Oh, now I can see the total size of your wallet, and therefore, you know, that's, that's what we're gonna convict you of, of money laundering that amount.\" That's kinda how that works. In a nutshell. But then, yeah. And so in, in this story, and I guess that's because it's the first version, and I'm trying to keep it simple, in this story it's actually correct. Like You know, the, the, the analysis actually finds the coins that are actually from this person. but in reality, things are much more murky. Or could at least be a lot more murky. And so that would, I guess, would be a follow-up, but the story's already long enough, so I was-"
    },
    {
      "speaker": "stephan",
      "time": "38:08",
      "start": 2287.75,
      "text": "But I think that is really highlighting the difficulty with this kind of clustering analysis and these, the, the use of these sort of, the merging heuristic to say that, well, because all these four inputs were used in this transaction, that now, you know, you are the owner of all of those."
    },
    {
      "speaker": "sjors_provoost",
      "time": "38:28",
      "start": 2307.99,
      "text": "Yeah, so basically the heuristic is then, if, if multiple inputs are, you know, used in the same transaction, well, then somebody must have signed that transaction, therefore that is the owner of the funds. but an easy example with-- and, and so the, the example here is correct, right? So, so our, our trader has a wallet, he receives two different coins, two different inputs for his new transaction, he combines those into one transaction, and he was the one signing that, so he actually took those two inputs And, and send them somewhere else. And so that proves that those, you know, and so in that case, those two aren't related. But let's say that instead of, that it wasn't our trader's wallet, it was a custodian wallet, say it was using Coinbase. So now what happens is the customer, the undercover agent sends money, but unbeknownst to this undercover agent, he's not sending it to the trader, he's sending it to Coinbase, the trader's address on Coinbase. And so does our, our coffee dealer, he also sends coins to Coinbase. Now the agent comes back at the, at the police station, looks at the blockchain, and he sees all the transactions from Coinbase. He's like, \"Whoa, this guy is doing, you know, billions of dollars in, in laundering. What the hell's going on?\" So that's, that's one thing you could misinterpret it if you don't realize that you're dealing with a, a wallet that manages keys on behalf of multiple customers. another thing that could happen is maybe somebody's using a mixer, because, you know, they, they care about their privacy, they don't wanna get robbed you know, because, because now I can see exactly how much coffee this guy sold. That's, that's not something you want, right? So maybe he, he would use a mixer, but then other people are using the mixers, so now if you're selling the- look at the blockchain, it might look like that entire mixer is part of the, of the deal. Or that's, that's kind of the ways these things can go wrong."
    },
    {
      "speaker": "stephan",
      "time": "40:24",
      "start": 2424.09,
      "text": "Right. And so I think the, the other question then is, do you think it's likely that police and law enforcement have individuals who are sufficiently technically capable and knowledgeable about, about these factors that you were just describing?"
    },
    {
      "speaker": "sjors_provoost",
      "time": "40:41",
      "start": 2441.31,
      "text": "Well, that's, that's hard to tell. I mean, first of all, not all These cases are public, you know, and it-- and I guess what happens in court is you, you know, you have other people doing the talking. So I, I don't really know what the actual expertise is. It might be that there's like somebody who totally understands it and writes a bunch of things down and, you know, goes through a Chinese whispers game and, and it turns into nonsense."
    },
    {
      "speaker": "sjors_provoost",
      "time": "41:09",
      "start": 2468.58,
      "text": "Yeah, I mean, my guess would be that they, they have these tools and they kinda know how to use them, but they don't really understand all the pitfalls, because the pitfalls are pretty hard to explain."
    },
    {
      "speaker": "stephan",
      "time": "41:20",
      "start": 2479.73,
      "text": "Yeah, definitely. I think it, it's something that definitely requires a certain level of, technical competence, a certain level of intelligence, just a certain-- there's a certain level of, skill required to really correctly understand these things. And even at the same time, there are guys working on things like pay-to-endpoint and And so on that will even then go and ruin that kind of analysis as well."
    },
    {
      "speaker": "sjors_provoost",
      "time": "41:45",
      "start": 2504.83,
      "text": "Yeah, but the, the question is, who does it ruin it for? And, and so far, if I'm looking at this, it's ruining it for the traders, because anytime you create plausible deniability in a money laundering scenario, the burden of evidence is reversed. And so- rather than you would say, \"Oh, how do you know it was me?\" the burden of evidence is reduced and they're basically saying, \"Okay, we, you know, you clearly use some sort of mixing technology, that makes you a suspect. Therefore, you now need to prove that you actually did something legitimate here. So tell us what you did.\" And so then all these techniques don't really work, in my opinion. So it's, it's a big, it's a nasty legal problem, and I think the, usually the way the court system should work, you know, in sort of an ideal society that assuming you don't want, like, assuming you do want some sort of criminal justice system, what should happen is the, the lawyers on the defense side should start arguing what's wrong with this analysis and should start defending things like, you know, presumption of innocence and, You know, a burden of evidence being on, you know, which side the burden of evidence should be, and, and that discussion should be had, but it's very difficult to have that discussion if you don't understand what the hell is going on. If you, if you have no clue how the blockchain works, then you don't understand whether or not you're still being reasonable in, in what burden of evidence you're putting on what side. And so you get really weird court decisions where the judge might say, \"Oh, just use a different tool and see if it shows the same result.\" It's like, \"Well, that, that's almost like, you know, these little witch sticks where you can find where the water is.\" That's not the right level of analysis, basically. So, so what I would like to see, I guess what Expertise has to go up, so the defense has to understand how these tools work, have to understand their limits, and then they can actually defend their clients. And then the other side will automatically, of course, also have to level up their game, because at some point they're gonna lose a few of these cases. Well, then they're gonna start reading about the pitfalls themselves, and they'll say, \"Well, yeah, we know this, this mixing thing, but we thought about that, and here's, you know, the extra evidence that we collected, and this does prove that it wasn't So it's, it's a cat and mouse game, and I'm, I'm not like advocating any outcome, like it might not end well for the people doing the trading, but I would like at least to see these trials become fair again. And I think we're a long way from that because this technology is complicated, it's moving really fast, people are adding more layers of, of privacy, which is a good thing. But it also makes it more and more and more difficult to understand."
    },
    {
      "speaker": "stephan",
      "time": "44:24",
      "start": 2664.06,
      "text": "The other complexity then, as well, is things like, you know, Lightning Network and so on that take it to another level. Oh yeah, I would love to"
    },
    {
      "speaker": "sjors_provoost",
      "time": "44:30",
      "start": 2670.3,
      "text": "do a follow-up, for that, just to show, okay, let's redo this scenario, and now what happens is instead, all the players have Lightning nodes, and they don't necessarily even have channels with each other. and they don't necessarily immediately settle the channels. Like somebody could just, you know, send a Lightning payment and then get cash for that, or there's no on-chain evidence. That would be the first step, is like, \"Yeah, this is weird, we don't really see what's going on.\" but then the second step, of course, the cat-and-mouse game continues. So now the cops are starting to monitoring the IP traffic. Oh, if you're using your mobile phone, that mobile phone is, you know, pretty revealing pretty much anything it's doing"
    },
    {
      "speaker": "stephan",
      "time": "45:14",
      "start": 2713.51,
      "text": "Even, you know? So, l- l- well, VPNs,"
    },
    {
      "speaker": "sjors_provoost",
      "time": "45:16",
      "start": 2716.21,
      "text": "I'm super skeptical of VPNs, 'cause, you know, the- that means you're sending all your information to a single company That can now be subpoenaed. So that, that may-- that may or may not be in your advantage. So maybe you can play some geo-arbitrage, saying, \"Well, I'm in country A, I use a VPN to country B, which means law enforcement kinda has to go around, you know, to country B to get that information.\" Yeah, that might work, but it could also be the opposite. Maybe the VPN company decides to blackmail you."
    },
    {
      "speaker": "stephan",
      "time": "45:47",
      "start": 2746.67,
      "text": "Yeah, true. That's, that's the, the other side of that coin."
    },
    {
      "speaker": "sjors_provoost",
      "time": "45:51",
      "start": 2750.71,
      "text": "But, but also, you know, I guess maybe eventually the cat and mouse game might just go back to the physical world. Like if you wanna catch someone doing something illegal, just catch them in real life."
    },
    {
      "speaker": "stephan",
      "time": "46:01",
      "start": 2760.88,
      "text": "Right. And so it would just be, I don't know, police trying to catch people doing local Bitcoin transactions or something."
    },
    {
      "speaker": "sjors_provoost",
      "time": "46:08",
      "start": 2767.58,
      "text": "Yeah, exactly. You just arrest them and then you ask, \"What were you doing?\" And they say, \"Well, it was just a friend.\" Okay. I don't know. but yeah, you can, you can just go back to, I mean, look back at, say, the Silk Road. Like, you know, everybody was using Bitcoin, but how was that, you know, how was Ross eventually arrested? He made a mistake by using his personal email address on a forum like years earlier, nothing to do with Bitcoin. So, so people make mistakes, and, and you know, if, if you have A state actor essentially with, with infinite budget, and all they need to do is just look at you and see what you're doing, and, and then, you know, many, many actual criminals have a habit of bragging about what they're doing to friends or on Facebook You know, so they're creating their own evidence trails. Yeah. but that is more work, right? It is, it's probably easier to just, you know, I don't know, make a list of all the local Bitcoin traders, go to all of them, make three trades with all of them, run the trace, the chain analysis, and just arrest fifty of them and then, you know, show some pretty pictures to the judge and then have them go to jail for a few months. That's very efficient if you're trying to get a lot of convictions very quickly."
    },
    {
      "speaker": "stephan",
      "time": "47:21",
      "start": 2841.05,
      "text": "I And back. But I was basically asking around this concept of, let's say we don't get confidential transactions, but we get a combination of other things. So let's say we have dandelion on, in terms of the IP protection, or at least some level of protection from that, that kind of attack. And let's say, you know, more and more people use, you know, or just Tor, yeah, and more and more people use Tor, and more and more people use Lightning Network, obviously, and more and more people just start using things like, you know, join market and Wasabi wallet and, you know, the, these kinds of products that do a little bit of the fancy coin join and so on. Do you think, you know, let's say a few years down the track, would that sort of behavior or that sort of transactions be identifiable to somebody unless they had like a lot of resources? Or do you think, you know, realistically, they're gonna make similar sort of mistakes like Rosswold?"
    },
    {
      "speaker": "sjors_provoost",
      "time": "48:16",
      "start": 2895.58,
      "text": "so there's one interesting dynamic here that might be worth pointing out, and that is the plausible deniability argument. If, if you're using a mixer, you're putting effort into using that mixer, right? Now, I personally think privacy is like a human right, and I think the law also thinks that. So you should be using mixers and it should be considered a good thing, and you should be protecting your privacy and your customers' privacy. But at the moment, you know, the legal system, at least in the money laundering sense, doesn't agree with that. It basically says So you have something to hide. Now, so that, that's a legal problem, but now you get something like Lightning, and Lightning is cheaper and faster. And so you're getting privacy, yes, but you're also paying less, and it isn't suspect to pay less for something. Like you can't just, you know Ask someone, \"Hey, why did you pay less for this thing?\" So it has this convenient plausible deniability, benefit. So you use good, you use a nice privacy improvement, and you have a good excuse even in a fairly dystopian, scenario to use that privacy solution. Now with what could be interesting on-chain is the signature aggregation stuff. Where eventually you can have a transaction that might have a hundred inputs, and now you need to put a hundred different signatures on it, but eventually maybe we can make that one signature. And so that will make it cheaper to combine your transaction with other people. It sort of like compression."
    },
    {
      "speaker": "stephan",
      "time": "49:41",
      "start": 2981.44,
      "text": "Yeah, that's a fascinating idea as well, but obviously that could take some time."
    },
    {
      "speaker": "sjors_provoost",
      "time": "49:45",
      "start": 2985.44,
      "text": "So, so then, yeah, so then why are you using this mixer? Well, because I don't wanna pay the, the fifty dollar transaction fees or whatever they are."
    },
    {
      "speaker": "stephan",
      "time": "49:53",
      "start": 2992.9,
      "text": "Yeah, I see the point you're making. It's very much that, you almost reverse the plausible deniability in some ways because you, you can't really expect that people just go out of their way to not, you Use, you know, use that, you know, say the Schnorr aggregated signature."
    },
    {
      "speaker": "sjors_provoost",
      "time": "50:09",
      "start": 3009.33,
      "text": "Yes, exactly. And so the, the, it's an interesting potential long-term trend where because data is scarce, at least on-chain data is scarce you have to reduce the amount of data per transaction essentially, 'cause the, you know, if the blocks stay the same size, then you have to-- and you wanna have more people using Bitcoin, then the amount of data per transaction, at least the, the amount of data on chain, is gonna go down with time, as a simple economic function. So that's, that's an economic pressure that creates privacy. But, and there's no-- I don't know if that's a law of physics or something, so some other trend could happen that completely reverses it. Facebook is the exact opposite, right? It-- there's a financial incentive in Facebook to, to reduce your privacy. So it's interesting that Bitcoin has this, seems to have this opposite property where financial incentives increase your privacy. unfortunately there's other levels. I mean, you could still monitor the network and, you know, monitor IP addresses and do timing and, and that sort of stuff, but at least it's a lot more work And that would quickly enter the realm of mass surveillance, which, you know, there's also some restrictions on that."
    },
    {
      "speaker": "stephan",
      "time": "51:17",
      "start": 3077.19,
      "text": "Yeah."
    },
    {
      "speaker": "sjors_provoost",
      "time": "51:18",
      "start": 3077.77,
      "text": "So maybe there's a reason to be optimistic, but maybe not."
    },
    {
      "speaker": "stephan",
      "time": "51:20",
      "start": 3080.42,
      "text": "Yeah, maybe, maybe. And I think the other one as well might be if more and more wallets start doing things like mixing by default."
    },
    {
      "speaker": "sjors_provoost",
      "time": "51:28",
      "start": 3088.0,
      "text": "Well, yeah, yeah. Well Not really, because why are you using that wallet, right? And now if Coinbase started mixing by default, so, so then you'd have to have, from a political point of view, I think you'd have to have some like reputable, quote unquote, regulated, quote unquote wallet. That, that takes the initiative and says, \"Hey,\" and then actually pitches that in a good way, which is, you know, very doable. You basically say, \"Hey, we care about our users' privacy. We see people getting robbed because they revealed their Bitcoin holdings to some merchants. we don't want that to happen to our users, so we're, we're adding privacy.\" And then once those reputable people, companies do it, then everybody else follows. But if what's happening now is if you have wallets that really promote themselves as, \"We're gonna defeat the government and If you're gonna do mixing by default, then you, you run into this plausible deniability problem that we talked about."
    },
    {
      "speaker": "stephan",
      "time": "52:22",
      "start": 3141.9,
      "text": "Right. Yeah, I see that."
    },
    {
      "speaker": "sjors_provoost",
      "time": "52:24",
      "start": 3143.56,
      "text": "But just to clarify, like, I think it's good that these privacy-friendly wallets exist. I, I highly encourage it. Like, the political rhetoric is whatever. Like, just make Bitcoin as secure and as private as possible, please. Keep doing that."
    },
    {
      "speaker": "stephan",
      "time": "52:37",
      "start": 3156.51,
      "text": "Oh, yeah, yeah, definitely. I think it's just more just a exploration of hypotheticals. the other question I was gonna ask, and obviously I totally under-understand if Or you don't have a real comment on that, but one disturbing sort of trend I've seen is, well, I think maybe a month ago or so, there was a listing of, I think, some cryptocurrency addresses on the OFAC sanctions list. And I think that's, yeah, and I think that's also quite a technically kind of challenging concept to discuss, because then it's how many hops before or after, or does it have to get cleaned by being, you know, bought from the government before it's now considered, you know, clean again? So"
    },
    {
      "speaker": "sjors_provoost",
      "time": "53:19",
      "start": 3198.65,
      "text": "obviously I'm not a legal expert, let alone a, US sanctions law expert, but I think, I think people are sort of seeing too much into this. What What I read there is that the OFAC folks said, \"Hey, we have an identifier, like there's, there's a person that you can't do business with, and, and this guy, this is his picture, this is his passport number, and this is his home address, and this is his phone number, and by the way, here are two Bitcoin addresses that he uses.\" And that's not the same, it's not literally the same as blacklisting those Bitcoin addresses, it's just, it's just saying that if you are a financial service that, you know, does all sorts of Have a look at those addresses and then have some common sense way of determining whether, you know, this person is involved or not. Right. And then I guess is when you, when you're, you know, you run, so you run this chain analysis tool or whatever, and it says, bleep, bleep, bleep, bleep, bleep, this guy is involved or this address is somehow involved, we think. Well, then it's not, I don't think it's necessarily that, okay, you block everything. No, what you do is you flag this, this"
    },
    {
      "speaker": "sjors_provoost",
      "time": "54:30",
      "start": 3269.54,
      "text": "Could you explain the source of these funds and where are they going? And then if, if a reasonable answer comes, you know, maybe they'll be a little bit like more aggressive in which questions they're gonna ask, 'cause they don't wanna, you know, go to jail themselves. But eventually, it's still just subjective. It's, it's probably just humans deciding whether or not to go through. I don't think there, people are talking about black and white filters for this, which wouldn't make any sense. Could evolve to that, but I don't"
    },
    {
      "speaker": "stephan",
      "time": "54:55",
      "start": 3295.49,
      "text": "think it, that's the case These addresses have been, you know, blacklisted and let's say coins have, you know, passed through, and, and I don't know that doesn't-- there is no such thing as, you know, the from address, obviously, there's, you know, the UTXOs, but from the kind of naive and, you know, chain analysis point of view, if they kind of interpret it aggressively and say, \"Oh, well, look, these coins came, you know, quote-unquote, from that address, even though that's not technically what's happening.\" Isn't there a little bit of a case there that they could try to argue, okay, look, this bank ABC, you should have blocked that transaction or you should have reported it to the government because these coins came, quote unquote, from the OFAC-sanctioned address?"
    },
    {
      "speaker": "sjors_provoost",
      "time": "55:43",
      "start": 3343.25,
      "text": "Yeah, that, that's exactly what would happen. That's, I think that's, that's what I'm trying to say. But, but then if the bank says, \"Hey, yes, we saw that, our systems detected that, and we asked some questions, and it was clear like not related because You know, I guess then the, the government would have to like have a long court battle with the bank, you know, arguing whether or not they did their due diligence correctly. Yeah. but I, I don't, I don't know if that actually works that way. I think they just, yeah, they just say, \"Hey, we have a compliance department and they follow procedures,\" and, we've, we've, we've, we've, we did flag it, we, we then investigated it, we found it wasn't a problem, we let it through."
    },
    {
      "speaker": "stephan",
      "time": "56:22",
      "start": 3381.79,
      "text": "Right"
    },
    {
      "speaker": "stephan",
      "time": "56:30",
      "start": 3389.5,
      "text": "Look, you know, would they just say, \"Oh, so long as it didn't come from-- in, in one hop, then that's fine? \" Or would they start now doing some kind of risk-based approach of, \"Oh, okay, well, it was two hops away, and then at what point do they just say, \"Oh, that was ten hops away? \""
    },
    {
      "speaker": "sjors_provoost",
      "time": "56:43",
      "start": 3403.33,
      "text": "Well, that gets to a fundamental question about compliance. Why is a bank or other institution complying? Are they doing it because they believe in the regulations and are trying to enforce the spirit of the law, and therefore they"
    },
    {
      "speaker": "sjors_provoost",
      "time": "57:00",
      "start": 3419.94,
      "text": "Which means, I don't know about numbers of hops. If, if you see something, ask questions. you know, don't, don't, don't be super strict because if you say six hops, then somebody just makes seven hops, right? If, if, if you, you're super rigorous about that. So I think in a common sense situation, I think people will be fine, because that's what common sense is. But What if actually compliance is something you do, you want to be seen as? So you want to be seen as compliant, but ideally you want to maximize your revenue as a bank. So as a bank, you want, you want to make as much money as possible, and, and probably people who are doing money laundering might be, you know, better paying customers. So in that sense, you want those customers, but you obviously don't want the PR fallout, and you don't wanna get in trouble with the Regulators, well, in that case, you're gonna interpret the rules as strictly as you can, don't, don't spend too much money on it. but that could still work both ways because on the one hand, you could try and maximize just the number of customers and not enforce anything, but then you occasionally get a fine, so then you have to do some risk-adjusted thing like, okay, if we make this many mistakes, we pay this much in fine, so we wanna reduce the number of mistakes. Then you get into something called de-risking. And that is happening in a lot of places, I think in Hong Kong especially, 'cause I've heard a lot of stories from there. But what happens is a bank sees a new potential customer If that isn't the most disfined standard business you could possibly imagine, then they'll just deny it, because like they don't, they don't wanna have even a one in a million chance of getting a billion dollar fine. and if they start de-risking, then the criterion is, okay, if your coin at all has anything to do with any of these OFAC addresses, we're just gonna like not accept it, 'cause we-- it's not worth it. For this point one percent that we're making on this transaction, we have a chance of a billion dollar fine. so we're just gonna deny most customers. That, that does seem to be what's happening. Right, I"
    },
    {
      "speaker": "stephan",
      "time": "59:08",
      "start": 3547.98,
      "text": "see. And"
    },
    {
      "speaker": "sjors_provoost",
      "time": "59:09",
      "start": 3549.12,
      "text": "I suppose then the- Like try, try opening a bank account as a bit, Bitcoin business at all, like regardless of OFAC. Like if, if you, if you in your bank application say, \"Oh, I use Bitcoin,\" you're just denied. Instead, denied,"
    },
    {
      "speaker": "stephan",
      "time": "59:21",
      "start": 3561.4,
      "text": "yeah."
    },
    {
      "speaker": "sjors_provoost",
      "time": "59:22",
      "start": 3561.66,
      "text": "Pretty much. And there's one or two banks that, that try to specialize in it. but it's, it's really hard. And then once you have that banking relationship, there's gonna be constant pressure on you to, to really behave in the nicest possible way. And that's probably also why, you know, things like Coinbase banning, banning people from Gab, it's probably banking pressure, because they, they can't do anything to risk that banking relationship. So they're not gonna go out and make a free speech stance because it's just not, like, you know, and, and something else might be going on there, but just saying that's, that's Got some customer down and they're just gonna do it."
    },
    {
      "speaker": "stephan",
      "time": "59:59",
      "start": 3598.85,
      "text": "Yeah, look, I think that's, that's kind of the harsh reality of banking in, you know, in today's world because of, you know, the regulations and, you know, these banks are basically living in fear of losing their banking license in some cases and so and fines. Yeah, big fines, especially"
    },
    {
      "speaker": "sjors_provoost",
      "time": "01:00:14",
      "start": 3614.96,
      "text": "So, so the, the Bitcoin companies are, are, are afraid of losing their bank accounts, period, which they might have spent years trying to get in the first place, and then the banks themselves are worried about massive fines, which presumably at some point hurt bonuses. so yeah, that's the incentives. And there's some counter movement starting to happen because you see so many people getting de-risked that at some point governments gonna say, \"Hey, wait a minute, if you're a bank, you should probably accept customers.\" And I think Canada, maybe the Netherlands has some Right, that you, you are entitled to have a bank account. I think in the Netherlands, what I heard is that, every bank can refuse you, but the last bank has to accept you as a business. Oh, really? So you don't want to be the last bank. That's what I've heard. Which is hilarious if you even remotely think about it. and then I guess I can do whatever you-- Well, I don't think you can do whatever you want. If you do something totally crazy, they can probably terminate the relationship. And make you unbanked, but it's, it is problematic."
    },
    {
      "speaker": "stephan",
      "time": "01:01:16",
      "start": 3676.26,
      "text": "Yeah, fair enough. I see. So there"
    },
    {
      "speaker": "sjors_provoost",
      "time": "01:01:18",
      "start": 3678.3,
      "text": "are some, some counter, counter rules"
    },
    {
      "speaker": "stephan",
      "time": "01:01:20",
      "start": 3680.1,
      "text": "in there. Yeah, sure. Alright, well look, Sjors, it's been a fascinating conversation. I think it's been really enjoyable just to talk about some of the hypotheticals around, you know, Chain analysis and so on. did you have any, maybe any closing comments? and also, obviously, you gotta tell the listeners where to find you and where to find your blog as well."
    },
    {
      "speaker": "sjors_provoost",
      "time": "01:01:42",
      "start": 3702.17,
      "text": "Yes, go help out with Bitcoin Core. It can be as simple as just use it once, put some coins in it, maybe not all your coins. If you don't know what you're doing, then it'd be great if people are keen on helping with testing. It, it does take some technical skill. But, people might be willing to help out, and it's super useful just to simply test whether something actually does what it says it does. And then where people can find me, I think Twitter is the easiest, Provoost, which is spelled P-R-O-V-O-O-S-T. And that has a link to my blog. But if you Google a crime on testnet, you will find, the blog article and therefore my blog."
    },
    {
      "speaker": "stephan",
      "time": "01:02:25",
      "start": 3745.55,
      "text": "Oh, yep, and I'll definitely put the link for that in the show notes, guys, and I'll also link to Sjors' Twitter and also his blogs as well. so look, Sjors, as I said, it's been a great conversation. Thank you very much for coming on."
    },
    {
      "speaker": "sjors_provoost",
      "time": "01:02:37",
      "start": 3757.7,
      "text": "Yeah, thank you for having me."
    },
    {
      "speaker": "stephan",
      "time": "01:02:44",
      "start": 3764.44,
      "text": "I hope you enjoyed listening to some of the insights there from Sjors. Let me know what you think on Twitter or DM me. If you did enjoy it, you can help me out by liking, retweeting, resharing, giving it a thumbs up on YouTube, subscribing to the podcast, and giving it a review or rating, hopefully five stars. Those of you who want to donate fiat can use my patreon dot com forward slash stephan livera link to become a patron supporter and get access to a private Telegram chat com. And those who want to donate with Bitcoin or Lightning payments can donate using TallyCoin, that's tally c o dot i n forward slash Stephan Livera. Show notes are on my website, stephanlivera dot com, and that's it from me. Thanks for listening, and chat to you next time."
    }
  ]
}
