DappCon 2023: TrueBlocks' Unchained Index -Thomas Jay Rush

DappCon 2023 · September 2023 · 1:03:14

A talk from Thomas Jay Rush at DappCon 2023 on TrueBlocks' Unchained Index. The Unchained Index is a complete, locally built index of every address's appearances on the Ethereum chain, letting developers query on-chain data without depending on a centralized API provider.

Speakers

Topics

From DappCon 2023, hosted by Dappcon Berlin.

Transcript

Monday morning 10:00 a.m. first uh first talk of uh dcon 2023 in Berlin and I'm I'm personally happy that it's this early and on the first day because I get to like party after at 11 o'clock this morning which is good so um do you have your computers with you and I just wanted to ask do you would you like me to walk with you to try to install I'm going to talk about true blocks which is the project I've been working on for about six years um the fundamental idea behind true blocks is why is the node software so hard to use and what would we have to do to the node

software to get it to be better so that it would be a better uh data server so I can I'm going to start the uh talk um by having you install true blocks if that's what you want to do your it's it's optional for you um you can follow along and I'll jump right into that then I'm going to talk about running a a node running the node software locally how many of you have ever run node software locally any all but maybe have you yeah did you run it on what kind of machine you you and you what kind of machines were

you running on and some mainnet ethereum or what what y that's great that's amazing and did you guys run the the server yourself you've run many servers yeah so I'm actually running a w server here against sepolia so I'll show you what that looks like and part of what I what I part of what I want to say is that um running a server is nowhere near as hard running a node software is nowhere near as hard as people think it is so I'll just jump in and get started um if you all go to this page we can kind of follow along so do you all have uh build

environments basically on your machines um go language do you all have go on your machine who doesn't have go on their machine you might well why don't you visit the go site maybe you can try to catch up I won't wait for you to okay great um and you all have git I imagine and you all have cmake do you have cmake on your machines okay so I'm just going to jump right in um um I'm actually kind of amazed that you all run noes can I can I ask like why

why do you run your own node I want to do you want to do data analys is or do you just want to do in you want to do like after indexing then you want to get data yeah dat Anis yeah you want to look at addresses and see what they're doing kind of what who buys what when and nice have you tried true blocks yet okay great and and you guys do you uh why do you run nodes yourselves uh foron is that we have one and uh private to do you run a node you said no but I went for a I work for a company

that oh okay great um and indexing is something that you're interested in or yes yeah and I know these are all rcky people oh little bit of a shill here roty pick it up it's great piece of software so um so I tell people that accessing the data from a locally running node is orders of magnitude and that's two at least orders of magnitude in my opinion better than uh hitting a a remote server nothing uh present company accept it over here um and I say that running an ethereum node locally is not as hard as people think and E even if you do run uh

an ethereum node locally you'll find that the RPC doesn't provide probably what you want it to provide uh it doesn't give you access to histories of accounts so that's what true blocks tries to do um so I'll go a little bit light is there anything good so there's a number of things with for me that web2 like apis and web2 like access to data um doesn't uh agree with the web 3 ethos um for example rate limiting and

we're going to see an example of that in the in the demonstration uh they kind of have to know who you are so that they can rate limit you if they don't know who you are they won't be able to rate limit you so all of those things kind of um make me want to see if we can't do it a different way um so let's get started with uh installing true blocks uh so I'm going to skip down here and if I'm just going to go and do these commands and you're more than welcome to uh try to do them yourself unless you already have it installed so this is downloading and uh

installing true blocks on my machine from git and then I'm going to um CD into that that folder make a build directory and change into that folder type cake and then type make so I'll just show this again if you want to uh go through these steps and and when you get to the place where you can say that the ls- L shows you shifra then I'll continue just go are you are you following along

yeah are yall at the place where you have shifra installed or built that was amazingly uh type shifra and hit enter can you and you get a screen just showing you a bunch of stuff is that true of everyone should I wait or should I proceed I guess I'll just proceed and then if you want me to stop you can just ask me to slow down or back up a little bit I've already shied your uh I held this up to the whole world

