TFTC: A Bitcoin Podcast - #154: Amiti Uttarwar
Episode Date: April 28, 2020Join Marty and Matt as they sit down with Amiti Uttarwar, Bitcoin Core contributor at Xapo, to discuss: - How Amiti came to find Bitcoin - Getting into Bitcoin Core development - Learning C++ - Amiti'...s work on rebroadcasting - Protecting privacy at the P2P level - Nuance of mempools - Current state of Bitcoin - much more Follow Amiti on Twitter Check out her post, Onboarding to Bitcoin Core Shoutout to this week's sponsors. Cash App. Start #stackingsats today. Use the promo code: "stackingsats" to receive $10 and contribute $10 to OWLS Lacrosse you download the app.
Transcript
Discussion (0)
What is up freaks, it's your boy Marty here to introduce this episode of Tales from the Crypt.
It's an immense pleasure of sitting down with Amiti Uttarwar, Bitcoin Core contributor working at Zappo.
Matt joined us for this one to jump into what Amiti is working on in terms of rebroadcasting transactions
to help privacy at the P2P level of Bitcoin.
We talked about a bunch of other things. Amiti started contributing to Bitcoin Core in February of last year
and she's been on quite the journey she's done the chain code residency worked at coinbase she's
done a bunch of things and now she's head down building some dope stuff for the p2p layer of
bitcoin we also jumped into her piece onboarding to bitcoin core which she wrote in february of
this year basically explaining the journey she took the resources she um used used utilized to
uh basically get up to speed with what's going on in the code base how she interacted with other
developers and and gave some advice for anybody on the sidelines who's looking in and thinking
about jumping in to contribute to bitcoin core highly recommend you guys go check out that piece
as well as this episode obviously if you're already here listening to it you're going to
check it out this episode of tales from the crypts is brought to you by good friends at the cash app
freaks already know all about them they're helping us do many things they're helping us stack sats
they're helping us stack slivers of stocks if you want to and they have their boost program
let's go back to the stacks sat stacking god every time uh if you freaks haven't noticed on twitter
they started rolling out their dca function uh i've been teasing it for weeks maybe a month now
I don't have to say soon TM anymore.
It seems that they're rolling out the dollar cost average function for stacking sats as we speak.
I've seen many screenshots, so you'll be able to set a cadence for a go-to sat stack.
If you want to do it daily, weekly, monthly, you can set an amount, set it, and forget it.
Again, adding to the buy pressure from the retail investors.
It was an incredible, incredible announcement.
And again, the product team at Cash App is crushing it,
specifically on the Bitcoin side.
So you can stack sats, send sats, receive sats,
sell sats, if you so please.
And now you can DCA sats as well.
And sats are the standard, again, via Cash App investing.
You can stack slivers of stonks if you want to.
You don't have to.
The option is there.
If you have a favorite stonk and it's too expensive,
if Cash App investing is letting you buy as little as $1 because Cash App is directly connected to
your bank account or even if it is your bank account because now they're offering account
numbers and routing numbers. So Cash App can be your bank account. You can get your paychecks
direct deposited to the Cash App. You don't have to wait four to five days to start stacking stats
or investing. You can start doing that today. Cash App investing is a subsidiary of Square
remember SIPC as always when you download the cash app if you haven't done so yet make sure
you use the code stacking sats that's one word S-T-A-C-K-I-N-G-S-A-T-S you're gonna get $10 and
$10 gonna go to our good friends at Owls of the Cross in Chicago doing great things uh not that
dirtbag Al he's doing all these happy hours and stuff he's really I hopped on his happy hour on
Friday just to see what was going on and he had a picture of me in the background like a true creep
and he gave me a hitler stash it's he's a disgusting human being a scumbag all right
he's not owls lacrosse which is a very very good charity very near and dear to our hearts
they're doing incredible work for the youth in chicago use the code stacking
sats download it now owls lacrosse is going to get ten dollars
enjoy this episode with a meaty i think you guys are really gonna like it she's a breath of fresh
air somebody's incredible person incredible person working on bitcoin core enjoy it
you've had a dynamic where money's become freer than free
if you talk about a fed just gone nuts all all the central banks going nuts so it's all acting
like safe haven i believe that in a world where central bankers are tripping over themselves to
devalue their currency bitcoin wins in the world of fiat currencies bitcoin is the victor i mean
that's part of the bull case for bitcoin if you're not paying attention you probably should be
what is up freaks welcome back to tales from the crypt it's your boy marty bent here
on a wednesday evening it's five o'clock long day for your boy been working all day very happy
to finally be sitting down and about to enjoy a nice conversation about bitcoin
Bitcoin Core specifically. I'm joined by Matt O'Dell for this interview. Matt, how are we?
What's up, freaks?
And we're sitting down with Amiti. I got your first name. I said it right before we hit record.
I want to get your name mixed up. Amiti Uttarwar, Bitcoin Core contributor at Zappo. Amiti,
how are you doing today?
Hi, I'm good. Thanks for having me.
Thanks for coming on. Really appreciate you taking some time to sit down with us and
talk about your journey to Bitcoin Core. We just had like a 20 minute pre-recording conversation
and it's been fascinating to me doing research on you and what you've worked on to date that
you've only been contributing to Bitcoin Core for a little over a year now. So that's one thing we
want to jump into during this conversation as you wrote a very good piece about getting
introduced to Bitcoin Core and how one might approach contributing to Bitcoin Core if they're
new for your year anniversary of contributing. But before we get into that and the work you've
been doing at 4Core, what were you doing before Bitcoin? How'd you find Bitcoin?
What brought you to this weird rabbit hole that we're in?
so i don't remember exactly how i found bitcoin uh one of two of my earliest memories are one
watching a ted talk on what is a blockchain and two uh after a day of scuba diving in monterey
reading the bitcoin white paper very very different levels of exposure
but prior to prior to working on bitcoin full-time i was working at coinbase clearly after i fell
down the rabbit hole and prior to that when i didn't know what the words crypto or blockchain
meant i was working at a company called simbi which is a online marketplace for bartering services
so really awesome community never quite took off as a platform but had a great niche community on
it and i did a lot of exchanges and trades with random people of services like i would teach them
yoga and get a free massage or somebody would teach me how to cook their uh i learned how to
poached chicken, which was actually delicious. Lots of lots of random services. And I think
fundamentally, at that time, I started, I was a couple years into working, and I started really
questioning our monetary system and what wealth is. Because I think for me, it's a lot more than
having a big number in my bank account, it has more to do with being able to invest that in my
wellness whether that is services like I love getting massages for example or or
if I have a health issue or like eating well etc etc as well as like having fun
indulging traveling so I realized that money is supposed to serve this but has
become so convoluted and via sim be I was able to receive a lot of these
things in these really enriching interactions with other people. So I think that was where
my ideas of how our economic system is supposed to serve us, but isn't quite started to
seed. And so I was primed for when I learned about Bitcoin, I was pretty much immediately
hooked. I read the white paper and then I was spending my nights and weekends. And this was
the first time that i did something remotely professional in my free time otherwise i'm
an outdoor enthusiast who like okay it's the weekend let's go backpacking
um so i i knew i knew something was up yeah no i want to go back to one thing you read the
white paper for the first time after scuba diving in monterey yeah yeah what uh good day what are
what are the scuba scenes like in monterey there's no reefs there it's there's no um it's
not coral reefs but it's incredible it's there's a lot oh my gosh it's been so long since i've been
but between the bitcoin habit and the lockdown but there's a lot of different animals there's
otters and seals and tiny little nudie branches and um all sorts of random sea slugs sorts of
things and I've seen jellyfish and octopus so there's quite a lot going on but it's a very
different it's not the classic tropical color palette it's more like dark purples dark greens
and that sort of stuff but it's it's quite challenging you have it's really cold so you
have to wear a dry suit and there's mostly only shore diving and it's low visibility
so if you know much about scuba diving that sounds not ideal but i promise you it's so worth it and
it's i've been to a bunch of tropical places but monterey is up there in one of my all-time
favorite places i've ever died and dovin what did you do yeah dived dove dovin um i don't know
i don't know i'm not uh i'm not a professional diver but would you have an epiphany underwater
like how i should read this white paper i really i can't explain i have no idea just remember that
seems like the best way to get introduced to the white papers when you have a clear mind after
scuba diving seeing that that beautiful landscape yeah it's definitely it was a great evening
activity yeah and then i saw on your twitter you uh go to the sierras to hike as well yes i love
backpacking and i love the sierras yeah i um my sister lives in colorado and she's
been doing a ton of hiking in the mountains and just makes me jealous uh crazy jealous seeing the
scenes on her instagram um but so you worked at coinbase what are you doing for them before you
started contributing to core i was on the crypto operations team so we were the team that
integrated with different assets ah is that uh you you happier to be focused on one asset at uh
at this point um i really loved the people i work with at coinbase i met a lot of wonderful
nerdy sociable people but i definitely am happier with the work that i'm doing now
it's really cool to be diving into the bitcoin protocol and trying to understand it and improve
it yeah so let's dive into that like what was it like first approaching it uh contributing to core
i mean you wrote a piece on it and how daunting was it for you personally was it daunting at all
oh my god of course i don't even know if we can talk in past tense maybe it's it's still
kind of terrifying but probably different levels of terror um yeah i i think it was really shocking
to me that i could contribute something valuable and get any changes merged and a huge learning
experience to even do some of the basics like i got feedback around my git commits or that my
email associated was my coinbase email instead of my personal email and um just getting familiar
with the git repo at all but i think it's it's always different levels of scary but really
important to find ways to create something along where your learning curve is and i think that was
kind of the fundamental idea i was trying to convey in the onboarding piece it's so easy to
get overwhelmed um in all of the different developments and uh constant ideation that's
occurring to think that you have to understand everything in order to start at all and i don't
think that um i mean i definitely wouldn't be already contributing to bitcoin because there's
so much i still don't get i think it's it's been really surprising to me how the the repo has
really a great need for more attention more critical minds and you could probably find a
way to add value regardless of what level you're at yeah so did you find that uh you were sort of
starting your journey in bitcoin core with anybody else like do you have any any coding buddies that
that you turn to or have learned with along the way um i i mean no like specific buddies but i've
definitely learned so much from a lot of different people uh john newberry and marco falc were
definitely the main core contributors that were giving me feedback and helping me figure out tasks
to do and um all over reviewing my prs which is super helpful and again terrifying but there was
also some people at coinbase that i would um try to talk about fundamental concepts with or
someone who knew c++ and i'd ask really dumb questions too and then i think i've also found
a lot of online communities along the way to ask those basic Git, basic C++ questions
so I can direct my Bitcoin questions towards anyone who's willing to be a resource to me
and not utilize their attention and their time span for the things I can figure out
elsewhere.
I was just thinking about that today.
It's kind of shocking that I found the internet filled with kind strangers because I feel
like that's not that's not the general uh rap of strangers on the internet but just today someone
on a discord channel was explaining um how like variables are assigned in the underlying c++
in a very specific way and i was just like wow thank you so much kind stranger
let's all right it is interesting how the internet works that way it's it's certainly easy
to find uh find hate and vitriol on the internet specifically on twitter um but uh
i find at least like the more uh focused uh in internet sort of community is the more the more
willing people are to help out and then with bitcoin particularly it's like hey we're we're
all trying to build out a distributed peer-to-peer cash system uh we're gonna need all the help we
can get so it's probably advantageous to be nice along the way even though there is uh some
strong opinions and strong voices in the in the space that i found at least in the developer
community everybody's been willing uh to answer my dumb questions with with a smile on their face
yeah definitely um a huge difference in the tone of the twitter bitcoin community versus the
bitcoin core developer community i've been wonderfully surprised to see how open and
receptive and welcoming to questions and skepticism and willing to share like learning
and knowledge with me that almost every single bitcoin core developer i've met has been so that
was a great surprise yeah and back to your onboarding piece so there's some books like
grokking bitcoin mastering bitcoin and then you've mentioned already learning c++ like how
how important is it to do that stuff before you get into this uh or while you're doing it uh how
much did that help you learn like i've read i can see mastering book bitcoin right behind you right
now um it's uh it actually helped me out a lot somebody's not a developer just understanding the
the mechanics of the peer-to-peer network works how utxo works as an input and yada yada yada all
that stuff yeah um i think it's important to have some conceptual fundamentals but it's really hard
because you don't know how much versus what's missing or um at what point you're like that's
enough let's let's go do something um but i mean in all honesty i've read parts and of mastering
bitcoin and programming bitcoin and i've learned a ton from them but i've never read them cover to
cover i've always intended to but i'm just much more of a hands-on tinkery kind of person so i've
it's been a really nice direction for my learning to have something useful that i'm working on
in bitcoin that's like actually valuable because then i'll go and i'll do all the detail-oriented
learning in order to serve what my goal is and it helps like create focus it helps keep me motivated
so i still i still open up these books sometimes and like like refresh my memory or if there's an
area that i just i'm trying to get the high level understanding before looking at exactly the code
like they're great resources and i think um they're they're wonderfully written in the way
they are accessible to a wide audience but i also think that i mean it's different personality types
but sometimes it's easy to say like oh i haven't finished that book so why bother looking at the
repo but actually you could you could be doing both yeah i'd be interested to see like how much
has the repo changed since mastering bitcoin was uh or at least the latest version was published
um that's just me thinking aloud though uh let's get into what you've been working on on the p2p
network um specifically around rebroadcasting and other things and then uh really working to help
educate people uh around the ways that bitcoin can be attacked at the p2p level and how privacy
can be attacked and other types of attacks why did you decide to focus on on this area particularly
this is again one of those i'm not quite sure i think early summer i was looking for a project
and i had oh okay actually so so the when applying to the chain code residency
they had given us a code challenge and it was independent of bitcoin core but um founded in
bitcoin concepts and that sparked some curiosity of how does bitcoin core solve this problem
and i started digging into the mempool specifically and um and so so after that and i had like formed
some questions asked some things so when i was at chain code over the summer looking for a project
I was asking around and John Newberry gave me the idea of this rebroadcast, pulling it
out from wallet functionality into the node slash mempool level and trying to help the
privacy guarantees.
So that kind of got me launched on this direction.
And as I dug into that project, I've been learning more about P2P.
And now I'm just like, hopelessly fascinated. It's so it's such a cool area. It's deeply nuanced, but also all of the goals of it are really easy to understand.
and so I think that level of being able to zoom out to the high level what are we trying to do
here and zoom into the detailed okay now we've got a two second delay versus what would it happen if
we had a four second delay but like the nitty-gritty is quite a challenging thing to be
zooming in and out so much but that's what makes it so fun and it feels like this intellectual
play space and i i think i'm going to be hanging out here for a while so let's do it let's zoom
out what are what are the different layers of the p2p network and how they interact and
why are they important um so so i know you watched the attacking bitcoin core talk so i'll touch on
the framework that i shared in that talk as well it's something that i've come up with mostly to
help myself, but now I'm using it as a tool for communication, is a framework of five different
goals that we strive for in the peer-to-peer network. And so here they are. One is reliability.
So if a node or if someone submits a valid message to the network, that message should make it out
to all of the nodes eventually two is timeliness that message should get there in a reasonable
amount of time and reasonable is pretty arbitrary and it's different for the type of user or the
type of message the amount of time that's okay for a miner to get a block is very different than
a user to get a transaction and then three is accessibility in that it's great if there's this
network that works but you can't get on to it then that's pointless so we want to make everybody
who's interested um able to access the network and so in bitcoin like you can run a node on a
raspberry pi we're trying to keep the resource cost quite low and another aspect is that an
adversarial entity can't keep a victim off of the network so it's not just the investment of
hardware, but also that you are in control of your participation. So those are three ideas
that I think are probably important for any successful peer-to-peer network. But in Bitcoin,
we have two more. One is the fact that it's private because it's the money. So this is
fundamental to what we're trying to do here. And number five is that it's upgradable.
And that stems from the ethos of trying to serve
all of the different historic software versions.
So generally, the upgradable thing is a consensus concern,
but there are aspects of it that we have to be conscious of
in the peer-to-peer.
Right, and that's an important point to make too, right?
Like we don't need a soft fork or a hard fork
to change anything at the P2P network particularly, right?
It's usually upgradable without that.
Sure. Yeah. So maybe I can hash out more why I think of upgradability as a P2P concern.
So the idea is if there is a soft fork and we have a new version of software running,
then if we had a piece of logic that says, okay, peers are now going to prioritize people,
the other nodes that are on this newer version of the software, then that could have bad unintended
side effects for the nodes that haven't upgraded, because they might not be getting the messages as
fast, they might not be getting the messages as a whole. So that needs to be carefully done to
make sure that there's compatibility. So an example of this that I'll try to do justice to
is WTX ID Relay, where we have nodes that talk using the transaction ID hashes.
But now that we have SegWit transaction IDs as well,
it's hard to basically remember failures accurately
to ensure that you're not re-downloading the same transactions.
Maybe if they have different witnesses or the same witnesses
or like basically it's hard for all of the different software versions
to traverse that.
And so how we design in the P2P for even the newest is impacted.
Yeah, so older versions of the software,
just being aware of the new types of witnesses that exist.
Is that correct?
Well, it's basically that the new versions of the software
still have to be doing TXID relay
because the old versions don't know about the Segwit transaction IDs.
Yeah, so you can't just like forget about like,
okay, we have this new better way.
Let's just do that because you are still supporting the older versions.
But this is like a P2P concern.
It needs to be backwards compatible.
Yeah.
Yeah, yeah.
So it's like consensus adjacent.
yeah adjacent or intertwined fair enough it seems like most things are intertwined right
over there yes it does seem that way yeah um no i mean now we're getting down to like
granularities of the p2p network um a few that fascinate me and her a couple at least and we
were mentioning it before we hit record too is like early so early will help out um significantly
with bandwidth so the ability to to share the the full state of the blockchain or download the
transactions receive and send transactions um and this is something matt and i were actually
talking about last week um i'm interested to get your thoughts on so you you tree xo which would
help uh if implemented would help download the blockchain faster um but the trade-off there is
bandwidth so it takes more bandwidth to do that if we got early first and then utreexo would that
sort of diminish the bandwidth trade-offs that exist now with utreexo that was a question i
threw out there last week that we didn't know if we could answer maybe you can help us
um i don't know the answer offhand i'm not familiar enough with honestly either of the
uh implementations or uh how they work but i can i can look into it yeah yeah no don't don't mean
to put you on the spot there but no just an example of uh the intertwined nature of all
this stuff again that's so that's another thing that we could touch on now is uh just working on
this code base you could be working on something uh in your lane and then you have somebody working
on something in another lane and if that gets merged like how how does that throw a wrench in
what you're working on have you experienced uh something where you where you've sunk a lot of
time into something and something else got merged that sort of uh forced you to to change what
you're working on in a way yeah um i think usually if you're working on something for
a long period of time you have an idea of other like prs or open concepts that might be conflicting
at a more fundamental level because if they're trivial that's no big deal um but i did have an
example like with the segwit transaction id relay with my work on rebroadcasting i am
having an additional patch that i've been working on just in a side branch because i don't know
which one will get merged first and so but the the two together even though neither of them is
currently there the two together uh need a little bit of additional logic so i had to design to
incorporate that and then that's currently on a side branch but whatever whatever branch
doesn't get merged can add this patch
sort of yeah the uh the amount of thinking that you guys need to do is is incredible um
so let's talk about your rebroadcasting work what what uh what would this uh solve and why
do you think it's important yeah fundamentally i think the biggest improvement is around better
privacy of mempool transactions so starting with what is currently on master
well wallet has a behavior where you broadcast a transaction for the first time and that's great
hopefully it makes it into mempools hopefully it gets mined but there's a possibility that
it didn't actually make it to the network or if we had a more competitive fee rate
situation or like if it was 2017 for example transactions might have made it into the mempool
and then gotten been forgotten so you might not be seeing your transaction mind after some amount
of time be like what's up with that all right let me tell the network again so the idea of telling
them again is rebroadcasting and it's there for a good reason there's a lot of unexpected things
that can happen however the way it's currently implemented is really bad for privacy because
because only the wallet that created the transaction is the one that,
or sorry, not necessarily created, probably created,
but basically the only the wallet that was the source of the transaction
would be the one to broadcast it again.
So if an adversary has a couple connections open to you
and sees that, hey, you told me about this a while ago,
you've told me about this again they can know that you are the source and further that the
wallet tries to rebroadcast it fairly frequently so um actually it's been a while so i don't
remember but i think maybe every 30 minutes or so so if if there's been another block in the
past 30 minutes it'll try again so you could create a low fee rate transaction that you don't
actually expect to go out that soon and then you keep telling the network about it and you give
away that you are the source so that's that's not great so i'm trying to make it better so is this
rebroadcasting the same exact transaction or something like a replaced by fee situation
same same yeah um so how are you how are you attempting to solve this and how would it
help privacy so i'm trying to bring it into the node instead of in the wallet so an element of
this is that all nodes will rebroadcast some transactions and so you could you could have
an idea of all nodes will rebroadcast all transactions and that way nothing's ever uh
Missed, but then we come up against bandwidth. And that's obviously a very limited resource. So in trying to have nodes rebroadcast transactions that are not just theirs, but also of others that might have been missed or not mined by now.
there's logic in trying to have that be a set of transactions that is reasonable so
ones that have a high fee rate but have been around for a really long time something that
you think maybe should have been mined by now and yet hasn't showed up in a block so
rebroadcast those so doing this via the node would this be like a particular node setup that is
looking for these types of transactions
or would every node with the software
be looking for these rebroadcasts?
I think in the long-term vision,
if it's done correctly,
we could have every node attempting rebroadcast.
It's pretty much like,
if you think of a wallet and a mempool
as different components,
the mempool is one of the big responsibilities
vulnerabilities that it has is trying to relay transactions so that they can be mined, right?
If you're a miner, then your mempool serves you, so you can mine them. But if you're an ordinary
node that is running with a mempool, and a lot of what you're doing, there's some things that
serve you, like with fee estimation, for example. But there's an aspect where you're also serving
the network and trying to help transactions propagate. So it kind of makes sense from
looking at it that way that, hey, I have this transaction. I don't know where it came from,
but it doesn't seem to be getting mined. And it's been around for a really long time. It's
the highest fee rate. Maybe it got missed, but I have it. So let me tell the network about it again.
okay all right yeah initially i'm gonna put it behind a uh basically kill switch so people can
like enable the behavior just so we can kind of roll out more cautiously but i think in the
long-term vision it makes sense all right so i think this makes a lot more sense to me now that
you just described it that way so it's not the end user who is rebroadcast or who may have sent
the transaction originally it's the nodes looking out for these and they're doing it on behalf of
them so that they don't have to do it again so that their privacy is helped a little bit yeah
and so if you're a spy you wouldn't know maybe it's the end user maybe it's a random user etc
yeah and i guess we should get into the nature of mempools here too right because each node
has a different mempool and how how does that sort of come into play um yeah there's it's a
interesting concept to initially wrap your head around of what it actually means like we we love
referring to it as the mempool and you can easily google and be like what is in the mempool
uh but every single node that's running bitcoin has a different mempool you can disable your
mempool if you want or you can have a ginormous one that saves all of the transactions which
if I were a minor is definitely what I would do and most people have some something somewhere in
between but there are a lot of configurations that you can have for your mempool and so keeping those
consistent but also independent and slightly different is something that creates a lot of
nuance to peer-to-peer behavior and interactions and there's also elements of privacy because you
don't want ideally if you could have every single person's mempool have a transaction show up at
exactly the same time that would be ideal for privacy but that's not how computers work so we
add a lot of these random time delays in propagation or sometimes even until recently
we had a mechanism that after transactions were 15 approximately 15 minutes old you would no longer
serve them so there are all of these different kinds of bounds but we got rid of that upper
limit but you still you might have a transaction in your mempool and somebody asks it for you but
it's too new and so you don't want to reveal that you have it so you don't give it to them yet
so there's a lot of different components there's the difference between just like network delay
and propagation lags there's the element of configuration of the end users and there's
elements of privacy so not immediately revealing what you have and what you don't have and so we
have to design with all of these different things in mind and software versions why would you why
would you not want to share a transaction because it may be too early you may have not had it for
long enough because that could help if if you are an adversary and you are trying to figure out
who the source was
that initially broadcast the transaction.
You could just connect
to as many peers on the network.
And if you could find out exactly
when the transaction showed up in their mempool,
then that would give you a lot of data
that over time you could probably use
to like triangulate the source.
Or you could basically say,
okay, it's in these five mempools,
but nobody else.
That's clearly one in five of those is the source.
that's fascinating so i have a question um sorry marty uh you're good so with all these
intricacies of of the p2p layer um you know at tales from the crypt we're big advocates of people
using their own node i think it's unquestionably better for privacy on the receiving side looking
up your balances receiving transactions but when it comes to sending um for the time being like if
it's a if you really want to take the the best privacy precautions wouldn't using like a third
party transaction broadcaster something like blockstream.infos with like connected through
tor what don't you do is that is that's a better privacy option right would you not agree
um so i'm not fully familiar with um like that float so i can't make any like super strong claims
but i think there's a lot of options for how private you are for example you could have a
uh offline computer running a bitcoin node form a transaction and sign it and then you could
send that transaction via carrier pigeon to your friend right that's then broadcast it something
like that like broadcasting intentionally not broadcasting from your own node because yeah you
can you can create a signed transaction and you can broadcast that from from anybody else's node
if you wanted to is that is that what txt cast would do or tx cast that 6102 is working on or
is that still coming from your own node just trying to mess with you might have linked in
because blockstream.info has an api for a transaction broadcaster where they do it from
their node so you might have linked it in but i know the main premise is that it tries to defeat
timing analysis by staggering the transactions when they they eventually get broadcast it might
use your own node though i'm not sure or maybe it's an option of the two interesting
that's crazy the intricacies you have to think of when sending and receiving
bitcoin transaction especially if you're trying to remain private yeah yeah and i think that as
a user i mean there's so many layers of privacy um and i think that as a user both how you broadcast
a transaction as well as how you create the transaction using your UTXO set and trying to
not do the most obvious behavior is probably two of the most impactful aspects that you could focus
on. Yeah, that's why I think coin selection is huge and PSBT is huge as well. Those are two
things that I really want to see in a wallet, like the ability to choose which UTXOs I'm sending and
then and the ability to to uh to form a transaction offline just broadcast it um and sign it yeah i
think it'd be cool if a wallet had like really beautiful visual interface for coin selection
that'd be awesome yeah we're not there yet and we're still really young we got time
andrew chow who i think is younger than all of us said that it's never going to happen there's
no such thing as user-friendly uh coin coin control all right andrew let's be more optimistic
yeah let's let's let's get him on here right now i'll disagree that's we're just because
we're not there yet doesn't mean we can't have it this is this is the mentality i like
immediately this is the mentality i try to have it's like like you said like we're still so young
to me it's crazy that we've gotten this far that we've gotten people like you
interested in actually contributing to the protocol and spending your life doing it now
at this point you're getting paid to do it um i think people hate on how far bitcoin's come to
this point so how early are we and how far have we come just in the year that you've been been
working uh on the core code base i mean it's really diving into the github project and seeing
the repo has time and time again shown me, wow, this is a really young project. And we were
talking a little bit before we started recording about how it was really surprising when I learned
how bad the rebroadcast behavior currently is, how much of a leak that is, because that's not
something I ever knew about till I was asking around and at the Chaincode residency, etc.
and but then i've had a really warm reception uh from people who have been excited to review my pr
or help me implement etc because they also like like in terms of core contributors they also agree
um and that's felt very disjointed from some of the academic research that we have like
dandelion that's looking for initial broadcast being entirely private and not able to
de-anonymize that if you're an adversary. And I think that there's actually quite a bit of
low-hanging fruit in the Bitcoin Core repo in terms of things like better commenting and
documentation for some of the behaviors or there are so many areas where our automated tests are
can be improved and it's definitely hard as an individual to identify exactly what those areas
are and do them yourself but it's been surprising that over just a year and I literally never
looked at C++ before Bitcoin Core so it was very intimidating and that too I've never
professionally worked in a low-level programming language it's all been like high-level application
software stuff and so it's constantly amazing to me to see that I'm able to make changes that
are helpful and i see the fact that my timeline has been pretty quick as more of a product of
the fact that it is a very young project and reviews thoughtful interaction is highly highly
desirable yeah no and i think over the last two to three years particularly has been very
encouraging to me to see companies like zappo like square crypto like chain code i mean obviously
chain code blockstream a couple others digital garage uh been around for a while but it seems
like more and more companies are starting to realize like hey this protocol's been around
for more than a decade it'll probably be around for a little bit longer at least so if we're going
to be using it it's probably important to to reinvest uh in it by supporting it with with
developers who are looking to work on a full-time and this is just me ranting and commenting right
now like i just think we're about or we are hitting a sort of inflection point of reinvestment
in the protocol by companies that are leveraging it and i don't think we've seen the full
benefits of that yet and they're only going to get stronger from here on out
yeah totally it's definitely exciting to see more and more organizations get involved with
sponsoring core development and i think it's really important because it is so complex like
uh as an individual you need a long long amount of constant time to be able to really engage in it
you know yeah now you were uh you were mentioning like the low-level testing on uh
for the core protocol and it's just reminding me of our conversation with uh
valerie maccarallo about fuzzing test um can you explain what a fuzzing test is again for
the freaks out there um and they've been approving too haven't they yeah absolutely
definitely fuzzing has been an area that's gotten more attention and improvements recently
the idea basically is that you
i mean there's two ways to okay probably more than two ways but the normal way that you test
edge cases is you say oh well this could go wrong let me mimic that and ensure that if it were to
go wrong uh it would handle it in a sane sort of behavior fuzzing is a different approach and it
pretty much says, hey, computer, do random stuff and throw it at the code. And let's see what
happens. And so and so that can reveal things that people didn't think about, because it's more of a
kind of brute forcey way. And I think it has been revealing like, some edge cases. And so I think
it's a i think it's a sign of a maturing project as well i think that most um bigger projects at
some point incorporate this and so it's awesome that we're now doing that yeah and uh val wallace
i want to be apologized for calling you valerie not valentine i'm sorry about that um
brain fart there um so going back to your rebroadcasting work like what what needs to
be done to to get this implemented obviously it's getting reviewed right now um what uh
what are like the next steps you you said you you have two other uh prs that are out there that
could affect it are you waiting on those are you just going to go without waiting on those well
okay so so i had a big pr that was like here's rebroadcast and i got some awesome reviews and
And I got some feedback as well, and Gmax had left a review that gave an idea of how
I could break out one of the pieces of functionality from the main PR.
And so that's what my current PR is.
So basically it's a subset of the rebroadcast, but that just makes it easier to review, easier
to get merged.
Hopefully, I've gotten a few acts on that.
So I hope that it's getting pretty close to being merged.
And then I'll go back to the main one to see out the rest of the project.
But along the way, I've been, you know, experiencing some scenic routes, a lot of learning.
There was one element where I was basically just trying to make a behavior testable
from the functional tests, and that was in relation to how things are scheduled.
And that led to its own PR that went through different iterations
and eventually led to a bug in a Boost library being discovered.
so yeah that was that was kind of beyond my depth but luckily i had a lot of
really smart and focused uh bitcoin core contributors just jump on it and debug and
investigate so is that a library that's not related to bitcoin directly or is bitcoin just
leveraging uh yeah so it's a it's a dependency so we have the boost library in bitcoin we're
trying to move away from it um but it's currently like a dependency that's the uh that's the crazy
thing you have so many smart people working on bitcoin they're fixing other people's code too
oh yeah i felt very grateful because i was like i have no clue what's happening here
that is um no that's why i mean another tangent here so i'm happy carl dong's working on the
geeks containers and trying to mitigate the dependencies that go into all this again yeah
there's so many cool projects that are working um that are being worked on and i like i think
that's another aspect where that's really important work but there's a different sort
of time scale and it's a sign of the project maturing yeah so what um if everything goes
well with your rebroadcasting prs what uh what are you going to move on to next do you think
i mean i still have a a fairly long way to go um once i do that i get the subset merged there is
more work that has been brought up um for the main project so there's some time before i
exactly identify but i think in general i'm just deeply captivated by the peer-to-peer space
And it's a very complex, nuanced area that very few people are actually familiar with.
So I think continuing down that road and trying to understand all the different behaviors
and do thoughtful reviews, which is just like leaving a good review is so, so valuable.
it's the singular most valuable thing
that you could do to advance
like the Bitcoin core project
but it takes a lot of
just work behind the scenes
of familiarizing with the code base
and so I feel like that's a lot of what I spend my time on
I'm looking at people's PRs
I'm often looking even at historic PRs
that have changed the behavior even if they've been merged
to try to understand different iterations
and reasoning behind behaviors.
So like a peer that was merged a couple versions ago
was having an in-transaction download
was preferring downloading a transaction
from an outbound peer over an inbound peer
because it's harder for an adversary to have been running a node
and then when you start your node,
you happen to request them to form the connection.
It's a lot easier for them to just say,
hey, you accept incoming, let me connect to you.
And so for specifically privacy,
but also different sorts of guarantees,
East, we prefer downloading transactions from outbound peers. So there's, there was a rework
that was done a couple versions ago that added that discrepancy between the two groups. So that's
something that I've really dug into and been looking very closely at recently, but doesn't
actually lead to necessarily leaving a review or making a PR, but I think does help pour the
foundation for me to be able to do those things better yeah and this may sound like a stupid
question but does like port forwarding or 8333 for port excuse me like if more and more people
do that does that reduce the overall risk of of getting fed fed bad information from from another
node are getting
attacked like partition
attack
I don't know
something because I
mean because it's not
it's not straightforward
most people don't have
that port forwarded and
so you're saying
something I'm accepting
inbound connections if
more nodes accepted
inbound connections
yes
oh I see
I mean I think it's
different like if more nodes accepted inbound connections then i think that it's in certain ways
making you more robust for example you have more peers that you're interacting with getting
transactions from there's probably more honest peers but then in other ways it makes you more
vulnerable for example if a node is uh able to figure out a vulnerable ability that involves
rapidly disconnecting and reconnecting they wouldn't be able to do that if you
only accepted or if you didn't accept inbound peers um so it's as with everything kind of a
trade-off it's nuance yeah now it's just something i'm curious about but um one thing i want to talk
to you about is like so beyond the development aspect of it like what are your what are your
thoughts on bitcoin just the the i don't want to say movement but like the project overall the
asset um like do you do you think it's an imperative technology today or you just sort
of more interested in it because of the development aspect yeah i don't really think bitcoin matters
that's um obviously i think that i've had i've had developers come on here just like i just
like it as an engineering project really yeah yeah wow that's fascinating um no i think that
i mean part of what makes me so excited to work on it every day like there's there's the two sides
of it one is just this as an engineer nerding out intellectually is challenging but the other
side of it is that i think the work has so much impact or like so much potential for impact i
I think that it's like, I think it's only a matter of time that our world has a global
currency and the world that I'd like to live in has a sound global currency.
And I think Bitcoin is the only experiment that I've seen that's even moving in that
direction.
And so hopefully, like, I'd really, really like it if we were able to succeed and see
through this vision of you know censorship resistance I think is one of the really
fundamental ones but also yeah just the ability for everybody to participate in it and so I think
that really compels me to work on the project because it feels like the small actions I'm doing
are bigger than those actions themselves and so that's very exciting to work on on a daily basis
yeah it's i can't imagine how fulfilling that is and so what are you talking about you you do it
too i just i mean yeah i do love doing this this is it's a labor of love the podcast and the uh
and the newsletter but um i don't know right writing the code and act that actually makes
it work seems like it's it's uh it's got to be a certain type of feeling a certain type of feel
there when you get something merged it's like ah the software people downloading that is bitcoin
I help that like that's pretty dope yeah definitely is rewarding but I also find
educational initiatives and communicating about it rewarding because I think that there's a
software component but for Bitcoin to be successful it's really just about ubiquitousness
because it's money at the end of the day if people use it it succeeds and so I think that
a really really crucial component is getting that message out and having people understand
why it's valuable or how it works or how to interact with it and when we're talking about
how early the project is i think that's a huge sign of it there's a lot of constant like
like oh my gosh i don't understand everything so i must not understand anything um i don't i don't
know what's going on here and i think a lot of people disengage because of that and so i think
for those of us who do know a little bit or are curious i think we have a lot of work to do to
spread the fundamentals spread the enthusiasm etc i agree i agree there i think it's happening
at least uh i think more minds are getting infected with the bitcoin virus the virus is
spreading yeah bad timing to to talk about spreading viruses but whatever the meme's been
around for a while um when it comes to the network and uh like do you think uh we're we're on a good
trajectory for it to to be successful in the long run like do you think we're um being as efficient
enough with the chain state with uh making sure that full nodes uh are going to be able to be
downloaded in areas with with worse internet um do you think uh the uh the necessities of
which make this protocol successful in the long run are are there right now and
they're they're being sort of focused on enough that is such a hard question to answer um who
knows i mean i think part of what is really crucial for bitcoin to succeed is not just the
robustness of the base layer but also layer two and possibly in the long-term future more layers
on top because I think that like that really helps with usability and so the fact that there
is so much development in the lightning space and there's so much excitement in the lightning space
is really promising as well but it's so hard to know like what is sufficient you know to achieve
what we're striving for and it's also because it's a moving target right like the development
of infrastructure is constantly changing so five years from now our chain might be bigger but also
maybe um our bandwidth like expectations are larger as well i don't know um i don't i don't
really i didn't really spend too much time thinking about that i really just try to look
at what we have and how to make it as good as possible um but i think that there's a lot of
development that's iterative but there's also a lot of like stair steps like what we were talking
about earlier with early or utxl like if we're able to get something like one of those merged
those have huge impact on whether it be block download time or reconciliation and bandwidth
usage or whatever different dimensions but then those come off with a whole set of trade-offs as
well so there's like so many branches to the thought tree of possibilities it's hard to play
them out no no i mean that's why i always love talking to developers because it it um bitcoin
just as an engineering problem everybody's like i just saw you like running to your mind of like
scenarios that could play out if all this stuff happens it's it's never boring it seems um it's
but and on the content side it's never boring boring there's always always something to write
about and that's honestly i'd be more curious about to hear your take on that same question
because i feel like i because i am quite new and i don't feel like i have a very big volume of
understanding like i've just really dug into one one area uh but i you know you've you've been at
it for a while you've talked to so many different people what do you what do you think i mean like
you i'm i'm an optimist i think we're i think i don't think people get bitcoin enough credit i
think it's incredibly uh amazing how far it's come to date and if you like i've been reading about
and studying bitcoin since like 2013 and the strides it's made since then have been enormous
like if just the the those wallet software the fact that the lightning network exists
most importantly to me it's uh the fact that uh more and more developers are coming and being
intrigued by the protocol uh year in and year out whereas like 2014 2015 when there was a bunch of
rage quits and it seemed like uh interest in in bitcoin was dying like 2015 matt like the summer
fall of 2015 was a pretty dire time like well like december 2015 yeah yeah that was pretty bad
interesting and to see where it is now and it's i mean i think it's on i think
it's part of the culture now yeah people know what bitcoin is
yeah what do you think matt i'm bullish as fuck i wouldn't be here i wouldn't be here if i didn't
think we could do it yeah be a waste of time yeah yeah i agree um no yeah i'm like i think people
are too hard on bitcoin it's amazing that's still producing blocks and people are still coming uh
to learn about it and to buy some of it and to download full nodes and to and that's what
But Matt, mainly, I just try to help out in being a sort of platform to push this stuff, like privacy stuff, like CoinJoin, see more people CoinJoin, especially during this quarantine.
We've seen the number of Lightning Nodes go up, so it seems like people who...
Tour Lightning Nodes, too.
Yeah.
That's really good.
so actually i think if this quarantine is good for anything it's that people who may have been
a little bit apprehensive to to get into the the dirty side of downloading a full node and
trying to figure out how to do bitcoin the right way or start an experiment with that
that's very encouraging to me um that's super cool yeah and so i guess question i have the the uh
the roundout question we're gonna have here is like if there's any freak listening to this who's
may have been or may be apprehensive to sort of jumping into the fray of bitcoin core development
like what type of encouragement or advice would you give them i know we've talked about some of
it but is there anything we missed um that that you think uh anybody looking to jump into this
should know yeah um well for my full brain download that's the blog post that i wrote
about onboarding and I think that's just like packed with different things that I found helpful
but overall I think it's mostly the mentality it's definitely terrifying but if you're truly
willing to and interested then you can do it and if you can believe you can do it then taking small
steps and finding a focus so the first one is to download the repo and build it and run tests
and after that like start familiarizing yourself with what issues are being opened and what prs
are being made and finding excuses to look in the code um at whatever interests you because i think
that's part of what's so cool i am able to use my own excitement as a guide and i think a lot of
people have a lot of excitement for great reasons and so just follow what compels you and dig deep
and ask questions along the way and i think that i think that you'd be surprised at how that could
play out incredible advice you're such a and you're such a pleasant person to have in this
this like just thinking about like the twitter i mean i'm part of the twitter uh noise sometimes
but uh somebody who's just optimistic and humble and uh sort of took the bull by the
horns and jumped into this it's this has been a pleasure oh thanks matt do you have anything else
you want to add before we wrap here well i mean i wish we were doing this in person i would i would
love a follow-up in person when this all clears definitely that sounds good we have a lot more to
chat about you definitely will definitely um i'm gonna keep a look out on your rebroadcasting prs
and very very much looking forward to seeing that thank you for working on that stuff because we're
big on privacy here at cftc so anybody who's working to make the privacy of individual
bitcoiners better is a-okay in my book me meaty thank you for coming on yeah thank you so much
for having me it's been fun all right peace and love freaks