so um so once you have it installed you have to uh it's going to make the rest easier if you put this thing in your path from the build folder and then uh you can run shifra version and shifra status and just give me a thumbs up if you have it uh running I got zero thumbs up so nobody's running it so one okay good we got two as soon as we get three we're going to move forward three should I wait a minute you guys

you're from nosis you guys argon yeah oh sorry to set I should have that's all right so we're actually working on a Docker version that so it would just become a one line command but um so I said that I was running my own local node so I just wanted to spend a minute and show you that so so what I did uh to run my own local

node on this laptop which has a 4 terabyte hard drive this laptop is I just went to rest's GitHub repo and I downloaded the the GitHub repo for re and then I typed a single command I just type Docker compose up and W starts and it opens um five pieces of software so this is W starting and it opens five pieces of software one is the uh consensus layer um that's here I believe um yeah this is lighthouse that's the consensus layer it runs three pieces of monitoring software and it

runs the execution layer of w and this I think is really nice because I can open up a panel that shows me that W is sinking and this makes I don't know if you've ever tried to run a node trying to figure out if it's actually sinking is really a pain in the yet so this is really beautiful I just leave this open it constantly updates and when it's synchronized now I can start using this node so this is synced against sepolia so you can see it's blocked 4,200,000 is everything okay um and this was as easy as it could be it took a oneline command it's up and running uh it's in Docker as soon as Docker starts rest starts and uh it's constantly running

constantly updating and I don't have to do anything so uh vitalic once called the node a big hairy node and uh I'm like it's not that hairy and it's not that big so we you should try to run it but um so so I just wanted to show you that um and I'm ready to move on is everybody ready to move on should I move to the next step well that's the least responsive audience I've ever seen in my life okay thank you I'm going to move on thank you so

um so type type shifra status on your command line and it's going to show you um I just wanted to point out it shows you what node you're running against it shows you what release of uh true blocks you're running against shows you what chain you're running against shows you a bunch of folders that are useful for configuration and it shows you some numbers here so these numbers are this is the head of the chain that's the head of the nosis chain and for this installation this is our Index this is how far along our index is which is not far along at all CU we just started we didn't do anything to get the index so um we're going to try to get the index you can try to type this

command in your browse in your command line I'll type the same command um so after it downloads uh a file it's downloading a timestamp database that we published because timestamps are a real pain in the node one of the real shortcomings of the node is that it doesn't really give you an easy way to get timestamps uh get block data from a timestamp so this is saying that true blocks is not proper initialized is everybody there do you

see that message again um moving forward without any response um the next thing you can do is it's telling you that you need to scrape the chain for the index so I'm just going to spend a minute telling you what we mean by that so uh let me go um here sh

sorry I'll be with you in a minute sorry so I just wanted to take a minute to to tell you about our index and how we build it um so I said earlier that shif has a whole bunch of different commands um some of them are related to building and managing the index some of

them are related to once you have the index uh getting access to the data about particular addresses and a lot of them are related to just getting plain blockchain data so what we did is we took the RPC and we kind of said where is it inadequate and it's inadequate in a lot of places but we added features to the um to the RPC basically that allow us to do certain things and one of the things that we added was a a command called unique uh so we have a sheifer blocks it's exactly the same as the um RPC endpoint for ethor get block and we added a unique tag which allows us to

look at every single bit of the data in any given block and pull out every unique address that appears in that block and this is the basis for our indexing so we basically scan through the chain one block at a time we do it in parallel we're in go so we do as many blocks as we can at a time and we're just pulling off addresses that we find and recording which block and which transaction they're in we don't pull any other data at this time because we don't want to create a giant database that's a full extraction of the data from the chain we want to create the absolute minimal index so that it stays on a small machine like a laptop and uh that's in the unique um feature and what

this does it basically there's there's two different kinds of places where the data could be it's going to be in things that are very clearly addresses in the block one is all of these are pink all these pink things are things that are um they're defined in the data as addresses so we know that they're addresses so we pick them off there's a whole bunch of other places where there's just long strings of bite data in the in the uh block data the trace data and um we do something a little crazy kind of crazy I guess because I don't think anyone else does this uh what we do is we take advantage of the fact that

solidity did I lose my connection we take advantage of the fact that solidity packs addresses with Z leading zeros in in bite data and we can get these strings of thousands of bytes and they might have hundreds or thousands of addresses in them and we can we scan every single bit of all of that bite data and we're going 32 byte chunks at a time and we're saying there's a bunch of leading zeros there and what we do we we know that this is potentially not an address it doesn't have to be an address every 32 by string

is actually a valid address well no it has to have leading zeros uh so we can chop off anything that doesn't have leading zeros this one for example and um if it has enough leading zeros we say it appears to to be an address we don't say it is an address we say it appears to be an address that's why we call them appearances and what we get but then for some things we say this does not appear to be an address so we don't accept that as an address and we throw out anything which has too many leading zeros and we keep anything that has just enough leading zeros and what we get is an index that is richer and by that I mean it contains

more than then other indexers find and I think that's because they don't even look in that that data because they just think it's unintelligible bite data but we're kind of it's not a perfect solution because there literally cannot be a perfect solution because any 32 by string is a valid address even 00001 is a valid address so there is no perfect solution but we want a solution that's as good as it can be so we can get as many appearances as we can and we looked at ether Scan they provide seven end points for getting various different types of lists of histories and we compare ourselves to

that after taking duplicates out of their entries we get on average about 133% more appearances than they tell us happened to an address um and I think this is not only ether scan I think it's a lot of indexers are not looking deep enough into this bite data so they come up short on their index and when we look at where exactly it was that we found things that they didn't find it's always in the bite data so we're definitely finding some stuff that other people aren't finding and then when we look at what exactly was that bite data it's things like this it's it's monetary things purchase mint trade trade with hint

split donate those things are being missed by the the major indexers because I don't think they're digging deep enough into the bite data it's as simple as that so we want to create the best possible index recognizing that you can't create a perfect index because of that bite data problem and then we want to um build the index and we do something a little bit different here as well so this is block unique and we're getting random distribution of addresses because they just appear as in a transaction as they come it's time ordered and an index of course wants to be

sorted but as soon as you sort this index you lose what I call a mutability or reproducibility or a proof or something like that where if we were to take this data and put it into ipfs it would stay the same forever if we were to take this state and put it into ipfs it stays the same until we add a new record and then it changes on ipfs so for us that didn't work because we didn't want to build something that lost that uh reprodu reproducibility so we came up with a pretty simple solution actually we just stop adding records after a certain amount of time and we do this pretty

much exactly for the same reason that blockchains stop adding transactions to blocks because they want to create a fixed place in the world a fixed bit of bit bit of bites so we take the list of addresses we sort them and then we chunk them into chunks of of uh index pieces and we call that whole process scrape so I'm going to go back to my command line and type sheifer scrape because we don't have the index locally and I want to build it and it's telling me hey it's really great that you want to scrape congratulations you can't do that because your web your remote RPC provider doesn't provide traces and I'm

saying we need traces if we want to get a full index now we could turn this warning off and let people build an index if they wanted to without traces and now you're going to get log basically you're going to get logs or from and to addresses in the uh transactions but that's 60% I don't know the number it's 20% less than the total so you're going to miss all these important transactions that's that are actually transferring value so there's an alternative so we we bump into this problem um and basically Web Two providers they give you access to their

sorted index which puts them in a position of power towards the end user which is something I wanted to avoid so you get this end user um is totally dependent on this web API provider to continue to give them data they're also dependent on them to make sure they get valid data true data so I wanted to avoid that situation our first iteration we didn't avoid that situation at all we just gave people web access to our chunked index but that didn't feel right so then we kind of set the user aside for a second and we said let's publish this data out because it's immutable let's publish it

out to ipfs and keep track of all the hashes that we've created for each chunk and then put that in what we call a manifest a manifest is a list of every one of the chunks and then we publish the Manifest to a Smart contract that we call Unchained index and now what I've done or what we've done is we've um created an index that is represented by a single 32 byte hash that any person on the planet Earth that has access to Smart contract which is every person on Earth can bring down to his own computer her own computer and uh they have a list of every piece of the entire index and I

can't take it back after I publish it and that's on purpose because I want to eliminate my ability to become the controller of the situation I'm giving away the control on purpose because I want to I'll show you why I do that um now the user can say um shifra in it and then he can use some other tools from shifra and build his application now the trouble with that it's about 100 gigabytes big so I'm going to come back over here and type shifra in

it you can do this if you want it should work on your computer if you want it doesn't bring 100 gigabytes down it brings it's it's going to bring only three gigabytes down so how how many of you have heard of a bloom filter so Bloom filters are astonishing they take megabytes of data and it's a list of addresses and it creates from a megabyte or 50 megabytes of data it creates 50K Bloom filter and because it's immutable I can put a bloom filter in front of every chunk of my index I put that bloom filter into the Manifest as well so when users download the Manifest are you with me sorry are you

with me great thanks I just didn't know um who's with me how's it sound sound like it might work sound like it kind of works so um creating these small Bloom filters that I can publish to a Smart contract everyone can read that smart contract pull down the list of Bloom filters bring them local to their own machine and now they have they have exact understanding of where in the history of a chain their address that they're interested in appears um so let me show you what that looks like so did did anybody here run

uh schifer in it and is it running it's gone through how many how many uh yeah you um you can type shifra um config edit and there's a a a section there for main net um and you can add your RPC endpoint there uh you could you also have to change the default chain in that file to uh to main it I'll show you what that looks like as soon as this finishes here it's so interesting what it is it's

like it's a it's a bit string so it's ones and zeros and I can take uh an any address and I can hash the address and then I pick five um I pick five bits out of that hashed address and I light them in the bloom filter so if I put two addresses in it might light eight bits if I put 10 it might Light 30 bits or something so when I query the bloom filter if I I hash the address again and I look at the same five bits and if it says yes on all five bits then I know that it it's in that chunk so like you

you should read about Bloom filters it it's super compress basically what it says to you is um the address that you're asking about or the data that you're asking about may be in the larger piece it it can say it's absolutely not in the larger piece because one of the five bits is not lit but if it says five bits are lit it's not saying it is it's saying it may be and it's really magnificent thing you should read about it so now I'm finished and now I have um now I have all of these blooms and I have three gigabyt of data on my hard

drive and I have a bloom for every one of the chunks and now I can query against the bloom filters and I'm going to do that here I'm going to say I'm going to say shifra list true blops doeth and this is saying I hit on these seven Bloom filters out of the 1,000 that I have I hit on only seven because true blocks. eth only interacted with sepolia in those locations in the chain and it then downloaded just those seven chunks so

out of 2,000 chunks or 2,000 full chunks in order to get a full history of true blocks. eth on zolia I download seven chunks and now I have seven chunks on my machine I have all the blooms and seven chunks and what I would love to see happen is sorry and now if if any of you have done have any of you done uh sheifer in it and then sheer List have you yeah so when you did it you did it with your address and you got a totally different set of chunks because you have a different history and this is done on

purpose because I want each user to be pulling their own weight they bring their own list to their own machine there's false positive rate which means that they get a little bit more than they really need for their own use case which makes them a contributor to the system instead of a drain on the system they're carrying part of the data and we can turn on a switch that makes it pin by default so once they have the chunks down on their machine we can have them pin this data down on their machine so what happens now is everyone is sharing in the burden of the data and we don't have uh a situation where one entity has

the D has the index and I wanted to build on purpose because I wanted to explore what it would be like and it's actually works I think it works if I get adoption and I can get people to use it um and it has all these amazing qualities so two I'll talk about two one is um the more unlike a web 2 API where if I get let's say I get 10,000 brand new users in one day I literally have to go out and buy new machines because I have more and more and more people hitting against my central place and that's why you need rate limiting you have to keep people from hitting on it too hard but if I get 10,000 new users

here we have 10,000 more copies of these pieces of the index out there so the more and more and more people that use this system get the system itself becomes more resilient naturally without anybody having to do anything and that's really important the other thing that's very important and interesting is I have 10 chunks because I'm just a little guy doing little things Unis swap is in every single block on the on the mainnet blockchain and if they use this they would download and pin the entire thing which means that a heavy user of the chain carries a heavy burden of the data and they should exactly do that they shouldn't um impose their use case on us without giving back

to the community by sharing this index out there so those two things are very important to me they're not really something that true blocks does it's just something that ipfs does this is just how ipfs works yeah what is the concept apps because it says oh I shouldn't use the word apps it should say appearances those are I found those many appearances in that line when I did the least Comm said yeah ABS it's a bit I should use the word appearances what it's saying is I found in this chunk I found 23 appearances or something so is everybody with me kind of on this thing this is kind of the thing I wanted to really get forward is we don't have to rely on web apis to give us this data

we can build all of this could actually be built into the node software so that it did this automatically we can pin it on any content addressable storage we want we can publish to some smart contract and everyone can benefit from and help deliver this data to each other so now we have I have uh onoa true blocks. eth transacted in these locations and I know exactly what locations they are and I can do something like this I can cut off uh the block I can get rid of the header and now I have a list of just

blocks I'm going to store that in a file called blocks and then I can do a command like like this where I say State I want to do state for True blocks I want to do I want to I want to get basically the balance for True blocks on a sapoia um at every one of those blocks now I don't have any money on spolia so it's all coming up with zero balances so I'm going to switch let me just uh do this uh I'm just going to turn this off for

one second so I'm going to say I want to see true blocks on Main net um you'll allow me to log into a different computer to do this but uh so on Main net true box has 4,000 transactions

so this is showing me the balances that every one of the blocks where I appear in the Chain's history and this is the basis for the next thing that I want to talk about which is uh what I call reconciliation so you'll notice there it went up to 76 for a minute um we got um some funding from the ethereum foundation so that was very very helpful but um if you have an remember I said that we have 133% more transactions we find that and we um a lot of those transactions are Financial in nature and the reason I'm interested in getting those transactions is because I want to know at every block where that address

transacted what was its balance either in ether or in any token so I can actually also say I can say shifra names um die stable coin I know it starts with ox6 and that's the die stable coin so I'm going to take that by the way you guys are supposed to be following along with me but I kind of lost you so I'll just continue on um so I'm going to say I want to see the token balance for die for True blocks on all of those blocks that it transacted

in um token balances don't know anything about ether balances so I'll take that off so this is my Holdings in D or any token that I want to look at for every place where this thing transacted and now my goal is to say how do I know that um the balance at the previous block was the same as the balance at the beginning of the next the next transaction because that would be reconciliation to me so I can say I know it was $10 here the two months later it

was also $10 and now I know that I didn't miss a transaction in between and then and then within each transaction I want to say beginning balance was 10 I spent three gas was one so I better have you know whatever that is six so that act of Recon conciliation to me is a demonstration that I have a complete list of the history and I haven't missed something and then you can actually extend that um it's not just balances of tokens it's not just balances of ether it's actually State changes in a smart contract so I can say I know that the number of votes was 200 I know that in

the week of June 1st 3,000 new votes came in I better have 3 ,300 votes or something and you can uh reconcile State and to me that's the whole point of a of a blockchain that has literally perfect State Management for 300 million accounts 100 million smart contracts however many onchain it happens every 12 seconds offchain nobody knows what the hell's going on on any on any of these smart contracts they kind of have a feeling that they do but they don't know in depth because they can't reconcile what's happening offchain and to me once we get to the point where we're

reconciling State changes off chain I think then we get adoption in my opinion because if I'm a business person and some guy comes along and says hey you know what we're pretty good with the accounting we're about $10 off here I'm going to say no we're not we're not going to a Smart contract get to you have 18 decimal places on chain give me 18 decimal place accuracy and when we do that I think we'll get adoption because it's better accounting system so uh off the Soap Box um uh I have all the time in the world I have 20 minutes left so all the questions yeah um I I don't look at um any

particular thing I look at um I look to see if the address is present in the transaction and if it is then I know that I have to reconcile something in that transaction it can be a transfer a lot of times it's not a transfer which is why regular you know web 2 based accounting people are coming up short on their ability to reconcile your endpoint because they're they're looking only at events if you look only at events you're going to miss things and it's not going to reconcile and kind of the reason why I know this is because I started from reconciliation I wanted to reconcile first and every time it

didn't reconcile I went and looked for the place where something changed and it was always in this bite data and it was frequently not in event data so you you can't really reconcile with just events even though that's kind of the theoretical way that it's supposed to work work doesn't work that way that's why I kind of say that you have to have tracing that you have to dig as deep as you can and if you miss something it's just not going to reconcile cont it is yeah well we're definitely going to find

that appearance right because we're not only looking at events we're looking at just appearances we know that it's in there in that transaction something happened we don't yet know what but I know that um we can look through we we now have um we're we're at that transaction and we've been keeping track of balances for 50 tokens in the history of this smart or this address and we can say let's look through the data and see if there's any tokens in there and we we have some heuristics on how to find a tokens if they respond yet you know with a name then we think it's

a token and we try to balance it um we have every address that's in that transaction because we have that unique thing so we say we don't really know what happened do a unique give me all the addresses that are in here any of them that are tokens I'm going to try to reconcile them I first do a balance against the previous time I saw that token and then I do a balance against the current time and if it change then I know I have to reconcile and I reconcile by doing everything I can to reconcile looking at events now um looking in some data we try not to do particular things for particular addresses so if I fail and I get to the end I can't reconcile

now I make an entry called correcting entry and it comes out in the you know in the data that here's the thing that maybe the accountant wants to look more deeply at or something because um we can't figure it out in a generic way I never wanted to make it specific for specific addresses because that's not sustainable for me but we're talk we're thinking about how we can extend uh allow you to extend and say I know this address do this thing to get the balance right so that's in the works it's kind of not yet ready but yeah I'd have to look at it it might be

we might be lucky that it kind of comes out in one of we we probably have 10 I said we didn't have any special cases but we might have a couple of special case code where we know that it's weird like that the more popular things we'll do but we try to avoid that because it's not really sustainable but no matter what it get flag yeah either we reconcile because it all makes sense and we find why it reconciles or we say we can't reconcile make a entry that sticks out as something weird is happening here any other questions that means for example I asked for

un to get all X andon so uh there in this process there's no need for custom so many differentes for example well you know it's so it's it's an excellent excellent question really truly is a great question here's the thing every single one of them every single one of those custom weird that's happening every single single one of them trading tokens erc20 tokens almost always erc20 tokens and we look at erc20 tokens and almost all the time

we can reconcile on the change in balance of an erc20 token it may or may not show up in an event but we know that the token balance changed from beginning to end and we can say there was a token transfer of some type here if it's positive that's a mint maybe if it's negative that's a burn if it's a transfer it probably showed up in the transfer event so all those crazy things that you're talking about I was kind of Lucky when I discovered that it didn't really matter because we just look at tokens and this is in the it it does it does yeah and uh it turned

out I mean I was I was worried about that problem you know because everything's you know slightly different and in just the tiniest little way but it turns out that what they're doing down at the bottom even even a a a transaction that has hundreds of calls to hundreds of smart contracts all of them at the very bottom are just transferring tokens and we can kind of reconcile if we look just at tokens it's not perfect but um if it doesn't work then we give a special entry called you know balancing entry or correcting entry or something like that so yeah it all came from my desire to reconcile right so every time it didn't

reconcile then I went and spent three days trying to figure out where was that little mistake or where was that thing happening so uh that's where it all came from so anyway people um they say why so many files on my local computer I don't like that or they they um they say how inconvenient they what a pain in the ass and to that I say yeah well tough tough it's tough luck you know it's like if you want to be in a decentralized world the first thing you have to do is decentralize the world so that's just part of the game is that you have files on your computer that you might not have had otherwise other people say I love the command line but I really love an API so one of the uh

commands that's available from shra is called serve so there's a command here called serve uh we call it demon but it's serve um and serve serves every one of these other um end points with exactly the same options as the command line options so you can get you can stand up a server and write an application against this thing with really fast really good deep accurate data for the history of accounts um smart contract developers could use this so you know they probably use the graph today or they use their

own indexing tools or whatever uh my guess is their own indexing tools are very specific to their own contract so as soon as they go to another one they have to rewrite that code the graph only looks at events as far as I know unless it might look at traces at this point do you know Ju Just A doesn't say Z yeah so and very important to me why do I have to pay for access to the data through buying coins that just makes no sense whatsoever we should just fix the node software so that actually indexes because that's what the community needs and the community is constantly building it and companies are coming along and saying hey I'll do the indexing for you

pay me $300 a month it's great fine I can write soft software that literally changes the node software so the node does it automatically without having to pay anyone to do anything and I think we should do that um so I'm not going to I have 10 minutes left so we can do anything you want I have a couple other examples but I'm happy to ask any or answer I could ask some questions as well I would absolutely love for you guys to tell me are you running true blocks any of you how's it and it's working well for you what do you do with it

like oh okay so you haven't gotten through the two we period at the end of three most people quit using it because it doesn't really work all that well but uh what does the API look like is a rest API do you get so in order to start the API you type shifra serve um so that started the API and then I

can just hit it with curl or something um hold on so that's getting data from curl after having started the server and the API is identical in in the it's identical in every way to the um shifra command line tools it has exactly the same options and you basically use it exactly the same uh and we built this part because we want to build little applications so maybe I want to build an application that looks at my gitcoin grant Behavior

or something and Compares it with Rocky because I do that all the time to my detriment um any other questions yeah have it in the node then excuse me when are you going to have it in the node let's say I'm sorry any other questions um I'm going to have it I'm going to have I don't care if true blocks is in the node I don't care about that I care that indexing is in the node and I think that people will come to understand especially as we go to 40 layer twos that if um the only way for people

to get accurate you know histories is through an API provider who's charging $250 for layer two number one layer two number two everyone I want to use people will understand eventually that this is a a problem that can be solved in the node software and it should be solved in node software so I kind of don't I I've beat my head against the wall for four years this should be in the node this should be in the node and I know it should be in the node no um when is it in the node when people understand that it needs to be in the node and demand that it gets put in the node I can't I'm not even GNA probably

fight that battle other than to stand up here and say it should be do you see what I'm saying it's too hard that's too hard a problem I can't do that node developers are what devel they are busy enough kind of you know they have enough on their plate and uh there are solutions out there that you know take the burden off of them people don't demand it from them uh people accept that accounting software which is using all these apis and coming up short they accept that it's okay for the

accounting software not to reconcile so I think in the end we're going to figure out that index IND in is going to be and not only indexing but indexing that actually works and produces reconcilable State offchain and it's fast it's not costly I think we're going to figure it out and if we don't figure it out we're just building something that I don't even give a about to be perfectly honest it's just not interesting it's just the same old thing and you know I yeah I kind of I can't it's like you know I can't solve that problem I can just show people that it's solvable right any other

questions we have like five minutes does anybody want to ask anything yeah oh sorry contract can you query which transaction it was deployed yeah absolutely because we see every appearance so deployment it comes in the uh in the uh receipts contract addressing so we'll pick that off naturally if it's internal transaction yeah because we dig into each little piece of the btes and down in the traces there's a trace uh response I think or reply or something and it's in there so something I can find

um so tell me uh well I'll just pick a I'll just pick a smart contract like let's say the gitcoin um so we've also been doing something that I probably shouldn't tell people but I'm going to um everybody like goes on Twitter and says give me your address and I'll uh give you some tokens every single time that people have done that for the last seven years I've copied all of those addresses along with their Twitter handles and I put them in a database that's called names so we list 13,000 names where you guys have doxed yourself and uh I don't apologize for it it's not

my fault um I can say gitcoin core um this one so this was the gitcoin address this is a smart contract I'm going to say gitcoin list and it's going to go and get this is sapoia um let me go on to main net hold on so I'm on a different machine now so I can say shifra list um this is gitcoin on Main net okay so that's every appearance and the first appearance is

where it was deployed okay huh yeah the block number and the transaction ID yeah that's right block that's what an an appearance is it's an address and where it appeared so we can find it we don't have to scan the chain to figure out where it is um and then I can say I can say export I can say format Json and I can say last block and take this block + one and that's the deployment there

that's the deployment of gitcoin so it kind of just naturally falls out because we find every appear we find as many appearances as we can and this is really interesting for like Unis swap as well too because we can see the factory um creating um smart contract anyone else have any questions any comment can you guys give me some feedback on true blocks should I continue working on this project or can you help me get some funding guys who who has funding who has F raise your hand if you have funding hello hello hello hello hello hello all right great so I'll just continue this project on my own funding

that's a great idea yeah R I'm GNA just turn this into a business if you guys don't help me out retro yeah vote for me if you're a voter on the on the optimism vote for my project because I'm I'm really all about sort of we can do this as a community because if we don't do it as a community somebody's going to capture this thing somebody's going to take it away from us they're going to have it we're not going to have node software that even comes close to doing this in the future if we don't get it to do it now because in the future the Big Data providers are going to move the needle of where the node software behaves to the point where it

can't even do what I'm talking about because they throw away the ability to run node software on small machines because it's not in there they don't need that so they just toss that it's not a purposeful act it's just what happens with software is it gets pressure from the place that people are pushing on it and if we're building apis web 2 apis and all the node software is behind a web 2 API all the API providers are deciding what happens with the node software so I'm saying let's let's not let that happen let's change that and make it happen a way that works for us so thanks for coming I really appreciate it we have a question absolutely yeah certainly yeah

now what they did isim what they did though is they went into the internals of Aragon and I kind of chose not to do that because I I wanted to um stay so I could go against any node software so uh and um I don't know that their indexing is quite as thorough either they're more focused on the indexing you would need for a blockchain Explorer which is maybe not the same thing as for reconciled Trans State histories but uh yeah no I'm friends with them actually they're talking later today actually um these all on the road map to use kind of reps or whatever so when you see that the transaction is happening

yeah yeah yeah absolutely we have yeah we have a feature called monitoring and you can give it a list of add in fact we gave all um 2,000 gitcoin addresses to a monitor and it was just watching all 2,000 every 12 seconds whenever a donation came in I can actually show you that real quick I have a minute I think so if I do tokenomics so we wrote this thing that was monitoring um all the gitcoin addresses sorry and just updating a database and then generating a lot of different pieces of data this is about 2,000 addresses that true blocks was monitoring on my laptop generating data for this dashboard um and it's

interesting because when you have even with 2,000 addresses there's a block every 12 seconds and maybe six of them have a transaction so it's a really light thing so it doesn't take up a lot of resources um this worked for a while and then we kind of stopped because it's a little bit of a pain in the ass but um yeah no you can do exactly that yeah uh it's not full featured yet that feature but uh you're welcome to help fund us to do that and the last one do you currently only have only let's put it another way token balances or could I also get information about all the contract interaction all the contract interactions um we call it articulation

so we get this ugly bite data we can pull the API from some Source ether scan which is really the only source and then with the ABI and the bite data we decode that transaction and we can give it back to you as a what we call an AR articulated uh log or something or an articulated trace and it shows you inwords what everything was so it's very nice actually kind I think I think I answered exactly what you asked in a way that didn't maybe match up with your question but yes yes you get we don't use webook we don't use web hooks or or anything we just kind of but you get the events out of transaction and then it get decoded

we decode it and it comes back as English and you can understand it really well and you can pop it into your database and do whatever you want with it and you could run it as a monitor so you constantly have a fresh update of your state of your entire system because it's not just logs it's traces as well so you get even more than just watching logs which I think is something that you probably aren't getting elsewhere most likely maybe or you wrote it yourself sorry or you wrote it yourself um my first one I wrote myself tenderly tenderly get allu we're going to start competing with

tenderly next year oh I'm done I'm sorry uh yeah well thank you so much for coming I really appreciate it um please communicate with me in the Discord I'm very helpful and I'm looking for feedback so thank you