All language subtitles for [English (auto-generated)] Learn Solidity, Blockchain Development, & Smart Contracts Powered By AI (3)

af Afrikaans
ak Akan
sq Albanian
am Amharic
ar Arabic
hy Armenian
az Azerbaijani
eu Basque
be Belarusian
bem Bemba
bn Bengali
bh Bihari
bs Bosnian
br Breton
bg Bulgarian
km Cambodian
ca Catalan
ceb Cebuano
chr Cherokee
ny Chichewa
zh-CN Chinese (Simplified)
zh-TW Chinese (Traditional)
co Corsican
hr Croatian
cs Czech
da Danish
nl Dutch
en English
eo Esperanto
et Estonian
ee Ewe
fo Faroese
tl Filipino
fi Finnish
fr French
fy Frisian
gaa Ga
gl Galician
ka Georgian
de German
el Greek
gn Guarani
gu Gujarati
ht Haitian Creole
ha Hausa
haw Hawaiian
iw Hebrew
hi Hindi
hmn Hmong
hu Hungarian
is Icelandic
ig Igbo
id Indonesian
ia Interlingua
ga Irish
it Italian
ja Japanese
jw Javanese
kn Kannada
kk Kazakh
rw Kinyarwanda
rn Kirundi
kg Kongo
ko Korean
kri Krio (Sierra Leone)
ku Kurdish
ckb Kurdish (Soranî)
ky Kyrgyz
lo Laothian
la Latin
lv Latvian
ln Lingala
lt Lithuanian
loz Lozi
lg Luganda
ach Luo
lb Luxembourgish
mk Macedonian
mg Malagasy
ms Malay
ml Malayalam
mt Maltese
mi Maori
mr Marathi
mfe Mauritian Creole
mo Moldavian
mn Mongolian
my Myanmar (Burmese)
sr-ME Montenegrin
ne Nepali
pcm Nigerian Pidgin
nso Northern Sotho
no Norwegian
nn Norwegian (Nynorsk)
oc Occitan
or Oriya
om Oromo
ps Pashto
fa Persian Download
pl Polish
pt-BR Portuguese (Brazil)
pt Portuguese (Portugal)
pa Punjabi
qu Quechua
ro Romanian
rm Romansh
nyn Runyakitara
ru Russian
sm Samoan
gd Scots Gaelic
sr Serbian
sh Serbo-Croatian
st Sesotho
tn Setswana
crs Seychellois Creole
sn Shona
sd Sindhi
si Sinhalese
sk Slovak
sl Slovenian
so Somali
es Spanish
es-419 Spanish (Latin American)
su Sundanese
sw Swahili
sv Swedish
tg Tajik
ta Tamil
tt Tatar
te Telugu
th Thai
ti Tigrinya
to Tonga
lua Tshiluba
tum Tumbuka
tr Turkish
tk Turkmen
tw Twi
ug Uighur
uk Ukrainian
ur Urdu
uz Uzbek
vi Vietnamese
cy Welsh
wo Wolof
xh Xhosa
yi Yiddish
yo Yoruba
zu Zulu
Would you like to inspect the original subtitles? These are the user uploaded subtitles that are being translated: 1 00:00:00,120 --> 00:00:03,959 welcome to the ultimate solidity smart 2 00:00:03,959 --> 00:00:06,799 contract web 3 blockchain developer 3 00:00:06,799 --> 00:00:10,000 course Foundry Edition previously we've 4 00:00:10,000 --> 00:00:12,719 done two other massive courses and 5 00:00:12,719 --> 00:00:14,040 tutorials like this one of them with 6 00:00:14,040 --> 00:00:15,759 JavaScript and one of them with python 7 00:00:15,759 --> 00:00:18,320 and then now one in pure solidity and 8 00:00:18,320 --> 00:00:21,519 combined those two videos have over 5 9 00:00:21,519 --> 00:00:23,760 million views making them the most 10 00:00:23,760 --> 00:00:25,560 watched blockchain developer educational 11 00:00:25,560 --> 00:00:27,840 material on the planet and we're looking 12 00:00:27,840 --> 00:00:30,560 to do it all over again we've learned a 13 00:00:30,560 --> 00:00:32,880 ton for making those first two courses 14 00:00:32,880 --> 00:00:35,360 and we've taken all of those learnings 15 00:00:35,360 --> 00:00:37,600 from those two courses wrapped them up 16 00:00:37,600 --> 00:00:39,920 into this one to make this one the best 17 00:00:39,920 --> 00:00:42,039 one yet if you're more interested in 18 00:00:42,039 --> 00:00:43,520 full stack development and working with 19 00:00:43,520 --> 00:00:45,440 JavaScript the hard hat one is still a 20 00:00:45,440 --> 00:00:47,039 phenomenal resource for you to get 21 00:00:47,039 --> 00:00:49,360 started however this one has a ton of 22 00:00:49,360 --> 00:00:51,480 advancements in it making it the most 23 00:00:51,480 --> 00:00:54,079 Cutting Edge web3 developer course 24 00:00:54,079 --> 00:00:55,920 period having done one of these videos 25 00:00:55,920 --> 00:00:57,600 every year for the past 3 years I've 26 00:00:57,600 --> 00:00:59,559 been reached out to by countless 27 00:00:59,559 --> 00:01:01,960 Developers ERS who are now full-time 28 00:01:01,960 --> 00:01:04,040 developers in the web 3 space making a 29 00:01:04,040 --> 00:01:05,960 living doing well and contributing to 30 00:01:05,960 --> 00:01:08,400 web 3 and there are thousands that I 31 00:01:08,400 --> 00:01:10,479 have not met who have left comments or 32 00:01:10,479 --> 00:01:12,040 left me notes and I know we're going to 33 00:01:12,040 --> 00:01:13,640 do it again with this video If you're 34 00:01:13,640 --> 00:01:16,200 looking to become a web 3 solidity smart 35 00:01:16,200 --> 00:01:18,560 contract or blockchain developer or any 36 00:01:18,560 --> 00:01:21,240 of those terms this is the course for 37 00:01:21,240 --> 00:01:23,560 you and this course is for anybody and 38 00:01:23,560 --> 00:01:26,680 everybody no matter your blockchain or 39 00:01:26,680 --> 00:01:28,320 developer experience level and 40 00:01:28,320 --> 00:01:30,079 additionally we're going to be using 41 00:01:30,079 --> 00:01:32,439 artificial intelligence to accelerate 42 00:01:32,439 --> 00:01:33,920 our learning progress and I'm going to 43 00:01:33,920 --> 00:01:35,360 teach you not only how to become a 44 00:01:35,360 --> 00:01:37,240 blockchain developer but how to work 45 00:01:37,240 --> 00:01:39,720 with AI tools to make you a 10x 46 00:01:39,720 --> 00:01:41,200 developer if you have a little bit of 47 00:01:41,200 --> 00:01:42,960 developer experience before this this 48 00:01:42,960 --> 00:01:44,640 course will be even easier to get 49 00:01:44,640 --> 00:01:46,479 through but again don't worry if you've 50 00:01:46,479 --> 00:01:48,320 never coded before and for those of you 51 00:01:48,320 --> 00:01:50,040 who are already familiar with blockchain 52 00:01:50,040 --> 00:01:51,799 and smart contract development feel free 53 00:01:51,799 --> 00:01:53,280 to jump around the different modules and 54 00:01:53,280 --> 00:01:54,399 different sections and grab the 55 00:01:54,399 --> 00:01:56,039 learnings that you want I promise 56 00:01:56,039 --> 00:01:57,360 there's a lot of cutting edge 57 00:01:57,360 --> 00:01:59,039 information in here and maybe you need 58 00:01:59,039 --> 00:02:00,920 to brush up so no matter if you're brand 59 00:02:00,920 --> 00:02:02,960 new to coding brand new to blockchain or 60 00:02:02,960 --> 00:02:04,719 you're an experienced smart contract 61 00:02:04,719 --> 00:02:06,399 engineer you're in the right place 62 00:02:06,399 --> 00:02:08,160 welcome to the edge of the rabbit hole 63 00:02:08,160 --> 00:02:10,160 let's get froggy for those of you who 64 00:02:10,160 --> 00:02:12,000 don't know me my name is Patrick Collins 65 00:02:12,000 --> 00:02:14,400 I'm a smart contract engineer security 66 00:02:14,400 --> 00:02:16,440 researcher and just lover of all things 67 00:02:16,440 --> 00:02:18,200 web3 I'm one of the co-founders of the 68 00:02:18,200 --> 00:02:19,920 smart contract auditing firm cyphon 69 00:02:19,920 --> 00:02:21,280 average smart contract YouTuber 70 00:02:21,280 --> 00:02:24,400 co-creator of web3 education. deev and I 71 00:02:24,400 --> 00:02:26,519 live and breathe smart contract 72 00:02:26,519 --> 00:02:29,200 development I absolutely love web 3 73 00:02:29,200 --> 00:02:30,800 blockchain and smart contracts and I 74 00:02:30,800 --> 00:02:32,920 love the power and the tools that they 75 00:02:32,920 --> 00:02:35,120 enable us to use but not only that I 76 00:02:35,120 --> 00:02:36,760 love taking blockchain developers like 77 00:02:36,760 --> 00:02:38,959 yourself watching this video right now 78 00:02:38,959 --> 00:02:41,280 on the journey to becoming a successful 79 00:02:41,280 --> 00:02:43,760 smart contract developer I think the key 80 00:02:43,760 --> 00:02:45,239 to web 3 to blockchain to 81 00:02:45,239 --> 00:02:47,239 cryptocurrencies being successful is 82 00:02:47,239 --> 00:02:50,200 having a phenomenal Foundation of 83 00:02:50,200 --> 00:02:52,480 developers so I'm incredibly excited 84 00:02:52,480 --> 00:02:54,120 that you're here with me and for those 85 00:02:54,120 --> 00:02:55,519 you who don't want to become blockchain 86 00:02:55,519 --> 00:02:57,840 developers the first two lessons of this 87 00:02:57,840 --> 00:03:00,319 course lesson zero and lesson one are 88 00:03:00,319 --> 00:03:02,440 foundational pieces of conceptual 89 00:03:02,440 --> 00:03:04,879 information for you just to understand 90 00:03:04,879 --> 00:03:06,760 how to get into this web three thing so 91 00:03:06,760 --> 00:03:08,360 if you don't want to become a developer 92 00:03:08,360 --> 00:03:10,280 just stop once we get to the coding for 93 00:03:10,280 --> 00:03:12,400 my pythonistas here I'm working on an 94 00:03:12,400 --> 00:03:15,080 addition of this course purely in Python 95 00:03:15,080 --> 00:03:17,519 and Viper stay tuned for that as well in 96 00:03:17,519 --> 00:03:19,120 any case I'm incredibly excited for your 97 00:03:19,120 --> 00:03:21,519 journey this is a data dump passion 98 00:03:21,519 --> 00:03:23,480 project of all the knowledge that I've 99 00:03:23,480 --> 00:03:25,239 collected over the past few years of 100 00:03:25,239 --> 00:03:26,680 working in this industry and being a 101 00:03:26,680 --> 00:03:28,480 smart contract developer myself and at 102 00:03:28,480 --> 00:03:29,879 this point I have the track record to 103 00:03:29,879 --> 00:03:33,040 show that I am 100% confident that if 104 00:03:33,040 --> 00:03:34,920 you follow along if you code along with 105 00:03:34,920 --> 00:03:36,920 us if you follow me on this journey you 106 00:03:36,920 --> 00:03:38,720 will come out the other side armed with 107 00:03:38,720 --> 00:03:41,360 the knowledge to be a positive force of 108 00:03:41,360 --> 00:03:42,680 the cryptocurrency and blockchain 109 00:03:42,680 --> 00:03:44,720 Industry smart contract and solidity 110 00:03:44,720 --> 00:03:47,200 developers are massively in demand with 111 00:03:47,200 --> 00:03:49,200 an average salary being around 112 00:03:49,200 --> 00:03:52,120 $145,000 a year and with AI coming in 113 00:03:52,120 --> 00:03:54,200 place it's becoming even easier to get 114 00:03:54,200 --> 00:03:56,680 up to speed quickly but only those that 115 00:03:56,680 --> 00:03:58,400 understand the technology truly will be 116 00:03:58,400 --> 00:04:00,840 able to take advantage of all these 117 00:04:00,840 --> 00:04:03,439 advancements AIS get stuff wrong a lot 118 00:04:03,439 --> 00:04:05,079 so we especially need the knowledge to 119 00:04:05,079 --> 00:04:07,120 fact check whenever AIS get things wrong 120 00:04:07,120 --> 00:04:09,200 being here you have the opportunity to 121 00:04:09,200 --> 00:04:12,159 be a Pioneer ushering in the age of web 122 00:04:12,159 --> 00:04:14,920 3 of cryptocurrency Blazing the trail of 123 00:04:14,920 --> 00:04:17,000 where this phenomenal industry has yet 124 00:04:17,000 --> 00:04:18,799 to go like I said this isn't the first 125 00:04:18,799 --> 00:04:20,280 time we've done this we've already 126 00:04:20,280 --> 00:04:22,759 helped so many developers get into space 127 00:04:22,759 --> 00:04:24,960 and we're going to give you the Cutting 128 00:04:24,960 --> 00:04:27,479 Edge most modern tools for Industries 129 00:04:27,479 --> 00:04:31,080 like defi nfts Dow tokens upgradeable 130 00:04:31,080 --> 00:04:32,479 smart contracts blockchains and 131 00:04:32,479 --> 00:04:34,039 everything else that you can think of 132 00:04:34,039 --> 00:04:35,919 once you finish this course it will be 133 00:04:35,919 --> 00:04:37,800 abundantly clear what you want your next 134 00:04:37,800 --> 00:04:39,600 steps to be and you'll have a ton of 135 00:04:39,600 --> 00:04:42,160 Economic Opportunity at your fingertips 136 00:04:42,160 --> 00:04:44,280 and opportunities to make a huge 137 00:04:44,280 --> 00:04:46,520 difference in this amazing industry 138 00:04:46,520 --> 00:04:48,479 however I can't just give it to you you 139 00:04:48,479 --> 00:04:50,880 have to come with me on this journey you 140 00:04:50,880 --> 00:04:52,639 have to take the step despite what you 141 00:04:52,639 --> 00:04:54,840 might think you know cryptocurrencies 142 00:04:54,840 --> 00:04:57,080 and smart contracts enable a more 143 00:04:57,080 --> 00:04:59,080 accountable World a more transparent 144 00:04:59,080 --> 00:05:01,280 World a more collaborative world a world 145 00:05:01,280 --> 00:05:03,600 where promises can't be broken and 146 00:05:03,600 --> 00:05:04,759 that's a world that I want to live in 147 00:05:04,759 --> 00:05:06,160 we'll learn more about the purpose of 148 00:05:06,160 --> 00:05:07,479 smart contracts and the purpose of 149 00:05:07,479 --> 00:05:09,440 blockchain technology in lesson one of 150 00:05:09,440 --> 00:05:11,000 this course and then of course we'll 151 00:05:11,000 --> 00:05:13,199 teach you how to build it so before we 152 00:05:13,199 --> 00:05:15,680 even get started I want to give you a 153 00:05:15,680 --> 00:05:17,680 huge thank you for even being here on 154 00:05:17,680 --> 00:05:20,400 this video and listening and being 155 00:05:20,400 --> 00:05:22,759 interested in engaging in this 156 00:05:22,759 --> 00:05:24,800 phenomenal technology so thank you for 157 00:05:24,800 --> 00:05:26,280 being here and welcome to the rabbit 158 00:05:26,280 --> 00:05:28,120 hole cuz we're about to drop down with 159 00:05:28,120 --> 00:05:31,639 that being said let's get 160 00:05:33,840 --> 00:05:36,199 froggy so let's begin our journey by 161 00:05:36,199 --> 00:05:38,160 talking about some best practices that 162 00:05:38,160 --> 00:05:41,000 way you can get the absolute most out of 163 00:05:41,000 --> 00:05:42,720 this course and be as effective as 164 00:05:42,720 --> 00:05:44,840 possible now there are two links in the 165 00:05:44,840 --> 00:05:46,759 description that I want you to pause the 166 00:05:46,759 --> 00:05:48,479 video right now go into the description 167 00:05:48,479 --> 00:05:51,120 and click on and open up the first one 168 00:05:51,120 --> 00:05:53,960 is web3 education. deev and the second 169 00:05:53,960 --> 00:05:56,600 one is a GitHub link to a repo also 170 00:05:56,600 --> 00:05:59,280 known as a repository with all the code 171 00:05:59,280 --> 00:06:01,240 and all the lessons and everything we're 172 00:06:01,240 --> 00:06:03,199 going to be covering in this video the 173 00:06:03,199 --> 00:06:05,199 web3 education. deev site is an 174 00:06:05,199 --> 00:06:07,080 education site that we're working on to 175 00:06:07,080 --> 00:06:09,240 have all of this video and everything 176 00:06:09,240 --> 00:06:10,919 else in all the Cutting Edge learnings 177 00:06:10,919 --> 00:06:13,319 of blockchain developers in this course 178 00:06:13,319 --> 00:06:15,599 in this site so if you enjoy written 179 00:06:15,599 --> 00:06:17,800 context as well be sure to subscribe to 180 00:06:17,800 --> 00:06:19,280 sign up for that so that you can be one 181 00:06:19,280 --> 00:06:20,440 of the first people to know when it 182 00:06:20,440 --> 00:06:22,880 launches and the second site is this 183 00:06:22,880 --> 00:06:25,080 GitHub link this is going to be your 184 00:06:25,080 --> 00:06:27,000 Bible for the duration of watching this 185 00:06:27,000 --> 00:06:29,160 video it has everything that we're going 186 00:06:29,160 --> 00:06:31,560 to go over it has all the code context 187 00:06:31,560 --> 00:06:33,360 text Etc that you're going to need to be 188 00:06:33,360 --> 00:06:35,039 successful in this video and I'm going 189 00:06:35,039 --> 00:06:37,199 to be referring to it pretty often as we 190 00:06:37,199 --> 00:06:39,120 go through the course additionally in 191 00:06:39,120 --> 00:06:41,199 this GitHub there's a discussions tab 192 00:06:41,199 --> 00:06:43,280 right here that you can click on and in 193 00:06:43,280 --> 00:06:44,960 here is where you can ask questions 194 00:06:44,960 --> 00:06:46,240 discuss with other people taking the 195 00:06:46,240 --> 00:06:48,160 course interact with members helping out 196 00:06:48,160 --> 00:06:49,880 and it's where you can discuss anything 197 00:06:49,880 --> 00:06:51,599 that you're having trouble with and an 198 00:06:51,599 --> 00:06:53,919 important note sometimes you'll see this 199 00:06:53,919 --> 00:06:56,800 as the chain Excel org Foundry F course 200 00:06:56,800 --> 00:06:58,800 we recently renamed it to The cyphon 201 00:06:58,800 --> 00:07:00,919 Foundry F course so this is the correct 202 00:07:00,919 --> 00:07:02,879 link but if you see chain excl org 203 00:07:02,879 --> 00:07:05,080 that's fine as well that being said as 204 00:07:05,080 --> 00:07:06,759 we go through this course we're also 205 00:07:06,759 --> 00:07:08,199 going to teach you some best practices 206 00:07:08,199 --> 00:07:11,000 on working with artificial intelligence 207 00:07:11,000 --> 00:07:13,639 how to best prompt these AI so that they 208 00:07:13,639 --> 00:07:15,599 can give you the best results just keep 209 00:07:15,599 --> 00:07:18,120 in mind they sometimes get things wrong 210 00:07:18,120 --> 00:07:19,479 and it's a good idea if you are going to 211 00:07:19,479 --> 00:07:22,000 use an AI to fact check it with a human 212 00:07:22,000 --> 00:07:24,000 or another resource so be sure to say hi 213 00:07:24,000 --> 00:07:25,960 in the discussions and maybe meet some 214 00:07:25,960 --> 00:07:28,240 like-minded peers and additionally once 215 00:07:28,240 --> 00:07:30,160 we do get to the coding portion of this 216 00:07:30,160 --> 00:07:32,840 course it's a good idea to code along 217 00:07:32,840 --> 00:07:35,479 with me as I'm explaining things so 218 00:07:35,479 --> 00:07:37,960 having the video up as well as your 219 00:07:37,960 --> 00:07:39,960 coding screen is a good idea so you can 220 00:07:39,960 --> 00:07:41,599 follow along with me as I'm explaining 221 00:07:41,599 --> 00:07:43,720 it now this space moves incredibly 222 00:07:43,720 --> 00:07:45,840 quickly so whenever I open some 223 00:07:45,840 --> 00:07:47,599 documentation or some codebase or 224 00:07:47,599 --> 00:07:49,840 something I highly recommend that you 225 00:07:49,840 --> 00:07:52,280 open it as well in your browser just so 226 00:07:52,280 --> 00:07:54,720 that you can know immediately right away 227 00:07:54,720 --> 00:07:56,599 that the code that I'm working with in 228 00:07:56,599 --> 00:07:57,800 the video is going to be the same that 229 00:07:57,800 --> 00:07:59,520 the code that you're working with 230 00:07:59,520 --> 00:08:00,879 locally now we're going to be keeping 231 00:08:00,879 --> 00:08:02,599 all of the code in here up to date but 232 00:08:02,599 --> 00:08:03,720 sometimes things change and something 233 00:08:03,720 --> 00:08:05,479 that I do in the video might not be the 234 00:08:05,479 --> 00:08:07,120 most up to- dat best practice so we're 235 00:08:07,120 --> 00:08:08,120 going to have this file called 236 00:08:08,120 --> 00:08:10,440 chronological updates. MD where you can 237 00:08:10,440 --> 00:08:12,280 go in and check to make sure that you're 238 00:08:12,280 --> 00:08:14,800 working on the most upto-date Edition so 239 00:08:14,800 --> 00:08:16,440 if you go into that file each lesson 240 00:08:16,440 --> 00:08:18,319 will have a section and if there's some 241 00:08:18,319 --> 00:08:19,960 update that we made to the lesson you 242 00:08:19,960 --> 00:08:21,840 can find it in there additionally if you 243 00:08:21,840 --> 00:08:23,360 think you found something that is 244 00:08:23,360 --> 00:08:25,120 different or doesn't quite work be sure 245 00:08:25,120 --> 00:08:27,000 to make a discussion for it in that 246 00:08:27,000 --> 00:08:28,560 GitHub repo like I said it's going to be 247 00:08:28,560 --> 00:08:30,159 your Bible but yes if you run into an 248 00:08:30,159 --> 00:08:31,599 issue make sure that file is one of the 249 00:08:31,599 --> 00:08:33,240 first places that you check just to make 250 00:08:33,240 --> 00:08:34,760 sure that all the code that you're 251 00:08:34,760 --> 00:08:36,880 working with is the most up to dat all 252 00:08:36,880 --> 00:08:39,000 of this is to say if you run into an 253 00:08:39,000 --> 00:08:41,760 issue jump to that GitHub repo and make 254 00:08:41,760 --> 00:08:43,599 a discussion we will also be giving you 255 00:08:43,599 --> 00:08:46,120 some tips very soon about how to best 256 00:08:46,120 --> 00:08:48,959 make a discussion yes asking questions 257 00:08:48,959 --> 00:08:51,320 to other human beings is a skill and 258 00:08:51,320 --> 00:08:52,600 we're going to try to teach you to be 259 00:08:52,600 --> 00:08:54,200 the most effective because asking well 260 00:08:54,200 --> 00:08:55,880 formatted questions is not only the 261 00:08:55,880 --> 00:08:58,000 secret to being a fantastic AI prompt 262 00:08:58,000 --> 00:09:00,680 engineer but also becoming an incredibly 263 00:09:00,680 --> 00:09:02,480 successful developer we're going to 264 00:09:02,480 --> 00:09:03,959 learn how to ask well-formatted 265 00:09:03,959 --> 00:09:05,680 questions and whenever we post on 266 00:09:05,680 --> 00:09:07,800 discussions or forums or whatever we're 267 00:09:07,800 --> 00:09:10,000 going to work on formatting them as best 268 00:09:10,000 --> 00:09:12,880 as possible take breaks I cannot tell 269 00:09:12,880 --> 00:09:15,079 you how many people have tried to rush 270 00:09:15,079 --> 00:09:16,519 through these courses and be like Oh I'm 271 00:09:16,519 --> 00:09:18,360 going to finish in a single weekend your 272 00:09:18,360 --> 00:09:19,959 brain doesn't work like that your brain 273 00:09:19,959 --> 00:09:22,480 needs time to absorb the information so 274 00:09:22,480 --> 00:09:25,160 take breaks maybe every 25 minutes to a 275 00:09:25,160 --> 00:09:27,160 half hour take a 5-minute break or maybe 276 00:09:27,160 --> 00:09:29,440 you like working in longer chunks Maybe 277 00:09:29,440 --> 00:09:31,279 take a whole hour and then take a 15 20 278 00:09:31,279 --> 00:09:33,079 minute break don't try to rush through 279 00:09:33,079 --> 00:09:34,920 the whole video in a day you're not 280 00:09:34,920 --> 00:09:36,680 going to retain the information go 281 00:09:36,680 --> 00:09:38,720 outside go for a walk grab some ice 282 00:09:38,720 --> 00:09:40,760 cream get some coffee go to the gym your 283 00:09:40,760 --> 00:09:43,880 brain needs time to have the information 284 00:09:43,880 --> 00:09:46,120 settled maybe every 2 hours just step 285 00:09:46,120 --> 00:09:48,160 away maybe be done for the day work at 286 00:09:48,160 --> 00:09:50,680 whatever Pace makes sense for you 287 00:09:50,680 --> 00:09:52,320 everyone's going to have a different 288 00:09:52,320 --> 00:09:54,720 learning Pace there is no right speed 289 00:09:54,720 --> 00:09:56,320 for this course I've had people take my 290 00:09:56,320 --> 00:09:59,120 courses in 2 weeks in 3 months in six 291 00:09:59,120 --> 00:10:02,079 months months it doesn't matter pick a 292 00:10:02,079 --> 00:10:04,640 pace that you can do and stick to it not 293 00:10:04,640 --> 00:10:06,360 only work at your pace make sure that 294 00:10:06,360 --> 00:10:08,240 I'm talking at a pace that makes sense 295 00:10:08,240 --> 00:10:10,120 for you there's a little gear icon in 296 00:10:10,120 --> 00:10:11,800 the YouTube video here where you can 297 00:10:11,800 --> 00:10:14,240 change the speed of how I'm talking and 298 00:10:14,240 --> 00:10:16,160 how fast the video is going so if I'm 299 00:10:16,160 --> 00:10:17,519 talking way too fast for you then you 300 00:10:17,519 --> 00:10:21,079 can slow me down but if I'm talking too 301 00:10:21,079 --> 00:10:23,519 slow then you can speed me up so make 302 00:10:23,519 --> 00:10:26,120 the adjustments you need to make me go 303 00:10:26,120 --> 00:10:27,880 the speed you want me to go now a giant 304 00:10:27,880 --> 00:10:29,320 video like this can be kind of hard to 305 00:10:29,320 --> 00:10:31,880 to triage where you left off so using 306 00:10:31,880 --> 00:10:33,600 the GitHub repo with the timestamps in 307 00:10:33,600 --> 00:10:35,560 there is a good way to say ah okay I was 308 00:10:35,560 --> 00:10:38,079 on lesson one let's click the link there 309 00:10:38,079 --> 00:10:39,720 to jump right to the timestamp if you 310 00:10:39,720 --> 00:10:41,320 pause a video in YouTube you can 311 00:10:41,320 --> 00:10:43,519 actually rightclick and say copy at 312 00:10:43,519 --> 00:10:45,399 current time and maybe drop that into a 313 00:10:45,399 --> 00:10:47,040 notes folder somewhere so that you can 314 00:10:47,040 --> 00:10:48,880 always just pick right back up where you 315 00:10:48,880 --> 00:10:50,600 left off or like I said you can use some 316 00:10:50,600 --> 00:10:52,279 of the timestamps in the GitHub repo 317 00:10:52,279 --> 00:10:54,079 associated with this course or depending 318 00:10:54,079 --> 00:10:55,600 on when you watch this the web3 319 00:10:55,600 --> 00:10:58,000 education. site might also be up be sure 320 00:10:58,000 --> 00:10:59,920 to check that out as well and of course 321 00:10:59,920 --> 00:11:02,399 this course is modular so you can Bounce 322 00:11:02,399 --> 00:11:04,200 Around topic to topic and go to where 323 00:11:04,200 --> 00:11:05,760 you want to go if you don't want to do 324 00:11:05,760 --> 00:11:07,560 any full stack stuff then skip that 325 00:11:07,560 --> 00:11:09,079 section if you want to go right to the 326 00:11:09,079 --> 00:11:11,200 advanced stuff do that like I said go 327 00:11:11,200 --> 00:11:12,920 the pace and take the learnings that you 328 00:11:12,920 --> 00:11:15,120 want to do and after every lesson it 329 00:11:15,120 --> 00:11:16,760 might be a good idea to go back and 330 00:11:16,760 --> 00:11:18,920 reflect on each lesson to really make 331 00:11:18,920 --> 00:11:21,320 sure the knowledge gets ingrained 332 00:11:21,320 --> 00:11:23,440 repetition is the mother of skill and 333 00:11:23,440 --> 00:11:26,000 we're going to be repeating a lot of 334 00:11:26,000 --> 00:11:27,480 smart contract development now 335 00:11:27,480 --> 00:11:29,360 additionally at the end of every lesson 336 00:11:29,360 --> 00:11:31,240 you'll see a little QR code that looks 337 00:11:31,240 --> 00:11:32,680 something like this and there will be a 338 00:11:32,680 --> 00:11:34,800 link in the GitHub repo pointing to the 339 00:11:34,800 --> 00:11:36,440 same place that this QR code is pointing 340 00:11:36,440 --> 00:11:38,959 to these are optional challenges that 341 00:11:38,959 --> 00:11:41,240 you can do to try to make sure that you 342 00:11:41,240 --> 00:11:42,639 actually learned what was meant to be 343 00:11:42,639 --> 00:11:45,000 learned here and if you do solve them 344 00:11:45,000 --> 00:11:47,480 you get a very cool nft along with it 345 00:11:47,480 --> 00:11:49,040 don't know what an nft is don't worry 346 00:11:49,040 --> 00:11:50,279 we'll teach you later blockchain 347 00:11:50,279 --> 00:11:51,800 development and open source development 348 00:11:51,800 --> 00:11:53,839 world is incredibly collaborative so be 349 00:11:53,839 --> 00:11:55,560 sure to use tools like of course the 350 00:11:55,560 --> 00:11:57,480 GitHub discussions tab ethereum stack 351 00:11:57,480 --> 00:11:59,600 exchange the decentralized Q&A Forum 352 00:11:59,600 --> 00:12:02,839 piranha issues on different 353 00:12:29,480 --> 00:12:32,199 to unblock yourself on this and really 354 00:12:32,199 --> 00:12:34,480 anything in life plus sinking with other 355 00:12:34,480 --> 00:12:36,000 people in the space makes it way more 356 00:12:36,000 --> 00:12:38,000 fun now before we can actually get to 357 00:12:38,000 --> 00:12:40,480 coding we need to understand how the 358 00:12:40,480 --> 00:12:42,600 blockchain even works what the purpose 359 00:12:42,600 --> 00:12:45,160 of these smart contracts even are and 360 00:12:45,160 --> 00:12:47,120 this is essential to becoming a 361 00:12:47,120 --> 00:12:48,959 successful smart contract developer 362 00:12:48,959 --> 00:12:51,320 because a technology is really just a 363 00:12:51,320 --> 00:12:53,639 solution and a solution is only as good 364 00:12:53,639 --> 00:12:55,360 as the problem is so we need to make 365 00:12:55,360 --> 00:12:56,959 sure we understand the problem really 366 00:12:56,959 --> 00:12:59,240 well so we know how to attack it with 367 00:12:59,240 --> 00:13:01,160 this smart contract technology and the 368 00:13:01,160 --> 00:13:02,480 better you understand this smart cont 369 00:13:02,480 --> 00:13:04,600 technology the better you'll be able to 370 00:13:04,600 --> 00:13:06,399 architect your smart contracts in the 371 00:13:06,399 --> 00:13:08,440 future and make really intelligent 372 00:13:08,440 --> 00:13:11,320 really powerful systems that further 373 00:13:11,320 --> 00:13:12,920 this amazing industry but if you already 374 00:13:12,920 --> 00:13:14,839 know the basics of blockchain feel free 375 00:13:14,839 --> 00:13:17,320 to jump into lesson two and skip over 376 00:13:17,320 --> 00:13:19,160 lesson one so those are some of the best 377 00:13:19,160 --> 00:13:21,040 practices to be really successful with 378 00:13:21,040 --> 00:13:22,839 this course but with that knowledge 379 00:13:22,839 --> 00:13:24,639 you're now standing at the edge of the 380 00:13:24,639 --> 00:13:26,760 rabbit hole and if you're like me once 381 00:13:26,760 --> 00:13:28,279 you jump in you'll just want to keep 382 00:13:28,279 --> 00:13:30,240 going deeper and and deeper I'm so 383 00:13:30,240 --> 00:13:32,680 excited for you to embark on this 384 00:13:32,680 --> 00:13:34,120 journey with us and I'm looking forward 385 00:13:34,120 --> 00:13:35,320 to seeing you on the other side just 386 00:13:35,320 --> 00:13:37,079 like the thousands of other developers 387 00:13:37,079 --> 00:13:39,040 who have taken these courses and have 388 00:13:39,040 --> 00:13:41,600 emerged the other side triumphant so it 389 00:13:41,600 --> 00:13:44,320 all starts with blockchain Basics let's 390 00:13:44,320 --> 00:13:46,480 get 391 00:13:56,600 --> 00:13:58,600 froggy now since you're here you've 392 00:13:58,600 --> 00:14:00,880 probably heard heard of Bitcoin before 393 00:14:00,880 --> 00:14:02,800 Bitcoin was one of the first protocols 394 00:14:02,800 --> 00:14:04,800 to use this revolutionary technology 395 00:14:04,800 --> 00:14:06,920 called blockchain the Bitcoin white 396 00:14:06,920 --> 00:14:08,480 paper was created by the pseudo 397 00:14:08,480 --> 00:14:10,920 Anonymous Satoshi Nakamoto and it 398 00:14:10,920 --> 00:14:12,320 outlined how Bitcoin could make 399 00:14:12,320 --> 00:14:14,279 peer-to-peer transactions in a 400 00:14:14,279 --> 00:14:16,360 decentralized network this network was 401 00:14:16,360 --> 00:14:18,839 powered by cryptography and decentral 402 00:14:18,839 --> 00:14:20,680 and allowed people to engage in 403 00:14:20,680 --> 00:14:23,240 censorship resistant Finance in a 404 00:14:23,240 --> 00:14:25,720 decentralized manner due to its features 405 00:14:25,720 --> 00:14:27,600 which we'll talk about in a little bit 406 00:14:27,600 --> 00:14:29,880 people took to this as a Superior 407 00:14:29,880 --> 00:14:32,800 digital store of value a better store of 408 00:14:32,800 --> 00:14:34,639 value over something like gold for 409 00:14:34,639 --> 00:14:36,199 example and that's why you'll also hear 410 00:14:36,199 --> 00:14:38,680 people commonly refer to it as a digital 411 00:14:38,680 --> 00:14:41,040 gold similar to Gold there's a scarce 412 00:14:41,040 --> 00:14:43,040 amount or a set amount of Bitcoin 413 00:14:43,040 --> 00:14:45,320 available on the planet only so much 414 00:14:45,320 --> 00:14:46,959 that you can buy and sell you can read 415 00:14:46,959 --> 00:14:48,839 more about the original Vision in the 416 00:14:48,839 --> 00:14:50,320 white paper we have a link to the white 417 00:14:50,320 --> 00:14:52,399 paper in the GitHub repo associated with 418 00:14:52,399 --> 00:14:54,399 this course now this was an insane 419 00:14:54,399 --> 00:14:55,839 breakthrough and in a little bit we're 420 00:14:55,839 --> 00:14:58,079 going to learn exactly how this is all 421 00:14:58,079 --> 00:14:59,560 possible and how this actually works 422 00:14:59,560 --> 00:15:01,639 under the hood some people though saw 423 00:15:01,639 --> 00:15:03,800 this technology and wanted to take it a 424 00:15:03,800 --> 00:15:06,160 little bit farther and do even more with 425 00:15:06,160 --> 00:15:08,120 this blockchain technology and a few 426 00:15:08,120 --> 00:15:10,839 years later a man named vitalic butterin 427 00:15:10,839 --> 00:15:12,680 released a white paper for a new 428 00:15:12,680 --> 00:15:15,680 protocol named ethereum which used this 429 00:15:15,680 --> 00:15:18,160 same blockchain infrastructure with an 430 00:15:18,160 --> 00:15:21,120 additional feature and in 2015 him and a 431 00:15:21,120 --> 00:15:23,240 number of other co-founders released the 432 00:15:23,240 --> 00:15:25,360 project ethereum where people could not 433 00:15:25,360 --> 00:15:27,880 only make decentralized transactions but 434 00:15:27,880 --> 00:15:30,160 decentralized agreements decentralized 435 00:15:30,160 --> 00:15:32,040 organizations and all these other ways 436 00:15:32,040 --> 00:15:34,160 to interact with each other without a 437 00:15:34,160 --> 00:15:36,519 centralized intermediary or centralized 438 00:15:36,519 --> 00:15:39,000 governing Force basically their idea was 439 00:15:39,000 --> 00:15:41,040 to take this thing that made Bitcoin so 440 00:15:41,040 --> 00:15:44,199 great and add decentralized agreements 441 00:15:44,199 --> 00:15:47,240 to it or smart contracts and in fact 442 00:15:47,240 --> 00:15:48,759 technically these smart contracts 443 00:15:48,759 --> 00:15:51,240 weren't even really a new idea back in 444 00:15:51,240 --> 00:15:54,120 1994 a man named Nick Zabo had actually 445 00:15:54,120 --> 00:15:55,920 originally come up with the idea smart 446 00:15:55,920 --> 00:15:58,360 contracts are a set of instructions 447 00:15:58,360 --> 00:16:00,839 executed in a decentralized autonomous 448 00:16:00,839 --> 00:16:03,759 way without the need for a third party 449 00:16:03,759 --> 00:16:05,839 or centralized body to run them and they 450 00:16:05,839 --> 00:16:07,920 come to life on these blockchains or 451 00:16:07,920 --> 00:16:09,959 these smart contract platforms like 452 00:16:09,959 --> 00:16:11,880 ethereum and it's these smart contracts 453 00:16:11,880 --> 00:16:13,560 that are going to be the core thing that 454 00:16:13,560 --> 00:16:14,720 we're going to be working on in this 455 00:16:14,720 --> 00:16:15,880 course and that we're going to be 456 00:16:15,880 --> 00:16:17,240 developing you can think of smart 457 00:16:17,240 --> 00:16:18,959 contracts in the same way you think of 458 00:16:18,959 --> 00:16:20,639 traditional contracts or traditional 459 00:16:20,639 --> 00:16:22,279 agreements they're just a set of 460 00:16:22,279 --> 00:16:24,560 instructions between parties except 461 00:16:24,560 --> 00:16:26,319 instead of written on pen and paper or 462 00:16:26,319 --> 00:16:28,120 typed up in Microsoft Word they are 463 00:16:28,120 --> 00:16:30,160 written in code code and embodied on 464 00:16:30,160 --> 00:16:32,040 these decentralized blockchain platforms 465 00:16:32,040 --> 00:16:34,199 and that's also where they're executed 466 00:16:34,199 --> 00:16:36,120 instead of being executed by the two 467 00:16:36,120 --> 00:16:37,920 parties or three parties or however many 468 00:16:37,920 --> 00:16:40,680 parties that are involved this removes 469 00:16:40,680 --> 00:16:42,480 this centralized issue that we'll talk 470 00:16:42,480 --> 00:16:44,079 about more in a bit this is one of the 471 00:16:44,079 --> 00:16:45,759 main differentiators between the 472 00:16:45,759 --> 00:16:47,560 ethereum protocol and the Bitcoin 473 00:16:47,560 --> 00:16:50,639 protocol it's these smart contracts now 474 00:16:50,639 --> 00:16:52,480 technically Bitcoin does have Smart 475 00:16:52,480 --> 00:16:54,360 contracts but they're intentionally 476 00:16:54,360 --> 00:16:56,360 touring incomplete which means they 477 00:16:56,360 --> 00:16:58,079 don't have all the functionality that a 478 00:16:58,079 --> 00:16:59,480 programming language would give them 479 00:16:59,480 --> 00:17:01,560 this was an intentional move by Bitcoin 480 00:17:01,560 --> 00:17:03,839 developers Bitcoin developers viewed 481 00:17:03,839 --> 00:17:06,600 Bitcoin as a store of value versus 482 00:17:06,600 --> 00:17:09,199 etherum developers viewed ethereum as 483 00:17:09,199 --> 00:17:12,439 both a store of value and a utility to 484 00:17:12,439 --> 00:17:14,199 facilitate these decentralized 485 00:17:14,199 --> 00:17:16,160 agreements now these smart contracts on 486 00:17:16,160 --> 00:17:18,160 blockchains alone are absolutely 487 00:17:18,160 --> 00:17:20,400 incredible however they do come with a 488 00:17:20,400 --> 00:17:22,400 huge issue if we want these digital 489 00:17:22,400 --> 00:17:24,400 agreements to replace the agreements in 490 00:17:24,400 --> 00:17:26,240 our everyday lives they probably are 491 00:17:26,240 --> 00:17:28,199 going to need data from The Real World 492 00:17:28,199 --> 00:17:30,240 blockchains by themselves actually can't 493 00:17:30,240 --> 00:17:32,520 interact with and can't read or listen 494 00:17:32,520 --> 00:17:34,679 to data from The Real World this is 495 00:17:34,679 --> 00:17:36,919 what's known as the Oracle problem these 496 00:17:36,919 --> 00:17:38,880 blockchains are deterministic systems 497 00:17:38,880 --> 00:17:40,880 and they're deterministic on purpose and 498 00:17:40,880 --> 00:17:42,640 we'll learn about more about how that 499 00:17:42,640 --> 00:17:44,440 works in the sessions to come so 500 00:17:44,440 --> 00:17:45,559 everything that happens with them 501 00:17:45,559 --> 00:17:47,520 happens in their little world but if 502 00:17:47,520 --> 00:17:48,640 they're going to be these agreements 503 00:17:48,640 --> 00:17:50,200 they need external data and they need 504 00:17:50,200 --> 00:17:52,280 external computation and this is where 505 00:17:52,280 --> 00:17:54,520 oracles come into play oracles are any 506 00:17:54,520 --> 00:17:56,200 device that delivers data to these 507 00:17:56,200 --> 00:17:58,320 decentralized blockchain or runs 508 00:17:58,320 --> 00:18:00,600 external computation however if we want 509 00:18:00,600 --> 00:18:02,679 our applications to stay truly 510 00:18:02,679 --> 00:18:05,080 decentralized we can't work with a 511 00:18:05,080 --> 00:18:07,320 single Oracle or a single data provider 512 00:18:07,320 --> 00:18:09,159 or a single Source that's running these 513 00:18:09,159 --> 00:18:11,760 external computations so we need a 514 00:18:11,760 --> 00:18:14,440 decentralized Oracle Network similar to 515 00:18:14,440 --> 00:18:16,400 our decentralized blockchain Network 516 00:18:16,400 --> 00:18:18,400 your onchain logic will be decentralized 517 00:18:18,400 --> 00:18:20,799 but you also need your offchain data and 518 00:18:20,799 --> 00:18:22,440 computation to be decentralized 519 00:18:22,440 --> 00:18:24,520 combining this onchain decentralized 520 00:18:24,520 --> 00:18:27,320 logic with this offchain decentralized 521 00:18:27,320 --> 00:18:29,520 data and decentralized computation gives 522 00:18:29,520 --> 00:18:31,679 rise to something called hybrid smart 523 00:18:31,679 --> 00:18:33,880 contracts and most of the biggest 524 00:18:33,880 --> 00:18:36,120 protocols that we interact with today 525 00:18:36,120 --> 00:18:38,520 are some type of hybrid smart contract 526 00:18:38,520 --> 00:18:40,320 or interact with hybrid smart contracts 527 00:18:40,320 --> 00:18:41,679 to some extent this is where the 528 00:18:41,679 --> 00:18:44,000 protocol chainlink comes into play it is 529 00:18:44,000 --> 00:18:46,720 a modular decentralized Oracle Network 530 00:18:46,720 --> 00:18:49,240 that can both bring external data and 531 00:18:49,240 --> 00:18:51,360 external computation into our smart 532 00:18:51,360 --> 00:18:52,760 contracts to make sure they're 533 00:18:52,760 --> 00:18:55,039 decentralized end to endend while giving 534 00:18:55,039 --> 00:18:57,520 them the feature richness that we need 535 00:18:57,520 --> 00:18:59,720 for our agreements chain link allows for 536 00:18:59,720 --> 00:19:02,440 us to get data do upkeeps get random 537 00:19:02,440 --> 00:19:04,480 numbers or really customize our smart 538 00:19:04,480 --> 00:19:06,520 contracts in any meaningful way now 539 00:19:06,520 --> 00:19:07,799 throughout the course we're going to use 540 00:19:07,799 --> 00:19:10,520 the terminology smart contract however 541 00:19:10,520 --> 00:19:12,520 whenever we say smart contract we're 542 00:19:12,520 --> 00:19:14,600 often using it a little interchangeably 543 00:19:14,600 --> 00:19:16,640 with hybrid smart contracts but just 544 00:19:16,640 --> 00:19:18,120 know that when we say hybrid smart 545 00:19:18,120 --> 00:19:20,360 contract we're talking specifically 546 00:19:20,360 --> 00:19:22,360 about smart contracts that have some 547 00:19:22,360 --> 00:19:24,320 type of offchain component now since 548 00:19:24,320 --> 00:19:26,000 ethereum's release a number of different 549 00:19:26,000 --> 00:19:28,240 blockchains or smart contract platforms 550 00:19:28,240 --> 00:19:30,520 have come to light such as Avalanche 551 00:19:30,520 --> 00:19:33,440 polygon Phantom Harmony and more for the 552 00:19:33,440 --> 00:19:35,200 majority of this course we're going to 553 00:19:35,200 --> 00:19:36,400 be assuming that we're going to be 554 00:19:36,400 --> 00:19:38,520 deploying to the ethereum network 555 00:19:38,520 --> 00:19:40,280 however everything that we learn here is 556 00:19:40,280 --> 00:19:42,240 going to be applicable to the vast 557 00:19:42,240 --> 00:19:43,919 majority of the blockchains out there 558 00:19:43,919 --> 00:19:46,360 like polygon Avalanche Phantom Harmony 559 00:19:46,360 --> 00:19:48,159 Etc and understanding everything from 560 00:19:48,159 --> 00:19:50,120 ethereum fundamentals will give you the 561 00:19:50,120 --> 00:19:52,520 skills that you need to switch chains 562 00:19:52,520 --> 00:19:54,679 very easily with literally one line of 563 00:19:54,679 --> 00:19:56,360 code so don't worry about learning a 564 00:19:56,360 --> 00:19:58,760 specific tool or with a specific change 565 00:19:58,760 --> 00:20:00,799 because most of them work together 566 00:20:00,799 --> 00:20:02,559 seamlessly now there are a couple of 567 00:20:02,559 --> 00:20:04,120 smart contract platforms that don't use 568 00:20:04,120 --> 00:20:06,039 solidity but still learning the 569 00:20:06,039 --> 00:20:07,919 fundamentals here will make you much 570 00:20:07,919 --> 00:20:10,120 better at those as well and ethereum by 571 00:20:10,120 --> 00:20:12,159 far has the most value locked and is the 572 00:20:12,159 --> 00:20:13,840 most used blockchain and smart contract 573 00:20:13,840 --> 00:20:15,440 platform out there you'll also hear 574 00:20:15,440 --> 00:20:16,960 those two terms used a little bit 575 00:20:16,960 --> 00:20:18,679 interchangeably as well sometimes I'll 576 00:20:18,679 --> 00:20:20,240 say smart contract platform sometimes 577 00:20:20,240 --> 00:20:22,159 I'll say blockchain they kind of mean 578 00:20:22,159 --> 00:20:24,200 the same thing obviously blockchains 579 00:20:24,200 --> 00:20:26,480 could mean store of value and smart 580 00:20:26,480 --> 00:20:28,880 contract platform but you get the idea 581 00:20:28,880 --> 00:20:30,960 similarly chain link is the most popular 582 00:20:30,960 --> 00:20:32,679 and Powerful decentralized Oracle 583 00:20:32,679 --> 00:20:34,159 network is the one that we're going to 584 00:20:34,159 --> 00:20:36,159 be focusing on for this course as well 585 00:20:36,159 --> 00:20:38,679 chain link is also blockchain agnostic 586 00:20:38,679 --> 00:20:40,919 so it'll work on ethereum Avalanche 587 00:20:40,919 --> 00:20:43,280 polygon salana or really any other 588 00:20:43,280 --> 00:20:45,320 blockchain out there now additionally 589 00:20:45,320 --> 00:20:47,760 over the last year a new term has come 590 00:20:47,760 --> 00:20:51,600 to light called an L2 or a layer 2 this 591 00:20:51,600 --> 00:20:53,559 solves an issue that most blockchains 592 00:20:53,559 --> 00:20:56,320 see where they don't scale very well or 593 00:20:56,320 --> 00:20:58,760 they don't grow big very well we'll be 594 00:20:58,760 --> 00:21:00,280 talking about l2s a little bit more in 595 00:21:00,280 --> 00:21:02,559 the future but the basic concept of is 596 00:21:02,559 --> 00:21:05,440 that blockchains can really only get so 597 00:21:05,440 --> 00:21:07,600 big so what they do if if this is 598 00:21:07,600 --> 00:21:08,720 ethereum you can actually have 599 00:21:08,720 --> 00:21:10,600 blockchains hook into them to 600 00:21:10,600 --> 00:21:12,440 essentially make them bigger if that 601 00:21:12,440 --> 00:21:14,039 doesn't really make too much sense don't 602 00:21:14,039 --> 00:21:16,000 worry about it for right now layer twos 603 00:21:16,000 --> 00:21:18,520 solve this scalability issues and at the 604 00:21:18,520 --> 00:21:20,400 moment there are two different types of 605 00:21:20,400 --> 00:21:23,520 true layer tws optimistic Roll-Ups and 606 00:21:23,520 --> 00:21:25,200 zero knowledge Roll-Ups optimistic 607 00:21:25,200 --> 00:21:27,840 rollups like arbitr and optimism or zero 608 00:21:27,840 --> 00:21:29,760 knowledge roll-ups like ZK sync or 609 00:21:29,760 --> 00:21:32,640 polygon ZK evm yes there's a polycon 610 00:21:32,640 --> 00:21:36,000 chain but there's also a polycon ZK evm 611 00:21:36,000 --> 00:21:38,400 L2 the two of them are very different 612 00:21:38,400 --> 00:21:39,919 don't worry about them for now and in 613 00:21:39,919 --> 00:21:42,120 fact it's this arbitrum layer two where 614 00:21:42,120 --> 00:21:43,760 our challenge contracts are going to be 615 00:21:43,760 --> 00:21:45,720 deployed on this rollup but like I said 616 00:21:45,720 --> 00:21:47,400 once we learn how blockchains work from 617 00:21:47,400 --> 00:21:50,240 a basic Level under the hood then we'll 618 00:21:50,240 --> 00:21:52,080 explain more about how these l2s 619 00:21:52,080 --> 00:21:53,600 actually work now throughout this course 620 00:21:53,600 --> 00:21:55,279 you'll hear the term dap or 621 00:21:55,279 --> 00:21:57,760 decentralized protocol or smart contract 622 00:21:57,760 --> 00:22:00,279 protocol or decentralized application 623 00:22:00,279 --> 00:22:02,159 and they all kind of mean the same thing 624 00:22:02,159 --> 00:22:04,200 a decentralized application is usually 625 00:22:04,200 --> 00:22:06,760 the combination of many smart contracts 626 00:22:06,760 --> 00:22:08,440 and when we get into solidity you'll see 627 00:22:08,440 --> 00:22:10,480 what a singular smart contract really 628 00:22:10,480 --> 00:22:12,360 looks like and like I said learning all 629 00:22:12,360 --> 00:22:14,559 these core fundamentals will make you a 630 00:22:14,559 --> 00:22:16,400 better solidity and a better smart 631 00:22:16,400 --> 00:22:18,159 contract developer you'll also hear the 632 00:22:18,159 --> 00:22:20,799 term web 3 a lot in this video and in 633 00:22:20,799 --> 00:22:22,799 the industry web 3 is the idea that 634 00:22:22,799 --> 00:22:24,840 blockchains and smart contracts are the 635 00:22:24,840 --> 00:22:27,559 next iteration of the web web one being 636 00:22:27,559 --> 00:22:29,960 this permissionless open- Source world 637 00:22:29,960 --> 00:22:32,320 with static content web 2 being the 638 00:22:32,320 --> 00:22:34,400 permissioned web with Dynamic content 639 00:22:34,400 --> 00:22:36,480 but all the agreements and logic runs 640 00:22:36,480 --> 00:22:38,559 off of centralized servers where they 641 00:22:38,559 --> 00:22:40,600 control your information and then web 3 642 00:22:40,600 --> 00:22:43,000 comes back to the permissionless web but 643 00:22:43,000 --> 00:22:45,360 once again with Dynamic content and 644 00:22:45,360 --> 00:22:47,080 instead of centralized servers running 645 00:22:47,080 --> 00:22:49,640 your logic decentralized networks run 646 00:22:49,640 --> 00:22:51,520 the logic creating these censorship 647 00:22:51,520 --> 00:22:53,640 resistant agreements that these smart 648 00:22:53,640 --> 00:22:55,400 contracts enable it is also generally 649 00:22:55,400 --> 00:22:57,640 accompanied by the idea that the users 650 00:22:57,640 --> 00:22:59,600 own the protocol that they work with and 651 00:22:59,600 --> 00:23:01,360 it's an ownership economy you'll see 652 00:23:01,360 --> 00:23:02,840 what I mean later in this course now 653 00:23:02,840 --> 00:23:04,520 we've talked a lot about the history and 654 00:23:04,520 --> 00:23:06,520 about the high level of these protocols 655 00:23:06,520 --> 00:23:08,240 and of these smart contracts and what 656 00:23:08,240 --> 00:23:10,559 they can do but what do these smart 657 00:23:10,559 --> 00:23:12,919 contracts really mean what is it when I 658 00:23:12,919 --> 00:23:15,240 say trust minimized agreements or 659 00:23:15,240 --> 00:23:17,960 unbreakable promises what is the real 660 00:23:17,960 --> 00:23:20,360 value ad of these smart contracts before 661 00:23:20,360 --> 00:23:22,080 we look under the hood and take a peek 662 00:23:22,080 --> 00:23:23,840 at how this all works from a technical 663 00:23:23,840 --> 00:23:26,600 standpoint let's learn what all the 664 00:23:26,600 --> 00:23:28,480 value of this is what is the purpose of 665 00:23:28,480 --> 00:23:30,120 of us building all these Technologies of 666 00:23:30,120 --> 00:23:32,600 you taking this course what problem does 667 00:23:32,600 --> 00:23:34,520 this technology solve in my mind a 668 00:23:34,520 --> 00:23:36,880 technology is really only as good as the 669 00:23:36,880 --> 00:23:38,520 problem that it solves if it doesn't 670 00:23:38,520 --> 00:23:41,039 solve a problem then why bother smart 671 00:23:41,039 --> 00:23:43,080 contracts blockchain web 3 672 00:23:43,080 --> 00:23:44,760 cryptocurrencies those are all just 673 00:23:44,760 --> 00:23:46,679 different words that encapsulate the 674 00:23:46,679 --> 00:23:48,679 idea of what we're doing in such a 675 00:23:48,679 --> 00:23:51,360 unique Paradigm I think the easiest way 676 00:23:51,360 --> 00:23:53,880 to sum up what these smart contracts do 677 00:23:53,880 --> 00:23:55,880 is that they create trust minimized 678 00:23:55,880 --> 00:23:57,360 agreements and if you might be 679 00:23:57,360 --> 00:23:59,080 scratching your head to that a much 680 00:23:59,080 --> 00:24:01,000 easier way to think about it is just 681 00:24:01,000 --> 00:24:04,279 they give rise to Unbreakable promises 682 00:24:04,279 --> 00:24:06,679 Yes you heard that right unbreakable 683 00:24:06,679 --> 00:24:08,880 agreements and Promises additionally 684 00:24:08,880 --> 00:24:10,960 they give rise to speed efficiency and 685 00:24:10,960 --> 00:24:12,799 transparency and a number of other 686 00:24:12,799 --> 00:24:14,880 things I made a video pretty recently 687 00:24:14,880 --> 00:24:17,840 about exactly this so let's dive in and 688 00:24:17,840 --> 00:24:19,760 take a listen to the purpose the 689 00:24:19,760 --> 00:24:23,919 undeniable value of smart 690 00:24:24,440 --> 00:24:27,039 contracts cryptocurrencies fundamentally 691 00:24:27,039 --> 00:24:28,880 Rel landscape Market markets and 692 00:24:28,880 --> 00:24:31,200 agreements as we know them unfortunately 693 00:24:31,200 --> 00:24:32,720 you've probably only been bombarded with 694 00:24:32,720 --> 00:24:34,760 people screaming about nfts and money 695 00:24:34,760 --> 00:24:36,440 now some of the memes are fun but let's 696 00:24:36,440 --> 00:24:38,000 forget the and get down to the 697 00:24:38,000 --> 00:24:40,000 essence of this space if you're already 698 00:24:40,000 --> 00:24:42,240 in web 3 this is the video to send to 699 00:24:42,240 --> 00:24:44,200 your friends to explain why you're so 700 00:24:44,200 --> 00:24:46,480 excited about this space and explain why 701 00:24:46,480 --> 00:24:48,200 we're here and then if you're not into 702 00:24:48,200 --> 00:24:50,039 crypto you've come to the right place 703 00:24:50,039 --> 00:24:52,000 and yes there are fun memes and markets 704 00:24:52,000 --> 00:24:53,440 and there's some money stuff and there 705 00:24:53,440 --> 00:24:55,600 all these things but outside of all that 706 00:24:55,600 --> 00:24:57,600 the purpose of blockchains relates to 707 00:24:57,600 --> 00:24:59,760 the age old old elementary school 708 00:24:59,760 --> 00:25:02,440 unbreakable promise the pinky swear 709 00:25:02,440 --> 00:25:03,279 let's get 710 00:25:03,279 --> 00:25:05,840 froggy nearly everything you do in life 711 00:25:05,840 --> 00:25:07,919 is the result of an agreement or a 712 00:25:07,919 --> 00:25:10,320 contract your chair was the result of an 713 00:25:10,320 --> 00:25:11,840 agreement to buy and sell lumber to 714 00:25:11,840 --> 00:25:13,080 assemble and sell the chair to a 715 00:25:13,080 --> 00:25:15,480 retailer on Amazon then you made an 716 00:25:15,480 --> 00:25:18,200 agreement to buy the chair for $40 the 717 00:25:18,200 --> 00:25:19,679 lights in your house are powered by 718 00:25:19,679 --> 00:25:21,480 electricity which is an agreement from 719 00:25:21,480 --> 00:25:22,799 you and the electric company you agree 720 00:25:22,799 --> 00:25:24,200 to pay them in return they'll keep the 721 00:25:24,200 --> 00:25:25,880 lights on the electricity that they 722 00:25:25,880 --> 00:25:27,679 generate is agreements between them and 723 00:25:27,679 --> 00:25:29,880 Engineers who built turbines to generate 724 00:25:29,880 --> 00:25:31,760 the electricity with insurance you agree 725 00:25:31,760 --> 00:25:33,320 to pay some amount of money to them 726 00:25:33,320 --> 00:25:35,520 every month and in return they will do 727 00:25:35,520 --> 00:25:37,799 nothing or I mean they'll cover your 728 00:25:37,799 --> 00:25:39,960 medical bills almost everything you do 729 00:25:39,960 --> 00:25:41,840 and everything you interact with is the 730 00:25:41,840 --> 00:25:43,880 result of some form of agreement or 731 00:25:43,880 --> 00:25:46,320 contract in some aspect now agreements 732 00:25:46,320 --> 00:25:48,120 and contracts can feel kind of abstract 733 00:25:48,120 --> 00:25:50,559 and boring to really grasp on to so to 734 00:25:50,559 --> 00:25:52,600 simplify we can also refer to them as 735 00:25:52,600 --> 00:25:54,440 promises when you get an oil change 736 00:25:54,440 --> 00:25:55,679 they're promising that they will 737 00:25:55,679 --> 00:25:57,559 Faithfully change your oil in exchange 738 00:25:57,559 --> 00:25:59,880 for money when you put money in the bank 739 00:25:59,880 --> 00:26:01,720 they promised to keep it safe in 740 00:26:01,720 --> 00:26:03,720 exchange for them to use your money to 741 00:26:03,720 --> 00:26:05,679 give out loans when you buy a lottery 742 00:26:05,679 --> 00:26:07,640 ticket the lottery promises to give you 743 00:26:07,640 --> 00:26:09,480 a fair chance at winning a ton of money 744 00:26:09,480 --> 00:26:11,559 in exchange for you buying the ticket 745 00:26:11,559 --> 00:26:12,720 whenever you make one of these 746 00:26:12,720 --> 00:26:15,320 agreements in a way you're asking them 747 00:26:15,320 --> 00:26:18,080 to pinky swear to not screw you over and 748 00:26:18,080 --> 00:26:19,799 to treat you fairly but this doesn't 749 00:26:19,799 --> 00:26:21,880 always happen let's look at a real world 750 00:26:21,880 --> 00:26:23,799 example of someone breaking the pinky 751 00:26:23,799 --> 00:26:25,399 swear back in the ' 80s and '90s 752 00:26:25,399 --> 00:26:27,080 McDonald's ran a promotion for people to 753 00:26:27,080 --> 00:26:28,799 win money by collecting McDonald's 754 00:26:28,799 --> 00:26:30,880 Monopoly game cards the idea was simple 755 00:26:30,880 --> 00:26:32,559 you buy McDonald's in return you get a 756 00:26:32,559 --> 00:26:34,880 chance to win $1 757 00:26:34,880 --> 00:26:37,120 million you can imagine McDonald's 758 00:26:37,120 --> 00:26:39,240 literally going hey everybody I promise 759 00:26:39,240 --> 00:26:41,240 if you buy our MC food and McNuggets 760 00:26:41,240 --> 00:26:42,880 we'll give you a fair chance of winning 761 00:26:42,880 --> 00:26:43,760 this 762 00:26:43,760 --> 00:26:45,960 money but they ended up breaking This 763 00:26:45,960 --> 00:26:47,720 Promise instead of having a fair chance 764 00:26:47,720 --> 00:26:51,080 of winning your chance was in fact zero 765 00:26:51,080 --> 00:26:55,120 in the mid90s between 13 and $24 million 766 00:26:55,120 --> 00:26:56,960 went into the pockets of not people 767 00:26:56,960 --> 00:26:59,159 playing the game honestly but a group of 768 00:26:59,159 --> 00:27:01,600 corrupt insiders who had rigged the game 769 00:27:01,600 --> 00:27:02,720 meaning that when you played the 770 00:27:02,720 --> 00:27:04,960 McDonald's Monopoly game you were buying 771 00:27:04,960 --> 00:27:06,760 into a set of lies and promises that 772 00:27:06,760 --> 00:27:10,320 were 100% always going to be broken and 773 00:27:10,320 --> 00:27:11,679 the thing is it doesn't really matter if 774 00:27:11,679 --> 00:27:13,640 this was McDonald's fault or not they 775 00:27:13,640 --> 00:27:15,240 were the ones making the promises that 776 00:27:15,240 --> 00:27:17,480 they ultimately could not keep another 777 00:27:17,480 --> 00:27:18,520 way you can think about it is that 778 00:27:18,520 --> 00:27:21,600 that's $24 million that they essentially 779 00:27:21,600 --> 00:27:25,360 stole from you and I now if this system 780 00:27:25,360 --> 00:27:27,120 was deployed on a blockchain with 781 00:27:27,120 --> 00:27:28,960 something called a smart contract it 782 00:27:28,960 --> 00:27:32,120 would have been impossible to defraud 783 00:27:32,120 --> 00:27:35,320 this $24 million due to Smart contracts 784 00:27:35,320 --> 00:27:37,840 being a mutable decentralized and 785 00:27:37,840 --> 00:27:39,600 transparent but I'll get back to that in 786 00:27:39,600 --> 00:27:40,360 a 787 00:27:40,360 --> 00:27:42,519 minute in all the agreements and 788 00:27:42,519 --> 00:27:45,200 contracts we make imagine making a pinky 789 00:27:45,200 --> 00:27:47,519 swear with a 10-year-old and imagining 790 00:27:47,519 --> 00:27:49,279 how that agreement would hold up hey 791 00:27:49,279 --> 00:27:50,760 buddy could you could you please keep my 792 00:27:50,760 --> 00:27:52,279 money safe you can play with it if you 793 00:27:52,279 --> 00:27:53,799 like but just just please have it when I 794 00:27:53,799 --> 00:27:56,000 come back immediately you might get that 795 00:27:56,000 --> 00:27:57,760 worrying feeling in your chest something 796 00:27:57,760 --> 00:27:59,320 might go wrong that this 10-year-old 797 00:27:59,320 --> 00:28:00,679 might lose your money you might be 798 00:28:00,679 --> 00:28:03,399 thinking how could I trust them will 799 00:28:03,399 --> 00:28:05,399 they break their promise and this 800 00:28:05,399 --> 00:28:07,640 feeling of I can't breathe because of 801 00:28:07,640 --> 00:28:10,480 untrustworthy situations happens to us 802 00:28:10,480 --> 00:28:12,559 all the time can I trust this used car 803 00:28:12,559 --> 00:28:14,679 salesperson to give me a good car can I 804 00:28:14,679 --> 00:28:16,279 trust this tag that says machine 805 00:28:16,279 --> 00:28:18,080 washable or will it make my shirt shrink 806 00:28:18,080 --> 00:28:19,640 will my insurance provider break their 807 00:28:19,640 --> 00:28:21,320 promise of covering my medical bills 808 00:28:21,320 --> 00:28:23,360 when I get hit by a bus when Patrick 809 00:28:23,360 --> 00:28:25,600 promises he'll go on a hike with me will 810 00:28:25,600 --> 00:28:28,399 he actually yes I I I actually will the 811 00:28:28,399 --> 00:28:29,960 issue with our current agreements and 812 00:28:29,960 --> 00:28:32,039 contracts is we have to trust the people 813 00:28:32,039 --> 00:28:33,600 who are making them to do the right 814 00:28:33,600 --> 00:28:35,559 thing however often they're actually 815 00:28:35,559 --> 00:28:37,960 incentivized to not do the right thing 816 00:28:37,960 --> 00:28:40,200 insurance doesn't want to pay out money 817 00:28:40,200 --> 00:28:42,159 sometimes salese just want to get the 818 00:28:42,159 --> 00:28:43,640 off their shelves and with my 819 00:28:43,640 --> 00:28:45,600 girlfriend I promised to go on a hike 820 00:28:45,600 --> 00:28:47,760 but I hate hikes where else has this 821 00:28:47,760 --> 00:28:49,399 happened now you might be thinking okay 822 00:28:49,399 --> 00:28:51,720 Patrick this seems cool but like where 823 00:28:51,720 --> 00:28:53,360 has this actually affected me well the 824 00:28:53,360 --> 00:28:54,880 McDonald's Lottery that we just spoke 825 00:28:54,880 --> 00:28:56,880 about above during the Great Depression 826 00:28:56,880 --> 00:28:58,640 with the run of the banks Banks promised 827 00:28:58,640 --> 00:29:00,279 to keep our money safe and that when we 828 00:29:00,279 --> 00:29:02,000 went back to go get it they would 829 00:29:02,000 --> 00:29:04,320 actually have the money there and well 830 00:29:04,320 --> 00:29:06,000 and behold there were times that they 831 00:29:06,000 --> 00:29:07,880 didn't have the money there just last 832 00:29:07,880 --> 00:29:10,159 year Robin Hood painted this amazing 833 00:29:10,159 --> 00:29:12,600 picture come use our application we will 834 00:29:12,600 --> 00:29:14,519 give you access to the markets we 835 00:29:14,519 --> 00:29:17,240 promise we will give you a retail 836 00:29:17,240 --> 00:29:20,039 investor a fair chance of interacting 837 00:29:20,039 --> 00:29:22,039 with the world of 838 00:29:22,039 --> 00:29:24,880 Finance Psy but not this asset this 839 00:29:24,880 --> 00:29:27,240 asset this asset or this asset the 2008 840 00:29:27,240 --> 00:29:29,440 financial crisis remember that shady 841 00:29:29,440 --> 00:29:30,960 deals behind closed doors combined with 842 00:29:30,960 --> 00:29:32,640 lies about financial product brought the 843 00:29:32,640 --> 00:29:35,000 world to its economic knees how are you 844 00:29:35,000 --> 00:29:36,919 us hyperinflation in Zimbabwe 845 00:29:36,919 --> 00:29:39,159 hyperinflation in Brazil fair enough 846 00:29:39,159 --> 00:29:41,559 history is a Relentless lesson of 847 00:29:41,559 --> 00:29:44,159 trustworthy entities being notorious 848 00:29:44,159 --> 00:29:46,039 promise Breakers we finally have a way 849 00:29:46,039 --> 00:29:48,559 to fix it with smart contracts now 850 00:29:48,559 --> 00:29:50,120 before I jump into smart contracts a lot 851 00:29:50,120 --> 00:29:52,720 of people might be thinking hey cool and 852 00:29:52,720 --> 00:29:55,840 all however we have systems in place to 853 00:29:55,840 --> 00:29:57,720 protect against a lot of these things 854 00:29:57,720 --> 00:29:59,720 which is is true and which is great and 855 00:29:59,720 --> 00:30:01,919 that is a very helpful step forward but 856 00:30:01,919 --> 00:30:04,440 these systems often break ones in 2008 857 00:30:04,440 --> 00:30:06,120 definitely didn't work the ones with the 858 00:30:06,120 --> 00:30:07,880 Robin Hood crisis definitely didn't work 859 00:30:07,880 --> 00:30:10,279 and even if these systems apply and you 860 00:30:10,279 --> 00:30:12,440 go to court to try to work them out 861 00:30:12,440 --> 00:30:14,480 maybe you're in court for years before 862 00:30:14,480 --> 00:30:16,039 you actually see a resolution and by 863 00:30:16,039 --> 00:30:18,720 that time what you needed the money for 864 00:30:18,720 --> 00:30:21,159 is long gone so what is this technology 865 00:30:21,159 --> 00:30:23,600 what is this tool that can fix this 866 00:30:23,600 --> 00:30:25,799 fundamental problem in our agreements 867 00:30:25,799 --> 00:30:28,039 today this tool is smart contracts and 868 00:30:28,039 --> 00:30:30,240 this tool is what the blockchain was 869 00:30:30,240 --> 00:30:31,919 built for now I'm going to give you a 870 00:30:31,919 --> 00:30:33,919 quick overview of what a smart contract 871 00:30:33,919 --> 00:30:36,000 is however I'm leaving some links in the 872 00:30:36,000 --> 00:30:37,799 description for more in-depth 873 00:30:37,799 --> 00:30:39,919 explanations but the basics of them is a 874 00:30:39,919 --> 00:30:42,320 smart contract is an agreement contract 875 00:30:42,320 --> 00:30:44,880 or a set of instructions deployed on a 876 00:30:44,880 --> 00:30:47,000 decentralized blockchain and once the 877 00:30:47,000 --> 00:30:48,760 contract or set of instructions is 878 00:30:48,760 --> 00:30:51,320 deployed it cannot be altered it 879 00:30:51,320 --> 00:30:53,600 automatically executes and everyone can 880 00:30:53,600 --> 00:30:55,679 see the terms of the agreement the real 881 00:30:55,679 --> 00:30:57,200 basics of it is that the code is 882 00:30:57,200 --> 00:30:59,559 executed by decentralized Collective 883 00:30:59,559 --> 00:31:01,159 like a group of people but a group of 884 00:31:01,159 --> 00:31:02,960 people running a certain software this 885 00:31:02,960 --> 00:31:05,399 means that no one person or entity can 886 00:31:05,399 --> 00:31:07,080 actually alter any of these agreements 887 00:31:07,080 --> 00:31:08,960 or change the terms of the arrangement 888 00:31:08,960 --> 00:31:10,840 in these traditional agreements whoever 889 00:31:10,840 --> 00:31:13,039 owns the contract whoever owns the 890 00:31:13,039 --> 00:31:15,080 execution of the contract can flip a 891 00:31:15,080 --> 00:31:17,240 switch and say n we're not going to do 892 00:31:17,240 --> 00:31:19,159 that anymore in smart contracts in web 3 893 00:31:19,159 --> 00:31:21,320 in blockchain you no longer can do that 894 00:31:21,320 --> 00:31:23,080 typically these smart contracts are in a 895 00:31:23,080 --> 00:31:25,159 decentralized blockchain and used in 896 00:31:25,159 --> 00:31:27,000 combination with a decentralized Oracle 897 00:31:27,000 --> 00:31:29,080 Network to get the real world assets and 898 00:31:29,080 --> 00:31:30,679 information and if these words sound 899 00:31:30,679 --> 00:31:32,440 like I'm Conjuring up a magic spell well 900 00:31:32,440 --> 00:31:33,919 again check the links in the description 901 00:31:33,919 --> 00:31:35,039 if you want to learn more about the 902 00:31:35,039 --> 00:31:36,679 technical implications if you're not a 903 00:31:36,679 --> 00:31:37,799 technical person and you're not 904 00:31:37,799 --> 00:31:39,519 interested in getting to the Integrity 905 00:31:39,519 --> 00:31:42,000 you can kind of think of it like https I 906 00:31:42,000 --> 00:31:43,519 bet the vast majority of you don't even 907 00:31:43,519 --> 00:31:45,880 know what https stands for and yet you 908 00:31:45,880 --> 00:31:47,679 use it every single day whenever you log 909 00:31:47,679 --> 00:31:49,360 onto the internet so how does this fix 910 00:31:49,360 --> 00:31:51,440 the McDonald's Monopoly issue in its 911 00:31:51,440 --> 00:31:53,440 traditional form the lottery was 912 00:31:53,440 --> 00:31:56,200 executed behind closed doors somebody 913 00:31:56,200 --> 00:31:58,360 operated and owned the code and the 914 00:31:58,360 --> 00:31:59,880 contracts and the agreements that ran 915 00:31:59,880 --> 00:32:01,840 the lottery and they had the power to 916 00:32:01,840 --> 00:32:03,840 alter it and nobody other than the 917 00:32:03,840 --> 00:32:05,880 people internal on the lottery could 918 00:32:05,880 --> 00:32:08,200 audit this altering happening now if the 919 00:32:08,200 --> 00:32:10,720 code for this Lottery was deployed onto 920 00:32:10,720 --> 00:32:13,240 a blockchain every time a hacker 921 00:32:13,240 --> 00:32:15,080 attempted to alter it everyone would be 922 00:32:15,080 --> 00:32:17,200 notified not only that but you couldn't 923 00:32:17,200 --> 00:32:18,840 even alter it because the terms of a 924 00:32:18,840 --> 00:32:20,720 smart contract cannot be altered once 925 00:32:20,720 --> 00:32:22,600 deployed combine that smart contract 926 00:32:22,600 --> 00:32:24,360 with a chain link vrf Oracle to get a 927 00:32:24,360 --> 00:32:27,279 verifiably random number and Presto you 928 00:32:27,279 --> 00:32:29,320 now have a perfectly decentralized 929 00:32:29,320 --> 00:32:31,600 unalterable agreement that is impossible 930 00:32:31,600 --> 00:32:33,559 to hack commit fraud or manipulate we 931 00:32:33,559 --> 00:32:36,120 have just saved the public between 13 932 00:32:36,120 --> 00:32:39,919 million and $24 million just by fixing 933 00:32:39,919 --> 00:32:42,679 the issue of trust how does this fix 934 00:32:42,679 --> 00:32:44,200 Robin Hood well the problem with Robin 935 00:32:44,200 --> 00:32:46,240 Hood is already fixed right again the 936 00:32:46,240 --> 00:32:48,080 problem is that there's a centralized 937 00:32:48,080 --> 00:32:50,760 body that can flip a switch at any time 938 00:32:50,760 --> 00:32:52,519 and say yeah you can't access these 939 00:32:52,519 --> 00:32:54,240 markets anymore we're breaking our 940 00:32:54,240 --> 00:32:56,360 promise of actually giving you access to 941 00:32:56,360 --> 00:32:58,360 the markets this is already fixed with 942 00:32:58,360 --> 00:33:00,200 something called decentralized exchanges 943 00:33:00,200 --> 00:33:02,240 and these exist today one of these 944 00:33:02,240 --> 00:33:04,200 exchanges is one called Unis swap you 945 00:33:04,200 --> 00:33:06,679 can swap erc20 tokens which are kind of 946 00:33:06,679 --> 00:33:08,919 the equivalent of stocks but some aren't 947 00:33:08,919 --> 00:33:10,320 some are it's a little confusing I won't 948 00:33:10,320 --> 00:33:12,240 get into that here either but it doesn't 949 00:33:12,240 --> 00:33:14,240 have that centralized body that can flip 950 00:33:14,240 --> 00:33:17,200 a switch and ruin access to the markets 951 00:33:17,200 --> 00:33:19,120 and had these investors been on a 952 00:33:19,120 --> 00:33:21,120 decentralized exchange it would have 953 00:33:21,120 --> 00:33:23,720 saved them hundreds of millions of 954 00:33:23,720 --> 00:33:25,120 dollars and it would have prevented 955 00:33:25,120 --> 00:33:27,039 fraudulent Market manipulation how does 956 00:33:27,039 --> 00:33:28,480 it fix run of the banks with 957 00:33:28,480 --> 00:33:30,279 transparency built in and automated 958 00:33:30,279 --> 00:33:32,159 solvency checks you can build a bank 959 00:33:32,159 --> 00:33:33,960 like smart contract that has insolvency 960 00:33:33,960 --> 00:33:35,919 checks built in that make it impossible 961 00:33:35,919 --> 00:33:38,440 to get there insolvent means broke as 962 00:33:38,440 --> 00:33:41,320 any agreement or any history lesson 963 00:33:41,320 --> 00:33:42,960 where there was a trust assumption that 964 00:33:42,960 --> 00:33:45,679 was broken smart contracts can be 965 00:33:45,679 --> 00:33:48,000 applied to and should be applied to 966 00:33:48,000 --> 00:33:49,720 especially in a time where big money 967 00:33:49,720 --> 00:33:52,600 runs owns and controls everything we 968 00:33:52,600 --> 00:33:54,799 desperately need to move to a world 969 00:33:54,799 --> 00:33:56,720 where some self-interested centralized 970 00:33:56,720 --> 00:33:58,960 entity can't flip us switch and ruin 971 00:33:58,960 --> 00:34:00,679 people's access to the services that 972 00:34:00,679 --> 00:34:03,200 they need we can move away from a world 973 00:34:03,200 --> 00:34:05,799 that is brand-based to a world that is 974 00:34:05,799 --> 00:34:07,919 math-based right now if you interact 975 00:34:07,919 --> 00:34:09,919 with a service that you don't like or 976 00:34:09,919 --> 00:34:12,079 that they break their promise the only 977 00:34:12,079 --> 00:34:14,320 thing you can do is walk down the street 978 00:34:14,320 --> 00:34:15,839 to the next service that's going to make 979 00:34:15,839 --> 00:34:17,679 the same set of promises and you have to 980 00:34:17,679 --> 00:34:18,879 hope and pray that they're actually 981 00:34:18,879 --> 00:34:21,320 going to keep it we can move from that 982 00:34:21,320 --> 00:34:23,079 to a world where we can just look at the 983 00:34:23,079 --> 00:34:26,000 math and say oh okay 1+ 1 equal 2 this 984 00:34:26,000 --> 00:34:27,359 is what this agreement is going to do 985 00:34:27,359 --> 00:34:30,720 for me every single time guaranteed 986 00:34:30,720 --> 00:34:32,679 because it's a decentralized autonomous 987 00:34:32,679 --> 00:34:35,280 agent has no incentive to be evil and 988 00:34:35,280 --> 00:34:36,839 everything is transparent and out in the 989 00:34:36,839 --> 00:34:38,720 open I'm a big company and if it was 990 00:34:38,720 --> 00:34:41,480 better for me for 1+ 1 to equal three 991 00:34:41,480 --> 00:34:42,839 maybe I would go behind some closed 992 00:34:42,839 --> 00:34:44,480 doors and fudge some numbers and come 993 00:34:44,480 --> 00:34:47,599 back out and be like hey 1+ 1 equals 3 994 00:34:47,599 --> 00:34:48,879 but with smart contracts that's 995 00:34:48,879 --> 00:34:51,720 impossible doing the right thing is 996 00:34:51,720 --> 00:34:53,760 infrastructural now given the choice 997 00:34:53,760 --> 00:34:55,679 between two agreements one where you 998 00:34:55,679 --> 00:34:57,720 have to trust a single centralized 999 00:34:57,720 --> 00:34:58,960 entity that they're going to do the 1000 00:34:58,960 --> 00:35:01,400 right thing for you versus a 1001 00:35:01,400 --> 00:35:04,280 decentralized untable collective which 1002 00:35:04,280 --> 00:35:06,040 one are you going to choose I'm picking 1003 00:35:06,040 --> 00:35:07,800 the one that can't screw me over every 1004 00:35:07,800 --> 00:35:10,640 single time for every agreement I can 1005 00:35:10,640 --> 00:35:12,520 apply it to now this technology is 1006 00:35:12,520 --> 00:35:14,640 relatively new but we have already seen 1007 00:35:14,640 --> 00:35:16,920 it Rel landscape entire markets and 1008 00:35:16,920 --> 00:35:18,960 continue to do so the traditional 1009 00:35:18,960 --> 00:35:20,680 Financial world is already getting its 1010 00:35:20,680 --> 00:35:23,800 lunch eaten by defy or decentralized 1011 00:35:23,800 --> 00:35:25,760 Finance there's already over $200 1012 00:35:25,760 --> 00:35:27,960 billion of people's money in these 1013 00:35:27,960 --> 00:35:30,440 protocols to help have a more fair more 1014 00:35:30,440 --> 00:35:32,440 accountable more transparent Financial 1015 00:35:32,440 --> 00:35:34,520 system this D5 movement is one of the 1016 00:35:34,520 --> 00:35:36,240 main reasons I got into this space 1017 00:35:36,240 --> 00:35:39,040 because we desperately need to move away 1018 00:35:39,040 --> 00:35:41,160 from where we are right now and end 1019 00:35:41,160 --> 00:35:43,079 people's chances for wealth being sucked 1020 00:35:43,079 --> 00:35:44,920 up by some group that's bending the 1021 00:35:44,920 --> 00:35:46,960 rules in their favor and smart contracts 1022 00:35:46,960 --> 00:35:49,000 are a ticket to that better World more 1023 00:35:49,000 --> 00:35:50,800 and more Industries are also coming over 1024 00:35:50,800 --> 00:35:52,240 to Smart contracts and blockchain 1025 00:35:52,240 --> 00:35:53,680 because of all the Innovations and 1026 00:35:53,680 --> 00:35:55,319 because of all the advantages that it 1027 00:35:55,319 --> 00:35:57,640 has as we grow and as we get better we 1028 00:35:57,640 --> 00:35:59,800 we get closer to this vision of having 1029 00:35:59,800 --> 00:36:03,000 this concept fulfilled trust minimized 1030 00:36:03,000 --> 00:36:04,920 agreements these smart contracts are 1031 00:36:04,920 --> 00:36:07,119 minimizing the trust that we need to 1032 00:36:07,119 --> 00:36:08,760 give other people in order for these 1033 00:36:08,760 --> 00:36:10,480 agreements to be executed if trust 1034 00:36:10,480 --> 00:36:12,000 minimized agreements is too confusing 1035 00:36:12,000 --> 00:36:14,720 for you just say unbreakable promises 1036 00:36:14,720 --> 00:36:16,480 now I got to be honest with you guys 1037 00:36:16,480 --> 00:36:18,000 blockchains and smart contracts and 1038 00:36:18,000 --> 00:36:19,440 cryptocurrencies can actually do more 1039 00:36:19,440 --> 00:36:21,319 than just trust minimized agreements 1040 00:36:21,319 --> 00:36:23,319 what they have Security benefits uptime 1041 00:36:23,319 --> 00:36:25,160 benefits execution speed benefits and a 1042 00:36:25,160 --> 00:36:26,680 whole lot more but it's a lot easier to 1043 00:36:26,680 --> 00:36:28,079 just learn about one and learn the other 1044 00:36:28,079 --> 00:36:29,240 ones later right it's kind of like 1045 00:36:29,240 --> 00:36:31,520 sprinkles on top so this is why we are 1046 00:36:31,520 --> 00:36:33,040 here this is why we're building this 1047 00:36:33,040 --> 00:36:35,800 future and this is why we are so excited 1048 00:36:35,800 --> 00:36:38,040 about 1049 00:36:38,040 --> 00:36:40,960 it last year 2022 there were a lot of 1050 00:36:40,960 --> 00:36:43,040 issues with a couple different companies 1051 00:36:43,040 --> 00:36:46,640 like for example spf's FTX platform the 1052 00:36:46,640 --> 00:36:48,359 thing to me that's most frustrating 1053 00:36:48,359 --> 00:36:50,359 about that situation is that FTX 1054 00:36:50,359 --> 00:36:52,680 platform wasn't anything that I just 1055 00:36:52,680 --> 00:36:54,640 talked about it wasn't decentralized it 1056 00:36:54,640 --> 00:36:57,119 wasn't trustless it wasn't transparent 1057 00:36:57,119 --> 00:36:59,359 it was purely a traditional web 2 1058 00:36:59,359 --> 00:37:01,560 company pretending to be web 3 and just 1059 00:37:01,560 --> 00:37:03,920 using the cryptocurrency part of web 3 1060 00:37:03,920 --> 00:37:05,560 but not actually using the smart 1061 00:37:05,560 --> 00:37:07,280 contracts and we're doing a much better 1062 00:37:07,280 --> 00:37:09,280 job as a community getting rid of the 1063 00:37:09,280 --> 00:37:10,599 Bad actors and this is something that's 1064 00:37:10,599 --> 00:37:12,440 incredibly important for you when 1065 00:37:12,440 --> 00:37:14,079 working with protocols and when building 1066 00:37:14,079 --> 00:37:15,839 protocols I want you to be incredibly 1067 00:37:15,839 --> 00:37:17,440 successful here but I want you to be 1068 00:37:17,440 --> 00:37:18,839 incredibly successful because you're 1069 00:37:18,839 --> 00:37:20,960 making a ton of value a lot of these 1070 00:37:20,960 --> 00:37:22,920 platforms that we saw collapsing last 1071 00:37:22,920 --> 00:37:24,839 year were not creating value they were 1072 00:37:24,839 --> 00:37:26,839 stealing value they were siphoning value 1073 00:37:26,839 --> 00:37:29,800 they were faking having value and as you 1074 00:37:29,800 --> 00:37:31,680 learn and as you build smart contracts 1075 00:37:31,680 --> 00:37:34,119 yourself it'll start to become innately 1076 00:37:34,119 --> 00:37:36,160 aware of what protocols and what 1077 00:37:36,160 --> 00:37:39,280 companies are centralized and are not 1078 00:37:39,280 --> 00:37:42,760 the ethos of web 3 and the ones that are 1079 00:37:42,760 --> 00:37:45,240 we are building verifiable trust 1080 00:37:45,240 --> 00:37:47,119 minimized agreements unbreakable 1081 00:37:47,119 --> 00:37:49,160 promises and if you can't verify those 1082 00:37:49,160 --> 00:37:51,599 promises then it's not trust minimized 1083 00:37:51,599 --> 00:37:53,880 it's not web 3 it's not what this 1084 00:37:53,880 --> 00:37:55,680 industry is for that's what I want you 1085 00:37:55,680 --> 00:37:58,400 to do as you finish this course is be a 1086 00:37:58,400 --> 00:38:01,560 force for good unfortunately because a 1087 00:38:01,560 --> 00:38:03,200 lot of people haven't taken my course 1088 00:38:03,200 --> 00:38:04,920 not everybody understands the difference 1089 00:38:04,920 --> 00:38:07,599 between a legitimate project and a token 1090 00:38:07,599 --> 00:38:09,040 that's just meant to pump somebody's 1091 00:38:09,040 --> 00:38:11,760 bags as this space continues to grow and 1092 00:38:11,760 --> 00:38:13,359 as people like yourself take courses 1093 00:38:13,359 --> 00:38:15,319 like this we will get to continue to 1094 00:38:15,319 --> 00:38:17,760 push real legitimate projects forward 1095 00:38:17,760 --> 00:38:19,880 and wash out the projects that aren't 1096 00:38:19,880 --> 00:38:23,079 actually contributing to web 1097 00:38:23,160 --> 00:38:26,400 3 even in just this introduction part 1098 00:38:26,400 --> 00:38:28,599 we've learned a ton so let's do a quick 1099 00:38:28,599 --> 00:38:30,680 summary of what we've learned so far 1100 00:38:30,680 --> 00:38:32,440 Bitcoin was the first protocol to take 1101 00:38:32,440 --> 00:38:34,520 this blockchain technology into the 1102 00:38:34,520 --> 00:38:35,640 Limelight and take these 1103 00:38:35,640 --> 00:38:37,520 cryptocurrencies into the mainstream 1104 00:38:37,520 --> 00:38:39,839 Bitcoin is a sort of digital gold or a 1105 00:38:39,839 --> 00:38:42,160 store of value able to make transactions 1106 00:38:42,160 --> 00:38:44,400 between users in a decentralized manner 1107 00:38:44,400 --> 00:38:45,720 ethereum and other smart contract 1108 00:38:45,720 --> 00:38:47,160 platforms take this blockchain 1109 00:38:47,160 --> 00:38:49,640 technology one step further enabling 1110 00:38:49,640 --> 00:38:51,200 people to make smart contracts in 1111 00:38:51,200 --> 00:38:53,640 decentralized trust minimized agreements 1112 00:38:53,640 --> 00:38:55,440 these smart contracts and decentralized 1113 00:38:55,440 --> 00:38:57,440 applications can access an inter 1114 00:38:57,440 --> 00:38:59,200 interact with the real world using 1115 00:38:59,200 --> 00:39:01,119 something called decentralized Oracle 1116 00:39:01,119 --> 00:39:03,200 networks chain link is a decentralized 1117 00:39:03,200 --> 00:39:05,079 network that allows us to build these 1118 00:39:05,079 --> 00:39:07,480 hybrid smart contracts which combines 1119 00:39:07,480 --> 00:39:10,599 our onchain logic with our offchain 1120 00:39:10,599 --> 00:39:12,720 decentralized data and decentralized 1121 00:39:12,720 --> 00:39:15,079 computation giving rise to our logic 1122 00:39:15,079 --> 00:39:17,079 being completely decentralized and our 1123 00:39:17,079 --> 00:39:18,880 data and external computation being 1124 00:39:18,880 --> 00:39:21,119 completely decentralized giving us all 1125 00:39:21,119 --> 00:39:23,160 the features that traditional agreements 1126 00:39:23,160 --> 00:39:25,599 and traditional contracts have now these 1127 00:39:25,599 --> 00:39:27,440 digital currencies like ethereum and 1128 00:39:27,440 --> 00:39:29,839 Bitcoin have value even without the 1129 00:39:29,839 --> 00:39:32,079 smart contract part having a censorship 1130 00:39:32,079 --> 00:39:34,400 resistant decentralized store of value 1131 00:39:34,400 --> 00:39:36,359 is immeasurably powerful in its own 1132 00:39:36,359 --> 00:39:37,839 right we have some links in the GitHub 1133 00:39:37,839 --> 00:39:39,359 repository that'll teach you how this 1134 00:39:39,359 --> 00:39:41,440 decentralized store value flips 1135 00:39:41,440 --> 00:39:43,359 traditional Finance on its head and it's 1136 00:39:43,359 --> 00:39:44,800 another one of the great reasons for 1137 00:39:44,800 --> 00:39:46,960 building smart contracts but again the 1138 00:39:46,960 --> 00:39:49,200 easiest way to boil it down is trust 1139 00:39:49,200 --> 00:39:53,119 minimized agreements or unbreakable 1140 00:39:53,599 --> 00:39:55,760 promises but let's also go into some of 1141 00:39:55,760 --> 00:39:56,920 these other features that smart 1142 00:39:56,920 --> 00:39:58,640 contracts have over our traditional 1143 00:39:58,640 --> 00:40:00,480 environment the first feature of course 1144 00:40:00,480 --> 00:40:02,200 is that they are decentralized and they 1145 00:40:02,200 --> 00:40:04,280 have no centralized intermediary the 1146 00:40:04,280 --> 00:40:05,960 different individuals that run one of 1147 00:40:05,960 --> 00:40:07,880 these blockchains are known as node 1148 00:40:07,880 --> 00:40:10,000 operators and it's the combination of 1149 00:40:10,000 --> 00:40:12,119 all these thousands of node operators 1150 00:40:12,119 --> 00:40:14,000 running the same software running these 1151 00:40:14,000 --> 00:40:16,240 algorithms running these smart contracts 1152 00:40:16,240 --> 00:40:18,160 that make the network decentralized 1153 00:40:18,160 --> 00:40:19,760 we'll dive deeper into how that works 1154 00:40:19,760 --> 00:40:21,960 later the next feature is transparency 1155 00:40:21,960 --> 00:40:23,960 and flexibility in these decentralized 1156 00:40:23,960 --> 00:40:26,599 networks since all these individual node 1157 00:40:26,599 --> 00:40:28,839 operators run this software everybody 1158 00:40:28,839 --> 00:40:30,680 can see everything that's happening on 1159 00:40:30,680 --> 00:40:32,839 chain meaning there's no Shady deals 1160 00:40:32,839 --> 00:40:34,800 there's no weird things happening 1161 00:40:34,800 --> 00:40:37,119 anything that's going to be unfair 1162 00:40:37,119 --> 00:40:39,160 people would be able to see and just not 1163 00:40:39,160 --> 00:40:41,599 use everybody has perfect information 1164 00:40:41,599 --> 00:40:44,319 and has to play by the same rules now 1165 00:40:44,319 --> 00:40:45,880 additionally this doesn't mean that 1166 00:40:45,880 --> 00:40:47,920 there's no privacy the blockchain is 1167 00:40:47,920 --> 00:40:49,960 pseudo Anonymous meaning that you aren't 1168 00:40:49,960 --> 00:40:52,839 necessarily tied to an identity in real 1169 00:40:52,839 --> 00:40:54,760 life they also have the feature of speed 1170 00:40:54,760 --> 00:40:56,400 and efficiency for those of you who have 1171 00:40:56,400 --> 00:40:58,680 ever tried to do a bank transfer or send 1172 00:40:58,680 --> 00:41:00,760 money across Seas you know it sometimes 1173 00:41:00,760 --> 00:41:04,119 can take 2 to 3 weeks when in fact all 1174 00:41:04,119 --> 00:41:06,359 these banks are really doing is basic 1175 00:41:06,359 --> 00:41:08,400 math they're subtracting money from your 1176 00:41:08,400 --> 00:41:10,480 balance and adding it to some other 1177 00:41:10,480 --> 00:41:12,680 balance why does it take so long in the 1178 00:41:12,680 --> 00:41:14,680 blockchain all of these transactions 1179 00:41:14,680 --> 00:41:17,200 happen instantly another instance for 1180 00:41:17,200 --> 00:41:19,040 those in the financial world today know 1181 00:41:19,040 --> 00:41:20,839 that clearing houses and settlement days 1182 00:41:20,839 --> 00:41:23,280 can take a long time in the blockchain 1183 00:41:23,280 --> 00:41:24,760 there's no need for any of that because 1184 00:41:24,760 --> 00:41:26,920 they happen instantly this obviously is 1185 00:41:26,920 --> 00:41:29,079 much quicker but it also makes for much 1186 00:41:29,079 --> 00:41:30,880 more efficient interactions with each 1187 00:41:30,880 --> 00:41:33,480 other security and immutability again 1188 00:41:33,480 --> 00:41:36,240 immutable means that it can't be changed 1189 00:41:36,240 --> 00:41:38,640 once a smart contract is deployed that's 1190 00:41:38,640 --> 00:41:40,720 it whatever is in the code is going to 1191 00:41:40,720 --> 00:41:42,680 be in the code Forever they cannot be 1192 00:41:42,680 --> 00:41:44,640 altered or tampered with in any way this 1193 00:41:44,640 --> 00:41:46,760 means that the security is much easier 1194 00:41:46,760 --> 00:41:48,319 whereas in a centralized World somebody 1195 00:41:48,319 --> 00:41:50,160 can hack into the server jump out the 1196 00:41:50,160 --> 00:41:52,240 database and change some numbers you 1197 00:41:52,240 --> 00:41:53,960 can't do that in the blockchain world 1198 00:41:53,960 --> 00:41:55,960 and since it's decentralized in order to 1199 00:41:55,960 --> 00:41:58,200 hack the blockchain you you'd have to 1200 00:41:58,200 --> 00:42:00,599 take over half of the nodes as opposed 1201 00:42:00,599 --> 00:42:02,280 to in the centralized world where you 1202 00:42:02,280 --> 00:42:04,240 only have to take over one in the 1203 00:42:04,240 --> 00:42:06,160 regular world if your computer and your 1204 00:42:06,160 --> 00:42:08,960 backup computer go down all of your data 1205 00:42:08,960 --> 00:42:11,640 is gone in the blockchain world if your 1206 00:42:11,640 --> 00:42:13,280 computer and your backup computer go 1207 00:42:13,280 --> 00:42:16,079 down all your data is safe because it's 1208 00:42:16,079 --> 00:42:17,760 being run on all these other 1209 00:42:17,760 --> 00:42:20,079 decentralized nodes and even if a few 1210 00:42:20,079 --> 00:42:22,160 hundred nodes or if a few thousand nodes 1211 00:42:22,160 --> 00:42:24,040 go down it doesn't matter because as 1212 00:42:24,040 --> 00:42:25,839 long as one node has a copy of the 1213 00:42:25,839 --> 00:42:28,440 blockchain you're good to go hacking a 1214 00:42:28,440 --> 00:42:31,200 blockchain is nearly impossible and 1215 00:42:31,200 --> 00:42:33,280 Leaps and Bounds more difficult than 1216 00:42:33,280 --> 00:42:35,240 hacking a centralized server not only 1217 00:42:35,240 --> 00:42:37,280 that but this is safer in the asset 1218 00:42:37,280 --> 00:42:39,839 sense as well all you need to access 1219 00:42:39,839 --> 00:42:41,760 your credentials and your information 1220 00:42:41,760 --> 00:42:44,359 and your assets is your private key 1221 00:42:44,359 --> 00:42:46,359 which is basically your password for all 1222 00:42:46,359 --> 00:42:48,160 of this and as we've discussed in the 1223 00:42:48,160 --> 00:42:50,119 video these smart contracts remove this 1224 00:42:50,119 --> 00:42:51,800 counterparty risk remove this 1225 00:42:51,800 --> 00:42:54,000 centralized intermediary remove these 1226 00:42:54,000 --> 00:42:56,280 trust gateways that we have to do in web 1227 00:42:56,280 --> 00:42:58,480 2 when we engage with users and 1228 00:42:58,480 --> 00:43:00,599 individuals they don't always have our 1229 00:43:00,599 --> 00:43:02,760 best interests at heart smart contracts 1230 00:43:02,760 --> 00:43:04,480 remove this counterparty risk because 1231 00:43:04,480 --> 00:43:06,640 once one of these contracts is created 1232 00:43:06,640 --> 00:43:08,559 they can't go in and they can't alter it 1233 00:43:08,559 --> 00:43:10,480 and they can't let greed or ego or 1234 00:43:10,480 --> 00:43:11,880 anything else get the better of them and 1235 00:43:11,880 --> 00:43:13,960 alter the terms of the deal and as we 1236 00:43:13,960 --> 00:43:16,200 said this gives rise to these trust 1237 00:43:16,200 --> 00:43:17,880 minimized agreements or these 1238 00:43:17,880 --> 00:43:20,400 programmatic unbreakable promises we 1239 00:43:20,400 --> 00:43:22,839 move away from brand-based agreements to 1240 00:43:22,839 --> 00:43:24,599 math-based agreements where we can look 1241 00:43:24,599 --> 00:43:26,440 at the cryptography we can look right at 1242 00:43:26,440 --> 00:43:29,040 the code and see exactly what something 1243 00:43:29,040 --> 00:43:30,440 is going to do and how it's going to 1244 00:43:30,440 --> 00:43:32,800 execute versus having to rely on a human 1245 00:43:32,800 --> 00:43:35,200 being doing the right thing with smart 1246 00:43:35,200 --> 00:43:37,440 contracts and decentralized hybrid smart 1247 00:43:37,440 --> 00:43:40,079 contracts doing the right thing is 1248 00:43:40,079 --> 00:43:42,200 infrastructural all these pieces boil 1249 00:43:42,200 --> 00:43:44,160 down to us having the freedom to 1250 00:43:44,160 --> 00:43:46,240 interact the way we want to interact 1251 00:43:46,240 --> 00:43:48,160 without having to be afraid that 1252 00:43:48,160 --> 00:43:49,640 interacting like that is going to screw 1253 00:43:49,640 --> 00:43:52,040 us over this trust minimize peace these 1254 00:43:52,040 --> 00:43:55,400 unbreakable promises make interactions 1255 00:43:55,400 --> 00:43:57,559 so much better in the purely to World 1256 00:43:57,559 --> 00:44:00,000 we're constantly bombarded with messages 1257 00:44:00,000 --> 00:44:02,920 of projects and protocols pushing us to 1258 00:44:02,920 --> 00:44:04,960 move or act in the direction that makes 1259 00:44:04,960 --> 00:44:07,079 them more profitable versus in the smart 1260 00:44:07,079 --> 00:44:08,960 contract space we can see everything 1261 00:44:08,960 --> 00:44:11,400 transparently and we can even engage and 1262 00:44:11,400 --> 00:44:14,119 interact and be partially owners of the 1263 00:44:14,119 --> 00:44:16,400 protocols and the interactions that we 1264 00:44:16,400 --> 00:44:19,880 decide that we want to be a part 1265 00:44:20,720 --> 00:44:23,319 of so smart contracts have been around 1266 00:44:23,319 --> 00:44:25,359 for a few years now and what have they 1267 00:44:25,359 --> 00:44:27,319 generated for what industries have come 1268 00:44:27,319 --> 00:44:28,800 about due to these smart contract 1269 00:44:28,800 --> 00:44:30,359 platforms being around well you've 1270 00:44:30,359 --> 00:44:31,599 probably heard of some of these and some 1271 00:44:31,599 --> 00:44:32,960 of these we've already mentioned but 1272 00:44:32,960 --> 00:44:35,480 let's give you a quick refresher defi 1273 00:44:35,480 --> 00:44:38,319 defi stands for decentralized finance 1274 00:44:38,319 --> 00:44:40,559 and it gives users the ability to engage 1275 00:44:40,559 --> 00:44:42,440 with finance and markets without having 1276 00:44:42,440 --> 00:44:44,480 to go through a centralized intermediary 1277 00:44:44,480 --> 00:44:46,160 for example like we said with Robin Hood 1278 00:44:46,160 --> 00:44:48,119 you'd no longer have to trust that Robin 1279 00:44:48,119 --> 00:44:49,520 Hood would continue to give you access 1280 00:44:49,520 --> 00:44:51,720 to the markets you instead would be able 1281 00:44:51,720 --> 00:44:54,040 to see in the smart contract yes I have 1282 00:44:54,040 --> 00:44:56,000 access to the markets or in the 2008 1283 00:44:56,000 --> 00:44:58,200 financial crisis you never have to trust 1284 00:44:58,200 --> 00:45:00,079 that these groups and institutions are 1285 00:45:00,079 --> 00:45:01,559 giving you the correct things on the 1286 00:45:01,559 --> 00:45:03,400 back end you can see everything 1287 00:45:03,400 --> 00:45:05,640 transparently right on the blockchain 1288 00:45:05,640 --> 00:45:07,240 you can engage with things like money 1289 00:45:07,240 --> 00:45:09,160 markets and sophisticated Financial 1290 00:45:09,160 --> 00:45:12,400 products easy effectively and securely 1291 00:45:12,400 --> 00:45:14,359 if you're really excited about defi we 1292 00:45:14,359 --> 00:45:16,440 have a ton of defi examples showing you 1293 00:45:16,440 --> 00:45:17,839 how to build and interact with these 1294 00:45:17,839 --> 00:45:20,280 protocols in coming lessons Dows or 1295 00:45:20,280 --> 00:45:22,559 decentralized autonomous organizations 1296 00:45:22,559 --> 00:45:23,800 are another group that we've already 1297 00:45:23,800 --> 00:45:25,800 mentioned Dows are groups that are 1298 00:45:25,800 --> 00:45:28,200 governed completely centralized by a set 1299 00:45:28,200 --> 00:45:30,160 of instructions or smart contracts on 1300 00:45:30,160 --> 00:45:32,079 chain there are some massive benefits 1301 00:45:32,079 --> 00:45:34,240 here where engagement is much easier the 1302 00:45:34,240 --> 00:45:35,680 rules are black and white and you can 1303 00:45:35,680 --> 00:45:37,760 see everything directly on chain voting 1304 00:45:37,760 --> 00:45:39,480 and governance technology is completely 1305 00:45:39,480 --> 00:45:41,559 decentralized and the blockchain space 1306 00:45:41,559 --> 00:45:43,359 is one of the big ones pushing how we 1307 00:45:43,359 --> 00:45:45,000 can evolve politics and how we can 1308 00:45:45,000 --> 00:45:46,559 evolve governance to make it more 1309 00:45:46,559 --> 00:45:48,599 efficient fair and reasonable and you 1310 00:45:48,599 --> 00:45:50,359 better know it we have some examples of 1311 00:45:50,359 --> 00:45:51,920 how to build Dows and how to work with 1312 00:45:51,920 --> 00:45:53,839 Dows in coming lessons so be sure to 1313 00:45:53,839 --> 00:45:56,520 watch those nfts stand for non-fungible 1314 00:45:56,520 --> 00:45:58,680 tokens and can really be kind of 1315 00:45:58,680 --> 00:46:00,800 described as digital art or just a 1316 00:46:00,800 --> 00:46:03,200 unique asset they can do so much more 1317 00:46:03,200 --> 00:46:05,200 but we'll keep it high level for now 1318 00:46:05,200 --> 00:46:07,240 projects like board apes and crypt punks 1319 00:46:07,240 --> 00:46:09,319 have revolutionized the way that people 1320 00:46:09,319 --> 00:46:11,119 get paid for their work show off their 1321 00:46:11,119 --> 00:46:13,400 creativity status and so much more and 1322 00:46:13,400 --> 00:46:15,559 yes of course we have lessons showing 1323 00:46:15,559 --> 00:46:17,800 you how to create and interact with nfts 1324 00:46:17,800 --> 00:46:19,640 as well so many other groups and so many 1325 00:46:19,640 --> 00:46:21,559 other Industries are being created as a 1326 00:46:21,559 --> 00:46:24,000 result of this insane technology and 1327 00:46:24,000 --> 00:46:25,480 maybe after finishing the journey with 1328 00:46:25,480 --> 00:46:27,760 us here you go out and you'll be the one 1329 00:46:27,760 --> 00:46:30,319 to Pioneer the next industry or the next 1330 00:46:30,319 --> 00:46:32,839 billion dooll idea you've learned so 1331 00:46:32,839 --> 00:46:34,920 much already but now that we've learned 1332 00:46:34,920 --> 00:46:37,240 a lot of this highlevel information 1333 00:46:37,240 --> 00:46:39,800 let's finally jump in and let's make 1334 00:46:39,800 --> 00:46:42,000 your first transaction and let's get you 1335 00:46:42,000 --> 00:46:44,559 set up to interact with this new world 1336 00:46:44,559 --> 00:46:46,079 in this next section we're going to get 1337 00:46:46,079 --> 00:46:47,960 you a wallet and we're going to show you 1338 00:46:47,960 --> 00:46:50,319 exactly what a transaction looks like 1339 00:46:50,319 --> 00:46:54,280 and feels like let's dive 1340 00:46:55,440 --> 00:46:58,359 in this is the ethereum website 1341 00:46:58,359 --> 00:47:01,079 ethereum.org we are going to make a 1342 00:47:01,079 --> 00:47:03,480 transaction on a test ethereum 1343 00:47:03,480 --> 00:47:05,319 blockchain I'll explain what that means 1344 00:47:05,319 --> 00:47:07,480 in a little bit this is going to be our 1345 00:47:07,480 --> 00:47:09,520 first ever transaction that's made on 1346 00:47:09,520 --> 00:47:11,559 the blockchain and this process of 1347 00:47:11,559 --> 00:47:13,520 making a transaction is going to work 1348 00:47:13,520 --> 00:47:16,839 the exact same across all evm compatible 1349 00:47:16,839 --> 00:47:19,880 blockchains and layer 2s like arbitrum 1350 00:47:19,880 --> 00:47:23,280 ethereum ZK sync and Etc I'll explain 1351 00:47:23,280 --> 00:47:25,680 what evm means in the future for now 1352 00:47:25,680 --> 00:47:27,800 just follow along and have fun running 1353 00:47:27,800 --> 00:47:30,800 your first transaction now in order for 1354 00:47:30,800 --> 00:47:32,839 us to send a transaction on any of these 1355 00:47:32,839 --> 00:47:35,160 evm chains the first thing that we need 1356 00:47:35,160 --> 00:47:38,359 to do is set up a wallet so I'm going to 1357 00:47:38,359 --> 00:47:40,160 go to metamask because it's one of the 1358 00:47:40,160 --> 00:47:41,880 most popular wallets and one of the 1359 00:47:41,880 --> 00:47:44,119 easiest wallets to use I'm using the 1360 00:47:44,119 --> 00:47:46,000 brave browser but it works for Chrome or 1361 00:47:46,000 --> 00:47:48,760 Firefox or really any other popular 1362 00:47:48,760 --> 00:47:50,520 browsers out there and it's just going 1363 00:47:50,520 --> 00:47:53,280 to be an extension in the top right hand 1364 00:47:53,280 --> 00:47:54,960 of our browser it's going to make it 1365 00:47:54,960 --> 00:47:57,079 very easy to see anything to do with our 1366 00:47:57,079 --> 00:47:59,640 wallets and our transactions very easily 1367 00:47:59,640 --> 00:48:01,359 and it's going to store all of our evm 1368 00:48:01,359 --> 00:48:03,240 based currencies and evm based 1369 00:48:03,240 --> 00:48:05,040 transactions so I'm going to go ahead 1370 00:48:05,040 --> 00:48:07,680 and hit add to Brave ADD extension 1371 00:48:07,680 --> 00:48:09,760 although Brave does also come jam-packed 1372 00:48:09,760 --> 00:48:11,880 with its own wallet so now we come to 1373 00:48:11,880 --> 00:48:13,680 the get started page and I'm going to go 1374 00:48:13,680 --> 00:48:16,960 ahead and select create a new wallet 1375 00:48:16,960 --> 00:48:19,240 sure we'll agree to help out metamask 1376 00:48:19,240 --> 00:48:20,800 now we're going to create our password 1377 00:48:20,800 --> 00:48:22,800 make sure it's really secure for the 1378 00:48:22,800 --> 00:48:24,920 purpose of this demo mine's going to be 1379 00:48:24,920 --> 00:48:26,319 kind of mediocre now I'm going to 1380 00:48:26,319 --> 00:48:27,280 preface it 1381 00:48:27,280 --> 00:48:29,160 this wallet that you're making right now 1382 00:48:29,160 --> 00:48:31,040 as you follow along with me this is 1383 00:48:31,040 --> 00:48:33,520 going to be your development wallet so 1384 00:48:33,520 --> 00:48:35,079 if you want to make the password a 1385 00:48:35,079 --> 00:48:36,920 little bit weak just so that you can 1386 00:48:36,920 --> 00:48:39,240 test things out very quickly go for it 1387 00:48:39,240 --> 00:48:41,680 just know we're never ever going to put 1388 00:48:41,680 --> 00:48:43,800 real money into this wallet it's good if 1389 00:48:43,800 --> 00:48:46,200 you treat this as if it is a real wallet 1390 00:48:46,200 --> 00:48:47,520 that way you'll get used to and you'll 1391 00:48:47,520 --> 00:48:50,079 get familiar with good wallet safety you 1392 00:48:50,079 --> 00:48:51,680 will then get a video like this which 1393 00:48:51,680 --> 00:48:53,480 will teach you about the secret recovery 1394 00:48:53,480 --> 00:48:55,839 phrase which we saw a little bit earlier 1395 00:48:55,839 --> 00:48:57,799 when we were creating our wet let's 1396 00:48:57,799 --> 00:49:00,119 watch this video metamask is a new way 1397 00:49:00,119 --> 00:49:02,720 to connect to sites and applications on 1398 00:49:02,720 --> 00:49:04,760 traditional websites a central database 1399 00:49:04,760 --> 00:49:06,799 or bank is responsible for controlling 1400 00:49:06,799 --> 00:49:08,760 and recovering your accounts but on 1401 00:49:08,760 --> 00:49:11,079 metamask all of the Power belongs to the 1402 00:49:11,079 --> 00:49:13,880 holder of a master key whoever holds the 1403 00:49:13,880 --> 00:49:16,280 key controls the accounts your secret 1404 00:49:16,280 --> 00:49:19,079 recovery phrase is your master key it's 1405 00:49:19,079 --> 00:49:21,280 a series of 12 words that are generated 1406 00:49:21,280 --> 00:49:23,240 when you first set up metamask which 1407 00:49:23,240 --> 00:49:25,160 allow you to recover your wallet and 1408 00:49:25,160 --> 00:49:27,640 funds if you ever lose ACC access it's 1409 00:49:27,640 --> 00:49:29,520 important that you secure your wallet by 1410 00:49:29,520 --> 00:49:31,920 keeping your secret recovery phrase very 1411 00:49:31,920 --> 00:49:34,880 safe and very secret if anyone gets 1412 00:49:34,880 --> 00:49:36,599 access to it they will have the master 1413 00:49:36,599 --> 00:49:39,040 key to your wallet and can freely access 1414 00:49:39,040 --> 00:49:41,680 and take all of your funds to secure 1415 00:49:41,680 --> 00:49:43,520 your metamask wallet you'll want to 1416 00:49:43,520 --> 00:49:46,119 safely save your secret recovery phrase 1417 00:49:46,119 --> 00:49:48,880 you can write it down hide it somewhere 1418 00:49:48,880 --> 00:49:51,720 put it in a safe deposit box or use a 1419 00:49:51,720 --> 00:49:54,480 secure password manager some users even 1420 00:49:54,480 --> 00:49:56,880 engrave their phrase onto a metal plate 1421 00:49:56,880 --> 00:49:59,480 nobody not even the team at metamask can 1422 00:49:59,480 --> 00:50:01,400 help you recover your wallet if you lose 1423 00:50:01,400 --> 00:50:03,599 your secret recovery phrase if you 1424 00:50:03,599 --> 00:50:05,160 haven't written down your secret 1425 00:50:05,160 --> 00:50:06,920 recovery phrase and stored it somewhere 1426 00:50:06,920 --> 00:50:10,760 safe do it now we'll wait and remember 1427 00:50:10,760 --> 00:50:12,839 never share your secret recovery phrase 1428 00:50:12,839 --> 00:50:16,280 with anyone not even us if anyone ever 1429 00:50:16,280 --> 00:50:18,520 asks you for it they're trying to scam 1430 00:50:18,520 --> 00:50:21,079 you that's it now you know what a secret 1431 00:50:21,079 --> 00:50:23,240 recovery phrase is and how to keep your 1432 00:50:23,240 --> 00:50:25,880 wallet safe and secure awesome so that 1433 00:50:25,880 --> 00:50:28,440 was a great introduction to keeping your 1434 00:50:28,440 --> 00:50:30,520 wallet safe we'll talk a little bit more 1435 00:50:30,520 --> 00:50:32,000 about safety with our wallets in the 1436 00:50:32,000 --> 00:50:34,480 future let's go ahead and select secure 1437 00:50:34,480 --> 00:50:36,640 my wallet now this is where we need to 1438 00:50:36,640 --> 00:50:39,200 write down our secret recovery phrase 1439 00:50:39,200 --> 00:50:41,559 and save it in a very secure place it 1440 00:50:41,559 --> 00:50:43,440 gives us some tips here like a password 1441 00:50:43,440 --> 00:50:47,119 manager a safety deposit box or split it 1442 00:50:47,119 --> 00:50:49,760 up and keep it in multiple secret places 1443 00:50:49,760 --> 00:50:51,640 for the purposes of this video I'm going 1444 00:50:51,640 --> 00:50:53,400 to be showing you the secret recovery 1445 00:50:53,400 --> 00:50:54,920 phrase because I'm not going to put any 1446 00:50:54,920 --> 00:50:56,400 real money into this but you should 1447 00:50:56,400 --> 00:50:58,280 never never ever do this additionally 1448 00:50:58,280 --> 00:51:01,160 you'll sometimes hear pneumonic as a 1449 00:51:01,160 --> 00:51:03,599 synonym for secret recovery phrase the 1450 00:51:03,599 --> 00:51:05,040 main takeaway from all this is you 1451 00:51:05,040 --> 00:51:07,799 should never share any of this this is 1452 00:51:07,799 --> 00:51:10,520 for you only if you show this secret 1453 00:51:10,520 --> 00:51:12,280 phrase to anybody else they will have 1454 00:51:12,280 --> 00:51:14,839 access to not just one account but every 1455 00:51:14,839 --> 00:51:17,720 account that you make in metamask so be 1456 00:51:17,720 --> 00:51:19,200 absolutely certain to not share this 1457 00:51:19,200 --> 00:51:21,000 with anybody so again I know I'm 1458 00:51:21,000 --> 00:51:22,760 belaboring the point a little bit but 1459 00:51:22,760 --> 00:51:23,680 everything that we're going to do in 1460 00:51:23,680 --> 00:51:25,119 this tutorial we're going to do with 1461 00:51:25,119 --> 00:51:28,119 fake money and fake make assets and 1462 00:51:28,119 --> 00:51:30,200 never put actual money into this account 1463 00:51:30,200 --> 00:51:31,680 that we're making here once you get 1464 00:51:31,680 --> 00:51:33,559 familiar with using metamask and working 1465 00:51:33,559 --> 00:51:35,520 with the tools and stank secure then you 1466 00:51:35,520 --> 00:51:36,880 can go ahead and create a separate 1467 00:51:36,880 --> 00:51:38,960 metamask that will have real funds in it 1468 00:51:38,960 --> 00:51:40,040 if you want to put real money in 1469 00:51:40,040 --> 00:51:41,640 different metamask a lot of browsers 1470 00:51:41,640 --> 00:51:43,359 have a profile option and maybe you can 1471 00:51:43,359 --> 00:51:45,520 make a new profile install metamask on 1472 00:51:45,520 --> 00:51:47,880 that different profile call that profile 1473 00:51:47,880 --> 00:51:49,920 real money profile or something and 1474 00:51:49,920 --> 00:51:51,559 that's where you will store your money 1475 00:51:51,559 --> 00:51:53,319 but for this video for this tutorial the 1476 00:51:53,319 --> 00:51:55,480 mamass that you are using is going to be 1477 00:51:55,480 --> 00:51:58,440 specifically for are testing things out 1478 00:51:58,440 --> 00:52:00,160 and you will never store real money to 1479 00:52:00,160 --> 00:52:02,480 it I'm going to harp on that a lot more 1480 00:52:02,480 --> 00:52:04,040 in this course so even if you're coming 1481 00:52:04,040 --> 00:52:05,920 here and you have a wallet I highly 1482 00:52:05,920 --> 00:52:07,920 recommend still making a brand new one 1483 00:52:07,920 --> 00:52:10,160 for this tutorial just in case you don't 1484 00:52:10,160 --> 00:52:12,119 accidentally code something or do 1485 00:52:12,119 --> 00:52:13,720 something atomous and give away your 1486 00:52:13,720 --> 00:52:16,119 funds if this is your first wallet then 1487 00:52:16,119 --> 00:52:18,720 great but again when you're working with 1488 00:52:18,720 --> 00:52:20,160 real money if you lose access to the 1489 00:52:20,160 --> 00:52:21,880 secret phrase you will lose access to 1490 00:52:21,880 --> 00:52:23,359 all your money so be sure to write this 1491 00:52:23,359 --> 00:52:25,040 down promise me that you won't use real 1492 00:52:25,040 --> 00:52:27,000 money for this course great I'm going to 1493 00:52:27,000 --> 00:52:28,799 hit copy to clipboard for now and we're 1494 00:52:28,799 --> 00:52:30,880 going to go ahead and hit next now we 1495 00:52:30,880 --> 00:52:32,960 need to confirm by adding our seed 1496 00:52:32,960 --> 00:52:35,280 phrase back in we can go ahead and hit 1497 00:52:35,280 --> 00:52:37,680 confirm and we now have created our 1498 00:52:37,680 --> 00:52:40,640 wallet let's go ahead and clict got it 1499 00:52:40,640 --> 00:52:43,040 awesome now we can see the interface of 1500 00:52:43,040 --> 00:52:45,079 our metamask full screen and depending 1501 00:52:45,079 --> 00:52:47,200 on your browser what you can normally do 1502 00:52:47,200 --> 00:52:48,880 is hit this little puzzle piece on your 1503 00:52:48,880 --> 00:52:51,440 browser and select this pin button so 1504 00:52:51,440 --> 00:52:54,000 now we can pin our metamask into the top 1505 00:52:54,000 --> 00:52:56,240 of our browser and we can click it like 1506 00:52:56,240 --> 00:52:57,040 so 1507 00:52:57,040 --> 00:52:58,559 and we can see it give a little drop 1508 00:52:58,559 --> 00:53:00,839 down like this and we can see the same 1509 00:53:00,839 --> 00:53:02,760 information in this little drop down as 1510 00:53:02,760 --> 00:53:04,799 there is on the full screen now even if 1511 00:53:04,799 --> 00:53:07,200 you lose access to that page now that 1512 00:53:07,200 --> 00:53:10,119 this is bookmarked in your browser you 1513 00:53:10,119 --> 00:53:12,480 can select your metamask select these 1514 00:53:12,480 --> 00:53:15,760 three dots and hit expand view to reach 1515 00:53:15,760 --> 00:53:17,960 this tab now additionally what we can do 1516 00:53:17,960 --> 00:53:19,680 in here is we can actually go up to our 1517 00:53:19,680 --> 00:53:22,160 accounts and we can actually create 1518 00:53:22,160 --> 00:53:24,119 multiple accounts by hitting create 1519 00:53:24,119 --> 00:53:26,000 account and if you wanted to you could 1520 00:53:26,000 --> 00:53:27,280 give it a name here I'm just going to 1521 00:53:27,280 --> 00:53:29,400 leave it as default for account two and 1522 00:53:29,400 --> 00:53:32,280 now we have two separate accounts we 1523 00:53:32,280 --> 00:53:35,720 have an account zero with an address and 1524 00:53:35,720 --> 00:53:38,079 an account two with an address as well 1525 00:53:38,079 --> 00:53:40,720 both of these accounts actually share 1526 00:53:40,720 --> 00:53:43,559 that same secret phrase so anybody with 1527 00:53:43,559 --> 00:53:45,160 access to the secret phrase can actually 1528 00:53:45,160 --> 00:53:47,119 have access to both accounts however 1529 00:53:47,119 --> 00:53:49,319 they have different private keys and 1530 00:53:49,319 --> 00:53:50,520 that's what makes them different we'll 1531 00:53:50,520 --> 00:53:51,720 talk a little bit more about that in the 1532 00:53:51,720 --> 00:53:53,200 future if somebody gets access to a 1533 00:53:53,200 --> 00:53:55,000 private key they'll get access to a 1534 00:53:55,000 --> 00:53:56,640 single account if they get access access 1535 00:53:56,640 --> 00:53:58,200 to the secret phrase they'll get access 1536 00:53:58,200 --> 00:54:00,160 to all the accounts that you make even 1537 00:54:00,160 --> 00:54:01,480 you know if you made a third one they'd 1538 00:54:01,480 --> 00:54:03,119 get access to this one as well now if 1539 00:54:03,119 --> 00:54:04,559 you look up in the top right of the 1540 00:54:04,559 --> 00:54:06,160 screen here you'll see this section that 1541 00:54:06,160 --> 00:54:08,760 says ethereum mainnet this is our 1542 00:54:08,760 --> 00:54:10,680 networks Tab and if you click it you can 1543 00:54:10,680 --> 00:54:12,920 see all the different networks that our 1544 00:54:12,920 --> 00:54:15,319 metamask has access to ethereum mainnet 1545 00:54:15,319 --> 00:54:17,440 is the main network of ethereum and this 1546 00:54:17,440 --> 00:54:20,319 is where real money is spent and used 1547 00:54:20,319 --> 00:54:21,680 for this course we're not going to be 1548 00:54:21,680 --> 00:54:23,440 working with ethereum mainnet we're 1549 00:54:23,440 --> 00:54:24,480 instead going to be working with 1550 00:54:24,480 --> 00:54:26,720 something called a test net for both 1551 00:54:26,720 --> 00:54:29,440 engineers and non-engineers we often 1552 00:54:29,440 --> 00:54:32,079 need a place to test or simulate our 1553 00:54:32,079 --> 00:54:34,359 transactions and for the developers here 1554 00:54:34,359 --> 00:54:35,720 throughout this course we are going to 1555 00:54:35,720 --> 00:54:37,680 teach you another technique for testing 1556 00:54:37,680 --> 00:54:40,319 out your transactions on a local network 1557 00:54:40,319 --> 00:54:42,040 and a local network is actually going to 1558 00:54:42,040 --> 00:54:44,480 be the preferred way we do our testing 1559 00:54:44,480 --> 00:54:46,640 and our simulations however it's still 1560 00:54:46,640 --> 00:54:48,400 really important to see end to end what 1561 00:54:48,400 --> 00:54:50,520 a real transaction looks like and that's 1562 00:54:50,520 --> 00:54:52,559 what a test net will do for us it 1563 00:54:52,559 --> 00:54:55,720 simulates exactly what a mainnet or a 1564 00:54:55,720 --> 00:54:58,200 live money Network would look like 1565 00:54:58,200 --> 00:55:00,200 however there's no real money at stake 1566 00:55:00,200 --> 00:55:01,480 and we don't actually have to spend any 1567 00:55:01,480 --> 00:55:03,319 money to see some of the test Nets that 1568 00:55:03,319 --> 00:55:05,400 come default with metamask we can hit 1569 00:55:05,400 --> 00:55:07,920 the show/hide button which will bring us 1570 00:55:07,920 --> 00:55:10,960 to the settings page of metamask we can 1571 00:55:10,960 --> 00:55:13,760 turn on show test networks and if we 1572 00:55:13,760 --> 00:55:15,520 scroll back up now if we hit our 1573 00:55:15,520 --> 00:55:17,520 networks tab actually let's go ahead 1574 00:55:17,520 --> 00:55:19,280 close out of settings now if we hit this 1575 00:55:19,280 --> 00:55:22,240 drop down we can see gelli test Network 1576 00:55:22,240 --> 00:55:24,720 sapoia test Network and Linea gorelli 1577 00:55:24,720 --> 00:55:26,720 test Network these Networks networks are 1578 00:55:26,720 --> 00:55:29,280 test networks that resemble ethereum or 1579 00:55:29,280 --> 00:55:33,440 polygon or Linea or arbitrum or optimism 1580 00:55:33,440 --> 00:55:36,559 or ZK sync or any other evm compatible 1581 00:55:36,559 --> 00:55:38,039 chain that we want to work with and 1582 00:55:38,039 --> 00:55:40,680 again we'll Define evm in the future and 1583 00:55:40,680 --> 00:55:42,160 we can actually switch the network that 1584 00:55:42,160 --> 00:55:43,920 we're working on simply by clicking 1585 00:55:43,920 --> 00:55:45,559 another Network so let's switch to 1586 00:55:45,559 --> 00:55:48,680 sapoia we can see our Network changed up 1587 00:55:48,680 --> 00:55:51,200 here and now we can see we have zero SEO 1588 00:55:51,200 --> 00:55:54,200 eth so on eth mainnet this new account 1589 00:55:54,200 --> 00:55:57,400 has zero ethereum and on the sapoia test 1590 00:55:57,400 --> 00:56:00,480 Network we also have zero sapoia eth 1591 00:56:00,480 --> 00:56:01,960 which makes sense because this is a 1592 00:56:01,960 --> 00:56:04,039 brand new wallet and we haven't put any 1593 00:56:04,039 --> 00:56:06,079 money into this brand new account yet so 1594 00:56:06,079 --> 00:56:08,280 of course we have zero at the time of 1595 00:56:08,280 --> 00:56:09,920 recording sapoia is one of the most 1596 00:56:09,920 --> 00:56:12,119 popular test networks out there so we're 1597 00:56:12,119 --> 00:56:14,160 going to be working mainly with sapoia 1598 00:56:14,160 --> 00:56:16,400 throughout this course however test Nets 1599 00:56:16,400 --> 00:56:18,200 often change because again they're run 1600 00:56:18,200 --> 00:56:19,680 out of the goodness of people's hearts 1601 00:56:19,680 --> 00:56:21,480 and sometimes people stop running them 1602 00:56:21,480 --> 00:56:22,920 you should absolutely have either the 1603 00:56:22,920 --> 00:56:25,200 web3 dev. education site up or the 1604 00:56:25,200 --> 00:56:27,319 GitHub reposit associated with this 1605 00:56:27,319 --> 00:56:30,119 course and an important note sometimes 1606 00:56:30,119 --> 00:56:32,559 you'll see this as the chain Excel org 1607 00:56:32,559 --> 00:56:34,880 Foundry FL course we recently renamed it 1608 00:56:34,880 --> 00:56:37,240 to The cyphon Foundry F course so this 1609 00:56:37,240 --> 00:56:39,000 is the correct link but if you see chain 1610 00:56:39,000 --> 00:56:41,119 excl org that's fine as well and you 1611 00:56:41,119 --> 00:56:43,160 should scroll down to the recommended 1612 00:56:43,160 --> 00:56:45,920 test Nets section to make sure you're on 1613 00:56:45,920 --> 00:56:48,119 the most up-to-date test net at the time 1614 00:56:48,119 --> 00:56:49,960 of recording like I said we're working 1615 00:56:49,960 --> 00:56:51,839 with sepolia throughout this course we 1616 00:56:51,839 --> 00:56:53,200 are going to show you how to work with 1617 00:56:53,200 --> 00:56:54,799 different test Nets and different 1618 00:56:54,799 --> 00:56:56,480 networks as well because because it's 1619 00:56:56,480 --> 00:56:58,480 incredibly important to do so the 1620 00:56:58,480 --> 00:57:00,079 blockchain world is moving into a 1621 00:57:00,079 --> 00:57:02,280 multi-chain world and especially with 1622 00:57:02,280 --> 00:57:04,280 the popularity of l2s which help 1623 00:57:04,280 --> 00:57:06,760 ethereum scale learning the differences 1624 00:57:06,760 --> 00:57:08,200 between different chains and different 1625 00:57:08,200 --> 00:57:10,760 l2s is incredibly important now same as 1626 00:57:10,760 --> 00:57:12,319 ethereum what we can do is we can 1627 00:57:12,319 --> 00:57:14,559 actually go to sepolia etherscan so 1628 00:57:14,559 --> 00:57:18,720 we'll go to sepolia etherscan.io and we 1629 00:57:18,720 --> 00:57:20,799 can grab our address from metamask by 1630 00:57:20,799 --> 00:57:23,160 clicking and copying the address here 1631 00:57:23,160 --> 00:57:25,760 pasting it into the sapoia Explorer and 1632 00:57:25,760 --> 00:57:28,000 same as ethereum we can see our account 1633 00:57:28,000 --> 00:57:30,559 balance we have zero eth there are no 1634 00:57:30,559 --> 00:57:33,160 transactions no token transfers nothing 1635 00:57:33,160 --> 00:57:34,880 because obviously it's a brand new 1636 00:57:34,880 --> 00:57:36,559 wallet now I'm showing you this because 1637 00:57:36,559 --> 00:57:38,280 pretty soon we're going to send our 1638 00:57:38,280 --> 00:57:41,079 first ever blockchain transaction if 1639 00:57:41,079 --> 00:57:42,280 you've never sent a blockchain 1640 00:57:42,280 --> 00:57:44,039 transaction before we're going to do it 1641 00:57:44,039 --> 00:57:45,880 on this test net to give you some 1642 00:57:45,880 --> 00:57:47,640 confidence as what a transaction 1643 00:57:47,640 --> 00:57:49,079 actually looks like when you do move 1644 00:57:49,079 --> 00:57:50,960 over to a main net and I'm showing you 1645 00:57:50,960 --> 00:57:52,839 this site now because you're going to 1646 00:57:52,839 --> 00:57:55,000 see when we send a transaction a lot of 1647 00:57:55,000 --> 00:57:57,160 this information is going to get updated 1648 00:57:57,160 --> 00:57:59,839 now just remember like I said earlier a 1649 00:57:59,839 --> 00:58:01,240 test net is run out of the goodness of 1650 00:58:01,240 --> 00:58:03,640 people's hearts so please use the 1651 00:58:03,640 --> 00:58:05,720 transactions sparingly once you send 1652 00:58:05,720 --> 00:58:07,680 your first transaction here try not to 1653 00:58:07,680 --> 00:58:09,720 send too many more as one as good enough 1654 00:58:09,720 --> 00:58:12,000 for you to see what's going on anyways 1655 00:58:12,000 --> 00:58:14,039 and in order for us to simulate one of 1656 00:58:14,039 --> 00:58:15,760 these transactions we're going to go to 1657 00:58:15,760 --> 00:58:18,640 a faucet for a testnet testnets have 1658 00:58:18,640 --> 00:58:20,960 this thing called faucets which allow us 1659 00:58:20,960 --> 00:58:23,839 to get some free sapoia eth so that we 1660 00:58:23,839 --> 00:58:25,880 can test out sending transactions and 1661 00:58:25,880 --> 00:58:27,920 receiving transactions if you go to the 1662 00:58:27,920 --> 00:58:29,920 GitHub associated with this course or 1663 00:58:29,920 --> 00:58:31,280 web3 dev. 1664 00:58:31,280 --> 00:58:33,680 education we can scroll down to this 1665 00:58:33,680 --> 00:58:36,520 testet faucets section and select one of 1666 00:58:36,520 --> 00:58:39,000 the links to go to one of these test net 1667 00:58:39,000 --> 00:58:41,280 faucets right now the recommended faucet 1668 00:58:41,280 --> 00:58:43,160 that we're working with is faucets. 1669 00:58:43,160 --> 00:58:44,960 chain. link But be sure to use the 1670 00:58:44,960 --> 00:58:49,039 GitHub repo or web 3d. education to be 1671 00:58:49,039 --> 00:58:51,319 most up toate what this is going to do 1672 00:58:51,319 --> 00:58:53,760 is we're going to ask this faucet site 1673 00:58:53,760 --> 00:58:56,760 to send us testnet ethereum and this is 1674 00:58:56,760 --> 00:58:58,720 why this test net ethereum isn't worth 1675 00:58:58,720 --> 00:59:00,480 any real money since we can get it for 1676 00:59:00,480 --> 00:59:02,599 free anytime that we want these 1677 00:59:02,599 --> 00:59:04,640 obviously don't exist on mainnet you 1678 00:59:04,640 --> 00:59:07,880 can't get free mainnet ethereum via a 1679 00:59:07,880 --> 00:59:10,000 faucet now what we can do is we can 1680 00:59:10,000 --> 00:59:12,440 actually connect our wallet to this site 1681 00:59:12,440 --> 00:59:15,280 and we can get some free test net sapoia 1682 00:59:15,280 --> 00:59:17,400 eth this will make it so that in our 1683 00:59:17,400 --> 00:59:19,160 balance here we'll actually have some 1684 00:59:19,160 --> 00:59:22,240 seoa eth to play with so to do this what 1685 00:59:22,240 --> 00:59:23,200 we're going to do is we're going to go 1686 00:59:23,200 --> 00:59:25,400 ahead and hit connect wallet accept the 1687 00:59:25,400 --> 00:59:27,280 chain link terms of service I've already 1688 00:59:27,280 --> 00:59:29,200 read them our metamask is going to pop 1689 00:59:29,200 --> 00:59:32,280 up to connect it to this website now get 1690 00:59:32,280 --> 00:59:33,839 familiar with this interface because 1691 00:59:33,839 --> 00:59:36,680 this is how websites will interact with 1692 00:59:36,680 --> 00:59:38,240 our wallet and interact with the 1693 00:59:38,240 --> 00:59:41,240 blockchain connecting our account to the 1694 00:59:41,240 --> 00:59:43,480 site will first select the specific 1695 00:59:43,480 --> 00:59:44,799 account that we want to connect we're 1696 00:59:44,799 --> 00:59:46,359 just going to choose account one we'll 1697 00:59:46,359 --> 00:59:48,760 hit next and then we'll go ahead and hit 1698 00:59:48,760 --> 00:59:51,640 connect and now we can see our wallet 1699 00:59:51,640 --> 00:59:53,280 address in the top right and we can see 1700 00:59:53,280 --> 00:59:55,640 that we're connected on the ethereum 1701 00:59:55,640 --> 00:59:58,079 supp a test net if we go up to our 1702 00:59:58,079 --> 00:59:59,799 wallet and we actually switch to 1703 00:59:59,799 --> 01:00:02,400 ethereum mainnet you can see that the 1704 01:00:02,400 --> 01:00:04,160 website has actually changed this little 1705 01:00:04,160 --> 01:00:06,440 drop down to ethereum name net and if we 1706 01:00:06,440 --> 01:00:08,880 go in here we can actually switch to 1707 01:00:08,880 --> 01:00:11,480 ethereum sapoia and our metamask will 1708 01:00:11,480 --> 01:00:14,079 pop up with this switch Network button 1709 01:00:14,079 --> 01:00:15,839 which will help us switch the network 1710 01:00:15,839 --> 01:00:18,760 for us so now we're back on sapoia test 1711 01:00:18,760 --> 01:00:20,599 Network connecting to these websites is 1712 01:00:20,599 --> 01:00:23,119 how we give these websites a way to 1713 01:00:23,119 --> 01:00:25,599 interact and connect with our wallets we 1714 01:00:25,599 --> 01:00:27,599 can go and select this hit these three 1715 01:00:27,599 --> 01:00:29,799 dots and hit disconnect this account but 1716 01:00:29,799 --> 01:00:32,240 don't worry anytime we want to send a 1717 01:00:32,240 --> 01:00:35,160 transaction the website has to ask us if 1718 01:00:35,160 --> 01:00:37,359 we want to send a transaction so just by 1719 01:00:37,359 --> 01:00:39,319 connecting to the site it won't actually 1720 01:00:39,319 --> 01:00:41,359 send a bunch of transactions for us and 1721 01:00:41,359 --> 01:00:43,000 if we scroll down we can see our wallet 1722 01:00:43,000 --> 01:00:45,200 address is placed right here and we can 1723 01:00:45,200 --> 01:00:47,920 see we can request test link and we can 1724 01:00:47,920 --> 01:00:50,359 also request test eth for now we don't 1725 01:00:50,359 --> 01:00:51,839 need any test link so we're going to 1726 01:00:51,839 --> 01:00:53,760 leave that off but in the future we will 1727 01:00:53,760 --> 01:00:55,319 come back to the site to get some test 1728 01:00:55,319 --> 01:00:57,680 link for now we're just going to get 0.1 1729 01:00:57,680 --> 01:00:59,920 test ethereum and if all goes well we 1730 01:00:59,920 --> 01:01:01,960 should hopefully see it in our sapoia e 1731 01:01:01,960 --> 01:01:04,200 here in order for us to get this test 1732 01:01:04,200 --> 01:01:06,359 ethereum we do have to log in Via 1733 01:01:06,359 --> 01:01:08,440 Twitter if you don't have a Twitter you 1734 01:01:08,440 --> 01:01:10,599 can use any of the other facets in the 1735 01:01:10,599 --> 01:01:13,559 test Nets facets area of the GitHub such 1736 01:01:13,559 --> 01:01:16,960 as the Alchemy seoa faucet or the sapoia 1737 01:01:16,960 --> 01:01:18,920 proof of work faucet but if you are on 1738 01:01:18,920 --> 01:01:20,359 Twitter now is a great time to give me a 1739 01:01:20,359 --> 01:01:22,119 follow maybe give me a shout out and 1740 01:01:22,119 --> 01:01:25,280 maybe say hey sending my first 1741 01:01:25,280 --> 01:01:26,839 transaction 1742 01:01:26,839 --> 01:01:30,559 thanks Patrick Alpha C or not whatever 1743 01:01:30,559 --> 01:01:32,720 you want to do just some light Shilling 1744 01:01:32,720 --> 01:01:34,920 of my own Twitter account anyways we can 1745 01:01:34,920 --> 01:01:37,440 log on Via Twitter we can authorize this 1746 01:01:37,440 --> 01:01:40,160 app verify that we're human give our AI 1747 01:01:40,160 --> 01:01:42,920 overlords The Prompt here oh make sure 1748 01:01:42,920 --> 01:01:44,440 we don't select the link and let's go 1749 01:01:44,440 --> 01:01:46,720 ahead and send the request now what's 1750 01:01:46,720 --> 01:01:48,480 going to happen is it's going to give us 1751 01:01:48,480 --> 01:01:51,079 this transaction hash on sapoia and 1752 01:01:51,079 --> 01:01:53,480 after a delay we'll see it go from 1753 01:01:53,480 --> 01:01:55,520 initiating to waiting for confirmation 1754 01:01:55,520 --> 01:01:58,400 to token transferred and we'll see a 1755 01:01:58,400 --> 01:02:00,440 transaction hash and if we click the 1756 01:02:00,440 --> 01:02:02,920 transaction hash we'll see a transaction 1757 01:02:02,920 --> 01:02:05,319 that was sent to our address so this 1758 01:02:05,319 --> 01:02:06,920 will be the first transaction that we 1759 01:02:06,920 --> 01:02:09,119 get to see and there's a ton of 1760 01:02:09,119 --> 01:02:11,640 information here but the most important 1761 01:02:11,640 --> 01:02:14,799 piece is if we open up our metamask now 1762 01:02:14,799 --> 01:02:18,640 we can see we now have 0.1 spolia eth in 1763 01:02:18,640 --> 01:02:20,799 our account and if we copy the address 1764 01:02:20,799 --> 01:02:23,640 again we paste it into here we can see 1765 01:02:23,640 --> 01:02:26,359 now we have a 0.1 eth balance 1766 01:02:26,359 --> 01:02:27,839 you might have to wait several minutes 1767 01:02:27,839 --> 01:02:29,279 for the transaction to finish going 1768 01:02:29,279 --> 01:02:30,960 through and if you accidentally refresh 1769 01:02:30,960 --> 01:02:33,119 your browser again we can go ahead and 1770 01:02:33,119 --> 01:02:35,200 just select our metamask copy our 1771 01:02:35,200 --> 01:02:37,599 address and paste it into ether scan or 1772 01:02:37,599 --> 01:02:39,720 just view it right in our metamask here 1773 01:02:39,720 --> 01:02:41,039 and if you missed that piece about the 1774 01:02:41,039 --> 01:02:43,520 transaction data if we go back to ethers 1775 01:02:43,520 --> 01:02:45,279 scan with our address remember we're on 1776 01:02:45,279 --> 01:02:47,799 sepolia ether scan and we scroll down we 1777 01:02:47,799 --> 01:02:50,279 can see this most recent transaction 1778 01:02:50,279 --> 01:02:52,400 hash that just occurred and we can click 1779 01:02:52,400 --> 01:02:54,319 the link here and we can see that detail 1780 01:02:54,319 --> 01:02:57,079 about the transaction again here now 1781 01:02:57,079 --> 01:02:58,960 importantly remember though this is on 1782 01:02:58,960 --> 01:03:01,720 sapoia if we switch back to mainnet 1783 01:03:01,720 --> 01:03:04,640 ethereum you'll see we have zero eth on 1784 01:03:04,640 --> 01:03:07,400 mainnet ethereum if we switch to gly 1785 01:03:07,400 --> 01:03:10,119 test Network you'll see we have zero gly 1786 01:03:10,119 --> 01:03:13,039 eth on that network if we switch to 1787 01:03:13,039 --> 01:03:15,839 Linea gelli eth or any other network 1788 01:03:15,839 --> 01:03:18,599 other than sapoia you'll see that seoa 1789 01:03:18,599 --> 01:03:21,559 is the only one that has the 0.1 sapoia 1790 01:03:21,559 --> 01:03:23,920 eth if you want to practice working with 1791 01:03:23,920 --> 01:03:26,520 a different test net feel free to scroll 1792 01:03:26,520 --> 01:03:29,079 up back to the faucet select a different 1793 01:03:29,079 --> 01:03:31,440 test net and try to get test net in one 1794 01:03:31,440 --> 01:03:33,319 of these different test Nets just be 1795 01:03:33,319 --> 01:03:35,680 sure to take a look at what test Nets 1796 01:03:35,680 --> 01:03:37,799 your metamask comes with since some of 1797 01:03:37,799 --> 01:03:39,880 the networks this faucet is compatible 1798 01:03:39,880 --> 01:03:42,440 with don't come built into our metamask 1799 01:03:42,440 --> 01:03:44,720 but again like I said in the future I'll 1800 01:03:44,720 --> 01:03:46,880 teach you how to add these different 1801 01:03:46,880 --> 01:03:49,160 networks to our metamask in the future 1802 01:03:49,160 --> 01:03:51,599 but huge congratulations you received 1803 01:03:51,599 --> 01:03:53,960 your first transaction because again 1804 01:03:53,960 --> 01:03:57,039 this faucet is US asking them to send us 1805 01:03:57,039 --> 01:03:59,319 money it's not us sending money it's 1806 01:03:59,319 --> 01:04:01,520 them sending money to us and if this is 1807 01:04:01,520 --> 01:04:02,680 the first transaction that you've ever 1808 01:04:02,680 --> 01:04:04,079 sent you should be proud of yourself 1809 01:04:04,079 --> 01:04:05,720 already give yourself a big Pat in the 1810 01:04:05,720 --> 01:04:07,359 back and here's a picture of me holding 1811 01:04:07,359 --> 01:04:09,279 a cat with that cat's face all over my 1812 01:04:09,279 --> 01:04:12,160 pajamas as of congratulations now once 1813 01:04:12,160 --> 01:04:14,960 more let's grab our address paste it 1814 01:04:14,960 --> 01:04:18,119 into ether scan here and scroll down and 1815 01:04:18,119 --> 01:04:19,599 we're going to learn a little bit more 1816 01:04:19,599 --> 01:04:21,279 about what actually went down what 1817 01:04:21,279 --> 01:04:23,359 actually happened in this transaction 1818 01:04:23,359 --> 01:04:24,960 you can see on ether scan it gives us 1819 01:04:24,960 --> 01:04:28,079 some basic detail details it says from 1820 01:04:28,079 --> 01:04:30,839 and to from is going to be another 1821 01:04:30,839 --> 01:04:32,680 address a different address an address 1822 01:04:32,680 --> 01:04:35,319 controlled by the foset and two is 1823 01:04:35,319 --> 01:04:37,960 obviously going to be our address and if 1824 01:04:37,960 --> 01:04:39,720 we select this transaction hash we can 1825 01:04:39,720 --> 01:04:41,839 see even more details in here 1826 01:04:41,839 --> 01:04:43,279 understanding all these different fields 1827 01:04:43,279 --> 01:04:44,720 is essential to becoming a smart 1828 01:04:44,720 --> 01:04:47,279 contract developer and even just a web3 1829 01:04:47,279 --> 01:04:49,960 or ethereum or blockchain user so let's 1830 01:04:49,960 --> 01:04:51,480 learn a bit of the basics of what's 1831 01:04:51,480 --> 01:04:53,400 actually going down in this transaction 1832 01:04:53,400 --> 01:04:55,319 the first field on this page is the 1833 01:04:55,319 --> 01:04:57,319 trans action hash you can even see a 1834 01:04:57,319 --> 01:04:58,720 little question mark here which tells 1835 01:04:58,720 --> 01:05:00,799 you a little bit more about it it's a 1836 01:05:00,799 --> 01:05:03,680 unique identifier for this specific 1837 01:05:03,680 --> 01:05:06,599 transaction on this network so this 1838 01:05:06,599 --> 01:05:08,920 specific transaction hash we can even 1839 01:05:08,920 --> 01:05:11,960 copy and paste this into the address bar 1840 01:05:11,960 --> 01:05:13,839 and we'll get the exact same transaction 1841 01:05:13,839 --> 01:05:16,480 back this is the only transaction in the 1842 01:05:16,480 --> 01:05:18,200 entire blockchain that will have this 1843 01:05:18,200 --> 01:05:19,799 transaction hash it's the unique 1844 01:05:19,799 --> 01:05:22,240 identifier it identifies the transaction 1845 01:05:22,240 --> 01:05:25,359 of sending 0.1 eth from the faucet 1846 01:05:25,359 --> 01:05:28,440 address add to our address we can see 1847 01:05:28,440 --> 01:05:30,839 the status of this was successful we can 1848 01:05:30,839 --> 01:05:32,680 see the block number and the number of 1849 01:05:32,680 --> 01:05:34,480 block confirmations which we will 1850 01:05:34,480 --> 01:05:36,520 explain in the future we can see the 1851 01:05:36,520 --> 01:05:38,960 time stamp which of course is when this 1852 01:05:38,960 --> 01:05:41,400 transaction occurred we can see the from 1853 01:05:41,400 --> 01:05:44,160 and to who initialized the transaction 1854 01:05:44,160 --> 01:05:47,039 and who it was sent to if we select this 1855 01:05:47,039 --> 01:05:49,799 from and open this in a new tab we can 1856 01:05:49,799 --> 01:05:51,680 see some details about who actually sent 1857 01:05:51,680 --> 01:05:54,000 us this test eth and if we go back to 1858 01:05:54,000 --> 01:05:56,160 the transaction detail and keep going we 1859 01:05:56,160 --> 01:05:58,559 can see the value here which again if we 1860 01:05:58,559 --> 01:06:01,680 roll over it's the value of ether or 1861 01:06:01,680 --> 01:06:04,240 testnet ether and then in parentheses 1862 01:06:04,240 --> 01:06:06,760 the Fiat value or the dollar value which 1863 01:06:06,760 --> 01:06:08,520 of course since this is a test net it's 1864 01:06:08,520 --> 01:06:10,720 always going to be zero the value of 1865 01:06:10,720 --> 01:06:15,000 this transaction was 0.1 1866 01:06:15,160 --> 01:06:17,920 e now what's underneath this value thing 1867 01:06:17,920 --> 01:06:20,160 this transaction fee and this gas price 1868 01:06:20,160 --> 01:06:22,240 thing what are these if we zoom in a lot 1869 01:06:22,240 --> 01:06:24,440 more to these pieces here and we roll 1870 01:06:24,440 --> 01:06:26,720 over transaction fee we can see it says 1871 01:06:26,720 --> 01:06:28,880 it's the amount paid to the block 1872 01:06:28,880 --> 01:06:31,760 producer for processing the transaction 1873 01:06:31,760 --> 01:06:33,680 and then gas price is going to be the 1874 01:06:33,680 --> 01:06:36,520 cost per unit of gas specified for the 1875 01:06:36,520 --> 01:06:39,160 transaction in ether or guay the higher 1876 01:06:39,160 --> 01:06:41,359 the gas price the higher the chance of 1877 01:06:41,359 --> 01:06:43,520 getting included in a block I'm going to 1878 01:06:43,520 --> 01:06:45,079 explain that in a little bit but if we 1879 01:06:45,079 --> 01:06:47,079 scroll down even more let's Zoom back 1880 01:06:47,079 --> 01:06:49,680 out and we click click to show more we 1881 01:06:49,680 --> 01:06:51,960 can see even more details about this 1882 01:06:51,960 --> 01:06:53,599 transaction for now we're just going to 1883 01:06:53,599 --> 01:06:55,720 click to show less and just focus on the 1884 01:06:55,720 --> 01:06:57,960 details that are here so let's talk 1885 01:06:57,960 --> 01:07:00,160 about just the concept of transaction 1886 01:07:00,160 --> 01:07:02,160 fees and gas for a second because they 1887 01:07:02,160 --> 01:07:03,720 are important concepts for you to 1888 01:07:03,720 --> 01:07:05,440 understand remember how I said that 1889 01:07:05,440 --> 01:07:07,480 these blockchains are actually run by a 1890 01:07:07,480 --> 01:07:09,559 group of different nodes well the 1891 01:07:09,559 --> 01:07:11,079 question is what's their economic 1892 01:07:11,079 --> 01:07:12,640 incentive to keep running these 1893 01:07:12,640 --> 01:07:14,480 blockchains are they running them out of 1894 01:07:14,480 --> 01:07:16,079 the goodness of their heart well on a 1895 01:07:16,079 --> 01:07:17,960 real Network these nodes actually get 1896 01:07:17,960 --> 01:07:19,839 paid a little bit of ether for 1897 01:07:19,839 --> 01:07:21,920 processing transactions whenever you 1898 01:07:21,920 --> 01:07:24,359 send a transaction there is a node 1899 01:07:24,359 --> 01:07:26,480 sometimes referred to as a minor or a 1900 01:07:26,480 --> 01:07:27,960 validator depending on the network 1901 01:07:27,960 --> 01:07:30,119 you're on who gets paid a little bit of 1902 01:07:30,119 --> 01:07:33,079 the Native currency of the blockchain to 1903 01:07:33,079 --> 01:07:35,359 process that transaction for ethereum 1904 01:07:35,359 --> 01:07:37,559 they obviously get paid in ethereum or 1905 01:07:37,559 --> 01:07:39,359 for test ethereum they get paid in test 1906 01:07:39,359 --> 01:07:41,480 ethereum which again the test ethereum 1907 01:07:41,480 --> 01:07:43,400 is worth nothing which is why I said 1908 01:07:43,400 --> 01:07:44,559 they're running them out of the goodness 1909 01:07:44,559 --> 01:07:45,960 of their heart if you're sending a 1910 01:07:45,960 --> 01:07:47,880 transaction on the polygon Network 1911 01:07:47,880 --> 01:07:49,480 they're going to get paid in madic the 1912 01:07:49,480 --> 01:07:51,760 native token of polygon if you send a 1913 01:07:51,760 --> 01:07:54,039 transaction on an L2 like arbitrum or 1914 01:07:54,039 --> 01:07:56,319 optimism you're going to get paid an eth 1915 01:07:56,319 --> 01:07:59,000 which is the native token of those l2s 1916 01:07:59,000 --> 01:08:00,920 this payment is obviously to incentivize 1917 01:08:00,920 --> 01:08:03,079 people to continue to run nodes and they 1918 01:08:03,079 --> 01:08:06,319 get paid more the more gas you use so 1919 01:08:06,319 --> 01:08:08,720 what is gas gas is a unit of 1920 01:08:08,720 --> 01:08:10,640 computational measurement the more 1921 01:08:10,640 --> 01:08:12,839 complex your transaction is the more gas 1922 01:08:12,839 --> 01:08:14,880 you have to pay for example if we hit 1923 01:08:14,880 --> 01:08:17,400 more details just really quickly and I 1924 01:08:17,400 --> 01:08:19,279 zoom in a little bit more we can see 1925 01:08:19,279 --> 01:08:22,239 this section here gas limit and usage by 1926 01:08:22,239 --> 01:08:24,239 transaction this means that when we sent 1927 01:08:24,239 --> 01:08:26,839 this transaction we limited it to a 1928 01:08:26,839 --> 01:08:30,120 maximum of 60,000 gas but in total we 1929 01:08:30,120 --> 01:08:34,040 only used 21,000 gas this 21,000 gas 1930 01:08:34,040 --> 01:08:36,440 represents how complex this transaction 1931 01:08:36,440 --> 01:08:39,040 was it was 21,000 gas units worth of 1932 01:08:39,040 --> 01:08:41,120 complexity now for simple things like 1933 01:08:41,120 --> 01:08:43,400 sending ether the units of gas are 1934 01:08:43,400 --> 01:08:46,159 usually pretty small for example 21,000 1935 01:08:46,159 --> 01:08:48,279 units of gas is actually a really small 1936 01:08:48,279 --> 01:08:50,640 amount of gas being sent but maybe for 1937 01:08:50,640 --> 01:08:52,359 more complex transactions like minting 1938 01:08:52,359 --> 01:08:55,520 an nft depositing some funds into a D5 1939 01:08:55,520 --> 01:08:57,960 protocol or deploying a smart contract 1940 01:08:57,960 --> 01:08:59,679 those are typically going to be more 1941 01:08:59,679 --> 01:09:01,440 expensive transactions because they're 1942 01:09:01,440 --> 01:09:03,920 more complicated they have to do more 1943 01:09:03,920 --> 01:09:06,159 stuff in the future we'll introduce you 1944 01:09:06,159 --> 01:09:09,440 to this concept of evm codes or op codes 1945 01:09:09,440 --> 01:09:11,960 and if you break down a transaction to 1946 01:09:11,960 --> 01:09:13,880 the lowest level this assembly op code 1947 01:09:13,880 --> 01:09:16,319 stuff you can actually see exactly how 1948 01:09:16,319 --> 01:09:19,640 much each op code costs in terms of gas 1949 01:09:19,640 --> 01:09:21,719 don't worry about this at all right now 1950 01:09:21,719 --> 01:09:23,159 just know that these transactions are 1951 01:09:23,159 --> 01:09:25,640 broken down into many many many many 1952 01:09:25,640 --> 01:09:27,920 very very small instructions and each 1953 01:09:27,920 --> 01:09:30,440 instruction has a specific amount of gas 1954 01:09:30,440 --> 01:09:32,520 the more instructions usually means more 1955 01:09:32,520 --> 01:09:34,719 gas like I said we'll explain this much 1956 01:09:34,719 --> 01:09:36,440 later in the course don't worry about 1957 01:09:36,440 --> 01:09:37,759 this too much here but just know that we 1958 01:09:37,759 --> 01:09:40,239 use 21,000 gas now if you take this gas 1959 01:09:40,239 --> 01:09:43,640 used and multiply it by the gas price in 1960 01:09:43,640 --> 01:09:47,319 eth instead of guay so we'll take 21,000 1961 01:09:47,319 --> 01:09:51,159 and multiply it by this gas price in eth 1962 01:09:51,159 --> 01:09:54,600 not in guay and hit enter we'll see the 1963 01:09:54,600 --> 01:09:58,040 total trans transaction fee of the 1964 01:09:58,040 --> 01:09:59,719 transaction and you can see that this 1965 01:09:59,719 --> 01:10:02,280 number does indeed match the transaction 1966 01:10:02,280 --> 01:10:04,840 fee for you to understand how much eth 1967 01:10:04,840 --> 01:10:07,080 you're going to pay for your transaction 1968 01:10:07,080 --> 01:10:11,040 you multiply the gas price times the gas 1969 01:10:11,040 --> 01:10:15,040 used transaction fee equals gas price 1970 01:10:15,040 --> 01:10:17,920 times gas used so this means that 1971 01:10:17,920 --> 01:10:23,560 whoever sent us this 0.1 e also paid 1972 01:10:23,719 --> 01:10:26,080 0.525 blah blah blah 1973 01:10:26,080 --> 01:10:30,080 eth to a blockchain node to a validator 1974 01:10:30,080 --> 01:10:32,920 on the sapoia ethereum test net now each 1975 01:10:32,920 --> 01:10:35,640 blockchain has their own unique way of 1976 01:10:35,640 --> 01:10:37,520 calculating how much transaction fee 1977 01:10:37,520 --> 01:10:39,679 someone's actually going to pay for most 1978 01:10:39,679 --> 01:10:42,800 evm chains this is the simple algorithm 1979 01:10:42,800 --> 01:10:45,920 it's going to be gas used times gas 1980 01:10:45,920 --> 01:10:47,239 price after we understand how the 1981 01:10:47,239 --> 01:10:49,480 blockchain works more in depth I'll 1982 01:10:49,480 --> 01:10:51,000 explain to you what the rest of these 1983 01:10:51,000 --> 01:10:53,320 values stand for for now just know that 1984 01:10:53,320 --> 01:10:55,440 anytime you make a transaction on chain 1985 01:10:55,440 --> 01:10:57,280 you have to pay the validators or the 1986 01:10:57,280 --> 01:10:59,920 blockchain nodes a little bit of gas or 1987 01:10:59,920 --> 01:11:01,760 a little bit of the Native token of the 1988 01:11:01,760 --> 01:11:04,320 blockchain which in our case is eth so 1989 01:11:04,320 --> 01:11:06,520 you have to pay a little bit of eth to 1990 01:11:06,520 --> 01:11:08,719 the blockchain nodes providing or 1991 01:11:08,719 --> 01:11:11,280 sending the transaction sometimes I'll 1992 01:11:11,280 --> 01:11:14,080 refer to this just as transaction gas 1993 01:11:14,080 --> 01:11:15,640 let's look at an example of this 1994 01:11:15,640 --> 01:11:18,560 ourselves if we pull up our metamask we 1995 01:11:18,560 --> 01:11:20,920 go ahead and hit expand view as we know 1996 01:11:20,920 --> 01:11:22,719 we have two different accounts in here 1997 01:11:22,719 --> 01:11:25,360 we have account one and account two 1998 01:11:25,360 --> 01:11:29,400 count 1 has 0.1 spolia eth Count 2 has 1999 01:11:29,400 --> 01:11:32,400 zolia eth if I send 2000 01:11:32,400 --> 01:11:35,640 0.05 from account one to account two how 2001 01:11:35,640 --> 01:11:37,120 much do you think I'll have left in 2002 01:11:37,120 --> 01:11:39,280 account one let's go ahead and do this 2003 01:11:39,280 --> 01:11:40,520 and this is going to be the first 2004 01:11:40,520 --> 01:11:42,800 transaction that you send on the 2005 01:11:42,800 --> 01:11:44,600 blockchain which is incredibly exciting 2006 01:11:44,600 --> 01:11:46,360 as well let's go ahead and hit this send 2007 01:11:46,360 --> 01:11:48,679 button in our metamask we'll hit send 2008 01:11:48,679 --> 01:11:50,880 we'll hit transfer between my accounts 2009 01:11:50,880 --> 01:11:53,679 we'll select account two and we'll say 2010 01:11:53,679 --> 01:11:57,760 0.05 suppo eth so we started with 0.1 2011 01:11:57,760 --> 01:12:01,320 aoia eth and we're going to send 0.05 to 2012 01:12:01,320 --> 01:12:04,080 account two we'll scroll down we'll hit 2013 01:12:04,080 --> 01:12:06,280 next we can see some information here 2014 01:12:06,280 --> 01:12:07,560 about what's actually going on we can 2015 01:12:07,560 --> 01:12:10,000 see some gas information which metamask 2016 01:12:10,000 --> 01:12:11,920 automatically prompted for us and it 2017 01:12:11,920 --> 01:12:13,639 even gives us the total amount that 2018 01:12:13,639 --> 01:12:16,040 we're going to be paying in eth it's 2019 01:12:16,040 --> 01:12:19,159 adding this 0.05 eth to the estimated 2020 01:12:19,159 --> 01:12:20,600 amount of gas that we actually have to 2021 01:12:20,600 --> 01:12:22,560 spend so that at the bottom it says the 2022 01:12:22,560 --> 01:12:24,560 amount plus the gas fee is the two of 2023 01:12:24,560 --> 01:12:25,679 those combined 2024 01:12:25,679 --> 01:12:27,400 the value that we're sending plus the 2025 01:12:27,400 --> 01:12:29,679 gas fee and additionally in metamask if 2026 01:12:29,679 --> 01:12:32,000 you select this here you can get some 2027 01:12:32,000 --> 01:12:34,120 more information about editing our gas 2028 01:12:34,120 --> 01:12:36,400 fees the amount of gas that you choose 2029 01:12:36,400 --> 01:12:38,600 to spend can be different depending on 2030 01:12:38,600 --> 01:12:40,400 how many people are making transactions 2031 01:12:40,400 --> 01:12:42,239 with the blockchain the more people are 2032 01:12:42,239 --> 01:12:44,360 sending transactions at the same time 2033 01:12:44,360 --> 01:12:46,560 the more expensive gas costs are going 2034 01:12:46,560 --> 01:12:48,719 to be so if a lot of other people are 2035 01:12:48,719 --> 01:12:50,920 also sending transactions right now the 2036 01:12:50,920 --> 01:12:53,440 gas price is going to be higher if a lot 2037 01:12:53,440 --> 01:12:55,199 of people are sending transactions that 2038 01:12:55,199 --> 01:12:56,239 means there's not going to be enough 2039 01:12:56,239 --> 01:12:57,960 space for everyone's transaction to get 2040 01:12:57,960 --> 01:13:00,040 through so in order to throttle that 2041 01:13:00,040 --> 01:13:02,320 they increase the gas price that's a bit 2042 01:13:02,320 --> 01:13:03,920 of an oversimplification of what's 2043 01:13:03,920 --> 01:13:06,159 happening but if you take that 2044 01:13:06,159 --> 01:13:08,440 understanding that'll pretty much work 2045 01:13:08,440 --> 01:13:10,880 if you want to specify exactly how much 2046 01:13:10,880 --> 01:13:12,760 gas you want to spend you can clict the 2047 01:13:12,760 --> 01:13:15,199 advanced tab if you select zero gas 2048 01:13:15,199 --> 01:13:16,760 there's a high likelihood that your 2049 01:13:16,760 --> 01:13:18,760 transaction will never go through so 2050 01:13:18,760 --> 01:13:19,960 we're just going to go with the default 2051 01:13:19,960 --> 01:13:22,800 which is usually a good idea so let's go 2052 01:13:22,800 --> 01:13:26,239 ahead and confirm we now see a send 2053 01:13:26,239 --> 01:13:28,840 transaction in our Q in the activity tab 2054 01:13:28,840 --> 01:13:30,719 of our metamask which shows us that we 2055 01:13:30,719 --> 01:13:33,080 have a transaction currently sending and 2056 01:13:33,080 --> 01:13:34,960 if we click on it and click view on 2057 01:13:34,960 --> 01:13:37,679 block Explorer it'll actually open us up 2058 01:13:37,679 --> 01:13:40,679 on ether scan and we'll see well mine 2059 01:13:40,679 --> 01:13:42,159 was a little bit quick but normally 2060 01:13:42,159 --> 01:13:44,360 we'll see a little indexing Tab and we 2061 01:13:44,360 --> 01:13:45,800 won't see this having gone through we'll 2062 01:13:45,800 --> 01:13:48,239 see it as like indexing or sending or 2063 01:13:48,239 --> 01:13:50,199 something like that but after a little 2064 01:13:50,199 --> 01:13:52,000 bit it'll actually finish sending you 2065 01:13:52,000 --> 01:13:53,880 might have to wait a minute or so for 2066 01:13:53,880 --> 01:13:55,639 this to actually finish going through 2067 01:13:55,639 --> 01:13:57,560 but it looks like mine was really quick 2068 01:13:57,560 --> 01:13:59,600 and same as our last transaction this 2069 01:13:59,600 --> 01:14:01,360 has a lot of the same information and if 2070 01:14:01,360 --> 01:14:03,800 we scroll down we'll see that of course 2071 01:14:03,800 --> 01:14:06,040 we send a different amount of eth 2072 01:14:06,040 --> 01:14:08,520 0.05 and we have a different transaction 2073 01:14:08,520 --> 01:14:10,880 fee now if we pull up our metamask what 2074 01:14:10,880 --> 01:14:12,199 do you think that we're going to see 2075 01:14:12,199 --> 01:14:13,600 we're going to go ahead and click expand 2076 01:14:13,600 --> 01:14:16,400 view again and we see account one says 2077 01:14:16,400 --> 01:14:20,719 0.05 and account two also says 0.05 hm 2078 01:14:20,719 --> 01:14:22,080 that's kind of odd I thought we spent 2079 01:14:22,080 --> 01:14:24,120 some gas well if we click on the big 2080 01:14:24,120 --> 01:14:26,000 accounts button we see exactly how much 2081 01:14:26,000 --> 01:14:27,960 eth is in each account you can see we 2082 01:14:27,960 --> 01:14:29,040 have 2083 01:14:29,040 --> 01:14:32,400 0.499 in account one and 0.05 in account 2084 01:14:32,400 --> 01:14:35,600 2 and we can see in our activity history 2085 01:14:35,600 --> 01:14:39,719 our account one recently sent 0.05 eth 2086 01:14:39,719 --> 01:14:42,880 and account two recently received 0.05 2087 01:14:42,880 --> 01:14:45,239 saoa eth now here's the best part of all 2088 01:14:45,239 --> 01:14:46,760 this even if you don't want to become a 2089 01:14:46,760 --> 01:14:49,040 developer you just learned the basics of 2090 01:14:49,040 --> 01:14:51,600 sending a transaction and interacting 2091 01:14:51,600 --> 01:14:53,840 with sites using your metamask 2092 01:14:53,840 --> 01:14:55,120 congratulations now here's here 2093 01:14:55,120 --> 01:14:56,480 something that's incredibly exciting 2094 01:14:56,480 --> 01:14:58,440 with just this little bit of information 2095 01:14:58,440 --> 01:15:00,080 you now know how to interact with 2096 01:15:00,080 --> 01:15:01,320 blockchains and interact with the 2097 01:15:01,320 --> 01:15:03,440 ethereum protocol so if you don't want 2098 01:15:03,440 --> 01:15:06,360 to learn how to code anything you can go 2099 01:15:06,360 --> 01:15:07,679 and you can start interacting with 2100 01:15:07,679 --> 01:15:09,360 ethereum and interacting with protocols 2101 01:15:09,360 --> 01:15:11,880 with just this much information however 2102 01:15:11,880 --> 01:15:12,920 I know most of you guys are here to 2103 01:15:12,920 --> 01:15:14,920 learn how to code so let's look under 2104 01:15:14,920 --> 01:15:16,760 the hood of ethereum and what is 2105 01:15:16,760 --> 01:15:17,719 actually going on with these 2106 01:15:17,719 --> 01:15:19,800 transactions and with these gas and with 2107 01:15:19,800 --> 01:15:21,679 these blockchains and what's really 2108 01:15:21,679 --> 01:15:23,760 going on let's learn all the 2109 01:15:23,760 --> 01:15:25,400 fundamentals of a blockchain now if you 2110 01:15:25,400 --> 01:15:26,560 want to just go ahead and jump into the 2111 01:15:26,560 --> 01:15:28,880 coding go ahead and grab a timestamp 2112 01:15:28,880 --> 01:15:31,600 from the description however learning 2113 01:15:31,600 --> 01:15:33,080 exactly how the blockchain works is 2114 01:15:33,080 --> 01:15:35,080 going to make you an incredibly powerful 2115 01:15:35,080 --> 01:15:38,560 developer so let's take a look at that 2116 01:15:38,560 --> 01:15:40,480 first so we're going to be going through 2117 01:15:40,480 --> 01:15:42,440 this blockchain demo on this site right 2118 01:15:42,440 --> 01:15:44,440 here now the creator of the site has a 2119 01:15:44,440 --> 01:15:46,159 fantastic video and a fantastic walkthr 2120 01:15:46,159 --> 01:15:49,280 blockchain 101 it is right on their site 2121 01:15:49,280 --> 01:15:50,480 so if you're looking for another 2122 01:15:50,480 --> 01:15:52,159 explanation definitely check out his 2123 01:15:52,159 --> 01:15:54,159 video it is absolutely fantastic but the 2124 01:15:54,159 --> 01:15:55,800 first thing that we really need to do in 2125 01:15:55,800 --> 01:15:57,360 order to understand blockchain in order 2126 01:15:57,360 --> 01:15:59,120 to really anything and everything that's 2127 01:15:59,120 --> 01:16:00,679 going on here we first really need to 2128 01:16:00,679 --> 01:16:03,840 understand this shot 256 hash or hashing 2129 01:16:03,840 --> 01:16:05,679 just kind of in general let's first 2130 01:16:05,679 --> 01:16:07,960 understand what a hash is a hash is a 2131 01:16:07,960 --> 01:16:11,000 unique fixed length string meant to 2132 01:16:11,000 --> 01:16:13,199 identify any piece of data they are 2133 01:16:13,199 --> 01:16:15,199 created by putting some piece of data 2134 01:16:15,199 --> 01:16:19,239 into a hash function in this example the 2135 01:16:19,239 --> 01:16:21,960 hashing algorithm used is Shaw 256 now 2136 01:16:21,960 --> 01:16:24,120 ethereum actually uses uh this uh this 2137 01:16:24,120 --> 01:16:26,000 right here for its hashing algorithm 2138 01:16:26,000 --> 01:16:29,239 which isn't quite um Shaw 256 but is in 2139 01:16:29,239 --> 01:16:31,639 kind of this sha family but it's it's 2140 01:16:31,639 --> 01:16:33,480 really just another way to Hash things 2141 01:16:33,480 --> 01:16:35,639 and uh the specific hash algorithm 2142 01:16:35,639 --> 01:16:38,600 doesn't matter uh so much so uh this 2143 01:16:38,600 --> 01:16:40,520 example uses Shaw 256 but you can 2144 01:16:40,520 --> 01:16:42,120 imagine it's the same as the ethereum 2145 01:16:42,120 --> 01:16:43,320 hash they're just going to you know 2146 01:16:43,320 --> 01:16:45,760 result in a different hash so what's 2147 01:16:45,760 --> 01:16:47,880 going to happen in this application here 2148 01:16:47,880 --> 01:16:51,639 is whatever data or whatever information 2149 01:16:51,639 --> 01:16:54,199 we put into this data section here as 2150 01:16:54,199 --> 01:16:55,520 you can see below 2151 01:16:55,520 --> 01:16:59,000 this hash changes so what's happening is 2152 01:16:59,000 --> 01:17:01,880 this data is running through this Shaw 2153 01:17:01,880 --> 01:17:05,320 256 hash algorithm and it's outputting 2154 01:17:05,320 --> 01:17:08,880 this unique hash so this hash is a 2155 01:17:08,880 --> 01:17:11,400 unique fixed length string that's going 2156 01:17:11,400 --> 01:17:13,719 to identify like a blank data piece here 2157 01:17:13,719 --> 01:17:15,120 right so if I put in you know my name 2158 01:17:15,120 --> 01:17:17,639 like you know Patrick Collins this is 2159 01:17:17,639 --> 01:17:20,000 the hash that's going to represent 2160 01:17:20,000 --> 01:17:22,480 Patrick Hollins right and you can see 2161 01:17:22,480 --> 01:17:25,040 even when I put you know tons and tons 2162 01:17:25,040 --> 01:17:28,920 of data in here the length of the string 2163 01:17:28,920 --> 01:17:32,480 doesn't change right so it's always 2164 01:17:32,480 --> 01:17:34,760 going to be the same amount we can put 2165 01:17:34,760 --> 01:17:36,440 almost any amount of data in here there 2166 01:17:36,440 --> 01:17:38,960 is an upper limit on the max size of the 2167 01:17:38,960 --> 01:17:42,040 data but for all intents purposes we can 2168 01:17:42,040 --> 01:17:43,920 pretty much put any length in here and 2169 01:17:43,920 --> 01:17:45,320 you'll see too that you know every time 2170 01:17:45,320 --> 01:17:48,080 I type in Patrick Collins this hash is 2171 01:17:48,080 --> 01:17:50,239 always going to be this 7 e5b right I'm 2172 01:17:50,239 --> 01:17:51,639 going to delete it I'm going to do 2173 01:17:51,639 --> 01:17:54,840 Patrick Collins again you 7 e5b it's 2174 01:17:54,840 --> 01:17:56,639 it's always this this unique hash is 2175 01:17:56,639 --> 01:17:58,639 always going to be unique right it's 2176 01:17:58,639 --> 01:18:00,159 always going to be this fixed length 2177 01:18:00,159 --> 01:18:02,920 string here so now we can take this idea 2178 01:18:02,920 --> 01:18:04,040 right of putting this data in here and 2179 01:18:04,040 --> 01:18:07,080 we can move on to uh this concept of a 2180 01:18:07,080 --> 01:18:09,360 block so with this block concept we're 2181 01:18:09,360 --> 01:18:10,880 going to take the exact same thing with 2182 01:18:10,880 --> 01:18:12,880 this hash this this data section right 2183 01:18:12,880 --> 01:18:14,560 but instead of having everything just 2184 01:18:14,560 --> 01:18:17,080 being in this this singular data area 2185 01:18:17,080 --> 01:18:18,360 right here we're going to split this 2186 01:18:18,360 --> 01:18:21,760 data up into block nuns and data so all 2187 01:18:21,760 --> 01:18:22,639 so what we're going to do is we're 2188 01:18:22,639 --> 01:18:25,040 actually going to Hash all three of 2189 01:18:25,040 --> 01:18:26,600 these to get to get this hash right 2190 01:18:26,600 --> 01:18:27,560 we're going to put all three of these 2191 01:18:27,560 --> 01:18:28,639 we're going to say all three of these 2192 01:18:28,639 --> 01:18:31,120 are combined uh together we're going to 2193 01:18:31,120 --> 01:18:32,639 put every all three of them into this 2194 01:18:32,639 --> 01:18:35,280 hashing algorithm uh to figure it out so 2195 01:18:35,280 --> 01:18:37,400 if I type a bunch of stuff here we can 2196 01:18:37,400 --> 01:18:40,760 see that block one with nuns you know 2197 01:18:40,760 --> 01:18:42,600 this nuns and this data we're going to 2198 01:18:42,600 --> 01:18:44,520 get this hash and as you can see 2199 01:18:44,520 --> 01:18:47,679 actually the screen turns red this block 2200 01:18:47,679 --> 01:18:50,679 turned red now what happens when I hit 2201 01:18:50,679 --> 01:18:51,719 this mind 2202 01:18:51,719 --> 01:18:53,800 button when I hit this mind button it's 2203 01:18:53,800 --> 01:18:55,159 actually G to take some time it's going 2204 01:18:55,159 --> 01:18:57,280 to think for a little bit and we can see 2205 01:18:57,280 --> 01:18:59,960 that the nuns here actually changed 2206 01:18:59,960 --> 01:19:01,440 right the nuns is different from what it 2207 01:19:01,440 --> 01:19:05,440 was before and this hash now starts with 2208 01:19:05,440 --> 01:19:08,239 four zeros okay and then it the back 2209 01:19:08,239 --> 01:19:10,120 turned green when we're talking about 2210 01:19:10,120 --> 01:19:11,560 mining we're talking about minors 2211 01:19:11,560 --> 01:19:13,639 solving some type of very difficult 2212 01:19:13,639 --> 01:19:15,920 problem that takes a lot of time to do 2213 01:19:15,920 --> 01:19:18,760 now in this example here the problem 2214 01:19:18,760 --> 01:19:20,639 that the miners had to solve was they 2215 01:19:20,639 --> 01:19:24,159 had to find a nuns or or a value in this 2216 01:19:24,159 --> 01:19:26,199 nuns section section that when hashed 2217 01:19:26,199 --> 01:19:29,040 with at block number one with this data 2218 01:19:29,040 --> 01:19:31,800 it would start with four zeros so the 2219 01:19:31,800 --> 01:19:33,560 problem here the minor had to solve was 2220 01:19:33,560 --> 01:19:35,159 to start with four zeros and the only 2221 01:19:35,159 --> 01:19:37,440 way for them to really do that is kind 2222 01:19:37,440 --> 01:19:39,120 of this Brute Force you know trying 2223 01:19:39,120 --> 01:19:40,600 stuff so they tried one okay one didn't 2224 01:19:40,600 --> 01:19:43,120 work okay two nope two didn't work three 2225 01:19:43,120 --> 01:19:45,760 no four five six okay five well that 2226 01:19:45,760 --> 01:19:46,880 started with one zero but that's not 2227 01:19:46,880 --> 01:19:48,920 four and they have to keep trying all 2228 01:19:48,920 --> 01:19:51,520 these numbers until they uh get to this 2229 01:19:51,520 --> 01:19:56,280 one where you know let's hit mine again 2230 01:19:56,280 --> 01:19:58,199 where it has four zeros at the top at 2231 01:19:58,199 --> 01:20:01,520 the start now this specific problem 2232 01:20:01,520 --> 01:20:03,360 changes blockchain to blockchain right 2233 01:20:03,360 --> 01:20:04,920 ethereum has a different problem for 2234 01:20:04,920 --> 01:20:07,480 miners to solve um Bitcoin has different 2235 01:20:07,480 --> 01:20:09,000 problems for minor solv but this concept 2236 01:20:09,000 --> 01:20:10,440 is going to be the same and since 2237 01:20:10,440 --> 01:20:13,159 etherium is proof of stake now nodes 2238 01:20:13,159 --> 01:20:14,880 actually take turns solving these 2239 01:20:14,880 --> 01:20:16,600 problems again we're not going to go too 2240 01:20:16,600 --> 01:20:18,480 deep into that right now though so they 2241 01:20:18,480 --> 01:20:21,440 have to take um one block is going to be 2242 01:20:21,440 --> 01:20:23,920 this this uh this concept is going to be 2243 01:20:23,920 --> 01:20:26,159 all this data it's going to be the block 2244 01:20:26,159 --> 01:20:28,520 number and it's going to be this nuns 2245 01:20:28,520 --> 01:20:31,239 right and so this nuns is the solution 2246 01:20:31,239 --> 01:20:33,080 um is is going to be the the number that 2247 01:20:33,080 --> 01:20:34,840 they use to get like the solution to the 2248 01:20:34,840 --> 01:20:37,880 problem right so if I go to one here you 2249 01:20:37,880 --> 01:20:39,760 know and I do this 2250 01:20:39,760 --> 01:20:43,040 again we going to hit mine and the nuns 2251 01:20:43,040 --> 01:20:47,320 has changed right it went from one to 2252 01:20:50,440 --> 01:20:53,120 33,100 and so that's what's happening 2253 01:20:53,120 --> 01:20:55,440 when uh blockchain minor ERS are mining 2254 01:20:55,440 --> 01:20:57,320 they're going through this process this 2255 01:20:57,320 --> 01:20:59,639 very computationally intensive process 2256 01:20:59,639 --> 01:21:02,120 of trying to find a nun that fulfills 2257 01:21:02,120 --> 01:21:04,080 whatever the problem is so that's really 2258 01:21:04,080 --> 01:21:05,880 it actually so that's a block and and 2259 01:21:05,880 --> 01:21:06,920 that's really what's happening when 2260 01:21:06,920 --> 01:21:08,800 miners are mining they're just looking 2261 01:21:08,800 --> 01:21:10,600 there's trial and error Brute Force 2262 01:21:10,600 --> 01:21:13,400 trying to find this nut so so now that 2263 01:21:13,400 --> 01:21:14,920 we know what a block is let's go to the 2264 01:21:14,920 --> 01:21:16,719 next step and figure out okay well 2265 01:21:16,719 --> 01:21:19,639 what's a blockchain so here we have an 2266 01:21:19,639 --> 01:21:22,040 example of what a blockchain is going to 2267 01:21:22,040 --> 01:21:24,600 look like right we have a combination 2268 01:21:24,600 --> 01:21:26,040 you know we have back here in the block 2269 01:21:26,040 --> 01:21:27,800 section we have one what one block looks 2270 01:21:27,800 --> 01:21:30,719 like now here we have multiple different 2271 01:21:30,719 --> 01:21:32,080 blocks right each one of these 2272 01:21:32,080 --> 01:21:34,040 represents a different block but we have 2273 01:21:34,040 --> 01:21:36,120 an additional column here or we have 2274 01:21:36,120 --> 01:21:38,480 additional uh variable here so like 2275 01:21:38,480 --> 01:21:40,760 before you know we have block nuns and 2276 01:21:40,760 --> 01:21:43,360 data right we have block nuns data but 2277 01:21:43,360 --> 01:21:45,880 we also have this thing called previous 2278 01:21:45,880 --> 01:21:47,360 right and so this is actually going to 2279 01:21:47,360 --> 01:21:50,600 be pointing to the previous hash of the 2280 01:21:50,600 --> 01:21:52,719 last block so for example if we go to 2281 01:21:52,719 --> 01:21:55,040 the the last block in this blockchain it 2282 01:21:55,040 --> 01:21:57,400 says previous is 00 ae8 and if we look 2283 01:21:57,400 --> 01:21:59,520 at the hash of block number four it's 2284 01:21:59,520 --> 01:22:02,639 000000 ae8 and then we look at its 2285 01:22:02,639 --> 01:22:06,400 previous it's 4 Z's B9 we have 4 zos B9 2286 01:22:06,400 --> 01:22:08,880 and so on all the way back to our first 2287 01:22:08,880 --> 01:22:11,280 block which has previous of just all 2288 01:22:11,280 --> 01:22:13,639 zeros right and so the block with the 2289 01:22:13,639 --> 01:22:16,159 previous of all zeros is going to be 2290 01:22:16,159 --> 01:22:17,920 known as The Genesis block so you've 2291 01:22:17,920 --> 01:22:19,239 probably heard that before the Genesis 2292 01:22:19,239 --> 01:22:20,760 Block it's the first block in the 2293 01:22:20,760 --> 01:22:23,000 blockchain where the previous hash 2294 01:22:23,000 --> 01:22:24,960 points to a hash that uh doesn't 2295 01:22:24,960 --> 01:22:26,880 actually exist now as you can imagine 2296 01:22:26,880 --> 01:22:28,400 kind of the same as how this block 2297 01:22:28,400 --> 01:22:30,719 worked how the block nuts and data all 2298 01:22:30,719 --> 01:22:32,840 go through the hashing algorithm in the 2299 01:22:32,840 --> 01:22:35,679 blockchain the block nuns data and 2300 01:22:35,679 --> 01:22:37,400 previous hash all go through this 2301 01:22:37,400 --> 01:22:39,520 hashing algorithm to figure out you know 2302 01:22:39,520 --> 01:22:42,040 what the hash is okay so if we go to 2303 01:22:42,040 --> 01:22:43,639 over here you know for example if I type 2304 01:22:43,639 --> 01:22:46,000 in you know Patrick obviously this is 2305 01:22:46,000 --> 01:22:47,760 now no longer valid right because this 2306 01:22:47,760 --> 01:22:50,199 nuns uh combined with the block the data 2307 01:22:50,199 --> 01:22:52,000 and the previous hash aren't going to 2308 01:22:52,000 --> 01:22:54,679 solve you know our problem of having 4 2309 01:22:54,679 --> 01:22:56,360 at the at the start right so I'm going 2310 01:22:56,360 --> 01:22:58,120 to go and fix that and and that's that's 2311 01:22:58,120 --> 01:22:59,639 kind of an easy way to to see it being 2312 01:22:59,639 --> 01:23:02,920 broken but but let's take a look if I 2313 01:23:02,920 --> 01:23:05,440 break this block right here what happens 2314 01:23:05,440 --> 01:23:07,400 if I if I break the data in here if I do 2315 01:23:07,400 --> 01:23:10,199 like Patrick in here you can see that 2316 01:23:10,199 --> 01:23:13,159 both of these are now read both of these 2317 01:23:13,159 --> 01:23:16,199 are now invalid right because the block 2318 01:23:16,199 --> 01:23:18,120 hash with the nuns hash with the new 2319 01:23:18,120 --> 01:23:20,239 data which is my name Patrick hashed 2320 01:23:20,239 --> 01:23:23,360 withe hashed with the previous block is 2321 01:23:23,360 --> 01:23:25,040 now a brand new 2322 01:23:25,040 --> 01:23:28,159 right and this block is still pointing 2323 01:23:28,159 --> 01:23:30,159 to this previous hash right here right 2324 01:23:30,159 --> 01:23:32,320 is pointing to this previous block and 2325 01:23:32,320 --> 01:23:35,159 now it is wrong and it is messed up and 2326 01:23:35,159 --> 01:23:37,760 now um and now its Nuns with this 2327 01:23:37,760 --> 01:23:40,760 previous hash is also wrong right and 2328 01:23:40,760 --> 01:23:42,560 this is where when we talk about uh 2329 01:23:42,560 --> 01:23:44,639 blockchains being immutable this is 2330 01:23:44,639 --> 01:23:47,199 exactly how it's immutable right because 2331 01:23:47,199 --> 01:23:49,280 I go back and I change anything you know 2332 01:23:49,280 --> 01:23:52,760 if I just typed a right here the entire 2333 01:23:52,760 --> 01:23:54,960 blockchain is now invalidated because 2334 01:23:54,960 --> 01:23:58,000 none of these are going to have uh Nunes 2335 01:23:58,000 --> 01:24:00,560 that solve this equation anymore so this 2336 01:24:00,560 --> 01:24:02,120 is why blockchains are immutable is 2337 01:24:02,120 --> 01:24:05,080 because anytime you change one thing you 2338 01:24:05,080 --> 01:24:07,920 ruin the rest of the blockchain okay so 2339 01:24:07,920 --> 01:24:09,480 however though you know if if an a was 2340 01:24:09,480 --> 01:24:11,600 here originally we can go ahead and mine 2341 01:24:11,600 --> 01:24:13,440 these we can mine all these but as you 2342 01:24:13,440 --> 01:24:15,239 can see you know this is going to start 2343 01:24:15,239 --> 01:24:17,199 getting very uh computationally 2344 01:24:17,199 --> 01:24:20,120 expensive because I have to go redo uh 2345 01:24:20,120 --> 01:24:22,239 basically the entire blockchain uh and 2346 01:24:22,239 --> 01:24:23,800 the farther and farther down the line 2347 01:24:23,800 --> 01:24:25,440 you get the harder and harder it becomes 2348 01:24:25,440 --> 01:24:27,760 to you know rehash and and redo all 2349 01:24:27,760 --> 01:24:29,159 these different blockchains here now 2350 01:24:29,159 --> 01:24:30,280 this makes a lot of sense right so we 2351 01:24:30,280 --> 01:24:31,400 have this blockchain it's really hard to 2352 01:24:31,400 --> 01:24:32,560 change something in the past but if we 2353 01:24:32,560 --> 01:24:35,040 do we can just go ahead and remine it 2354 01:24:35,040 --> 01:24:36,520 now if I'm the one who controls the 2355 01:24:36,520 --> 01:24:37,920 blockchain right if I'm the one who 2356 01:24:37,920 --> 01:24:39,199 controls this you know and I want to 2357 01:24:39,199 --> 01:24:40,480 change something in the past well okay 2358 01:24:40,480 --> 01:24:42,360 great all I got to do is change this 2359 01:24:42,360 --> 01:24:44,520 data here and then you know mine each 2360 01:24:44,520 --> 01:24:45,800 one of these you know obviously it's 2361 01:24:45,800 --> 01:24:47,320 going to be very computationally 2362 01:24:47,320 --> 01:24:48,520 expensive but it's something that I can 2363 01:24:48,520 --> 01:24:52,119 do right if I'm the one who owns the 2364 01:24:52,119 --> 01:24:54,560 blockchain now here's where the 2365 01:24:54,560 --> 01:24:56,600 decentralized nature or the distributed 2366 01:24:56,600 --> 01:24:59,639 nature really uh makes it incredibly 2367 01:24:59,639 --> 01:25:01,280 powerful so we're going to go to the 2368 01:25:01,280 --> 01:25:03,600 distributed tab here which I also refer 2369 01:25:03,600 --> 01:25:05,719 to as the decentralized tab here and 2370 01:25:05,719 --> 01:25:07,520 it's going to show us what a blockchain 2371 01:25:07,520 --> 01:25:10,360 looks like uh in a decentralized manner 2372 01:25:10,360 --> 01:25:12,400 so we have this exact same uh initial 2373 01:25:12,400 --> 01:25:14,000 setup here we have distributed 2374 01:25:14,000 --> 01:25:15,280 blockchain we have you know the our 2375 01:25:15,280 --> 01:25:16,560 first blockchain which is kind of 2376 01:25:16,560 --> 01:25:18,520 exactly as the one from here but we also 2377 01:25:18,520 --> 01:25:21,400 have more than one so we have Pier a 2378 01:25:21,400 --> 01:25:23,600 pier B and Pier C and when people are 2379 01:25:23,600 --> 01:25:24,760 talking about Pier to to peer 2380 01:25:24,760 --> 01:25:26,520 peer-to-peer transactions they're really 2381 01:25:26,520 --> 01:25:28,360 talking uh this is kind of that concept 2382 01:25:28,360 --> 01:25:29,920 that they're talking about right so we 2383 01:25:29,920 --> 01:25:32,159 have a number of different peers who 2384 01:25:32,159 --> 01:25:33,639 running this blockchain technology 2385 01:25:33,639 --> 01:25:35,360 they're all weighted equally right each 2386 01:25:35,360 --> 01:25:37,600 one of these tiers or each one of these 2387 01:25:37,600 --> 01:25:40,000 nodes each one of these entities running 2388 01:25:40,000 --> 01:25:40,840 a 2389 01:25:40,840 --> 01:25:43,840 blockchain has the exact same power as 2390 01:25:43,840 --> 01:25:46,320 anybody else right so the way that we 2391 01:25:46,320 --> 01:25:49,440 can tell very easily which blockchain is 2392 01:25:49,440 --> 01:25:51,719 correct or which ones are correct are by 2393 01:25:51,719 --> 01:25:55,159 looking at this end hash here right by 2394 01:25:55,159 --> 01:25:57,239 looking at where we are uh in the 2395 01:25:57,239 --> 01:25:59,159 blockchain because again remember 2396 01:25:59,159 --> 01:26:01,199 because again remember this this hash 2397 01:26:01,199 --> 01:26:03,520 that this this in this last block here 2398 01:26:03,520 --> 01:26:06,760 is going to Encompass all of the blocks 2399 01:26:06,760 --> 01:26:09,480 from before right because this last hash 2400 01:26:09,480 --> 01:26:11,320 is going to have the previous hash here 2401 01:26:11,320 --> 01:26:13,440 which includes the previous hash here 2402 01:26:13,440 --> 01:26:14,840 which this hash includes the previous 2403 01:26:14,840 --> 01:26:17,400 hash here and which so this last hash is 2404 01:26:17,400 --> 01:26:19,760 encompasses everything in here right and 2405 01:26:19,760 --> 01:26:21,679 we can look we can look at the hash of 2406 01:26:21,679 --> 01:26:24,840 Pier C which is four zeros and then E4 B 2407 01:26:24,840 --> 01:26:26,880 we can look at the latest hash of Pier B 2408 01:26:26,880 --> 01:26:30,199 which is 4's e4b and then Pier a which 2409 01:26:30,199 --> 01:26:33,880 is 4 e4b so all of these peers all of 2410 01:26:33,880 --> 01:26:36,320 these nodes all of these decentralized 2411 01:26:36,320 --> 01:26:38,960 you know these independent um all these 2412 01:26:38,960 --> 01:26:40,960 independent users running this 2413 01:26:40,960 --> 01:26:42,760 blockchain software they're all matched 2414 01:26:42,760 --> 01:26:44,440 up it's very easy for their nodes to 2415 01:26:44,440 --> 01:26:46,600 look at each other and say hey great we 2416 01:26:46,600 --> 01:26:49,840 are all matched up now what let's say 2417 01:26:49,840 --> 01:26:52,159 that a decides that you know something 2418 01:26:52,159 --> 01:26:53,639 happened on the blockchain that they 2419 01:26:53,639 --> 01:26:55,199 didn't like and they wanted to go back 2420 01:26:55,199 --> 01:26:57,280 and change something right so let's say 2421 01:26:57,280 --> 01:26:59,600 they change here you know obviously uh 2422 01:26:59,600 --> 01:27:00,719 the rest of their blockchain is 2423 01:27:00,719 --> 01:27:02,600 invalidated and they have to spend a lot 2424 01:27:02,600 --> 01:27:04,239 of computational power to catch up to 2425 01:27:04,239 --> 01:27:06,239 speed so let's go ahead and humor it 2426 01:27:06,239 --> 01:27:07,800 let's say that they they did they ended 2427 01:27:07,800 --> 01:27:10,280 up catching up uh they ended up catching 2428 01:27:10,280 --> 01:27:12,119 up you know they ended up mining 2429 01:27:12,119 --> 01:27:14,760 everything and now they have a valid 2430 01:27:14,760 --> 01:27:16,840 blockchain right it solves the equation 2431 01:27:16,840 --> 01:27:20,480 awesome however in block number three 2432 01:27:20,480 --> 01:27:23,159 there's something new right this is here 2433 01:27:23,159 --> 01:27:24,440 and it shouldn't have been here this is 2434 01:27:24,440 --> 01:27:27,080 something that perer a put in by 2435 01:27:27,080 --> 01:27:30,560 themselves all that happens now is we 2436 01:27:30,560 --> 01:27:32,880 look at all the blockchains that are 2437 01:27:32,880 --> 01:27:34,600 running the software and we're looking 2438 01:27:34,600 --> 01:27:37,040 at all the hashes at hash at block 2439 01:27:37,040 --> 01:27:39,880 number five so per a has this new hash 2440 01:27:39,880 --> 01:27:41,800 now 2441 01:27:41,800 --> 01:27:45,800 9bc but Pier B has a different hash 00 2442 01:27:45,800 --> 01:27:48,719 e4b right so who's right is it is it 2443 01:27:48,719 --> 01:27:50,400 Pier a with their new stuff or is it 2444 01:27:50,400 --> 01:27:52,920 Pier B well that's where the 2445 01:27:52,920 --> 01:27:54,360 decentralized comes in because then we 2446 01:27:54,360 --> 01:27:56,920 can look at Pier C and Pier C also has 2447 01:27:56,920 --> 01:28:00,520 e4b so Pier B and Pier C both say hey 2448 01:28:00,520 --> 01:28:04,800 Pier a you're wrong get out right and P 2449 01:28:04,800 --> 01:28:06,239 A will stop being able to participate in 2450 01:28:06,239 --> 01:28:08,280 the mining rewards because they have 2451 01:28:08,280 --> 01:28:10,639 essentially forked uh the blockchain and 2452 01:28:10,639 --> 01:28:12,800 started their own little blockchain 2453 01:28:12,800 --> 01:28:14,520 right with their own history because 2454 01:28:14,520 --> 01:28:16,679 they're the only ones with this this 2455 01:28:16,679 --> 01:28:19,040 piece of data in block three whereas 2456 01:28:19,040 --> 01:28:22,400 Pier B and Pier C have nothing in there 2457 01:28:22,400 --> 01:28:24,199 so that really shows why uh in these 2458 01:28:24,199 --> 01:28:25,880 blockchain worlds in this decentralized 2459 01:28:25,880 --> 01:28:27,320 world there really is no centralized 2460 01:28:27,320 --> 01:28:29,400 entity you know per a you know might 2461 01:28:29,400 --> 01:28:31,000 have been maliciously motivated to 2462 01:28:31,000 --> 01:28:32,840 change you know this this block number 2463 01:28:32,840 --> 01:28:35,280 three however democracy rules right the 2464 01:28:35,280 --> 01:28:37,480 majority rules in the blockchain pier B 2465 01:28:37,480 --> 01:28:39,600 and Pier C both say Hey you know that 2466 01:28:39,600 --> 01:28:42,040 that's cute and all p a but you're wrong 2467 01:28:42,040 --> 01:28:43,679 right that that's not right now it might 2468 01:28:43,679 --> 01:28:45,360 be a little abstract that you just look 2469 01:28:45,360 --> 01:28:46,840 at data and you know us typing kind of 2470 01:28:46,840 --> 01:28:48,639 random stuff in here and think okay yeah 2471 01:28:48,639 --> 01:28:50,440 that's that's data right that makes 2472 01:28:50,440 --> 01:28:52,360 sense you know just kind of random 2473 01:28:52,360 --> 01:28:54,119 strings in here doesn't really do 2474 01:28:54,119 --> 01:28:55,360 anything for us so if we actually go 2475 01:28:55,360 --> 01:28:57,960 over to the Token section here this is 2476 01:28:57,960 --> 01:29:00,080 where everything really starts to make a 2477 01:29:00,080 --> 01:29:01,920 lot of sense so we have the exact same 2478 01:29:01,920 --> 01:29:05,280 setup here uh with Pier a pier B Pier C 2479 01:29:05,280 --> 01:29:07,520 except the difference is instead of 2480 01:29:07,520 --> 01:29:09,360 having kind of this this data section we 2481 01:29:09,360 --> 01:29:12,360 have this a TX this transaction section 2482 01:29:12,360 --> 01:29:14,600 right and this represents all the 2483 01:29:14,600 --> 01:29:17,080 transactions that are happening in this 2484 01:29:17,080 --> 01:29:19,480 block right so we're we're sending $25 2485 01:29:19,480 --> 01:29:22,719 from Darcy to Bingle or to Bingley uh 2486 01:29:22,719 --> 01:29:27,760 for uh $27 here 1922 right and it's the 2487 01:29:27,760 --> 01:29:29,800 exact same thing so this all these 2488 01:29:29,800 --> 01:29:31,679 transactions are going to get hashed in 2489 01:29:31,679 --> 01:29:34,400 the exact same way uh that the data is 2490 01:29:34,400 --> 01:29:36,239 going to get hashed and and this is why 2491 01:29:36,239 --> 01:29:37,679 it's so powerful because again you know 2492 01:29:37,679 --> 01:29:40,239 if I want to be malicious right if uh if 2493 01:29:40,239 --> 01:29:42,040 I wanted to say hey I I really wanted to 2494 01:29:42,040 --> 01:29:43,960 give Jane a lot more money from 2495 01:29:43,960 --> 01:29:46,400 Elizabeth so I'm p and I go back and I 2496 01:29:46,400 --> 01:29:48,639 change it to 100 well now you know not 2497 01:29:48,639 --> 01:29:51,320 only do I does my whole blockchain uh 2498 01:29:51,320 --> 01:29:53,320 get invalided because that was so far uh 2499 01:29:53,320 --> 01:29:55,480 so long ago but I'm not going to match 2500 01:29:55,480 --> 01:29:57,520 any of these other chains right and so 2501 01:29:57,520 --> 01:29:59,960 my blockchain is going to be excluded 2502 01:29:59,960 --> 01:30:02,000 from the overall blockchain so and let's 2503 01:30:02,000 --> 01:30:04,000 let's go ahead and fix this and it's the 2504 01:30:04,000 --> 01:30:06,119 same thing if down here if I I become 2505 01:30:06,119 --> 01:30:08,400 malicious and I want to send you know I 2506 01:30:08,400 --> 01:30:12,040 want uh Miss Audrey to have less money 2507 01:30:12,040 --> 01:30:13,600 maybe I want to send a dollar and I go 2508 01:30:13,600 --> 01:30:16,440 ahead and M it the same thing here this 2509 01:30:16,440 --> 01:30:22,000 hash now this 2a1 is not going to match 2510 01:30:22,000 --> 01:30:24,920 pib's pb's hash of BBA and it's not 2511 01:30:24,920 --> 01:30:27,880 going to match PC's hash of BBA as well 2512 01:30:27,880 --> 01:30:29,639 so the two of them are going to say hey 2513 01:30:29,639 --> 01:30:32,119 this your blockchain is invalid it's not 2514 01:30:32,119 --> 01:30:33,639 matching the majority you know you're 2515 01:30:33,639 --> 01:30:37,080 out right so that's really how uh these 2516 01:30:37,080 --> 01:30:40,040 blockchains work at a low level and it 2517 01:30:40,040 --> 01:30:42,040 all goes back to this this understanding 2518 01:30:42,040 --> 01:30:44,320 this hash idea and using it in this very 2519 01:30:44,320 --> 01:30:46,480 sophisticated manner uh to kind of 2520 01:30:46,480 --> 01:30:48,960 cryptographically prove um you know 2521 01:30:48,960 --> 01:30:51,159 where where stuff lies now the way the 2522 01:30:51,159 --> 01:30:52,679 blockchain works is you instead of 2523 01:30:52,679 --> 01:30:54,440 random stuff put in this data section 2524 01:30:54,440 --> 01:30:56,159 it's actually going to be solidity code 2525 01:30:56,159 --> 01:30:58,480 in here to finding ways to interact with 2526 01:30:58,480 --> 01:30:59,920 different blocks and different protocols 2527 01:30:59,920 --> 01:31:02,520 that are on chain or as we've said 2528 01:31:02,520 --> 01:31:04,440 before different smart 2529 01:31:04,440 --> 01:31:07,040 contracts now the next question that you 2530 01:31:07,040 --> 01:31:09,960 might be asking is okay well how do I 2531 01:31:09,960 --> 01:31:13,600 know how can I be sure that I'm the one 2532 01:31:13,600 --> 01:31:14,920 uh you know let's say this is let's say 2533 01:31:14,920 --> 01:31:17,320 I'm Darcy right how can I be sure that I 2534 01:31:17,320 --> 01:31:18,920 was that Darcy was the one to actually 2535 01:31:18,920 --> 01:31:21,000 send this money here how do we know that 2536 01:31:21,000 --> 01:31:24,520 Darcy sent $25 to uh Bing 2537 01:31:24,520 --> 01:31:27,159 well this is where we get into private 2538 01:31:27,159 --> 01:31:28,840 keys and public keys and that's what 2539 01:31:28,840 --> 01:31:30,880 we're going to go into now let's just do 2540 01:31:30,880 --> 01:31:33,080 a quick recap of what we've learned in 2541 01:31:33,080 --> 01:31:34,960 this section so far right we've learned 2542 01:31:34,960 --> 01:31:37,840 that ethereum actually runs on this Kack 2543 01:31:37,840 --> 01:31:40,719 256 but you know we used shot6 for this 2544 01:31:40,719 --> 01:31:42,639 demo it doesn't really matter we're just 2545 01:31:42,639 --> 01:31:45,440 talking about hashing algorithms so 2546 01:31:45,440 --> 01:31:48,320 again a hash is a unique fixed length 2547 01:31:48,320 --> 01:31:51,760 string meant to identify any piece of 2548 01:31:51,760 --> 01:31:55,000 data a hash algorithm or a hash function 2549 01:31:55,000 --> 01:31:57,239 is a function or algorithm that computes 2550 01:31:57,239 --> 01:32:00,960 any type of data into a unique hash 2551 01:32:00,960 --> 01:32:02,760 mining is going to be the process of 2552 01:32:02,760 --> 01:32:05,000 finding the solution to the blockchain 2553 01:32:05,000 --> 01:32:06,960 problem in our example the problem was 2554 01:32:06,960 --> 01:32:08,560 finding a hash that starts with four 2555 01:32:08,560 --> 01:32:11,239 zeros nodes get paid for mining 2556 01:32:11,239 --> 01:32:13,080 different blocks and the problem is 2557 01:32:13,080 --> 01:32:14,280 going to be different blockchain to 2558 01:32:14,280 --> 01:32:16,600 blockchain a block in a blockchain is 2559 01:32:16,600 --> 01:32:18,840 basically a combination of a block nuns 2560 01:32:18,840 --> 01:32:20,840 transaction and a previous hash to 2561 01:32:20,840 --> 01:32:23,520 create this unique hash for this block 2562 01:32:23,520 --> 01:32:25,639 and again depending on the blockchain 2563 01:32:25,639 --> 01:32:27,400 implementation this might have a couple 2564 01:32:27,400 --> 01:32:28,600 other fields or might have different 2565 01:32:28,600 --> 01:32:30,119 fields but this is essentially what's 2566 01:32:30,119 --> 01:32:32,400 going on blockchains are decentralized 2567 01:32:32,400 --> 01:32:34,920 and distributed because many independent 2568 01:32:34,920 --> 01:32:36,360 users are going to run this blockchain 2569 01:32:36,360 --> 01:32:38,000 software and they will check and they 2570 01:32:38,000 --> 01:32:39,560 will compare against each other to see 2571 01:32:39,560 --> 01:32:41,639 which blockchains are acting honestly 2572 01:32:41,639 --> 01:32:43,880 and which ones are acting maliciously in 2573 01:32:43,880 --> 01:32:46,679 the blockchain world majority rules the 2574 01:32:46,679 --> 01:32:49,199 nuns here is the answer used or the 2575 01:32:49,199 --> 01:32:52,600 number used to get this hash now nuns is 2576 01:32:52,600 --> 01:32:54,320 kind of an overloaded term it's actually 2577 01:32:54,320 --> 01:32:56,239 used for a number of different reasons 2578 01:32:56,239 --> 01:32:57,920 in this case we're using it to solve 2579 01:32:57,920 --> 01:32:59,480 this problem of getting you know four or 2580 01:32:59,480 --> 01:33:01,520 five zeros at the stop of the hash 2581 01:33:01,520 --> 01:33:03,920 however in ethereum it'll also be often 2582 01:33:03,920 --> 01:33:05,960 used as the number of transactions from 2583 01:33:05,960 --> 01:33:09,239 a given 2584 01:33:09,440 --> 01:33:11,239 address so now we're going to talk a 2585 01:33:11,239 --> 01:33:12,400 little bit about signing these 2586 01:33:12,400 --> 01:33:14,199 transactions and and private keys and 2587 01:33:14,199 --> 01:33:16,040 and some other cryptography pieces right 2588 01:33:16,040 --> 01:33:18,040 because in this blockchain demo here we 2589 01:33:18,040 --> 01:33:19,520 can see we have all these these 2590 01:33:19,520 --> 01:33:20,880 fantastic transactions right all these 2591 01:33:20,880 --> 01:33:22,840 things went through but how do we know 2592 01:33:22,840 --> 01:33:25,119 that it was dar see who is the one to 2593 01:33:25,119 --> 01:33:28,360 send $25 uh to Bingley right how do we 2594 01:33:28,360 --> 01:33:30,800 know that actually happened and this is 2595 01:33:30,800 --> 01:33:32,960 where all those pieces that we just 2596 01:33:32,960 --> 01:33:35,880 learned about uh in our our test net in 2597 01:33:35,880 --> 01:33:37,320 our metamask account are really going to 2598 01:33:37,320 --> 01:33:39,040 start to to come to life here a little 2599 01:33:39,040 --> 01:33:41,760 bit here so here we have an example of 2600 01:33:41,760 --> 01:33:45,280 public and private Keys okay at the top 2601 01:33:45,280 --> 01:33:47,119 we have this private key right that was 2602 01:33:47,119 --> 01:33:49,520 that was randomly generated uh a private 2603 01:33:49,520 --> 01:33:51,440 key is is you know as it kind of states 2604 01:33:51,440 --> 01:33:53,159 is a key that you really want to keep 2605 01:33:53,159 --> 01:33:54,600 secret because you're going to be using 2606 01:33:54,600 --> 01:33:56,880 this uh as kind of your your secret 2607 01:33:56,880 --> 01:33:58,960 password for all your transactions right 2608 01:33:58,960 --> 01:34:02,320 I can really pick you know any any any 2609 01:34:02,320 --> 01:34:04,639 private key anything that I want and 2610 01:34:04,639 --> 01:34:07,560 with it uh this algorithm they're going 2611 01:34:07,560 --> 01:34:08,840 to use an algorithm you know for 2612 01:34:08,840 --> 01:34:10,400 ethereum and Bitcoin they both use this 2613 01:34:10,400 --> 01:34:12,840 elliptic curve digital signature uh 2614 01:34:12,840 --> 01:34:14,880 algorithm it's it's a variant of just a 2615 01:34:14,880 --> 01:34:16,920 digital signature algorithm and it's 2616 01:34:16,920 --> 01:34:18,560 going to create this this public key 2617 01:34:18,560 --> 01:34:20,360 right I'm really not going to go at all 2618 01:34:20,360 --> 01:34:22,239 into kind of this digital signature 2619 01:34:22,239 --> 01:34:24,440 algorithm but just know it does use some 2620 01:34:24,440 --> 01:34:26,760 of these uh some of the hash uh 2621 01:34:26,760 --> 01:34:28,400 knowledge that we just learned combined 2622 01:34:28,400 --> 01:34:30,719 with some other pieces uh to kind of get 2623 01:34:30,719 --> 01:34:32,320 this this public here so I'm not going 2624 01:34:32,320 --> 01:34:34,080 to go too deep into it but we have this 2625 01:34:34,080 --> 01:34:36,320 private key that we create and we get 2626 01:34:36,320 --> 01:34:38,840 this public key now this public key we 2627 01:34:38,840 --> 01:34:41,080 want everybody to have access to right 2628 01:34:41,080 --> 01:34:42,600 this is yeah whole world can see this 2629 01:34:42,600 --> 01:34:45,440 this private key we really want it to be 2630 01:34:45,440 --> 01:34:46,960 uh private we don't want people to see 2631 01:34:46,960 --> 01:34:49,199 this we're going to use this private key 2632 01:34:49,199 --> 01:34:51,719 as like a password to quote unquote 2633 01:34:51,719 --> 01:34:54,320 digitally sign transactions and then 2634 01:34:54,320 --> 01:34:57,440 people can verify them with this public 2635 01:34:57,440 --> 01:34:58,679 key so let's let's see what this 2636 01:34:58,679 --> 01:34:59,920 actually looks like let's pick a a 2637 01:34:59,920 --> 01:35:01,560 random key a more secure key right 2638 01:35:01,560 --> 01:35:03,239 because the longer it is the the more 2639 01:35:03,239 --> 01:35:05,480 secure it's going to be and if we go to 2640 01:35:05,480 --> 01:35:08,560 signatures now right um let's say we 2641 01:35:08,560 --> 01:35:11,159 have this uh this message that we want 2642 01:35:11,159 --> 01:35:13,520 right we say high world right we want 2643 01:35:13,520 --> 01:35:15,159 this to be the message what's going to 2644 01:35:15,159 --> 01:35:17,440 happen is this private key that we've 2645 01:35:17,440 --> 01:35:20,239 created we can use to sign this data 2646 01:35:20,239 --> 01:35:21,719 right remember how in the blockchain 2647 01:35:21,719 --> 01:35:23,719 demo you know we were kind of We Were 2648 01:35:23,719 --> 01:35:25,840 hashing stuff right we were we're using 2649 01:35:25,840 --> 01:35:28,400 this uh shade 256 hash to to get this 2650 01:35:28,400 --> 01:35:30,199 hash well we're doing something similar 2651 01:35:30,199 --> 01:35:32,119 but instead of hashing we're we're using 2652 01:35:32,119 --> 01:35:34,159 this digital signature algorithm to 2653 01:35:34,159 --> 01:35:37,119 create this message signature now what's 2654 01:35:37,119 --> 01:35:39,440 really powerful about how this uh this 2655 01:35:39,440 --> 01:35:42,040 algorithm works is that you can create 2656 01:35:42,040 --> 01:35:44,400 this message signature with your private 2657 01:35:44,400 --> 01:35:47,199 key but somebody else can't derive your 2658 01:35:47,199 --> 01:35:49,920 private key from the message signature 2659 01:35:49,920 --> 01:35:51,400 and that's what makes this really really 2660 01:35:51,400 --> 01:35:54,119 powerful however if we go to verify by 2661 01:35:54,119 --> 01:35:56,119 using this public key right uh and so 2662 01:35:56,119 --> 01:35:59,159 this is the this is that 0403 this is 2663 01:35:59,159 --> 01:36:02,040 that same public key using this uh using 2664 01:36:02,040 --> 01:36:05,040 this public key anybody can verify oh 2665 01:36:05,040 --> 01:36:06,920 let's go ahead and sign it again anybody 2666 01:36:06,920 --> 01:36:11,280 can verify that this signature is yours 2667 01:36:11,280 --> 01:36:14,199 right so you have a public a private key 2668 01:36:14,199 --> 01:36:16,400 just for you so you can sign things and 2669 01:36:16,400 --> 01:36:18,679 a public key that anybody can verify 2670 01:36:18,679 --> 01:36:20,719 something right so anybody can verify 2671 01:36:20,719 --> 01:36:22,159 this and let's say somebody tries to 2672 01:36:22,159 --> 01:36:24,840 fake a transaction from you they say Hey 2673 01:36:24,840 --> 01:36:27,560 you know this is this is this is their 2674 01:36:27,560 --> 01:36:29,679 transaction um all they have to do is 2675 01:36:29,679 --> 01:36:33,560 verify that this signature against your 2676 01:36:33,560 --> 01:36:36,560 uh public key and very easily this whole 2677 01:36:36,560 --> 01:36:38,679 thing turns red because uh it isn't 2678 01:36:38,679 --> 01:36:40,520 verified right the the algorithm says 2679 01:36:40,520 --> 01:36:42,880 Hey uhuh that's wrong so we can go ahead 2680 01:36:42,880 --> 01:36:45,440 and take that into transactions in this 2681 01:36:45,440 --> 01:36:47,360 exact same way so if I want to send 2682 01:36:47,360 --> 01:36:51,320 money you know if I want to send $400 2683 01:36:51,320 --> 01:36:54,000 from you know my address to another 2684 01:36:54,000 --> 01:36:57,280 address using my private key I can sign 2685 01:36:57,280 --> 01:36:59,719 that transaction and anybody else in the 2686 01:36:59,719 --> 01:37:02,840 world can then verify this transaction 2687 01:37:02,840 --> 01:37:04,719 right and this is why when people say 2688 01:37:04,719 --> 01:37:06,320 hide your keys you know protect your 2689 01:37:06,320 --> 01:37:08,600 keys this is what we're talking about in 2690 01:37:08,600 --> 01:37:12,679 our accounts here right if we go to uh 2691 01:37:12,679 --> 01:37:14,520 settings and again the only reason that 2692 01:37:14,520 --> 01:37:16,960 I'm showing you guys my pneumonic and my 2693 01:37:16,960 --> 01:37:19,159 private key is because this is a uh this 2694 01:37:19,159 --> 01:37:20,840 is a dumpster account I'm going to throw 2695 01:37:20,840 --> 01:37:22,280 this away at the end of this video or 2696 01:37:22,280 --> 01:37:23,719 I'm just not going to put any real money 2697 01:37:23,719 --> 01:37:27,600 it um 2698 01:37:27,600 --> 01:37:30,639 but when we look at our our our metamask 2699 01:37:30,639 --> 01:37:32,960 here we have this numic phrase which 2700 01:37:32,960 --> 01:37:36,560 allows us to easily get these different 2701 01:37:36,560 --> 01:37:38,920 private keys right so uh pneumonic 2702 01:37:38,920 --> 01:37:41,679 phrase combined uh with you know uh 2703 01:37:41,679 --> 01:37:43,440 whatever account number will get us a 2704 01:37:43,440 --> 01:37:45,080 private key so pneumonic phrase combined 2705 01:37:45,080 --> 01:37:47,159 with one we're going to get this private 2706 01:37:47,159 --> 01:37:48,800 key and this is when we look at Account 2707 01:37:48,800 --> 01:37:52,960 Details export private key 2708 01:37:55,080 --> 01:37:57,119 confirm this is going to be the private 2709 01:37:57,119 --> 01:37:59,360 key that we're going to use to sign our 2710 01:37:59,360 --> 01:38:01,679 transactions right this if anybody else 2711 01:38:01,679 --> 01:38:03,520 gets access to this private key they 2712 01:38:03,520 --> 01:38:06,080 then can sign transactions for us and 2713 01:38:06,080 --> 01:38:07,920 they can send transactions for us and 2714 01:38:07,920 --> 01:38:10,159 that's why we want to keep these private 2715 01:38:10,159 --> 01:38:12,280 so uh it works the exact same way right 2716 01:38:12,280 --> 01:38:14,520 so this is why it's so important to hide 2717 01:38:14,520 --> 01:38:16,159 your private keys and hide your newonics 2718 01:38:16,159 --> 01:38:20,679 now your ethereum address is actually uh 2719 01:38:20,679 --> 01:38:23,840 a piece 2720 01:38:24,199 --> 01:38:26,080 uh is actually a piece of your public 2721 01:38:26,080 --> 01:38:28,960 key now to get our address in ethereum 2722 01:38:28,960 --> 01:38:30,440 all we have to do is take this public 2723 01:38:30,440 --> 01:38:32,000 key that we've created with our private 2724 01:38:32,000 --> 01:38:34,440 key hash it using that same ethereum 2725 01:38:34,440 --> 01:38:36,320 hashing algorithm and then take the last 2726 01:38:36,320 --> 01:38:38,199 20 bytes and that's how we'll actually 2727 01:38:38,199 --> 01:38:41,520 derive to our um to our address here now 2728 01:38:41,520 --> 01:38:44,199 knowing the exact methodology of how to 2729 01:38:44,199 --> 01:38:45,880 get the address doesn't really matter 2730 01:38:45,880 --> 01:38:47,080 because it could change blockchain to 2731 01:38:47,080 --> 01:38:49,480 blockchain and could even change e two 2732 01:38:49,480 --> 01:38:50,719 um but just know that that is 2733 01:38:50,719 --> 01:38:52,480 essentially how kind of these addresses 2734 01:38:52,480 --> 01:38:55,040 are derived right there some derivative 2735 01:38:55,040 --> 01:38:56,520 of the public key right because the 2736 01:38:56,520 --> 01:38:58,920 public key is public and you know uh 2737 01:38:58,920 --> 01:39:00,599 using the public key in kind of any 2738 01:39:00,599 --> 01:39:03,360 public way is is totally fine um but not 2739 01:39:03,360 --> 01:39:05,440 the private key so that is how we sign 2740 01:39:05,440 --> 01:39:07,280 our transactions note though this isn't 2741 01:39:07,280 --> 01:39:09,639 how we send the transactions so so this 2742 01:39:09,639 --> 01:39:11,000 is just going to sign it create a 2743 01:39:11,000 --> 01:39:12,760 transaction for us to send uh we'll 2744 01:39:12,760 --> 01:39:14,960 learn later on how to send these 2745 01:39:14,960 --> 01:39:16,639 transactions so that was a lot of 2746 01:39:16,639 --> 01:39:18,320 information there too let's do a quick 2747 01:39:18,320 --> 01:39:20,719 recap your public key is derived by 2748 01:39:20,719 --> 01:39:23,400 using a digital signature algorithm on 2749 01:39:23,400 --> 01:39:25,520 on your private key right and you want 2750 01:39:25,520 --> 01:39:27,760 to keep your private key private at all 2751 01:39:27,760 --> 01:39:29,119 times because you're going to use your 2752 01:39:29,119 --> 01:39:32,639 private key to sign transactions signing 2753 01:39:32,639 --> 01:39:34,199 transactions with your private key you 2754 01:39:34,199 --> 01:39:36,040 are the only one who can actually do 2755 01:39:36,040 --> 01:39:38,440 this because you can't get the private 2756 01:39:38,440 --> 01:39:41,480 key from a message signature however 2757 01:39:41,480 --> 01:39:44,000 using your public key you can anybody 2758 01:39:44,000 --> 01:39:46,440 can very easily verify that a signature 2759 01:39:46,440 --> 01:39:48,840 that's signed by you is in fact signed 2760 01:39:48,840 --> 01:39:51,599 by you in our metamask our private keys 2761 01:39:51,599 --> 01:39:53,480 are located in this Account Details 2762 01:39:53,480 --> 01:39:55,920 section you just hit uh show Private 2763 01:39:55,920 --> 01:39:57,599 keys and type in your password and 2764 01:39:57,599 --> 01:40:00,199 you'll get your your private key here 2765 01:40:00,199 --> 01:40:03,000 and the address of your account is 2766 01:40:03,000 --> 01:40:05,840 derived from this private key uh it's 2767 01:40:05,840 --> 01:40:08,199 derived from this public key so if you 2768 01:40:08,199 --> 01:40:10,280 think about it your private key creates 2769 01:40:10,280 --> 01:40:12,520 your public key which then can create 2770 01:40:12,520 --> 01:40:14,440 your address and there's a little 2771 01:40:14,440 --> 01:40:15,360 barrier 2772 01:40:15,360 --> 01:40:18,760 here or a big barrier here because your 2773 01:40:18,760 --> 01:40:20,119 private key you want to keep private and 2774 01:40:20,119 --> 01:40:21,679 your public key and your address can all 2775 01:40:21,679 --> 01:40:23,320 be public information now remember 2776 01:40:23,320 --> 01:40:24,840 remember how in our metamask we were 2777 01:40:24,840 --> 01:40:27,560 able to actually create new accounts 2778 01:40:27,560 --> 01:40:29,320 mine says account six cuz I've created 2779 01:40:29,320 --> 01:40:31,599 actually a few but how was it actually 2780 01:40:31,599 --> 01:40:33,960 creating those accounts well now that we 2781 01:40:33,960 --> 01:40:35,480 know all this if we go back to our 2782 01:40:35,480 --> 01:40:37,719 blockchain demo here what our metamask 2783 01:40:37,719 --> 01:40:39,920 is doing is essentially taking our 2784 01:40:39,920 --> 01:40:42,440 pneumonic or or that multi-word secret 2785 01:40:42,440 --> 01:40:44,400 phrase and then just hashing it with 2786 01:40:44,400 --> 01:40:47,880 some number so secret phrase plus 0 gets 2787 01:40:47,880 --> 01:40:49,360 this and it'll set this as your private 2788 01:40:49,360 --> 01:40:52,040 key and for our account one that'll be 2789 01:40:52,040 --> 01:40:54,199 the private key or maybe it's plus one 2790 01:40:54,199 --> 01:40:55,679 the exact algorithm that it's using 2791 01:40:55,679 --> 01:40:57,760 doesn't matter but if you want to create 2792 01:40:57,760 --> 01:40:59,639 a new private key where you just hit 2793 01:40:59,639 --> 01:41:01,320 this create account button the way it 2794 01:41:01,320 --> 01:41:03,520 actually picks this account is by taking 2795 01:41:03,520 --> 01:41:05,119 this secret phrase and then just 2796 01:41:05,119 --> 01:41:07,639 changing this number so if I go if I'm 2797 01:41:07,639 --> 01:41:10,280 in my metamask I do create account this 2798 01:41:10,280 --> 01:41:11,719 right now I'm on account six because 2799 01:41:11,719 --> 01:41:13,280 like I said I made a whole bunch if I 2800 01:41:13,280 --> 01:41:15,560 make account six right it's as if we 2801 01:41:15,560 --> 01:41:18,719 just did the secret phrase plus six and 2802 01:41:18,719 --> 01:41:20,719 created this new hash or this new 2803 01:41:20,719 --> 01:41:22,880 private key and created this new hash 2804 01:41:22,880 --> 01:41:25,400 and it uses this to make a private key 2805 01:41:25,400 --> 01:41:27,840 and this is why in your metamask if you 2806 01:41:27,840 --> 01:41:29,639 share that secret phrase if you share 2807 01:41:29,639 --> 01:41:31,639 that pneumonic device they will have 2808 01:41:31,639 --> 01:41:33,599 access to all the accounts that you ever 2809 01:41:33,599 --> 01:41:35,360 created however if you share your 2810 01:41:35,360 --> 01:41:37,520 private key it will just give them 2811 01:41:37,520 --> 01:41:39,599 access to that single account secret 2812 01:41:39,599 --> 01:41:41,480 phrase has access to all the accounts 2813 01:41:41,480 --> 01:41:43,880 created in your metamask or your wallet 2814 01:41:43,880 --> 01:41:45,599 your private key is access to that 2815 01:41:45,599 --> 01:41:47,560 single account and then the public key 2816 01:41:47,560 --> 01:41:49,639 or address anybody can have access to 2817 01:41:49,639 --> 01:41:51,560 and it's cool for anybody to have access 2818 01:41:51,560 --> 01:41:52,920 to so when I'm thinking about the 2819 01:41:52,920 --> 01:41:55,920 security of my metamask or my wallet 2820 01:41:55,920 --> 01:41:57,480 this is kind of the order that I think 2821 01:41:57,480 --> 01:41:59,599 of it in the seed phrase or pneumonic or 2822 01:41:59,599 --> 01:42:01,599 secret phrase is incredibly important 2823 01:42:01,599 --> 01:42:03,360 protect this at all costs because if 2824 01:42:03,360 --> 01:42:05,000 somebody else gets access to this they 2825 01:42:05,000 --> 01:42:06,639 will have access to all of your accounts 2826 01:42:06,639 --> 01:42:08,080 the second most important is the private 2827 01:42:08,080 --> 01:42:09,520 key because if somebody gets access to 2828 01:42:09,520 --> 01:42:11,239 that they will get access to a single 2829 01:42:11,239 --> 01:42:12,719 account and then your public key or 2830 01:42:12,719 --> 01:42:17,000 address which whatever it's public 2831 01:42:30,920 --> 01:42:32,239 now that we know a little bit more about 2832 01:42:32,239 --> 01:42:33,960 what's going on underneath the hood of 2833 01:42:33,960 --> 01:42:35,880 these blockchains let's go back at our 2834 01:42:35,880 --> 01:42:37,920 transactions and look at this gas thing 2835 01:42:37,920 --> 01:42:39,280 again and we'll look to see what's 2836 01:42:39,280 --> 01:42:41,040 actually happening here gas in 2837 01:42:41,040 --> 01:42:42,840 particular can be a little bit tricky to 2838 01:42:42,840 --> 01:42:44,599 wrap your head around so if you don't 2839 01:42:44,599 --> 01:42:46,920 get it right away don't worry as we go 2840 01:42:46,920 --> 01:42:48,599 through examples it'll start to make 2841 01:42:48,599 --> 01:42:50,960 more sense so before I was saying let's 2842 01:42:50,960 --> 01:42:52,760 just look at this transaction fee bit 2843 01:42:52,760 --> 01:42:54,199 which is the cost associated with 2844 01:42:54,199 --> 01:42:56,040 running this transaction if I scroll 2845 01:42:56,040 --> 01:42:57,800 over this on ether scan I can see this 2846 01:42:57,800 --> 01:42:59,960 thing that says Block Base fee per gas 2847 01:42:59,960 --> 01:43:02,679 plus Max prity fee per gas times the gas 2848 01:43:02,679 --> 01:43:04,480 use which might be a little bit 2849 01:43:04,480 --> 01:43:06,440 confusing here let's actually break down 2850 01:43:06,440 --> 01:43:08,679 what's going on on ethereum with EIP 2851 01:43:08,679 --> 01:43:11,280 1559 in place and again this is going to 2852 01:43:11,280 --> 01:43:13,000 be specific to ethereum as every 2853 01:43:13,000 --> 01:43:14,280 blockchain might do it a little bit 2854 01:43:14,280 --> 01:43:16,159 differently but if we click to see more 2855 01:43:16,159 --> 01:43:17,679 we can see a number of useful values 2856 01:43:17,679 --> 01:43:20,679 here we can see gas limit is 21,000 and 2857 01:43:20,679 --> 01:43:21,840 usage is 2858 01:43:21,840 --> 01:43:25,679 21,000 so this transaction used 21,000 2859 01:43:25,679 --> 01:43:30,159 gas and we sent 21,000 gas along with it 2860 01:43:30,159 --> 01:43:32,080 sometimes when sending a transaction 2861 01:43:32,080 --> 01:43:33,400 depending on when it's sent and 2862 01:43:33,400 --> 01:43:34,800 depending on what these Specific 2863 01:43:34,800 --> 01:43:36,639 Instructions are it might actually use 2864 01:43:36,639 --> 01:43:38,199 way more gas than what you want it to 2865 01:43:38,199 --> 01:43:40,080 use so with your transactions you can 2866 01:43:40,080 --> 01:43:42,199 actually set a limit hey I don't want to 2867 01:43:42,199 --> 01:43:44,960 use more than x amount of gas I don't 2868 01:43:44,960 --> 01:43:47,400 want to do more than x computational 2869 01:43:47,400 --> 01:43:49,239 units and in fact if we go to our 2870 01:43:49,239 --> 01:43:52,119 metamask and we click Send to transfer 2871 01:43:52,119 --> 01:43:53,920 between accounts again 2872 01:43:53,920 --> 01:43:57,080 and we pick you know 0.01 e or something 2873 01:43:57,080 --> 01:43:59,119 next can actually hit this little button 2874 01:43:59,119 --> 01:44:01,800 here go to Advanced and we can actually 2875 01:44:01,800 --> 01:44:04,679 edit some specifics of this transaction 2876 01:44:04,679 --> 01:44:06,599 one of them is going to be the gas limit 2877 01:44:06,599 --> 01:44:08,760 we can change this gas limit to maybe 2878 01:44:08,760 --> 01:44:13,159 2200 2300 or more or even less since 2879 01:44:13,159 --> 01:44:16,119 sending ethereum takes exactly 21,000 2880 01:44:16,119 --> 01:44:18,360 gas metam Mass just defaults to setting 2881 01:44:18,360 --> 01:44:20,159 into that but we also see these other 2882 01:44:20,159 --> 01:44:22,320 interesting things we see a priority fee 2883 01:44:22,320 --> 01:44:24,159 and a Max base 2884 01:44:24,159 --> 01:44:26,960 fee let's reject this transaction and 2885 01:44:26,960 --> 01:44:29,159 let's look back at ether scan to talk 2886 01:44:29,159 --> 01:44:31,239 about these So currently in ethereum 2887 01:44:31,239 --> 01:44:34,880 according to e EIP 1559 every 2888 01:44:34,880 --> 01:44:36,679 transaction on ethereum comes with 2889 01:44:36,679 --> 01:44:39,080 something called the base fee this is 2890 01:44:39,080 --> 01:44:41,760 the minimum gas price you need to set to 2891 01:44:41,760 --> 01:44:43,800 include your transaction and you'll 2892 01:44:43,800 --> 01:44:45,159 notice that these are priced in 2893 01:44:45,159 --> 01:44:49,199 something called guay so what is aay if 2894 01:44:49,199 --> 01:44:51,800 we come to the site ethon converter.com 2895 01:44:51,800 --> 01:44:53,360 and again there's a link to this in the 2896 01:44:53,360 --> 01:44:56,320 GitHub repository we scroll down we can 2897 01:44:56,320 --> 01:45:00,159 see whey guay and ether if I put one 2898 01:45:00,159 --> 01:45:03,360 ether in here I can see how much one 2899 01:45:03,360 --> 01:45:05,920 ether is in terms of guay and in terms 2900 01:45:05,920 --> 01:45:09,719 of wayy one ether is equal to one 2 3 4 2901 01:45:09,719 --> 01:45:13,639 5 6 7 8 nine nine zeros so that's that's 2902 01:45:13,639 --> 01:45:16,159 one billion guay is going to be one 2903 01:45:16,159 --> 01:45:20,360 ether and then 1 2 3 4 5 6 7 8 9 10 11 2904 01:45:20,360 --> 01:45:23,639 12 13 14 15 16 17 18 2905 01:45:23,639 --> 01:45:26,639 and then 18 zos is away these are just 2906 01:45:26,639 --> 01:45:28,719 easier ways of referring to really 2907 01:45:28,719 --> 01:45:31,199 really small amounts of ethereum so if 2908 01:45:31,199 --> 01:45:34,080 we look at our gas fees we see that the 2909 01:45:34,080 --> 01:45:37,320 base fee is 2910 01:45:38,560 --> 01:45:41,199 0.00004 gay and this obviously would be 2911 01:45:41,199 --> 01:45:43,239 an even smaller number if this was in 2912 01:45:43,239 --> 01:45:45,880 units of way so if we take this number 2913 01:45:45,880 --> 01:45:48,639 and we put it into our calculator we can 2914 01:45:48,639 --> 01:45:53,800 see that this is equal to 40 way or 0. 2915 01:45:53,800 --> 01:45:56,560 a whole bunch of zeros for ether the max 2916 01:45:56,560 --> 01:45:58,960 fee here refers to the maximum gas fee 2917 01:45:58,960 --> 01:46:01,199 that we're willing to pay for this 2918 01:46:01,199 --> 01:46:03,639 transaction and you can actually see 2919 01:46:03,639 --> 01:46:06,800 that our Max fee is a little bit higher 2920 01:46:06,800 --> 01:46:09,000 than what we actually ended up paying 2921 01:46:09,000 --> 01:46:11,520 our Max fee was 2.21 32 something 2922 01:46:11,520 --> 01:46:13,840 something and the gas price we actually 2923 01:46:13,840 --> 01:46:16,159 paid was up here now your transaction 2924 01:46:16,159 --> 01:46:17,480 might of course be a little bit 2925 01:46:17,480 --> 01:46:19,199 different then additionally we have a 2926 01:46:19,199 --> 01:46:21,560 Max priority fee this is going to be the 2927 01:46:21,560 --> 01:46:23,520 max gas fee that we're willing to to pay 2928 01:46:23,520 --> 01:46:25,320 plus the max tip that we're willing to 2929 01:46:25,320 --> 01:46:27,960 give to miners now currently in ethereum 2930 01:46:27,960 --> 01:46:30,719 this base fee ends up getting burnt and 2931 01:46:30,719 --> 01:46:32,960 we can see on ether scan exactly how 2932 01:46:32,960 --> 01:46:34,679 much is getting burnt here and if we 2933 01:46:34,679 --> 01:46:37,920 pull up our calculator again we can grab 2934 01:46:37,920 --> 01:46:40,719 this gas fee multiply it by the amount 2935 01:46:40,719 --> 01:46:43,760 of gas we used and we can see that this 2936 01:46:43,760 --> 01:46:45,960 is indeed how much ethereum we actually 2937 01:46:45,960 --> 01:46:48,040 ended up burning we go back to ethereum 2938 01:46:48,040 --> 01:46:50,119 converter paste it in we can see that 2939 01:46:50,119 --> 01:46:53,440 these two numbers are indeed equ 2940 01:46:53,440 --> 01:46:55,280 this means whenever you send a 2941 01:46:55,280 --> 01:46:57,840 transaction a little bit of ethereum is 2942 01:46:57,840 --> 01:47:00,599 removed from circulation forever or it's 2943 01:47:00,599 --> 01:47:02,760 considered burnt So currently in 2944 01:47:02,760 --> 01:47:04,800 ethereum part of your ethereum part of 2945 01:47:04,800 --> 01:47:07,159 your transaction fee actually gets burnt 2946 01:47:07,159 --> 01:47:09,440 and then the other part goes directly to 2947 01:47:09,440 --> 01:47:11,679 miners so to figure out exactly how much 2948 01:47:11,679 --> 01:47:15,960 went to minors we could do this number 2949 01:47:15,960 --> 01:47:18,520 minus the burnt amount and this is how 2950 01:47:18,520 --> 01:47:20,840 much ethereum was paid to an ethereum 2951 01:47:20,840 --> 01:47:22,960 minor for this transaction you'll see 2952 01:47:22,960 --> 01:47:26,560 down here transaction type 2 EIP 1559 2953 01:47:26,560 --> 01:47:29,679 this is the EIP 1559 version of these 2954 01:47:29,679 --> 01:47:31,159 transactions like I said every 2955 01:47:31,159 --> 01:47:32,719 blockchain is going to have a different 2956 01:47:32,719 --> 01:47:35,760 fee burning and and fee and gas process 2957 01:47:35,760 --> 01:47:36,760 and they're all going to be a little bit 2958 01:47:36,760 --> 01:47:38,719 different but the sum of it is 2959 01:47:38,719 --> 01:47:41,159 blockchains have limited block space for 2960 01:47:41,159 --> 01:47:43,719 transactions the gas price that costs 2961 01:47:43,719 --> 01:47:45,520 for your transaction to be included in 2962 01:47:45,520 --> 01:47:48,040 one of these blocks changes based off 2963 01:47:48,040 --> 01:47:50,159 how much demand there is the base gas 2964 01:47:50,159 --> 01:47:52,400 fee for ethereum will go up and down 2965 01:47:52,400 --> 01:47:54,480 depending depending on how many people 2966 01:47:54,480 --> 01:47:56,960 are sending transactions and how many 2967 01:47:56,960 --> 01:47:59,280 people want to be included in a block if 2968 01:47:59,280 --> 01:48:01,199 a ton of people want to be included in a 2969 01:48:01,199 --> 01:48:04,199 block that means a ton of gas is 2970 01:48:04,199 --> 01:48:06,040 obviously going to get burnt we've left 2971 01:48:06,040 --> 01:48:08,320 a link to a video in the GitHub 2972 01:48:08,320 --> 01:48:10,480 repository with this section from this 2973 01:48:10,480 --> 01:48:13,000 YouTuber who does an amazing job 2974 01:48:13,000 --> 01:48:16,239 breaking down this EIP 1559 and more 2975 01:48:16,239 --> 01:48:18,719 about how this gas model actually works 2976 01:48:18,719 --> 01:48:20,560 I highly recommend you pause this video 2977 01:48:20,560 --> 01:48:22,880 and watch that video to understand more 2978 01:48:22,880 --> 01:48:25,000 the base fee gets programmatically 2979 01:48:25,000 --> 01:48:27,400 algorithmically adjusted to try to 2980 01:48:27,400 --> 01:48:31,040 Target for all the blocks to be 50% full 2981 01:48:31,040 --> 01:48:33,639 if they're more than 50% full this base 2982 01:48:33,639 --> 01:48:35,719 fee automatically goes up if they're 2983 01:48:35,719 --> 01:48:38,560 less than 50% full this base fee goes 2984 01:48:38,560 --> 01:48:40,840 down now this is a lot of the basics of 2985 01:48:40,840 --> 01:48:42,599 how this transaction works and it can be 2986 01:48:42,599 --> 01:48:44,320 a little confusing so let's do a quick 2987 01:48:44,320 --> 01:48:46,280 refresher of everything in here there's 2988 01:48:46,280 --> 01:48:48,920 a unique transaction hash that uniquely 2989 01:48:48,920 --> 01:48:52,080 identifies this transaction on this 2990 01:48:52,080 --> 01:48:54,880 blockchain we can see the status we can 2991 01:48:54,880 --> 01:48:57,239 see the block number that it's confirmed 2992 01:48:57,239 --> 01:48:59,360 on one other thing we want to look at if 2993 01:48:59,360 --> 01:49:01,520 we scroll up we see block number and 2994 01:49:01,520 --> 01:49:04,119 block confirmations this is how many 2995 01:49:04,119 --> 01:49:07,119 blocks have been mined since this block 2996 01:49:07,119 --> 01:49:09,119 was included like we saw with our 2997 01:49:09,119 --> 01:49:10,800 blockchain demo the longer the 2998 01:49:10,800 --> 01:49:12,840 blockchain gets the harder it is to 2999 01:49:12,840 --> 01:49:14,719 tamper with and the more secure it is 3000 01:49:14,719 --> 01:49:16,760 typically you'll see some processes say 3001 01:49:16,760 --> 01:49:19,360 they'll only do something after 20 block 3002 01:49:19,360 --> 01:49:22,080 confirmations 30 Block confirmations or 3003 01:49:22,080 --> 01:49:24,199 or Etc the reason that they wait for 3004 01:49:24,199 --> 01:49:25,760 these block confirmations is because 3005 01:49:25,760 --> 01:49:27,199 they want to make sure that that 3006 01:49:27,199 --> 01:49:29,239 transaction is actually included and we 3007 01:49:29,239 --> 01:49:31,880 can actually see the block that our 3008 01:49:31,880 --> 01:49:34,080 transaction was included in and all the 3009 01:49:34,080 --> 01:49:36,000 other transactions with it different 3010 01:49:36,000 --> 01:49:38,440 details about how much gas was used the 3011 01:49:38,440 --> 01:49:41,400 gas limit Etc time stamp is when the 3012 01:49:41,400 --> 01:49:44,239 transaction happened we can see from and 3013 01:49:44,239 --> 01:49:46,840 to we can see the value and then we can 3014 01:49:46,840 --> 01:49:49,280 see the transaction fee which we see 3015 01:49:49,280 --> 01:49:51,400 right here is Block Base fee per gas 3016 01:49:51,400 --> 01:49:53,679 plus the max priority fee per gas times 3017 01:49:53,679 --> 01:49:55,760 the gas used and we see all the details 3018 01:49:55,760 --> 01:49:58,199 of the gas down here gas price is the 3019 01:49:58,199 --> 01:50:01,719 cost of one unit of gas gas limit is the 3020 01:50:01,719 --> 01:50:04,199 max amount of units of gas that we're 3021 01:50:04,199 --> 01:50:06,520 willing to pay in this transaction the 3022 01:50:06,520 --> 01:50:09,040 usage is how many actually got used the 3023 01:50:09,040 --> 01:50:11,360 base fee is going to be the base Network 3024 01:50:11,360 --> 01:50:16,000 fee per gas so 40 way per one gas used 3025 01:50:16,000 --> 01:50:18,840 the max gas is the max gas price we're 3026 01:50:18,840 --> 01:50:21,480 willing to pay and Max priority is going 3027 01:50:21,480 --> 01:50:23,760 to be the max gas price plus the tip 3028 01:50:23,760 --> 01:50:25,239 that we give to Miners and then we can 3029 01:50:25,239 --> 01:50:27,040 see how much is burnt and then we see 3030 01:50:27,040 --> 01:50:29,440 transaction savings which which is the 3031 01:50:29,440 --> 01:50:31,159 difference between how much was actually 3032 01:50:31,159 --> 01:50:34,000 used or paid for and then returned so 3033 01:50:34,000 --> 01:50:36,800 for example in this transaction the gas 3034 01:50:36,800 --> 01:50:39,000 price we ended up picking was a little 3035 01:50:39,000 --> 01:50:41,800 less than our Max gas price here so the 3036 01:50:41,800 --> 01:50:43,920 gas price we ended up using was a little 3037 01:50:43,920 --> 01:50:46,599 less than our Max priority fee here so 3038 01:50:46,599 --> 01:50:48,679 we had some savings compared to that we 3039 01:50:48,679 --> 01:50:51,320 can also see that this was an EIP 1559 3040 01:50:51,320 --> 01:50:53,840 transaction we can see our nuns here 3041 01:50:53,840 --> 01:50:56,560 which was nuns zero because the 3042 01:50:56,560 --> 01:50:58,159 transaction that I'm showing is our 3043 01:50:58,159 --> 01:51:00,239 first nuns and then of course we can see 3044 01:51:00,239 --> 01:51:02,639 the input data for transactions that are 3045 01:51:02,639 --> 01:51:04,760 just sending ethereum the input data is 3046 01:51:04,760 --> 01:51:06,400 going to be blank but you'll see that 3047 01:51:06,400 --> 01:51:08,320 when we get to Smart contracts the input 3048 01:51:08,320 --> 01:51:09,960 data is not going to be blank and it's 3049 01:51:09,960 --> 01:51:11,440 going to be one of the most important 3050 01:51:11,440 --> 01:51:13,960 features of these transactions you'll 3051 01:51:13,960 --> 01:51:16,159 also notice that there's a state tab 3052 01:51:16,159 --> 01:51:18,679 this is an advanced Tab and it shows the 3053 01:51:18,679 --> 01:51:21,040 different states that are changed based 3054 01:51:21,040 --> 01:51:22,760 off of this transaction where we're 3055 01:51:22,760 --> 01:51:24,480 going to ignore this one for now now 3056 01:51:24,480 --> 01:51:26,400 that we know how the blockchain itself 3057 01:51:26,400 --> 01:51:28,480 Works under the hood let's talk about 3058 01:51:28,480 --> 01:51:31,040 some blockchain fundamentals and we 3059 01:51:31,040 --> 01:51:32,880 actually covered all these topics in a 3060 01:51:32,880 --> 01:51:34,760 previous free code Camp video so let's 3061 01:51:34,760 --> 01:51:36,840 go to 3062 01:51:36,840 --> 01:51:39,320 that if the first time you listen to 3063 01:51:39,320 --> 01:51:41,079 this some of these Concepts seem a 3064 01:51:41,079 --> 01:51:43,440 little bit hard to grasp don't worry 3065 01:51:43,440 --> 01:51:46,159 about it as we continue and as we move 3066 01:51:46,159 --> 01:51:47,920 on with this course they'll start to 3067 01:51:47,920 --> 01:51:49,719 make more sense when you see them used 3068 01:51:49,719 --> 01:51:52,000 in real examples I definitely would 3069 01:51:52,000 --> 01:51:54,079 recommend going back and rewatching and 3070 01:51:54,079 --> 01:51:56,040 Rel listening to the parts that you 3071 01:51:56,040 --> 01:51:58,239 don't quite get and asking questions in 3072 01:51:58,239 --> 01:52:00,119 the discussions tab of the GitHub 3073 01:52:00,119 --> 01:52:02,079 repository awesome so now that we know 3074 01:52:02,079 --> 01:52:03,920 all the cryptography pieces and all the 3075 01:52:03,920 --> 01:52:05,280 little nitty-gritties of how the 3076 01:52:05,280 --> 01:52:07,280 blockchain actually works and how our 3077 01:52:07,280 --> 01:52:08,719 signatures work and how everything 3078 01:52:08,719 --> 01:52:10,599 sticks together let's talk a little bit 3079 01:52:10,599 --> 01:52:13,360 about how this works in actuality and 3080 01:52:13,360 --> 01:52:15,239 what's really going on now for a lot of 3081 01:52:15,239 --> 01:52:17,040 this each different blockchain has 3082 01:52:17,040 --> 01:52:18,599 slightly different algorithms and 3083 01:52:18,599 --> 01:52:20,920 slightly different metrics and criteria 3084 01:52:20,920 --> 01:52:23,000 for doing a lot of this stuff so when 3085 01:52:23,000 --> 01:52:25,000 we're talking about these specific 3086 01:52:25,000 --> 01:52:27,199 implementations keep in mind the exact 3087 01:52:27,199 --> 01:52:28,480 algorithm might be a little bit 3088 01:52:28,480 --> 01:52:30,480 different but the concepts are all still 3089 01:52:30,480 --> 01:52:32,840 going to be exactly the same hashing and 3090 01:52:32,840 --> 01:52:34,639 hash function is going to be the same no 3091 01:52:34,639 --> 01:52:36,520 matter where you look a decentralized 3092 01:52:36,520 --> 01:52:38,239 blockchain is going to be the same no 3093 01:52:38,239 --> 01:52:40,159 matter where you look how it's actually 3094 01:52:40,159 --> 01:52:41,880 implemented is going to be a little bit 3095 01:52:41,880 --> 01:52:43,719 different now traditionally when you run 3096 01:52:43,719 --> 01:52:46,119 an application you know be it a website 3097 01:52:46,119 --> 01:52:47,719 or something that connects to some 3098 01:52:47,719 --> 01:52:50,040 server you are interacting with a 3099 01:52:50,040 --> 01:52:53,040 centralized entity and unlike how we saw 3100 01:52:53,040 --> 01:52:54,719 with the blockchain with multiple 3101 01:52:54,719 --> 01:52:57,079 different peers it's going to be run by 3102 01:52:57,079 --> 01:52:59,119 a single centralized group now it still 3103 01:52:59,119 --> 01:53:01,119 could be run on many different servers 3104 01:53:01,119 --> 01:53:02,719 but all those servers are still going to 3105 01:53:02,719 --> 01:53:05,159 be controlled by the same centralized 3106 01:53:05,159 --> 01:53:08,199 group blockchains as we saw run on a 3107 01:53:08,199 --> 01:53:10,880 network of different independent nodes 3108 01:53:10,880 --> 01:53:13,239 when we saw Pier a pier B Pier C those 3109 01:53:13,239 --> 01:53:15,440 were different examples of different 3110 01:53:15,440 --> 01:53:17,920 independent users running the blockchain 3111 01:53:17,920 --> 01:53:20,239 technology on their own node now when I 3112 01:53:20,239 --> 01:53:22,119 use the term node I'm usually referring 3113 01:53:22,119 --> 01:53:24,480 to a single instance of a decentralized 3114 01:53:24,480 --> 01:53:26,639 system so when I say a single node when 3115 01:53:26,639 --> 01:53:28,079 I'm talking about a blockchain I'm 3116 01:53:28,079 --> 01:53:29,760 talking about one of those perer A's 3117 01:53:29,760 --> 01:53:31,719 Pier B's perer C's running that 3118 01:53:31,719 --> 01:53:33,440 blockchain software I'm talking about 3119 01:53:33,440 --> 01:53:35,840 one server running this technology and 3120 01:53:35,840 --> 01:53:37,639 again it's this network it's this 3121 01:53:37,639 --> 01:53:39,280 combination of these nodes interacting 3122 01:53:39,280 --> 01:53:41,360 with each other that creates this entire 3123 01:53:41,360 --> 01:53:43,320 blockchain what makes these so potent 3124 01:53:43,320 --> 01:53:45,760 too is that anybody can join the network 3125 01:53:45,760 --> 01:53:47,679 and that's why there's decentralized the 3126 01:53:47,679 --> 01:53:49,239 barrier to entry is a little bit of 3127 01:53:49,239 --> 01:53:50,679 Hardware requirements you getting the 3128 01:53:50,679 --> 01:53:52,880 correct materials to run the software 3129 01:53:52,880 --> 01:53:54,520 and then you running the software 3130 01:53:54,520 --> 01:53:55,960 anybody can join these networks and 3131 01:53:55,960 --> 01:53:57,400 participate and that's what makes it 3132 01:53:57,400 --> 01:53:59,719 truly decentralized in fact you can go 3133 01:53:59,719 --> 01:54:01,520 to GitHub right now and run your own 3134 01:54:01,520 --> 01:54:04,199 ethereum node in a few seconds now in 3135 01:54:04,199 --> 01:54:05,960 the traditional World applications are 3136 01:54:05,960 --> 01:54:08,280 run by centralized entities and if that 3137 01:54:08,280 --> 01:54:10,639 entity goes down or is maliciously 3138 01:54:10,639 --> 01:54:13,199 bribed or decides that they want to shut 3139 01:54:13,199 --> 01:54:15,639 off they just can't because they're the 3140 01:54:15,639 --> 01:54:18,400 ones that control everything blockchains 3141 01:54:18,400 --> 01:54:20,920 by contrast don't have this problem if 3142 01:54:20,920 --> 01:54:23,280 one node or one entity that runs several 3143 01:54:23,280 --> 01:54:25,960 nodes goes down since there are so many 3144 01:54:25,960 --> 01:54:28,480 other independent nodes running that it 3145 01:54:28,480 --> 01:54:30,239 doesn't matter the blockchain and the 3146 01:54:30,239 --> 01:54:32,440 system will persist so long as there is 3147 01:54:32,440 --> 01:54:35,119 at least one node always running and 3148 01:54:35,119 --> 01:54:36,920 luckily for us most of the most popular 3149 01:54:36,920 --> 01:54:39,599 chains like Bitcoin and ethereum have 3150 01:54:39,599 --> 01:54:41,520 thousands and thousands of nodes and as 3151 01:54:41,520 --> 01:54:43,800 we showed in our demo if one node acts 3152 01:54:43,800 --> 01:54:46,960 maliciously all the other nodes will 3153 01:54:46,960 --> 01:54:49,159 ignore that node and kick that out or or 3154 01:54:49,159 --> 01:54:51,320 even punish it in some systems because 3155 01:54:51,320 --> 01:54:53,119 they can easily check everybody else's 3156 01:54:53,119 --> 01:54:55,719 note and see okay this one is out of 3157 01:54:55,719 --> 01:54:57,760 sync with the majority and yes majority 3158 01:54:57,760 --> 01:54:59,320 rules when it comes to the blockchain 3159 01:54:59,320 --> 01:55:01,719 each blockchain keeps a full list of 3160 01:55:01,719 --> 01:55:03,800 every transaction and interaction that's 3161 01:55:03,800 --> 01:55:05,880 happened on that blockchain and we saw 3162 01:55:05,880 --> 01:55:08,480 if a node tries to act maliciously then 3163 01:55:08,480 --> 01:55:09,840 all their hashes are going to be way out 3164 01:55:09,840 --> 01:55:11,000 of whack and they're not going to match 3165 01:55:11,000 --> 01:55:12,880 everybody else this gives blockchains 3166 01:55:12,880 --> 01:55:15,079 this incredibly potent immutability 3167 01:55:15,079 --> 01:55:17,400 trait where nothing can be changed or 3168 01:55:17,400 --> 01:55:19,239 corrupted so in essence we can think of 3169 01:55:19,239 --> 01:55:21,800 a blockchain as a decentralized database 3170 01:55:21,800 --> 01:55:23,920 and with ethereum it has an extra 3171 01:55:23,920 --> 01:55:26,360 additional feature where it also can do 3172 01:55:26,360 --> 01:55:29,040 computation in a decentralized manner 3173 01:55:29,040 --> 01:55:31,320 now let's talk consensus proof of work 3174 01:55:31,320 --> 01:55:32,920 and proof of stake because you've 3175 01:55:32,920 --> 01:55:34,520 probably heard these before and they're 3176 01:55:34,520 --> 01:55:36,239 really important to how these 3177 01:55:36,239 --> 01:55:37,960 blockchains actually work when we went 3178 01:55:37,960 --> 01:55:39,639 through that blockchain example and we 3179 01:55:39,639 --> 01:55:41,679 did that mining feature this is what's 3180 01:55:41,679 --> 01:55:44,880 known as proof of work proof of work and 3181 01:55:44,880 --> 01:55:47,360 proof of stake fall under this umbrella 3182 01:55:47,360 --> 01:55:50,040 of consensus and consensus is a really 3183 01:55:50,040 --> 01:55:51,239 important topic when it comes to 3184 01:55:51,239 --> 01:55:53,560 blockchains consensus is defined as the 3185 01:55:53,560 --> 01:55:56,119 mechanism used to reach an agreement on 3186 01:55:56,119 --> 01:55:58,320 the state or a single value on the 3187 01:55:58,320 --> 01:56:00,679 blockchain especially in a decentralized 3188 01:56:00,679 --> 01:56:02,480 system I briefly alluded to this 3189 01:56:02,480 --> 01:56:04,239 consensus mechanism in our blockchain 3190 01:56:04,239 --> 01:56:06,480 example when I said if one changes 3191 01:56:06,480 --> 01:56:09,239 something and the other two don't then 3192 01:56:09,239 --> 01:56:11,079 majority Will Rule and kick that one out 3193 01:56:11,079 --> 01:56:13,480 this is part of that consensus mechanism 3194 01:56:13,480 --> 01:56:15,960 now very roughly a consensus protocol in 3195 01:56:15,960 --> 01:56:18,040 a blockchain or decentralized system can 3196 01:56:18,040 --> 01:56:20,239 be broken down into two pieces a chain 3197 01:56:20,239 --> 01:56:22,280 selection algorithm and a civil 3198 01:56:22,280 --> 01:56:24,320 resistance mechanism that mining piece 3199 01:56:24,320 --> 01:56:26,480 that we were doing or or the proof of 3200 01:56:26,480 --> 01:56:28,960 work algorithm is what's known as a syil 3201 01:56:28,960 --> 01:56:30,679 resistance mechanism and this is what 3202 01:56:30,679 --> 01:56:33,400 ethereum and Bitcoin currently use 3203 01:56:33,400 --> 01:56:34,800 please note that depending on when 3204 01:56:34,800 --> 01:56:36,960 you're watching this if eth 2 is out 3205 01:56:36,960 --> 01:56:39,719 then it's no longer proof of 3206 01:56:39,719 --> 01:56:42,000 work now proof of work is known as a 3207 01:56:42,000 --> 01:56:44,000 civil resistance mechanism because it 3208 01:56:44,000 --> 01:56:46,000 defines a way to figure out who is the 3209 01:56:46,000 --> 01:56:48,079 block author which node is going to be 3210 01:56:48,079 --> 01:56:50,320 the node who did the work to find that 3211 01:56:50,320 --> 01:56:52,920 mine and be the author of that block so 3212 01:56:52,920 --> 01:56:54,639 all the other nodes can verify that it's 3213 01:56:54,639 --> 01:56:56,320 accurate civil resistance is a 3214 01:56:56,320 --> 01:56:58,920 blockchain's ability to defend against 3215 01:56:58,920 --> 01:57:01,159 users creating a large number of pseudo 3216 01:57:01,159 --> 01:57:03,119 Anonymous identities to gain a 3217 01:57:03,119 --> 01:57:04,880 disproportionately advantageous 3218 01:57:04,880 --> 01:57:07,719 influence over said system and in 3219 01:57:07,719 --> 01:57:09,360 layman's turns it's basically a way for 3220 01:57:09,360 --> 01:57:10,679 a blockchain to defend against somebody 3221 01:57:10,679 --> 01:57:12,639 making a bunch of fake blockchains so 3222 01:57:12,639 --> 01:57:14,360 that they can get more and more rewards 3223 01:57:14,360 --> 01:57:15,840 now there are two types of civil 3224 01:57:15,840 --> 01:57:17,280 resistance mechanisms that we're going 3225 01:57:17,280 --> 01:57:19,639 to talk about here namely proof of work 3226 01:57:19,639 --> 01:57:21,719 and proof of stake let's talk about 3227 01:57:21,719 --> 01:57:23,239 proof of work work a little bit more in 3228 01:57:23,239 --> 01:57:25,480 depth first in proof of work this is Cil 3229 01:57:25,480 --> 01:57:27,320 resistant because a single node has to 3230 01:57:27,320 --> 01:57:29,239 go through a very computationally 3231 01:57:29,239 --> 01:57:32,119 expensive uh process called mining which 3232 01:57:32,119 --> 01:57:33,960 we demonstrated earlier to figure out 3233 01:57:33,960 --> 01:57:35,400 the answer to the blockchain's riddle of 3234 01:57:35,400 --> 01:57:37,400 finding that correct nuns or or whatever 3235 01:57:37,400 --> 01:57:39,079 the blockchain system has in place in 3236 01:57:39,079 --> 01:57:41,119 proof of work this works because no 3237 01:57:41,119 --> 01:57:42,760 matter how many pseudo Anonymous 3238 01:57:42,760 --> 01:57:45,040 accounts you make each one still has to 3239 01:57:45,040 --> 01:57:46,880 undergo this very computationally 3240 01:57:46,880 --> 01:57:49,440 expensive activity of finding the answer 3241 01:57:49,440 --> 01:57:51,320 to the proof of work problem or the 3242 01:57:51,320 --> 01:57:53,520 proof of work riddle which again in our 3243 01:57:53,520 --> 01:57:55,560 demonstration it was finding a Nuns with 3244 01:57:55,560 --> 01:57:57,960 that first four zeros but again each 3245 01:57:57,960 --> 01:57:59,920 blockchain might change the riddle or or 3246 01:57:59,920 --> 01:58:01,239 change the problem to be a little bit 3247 01:58:01,239 --> 01:58:02,520 different in fact some of these 3248 01:58:02,520 --> 01:58:03,920 blockchains make this riddle 3249 01:58:03,920 --> 01:58:06,159 intentionally hard or intentionally easy 3250 01:58:06,159 --> 01:58:08,239 to change What's called the block time 3251 01:58:08,239 --> 01:58:09,880 the block time is how long it takes 3252 01:58:09,880 --> 01:58:11,679 between blocks being published and it's 3253 01:58:11,679 --> 01:58:13,360 proportional to how hard these 3254 01:58:13,360 --> 01:58:15,440 algorithms are so these problems 3255 01:58:15,440 --> 01:58:17,679 actually can change depending on how 3256 01:58:17,679 --> 01:58:19,400 long they want the block time to be if a 3257 01:58:19,400 --> 01:58:21,560 system wants the block time to be very 3258 01:58:21,560 --> 01:58:23,960 very long they just make the problem 3259 01:58:23,960 --> 01:58:25,560 very very hard if they want to be very 3260 01:58:25,560 --> 01:58:27,719 short they make the problem a lot easier 3261 01:58:27,719 --> 01:58:29,440 we'll talk about cibil attacks in a 3262 01:58:29,440 --> 01:58:30,880 little bit and how they can affect the 3263 01:58:30,880 --> 01:58:32,920 system but with proof of work it's a 3264 01:58:32,920 --> 01:58:34,560 verifiable way to figure out who the 3265 01:58:34,560 --> 01:58:37,119 block author is and be civil resistant 3266 01:58:37,119 --> 01:58:38,880 now you need to combine this with a 3267 01:58:38,880 --> 01:58:40,800 chain selection rule create this 3268 01:58:40,800 --> 01:58:42,599 consensus now there's some consensus 3269 01:58:42,599 --> 01:58:44,400 protocols that have more features but 3270 01:58:44,400 --> 01:58:45,840 very very roughly these are the two 3271 01:58:45,840 --> 01:58:47,480 pieces that we're going to look at the 3272 01:58:47,480 --> 01:58:49,119 second piece is going to be a chain 3273 01:58:49,119 --> 01:58:51,679 selection role how do we know which 3274 01:58:51,679 --> 01:58:53,400 block chain is actually the real 3275 01:58:53,400 --> 01:58:55,199 blockchain and the true blockchain now 3276 01:58:55,199 --> 01:58:57,400 on bitcoin and ethereum they both use a 3277 01:58:57,400 --> 01:58:59,520 form of consensus called Nakamoto 3278 01:58:59,520 --> 01:59:01,639 consensus and this is a combination of 3279 01:59:01,639 --> 01:59:05,360 proof of work and longest chain 3280 01:59:05,360 --> 01:59:07,960 roll the decentralized network decides 3281 01:59:07,960 --> 01:59:09,840 that whichever blockchain has the 3282 01:59:09,840 --> 01:59:11,599 longest chain or the most number of 3283 01:59:11,599 --> 01:59:13,800 blocks on it is going to be the chain 3284 01:59:13,800 --> 01:59:15,960 that they use this makes a lot of sense 3285 01:59:15,960 --> 01:59:17,920 because every additional block that a 3286 01:59:17,920 --> 01:59:19,560 chain is behind it's going to take more 3287 01:59:19,560 --> 01:59:22,520 and more computation for it to come up 3288 01:59:22,520 --> 01:59:23,760 that's why when we saw in our 3289 01:59:23,760 --> 01:59:25,599 transaction we actually saw 3290 01:59:25,599 --> 01:59:27,159 confirmations the number of 3291 01:59:27,159 --> 01:59:28,760 confirmations is the number of 3292 01:59:28,760 --> 01:59:31,679 additional blocks added on after our 3293 01:59:31,679 --> 01:59:33,560 transaction went through in a block so 3294 01:59:33,560 --> 01:59:35,560 if we see confirmations as two it means 3295 01:59:35,560 --> 01:59:37,360 that the block that our transaction was 3296 01:59:37,360 --> 01:59:40,079 in has two blocks ahead of it in the 3297 01:59:40,079 --> 01:59:42,079 longest chain now I do want to point out 3298 01:59:42,079 --> 01:59:44,199 that a lot of people use proof of work 3299 01:59:44,199 --> 01:59:46,360 as a consensus protocol and I do want to 3300 01:59:46,360 --> 01:59:48,440 say that this is a little bit inaccurate 3301 01:59:48,440 --> 01:59:49,840 but sometimes people use it 3302 01:59:49,840 --> 01:59:52,480 interchangeably proof of work is a piece 3303 01:59:52,480 --> 01:59:54,880 of the overall consensus protocol which 3304 01:59:54,880 --> 01:59:57,760 in Bitcoin and ethereum 1's current case 3305 01:59:57,760 --> 02:00:00,800 is Nakamoto consensus nakomo consensus 3306 02:00:00,800 --> 02:00:03,040 is a combination of proof of work and 3307 02:00:03,040 --> 02:00:06,119 this longest chain rule both equally and 3308 02:00:06,119 --> 02:00:08,560 very very important now proof of work 3309 02:00:08,560 --> 02:00:10,560 also tells us where these transaction 3310 02:00:10,560 --> 02:00:12,800 fees and these block rewards go to 3311 02:00:12,800 --> 02:00:13,800 remember how when we made this 3312 02:00:13,800 --> 02:00:16,639 transaction we had to talk about gas and 3313 02:00:16,639 --> 02:00:19,199 a transaction fee so who's getting paid 3314 02:00:19,199 --> 02:00:20,960 who is getting this transaction and this 3315 02:00:20,960 --> 02:00:22,800 transaction fee is going to the miners 3316 02:00:22,800 --> 02:00:25,079 or the validators in a proof of work 3317 02:00:25,079 --> 02:00:27,079 Network they're called Miners And in the 3318 02:00:27,079 --> 02:00:29,400 proof of stake Network they're called 3319 02:00:29,400 --> 02:00:31,040 validators there are a little bit 3320 02:00:31,040 --> 02:00:32,320 different and we'll get into that when 3321 02:00:32,320 --> 02:00:33,880 we talk about proof of stake in this 3322 02:00:33,880 --> 02:00:36,040 proof of Works system all these nodes 3323 02:00:36,040 --> 02:00:38,199 are competing against each other to find 3324 02:00:38,199 --> 02:00:40,360 the answer to the blockchain riddle 3325 02:00:40,360 --> 02:00:42,599 remember in our example it was to find a 3326 02:00:42,599 --> 02:00:44,920 hash that has four zeros at the start 3327 02:00:44,920 --> 02:00:46,560 and again depending on the blockchain 3328 02:00:46,560 --> 02:00:47,920 implementation that riddle is going to 3329 02:00:47,920 --> 02:00:49,960 be a little bit different but all the 3330 02:00:49,960 --> 02:00:52,960 nodes are trying as many as possible to 3331 02:00:52,960 --> 02:00:55,679 try to get this answer first why because 3332 02:00:55,679 --> 02:00:57,719 the first node to figure out the answer 3333 02:00:57,719 --> 02:00:59,320 to the blockchain re is going to get 3334 02:00:59,320 --> 02:01:00,760 that transaction fee they're going to 3335 02:01:00,760 --> 02:01:02,440 get paid from that now when a node gets 3336 02:01:02,440 --> 02:01:03,960 paid they actually get paid in two 3337 02:01:03,960 --> 02:01:06,119 different ways one is going to be with a 3338 02:01:06,119 --> 02:01:08,079 transaction fee and another piece is 3339 02:01:08,079 --> 02:01:09,920 going to be the block reward remember 3340 02:01:09,920 --> 02:01:12,000 how we talked about alternating the gas 3341 02:01:12,000 --> 02:01:14,040 price or the guay on our transaction 3342 02:01:14,040 --> 02:01:15,679 well that's the transaction fee that 3343 02:01:15,679 --> 02:01:17,400 we're going to pay to these blockchain 3344 02:01:17,400 --> 02:01:19,599 nodes for including our transaction the 3345 02:01:19,599 --> 02:01:21,920 block reward is given to these nodes 3346 02:01:21,920 --> 02:01:23,679 from the protocol from the blockchain 3347 02:01:23,679 --> 02:01:25,599 itself you've probably heard of the 3348 02:01:25,599 --> 02:01:28,199 Bitcoin having before the having is 3349 02:01:28,199 --> 02:01:30,520 referring to this block reward getting 3350 02:01:30,520 --> 02:01:32,199 cut in half and it's supposed to be cut 3351 02:01:32,199 --> 02:01:35,239 in half roughly every four years this 3352 02:01:35,239 --> 02:01:37,560 block reward increases the circulating 3353 02:01:37,560 --> 02:01:39,400 amount of whatever cryptocurrency that 3354 02:01:39,400 --> 02:01:41,000 is being rewarded for example on 3355 02:01:41,000 --> 02:01:42,840 ethereum the Block reward is giving out 3356 02:01:42,840 --> 02:01:44,719 ethereum and on bitcoin the block reward 3357 02:01:44,719 --> 02:01:46,920 is giving out Bitcoin so these nodes are 3358 02:01:46,920 --> 02:01:48,440 competing against each other to be the 3359 02:01:48,440 --> 02:01:50,679 first one to find this transaction to be 3360 02:01:50,679 --> 02:01:52,520 the first one to find the answer to this 3361 02:01:52,520 --> 02:01:54,560 problem so that they can be the ones to 3362 02:01:54,560 --> 02:01:57,119 win both this block reward and your 3363 02:01:57,119 --> 02:01:59,280 transaction fee some blockchains like 3364 02:01:59,280 --> 02:02:01,840 Bitcoin for example have a set time when 3365 02:02:01,840 --> 02:02:03,360 they're no longer going to give out 3366 02:02:03,360 --> 02:02:05,440 block rewards and the miners or the 3367 02:02:05,440 --> 02:02:07,320 nodes are only going to get paid from 3368 02:02:07,320 --> 02:02:10,040 transaction fees now this gas fee again 3369 02:02:10,040 --> 02:02:12,159 is paid by whoever initialized the 3370 02:02:12,159 --> 02:02:14,520 transaction when we got our funds from 3371 02:02:14,520 --> 02:02:16,719 the faucet there was some server and 3372 02:02:16,719 --> 02:02:18,880 somebody else was paying the transaction 3373 02:02:18,880 --> 02:02:22,000 fee for us however when we sent ether 3374 02:02:22,000 --> 02:02:24,040 from one account to another our first 3375 02:02:24,040 --> 02:02:26,159 account actually paid some transaction 3376 02:02:26,159 --> 02:02:29,239 fee to send that ether in proof of stake 3377 02:02:29,239 --> 02:02:31,040 there's also a gas fee but it's paid out 3378 02:02:31,040 --> 02:02:33,440 to validators instead of Miners and 3379 02:02:33,440 --> 02:02:35,040 we'll talk about that in a little bit 3380 02:02:35,040 --> 02:02:36,360 now let's talk about two types of 3381 02:02:36,360 --> 02:02:37,719 attacks that can happen in these 3382 02:02:37,719 --> 02:02:39,239 blockchain worlds let's talk about the 3383 02:02:39,239 --> 02:02:41,280 first one being the cibil attack the 3384 02:02:41,280 --> 02:02:43,040 cibil attack is when a user creates a 3385 02:02:43,040 --> 02:02:45,040 whole bunch of pseudo Anonymous accounts 3386 02:02:45,040 --> 02:02:47,560 to try to influence a network now 3387 02:02:47,560 --> 02:02:49,679 obviously on bitcoin and ethereum this 3388 02:02:49,679 --> 02:02:51,560 is really really difficult because the 3389 02:02:51,560 --> 02:02:53,320 user needs to do all this work in proof 3390 02:02:53,320 --> 02:02:55,639 of work or have a ton of collateral in 3391 02:02:55,639 --> 02:02:57,119 proof of stake which again we'll talk 3392 02:02:57,119 --> 02:02:59,159 about in a bit the other more prevalent 3393 02:02:59,159 --> 02:03:02,040 attack is what's known as a 51% attack 3394 02:03:02,040 --> 02:03:03,639 now as we saw as part of our consensus 3395 02:03:03,639 --> 02:03:05,880 protocol these blockchains are going to 3396 02:03:05,880 --> 02:03:08,239 agree that the longest chain is the one 3397 02:03:08,239 --> 02:03:10,079 that they're going to go with so long as 3398 02:03:10,079 --> 02:03:12,440 it matches up with 51% of the rest of 3399 02:03:12,440 --> 02:03:14,840 the network this means that if you have 3400 02:03:14,840 --> 02:03:17,040 the longest chain and you have more than 3401 02:03:17,040 --> 02:03:19,280 51% of the rest of the network you can 3402 02:03:19,280 --> 02:03:21,400 do what's called a fork in the network 3403 02:03:21,400 --> 02:03:23,280 and bring the network onto your now 3404 02:03:23,280 --> 02:03:25,480 longest chain now Cil attacks obviously 3405 02:03:25,480 --> 02:03:27,199 are when a single node or a single 3406 02:03:27,199 --> 02:03:30,000 entity tries to affect the decentral of 3407 02:03:30,000 --> 02:03:32,000 the network by pretending to be multiple 3408 02:03:32,000 --> 02:03:33,599 different people although they're just 3409 02:03:33,599 --> 02:03:35,639 the same person or entity and like I 3410 02:03:35,639 --> 02:03:37,040 said it's really difficult to do in 3411 02:03:37,040 --> 02:03:38,760 proof of work and proof of stake so you 3412 02:03:38,760 --> 02:03:40,239 can see now that blockchains are very 3413 02:03:40,239 --> 02:03:42,760 Democratic whichever blockchain has the 3414 02:03:42,760 --> 02:03:44,920 most Buy in and is the longest is the 3415 02:03:44,920 --> 02:03:46,599 blockchain that the whole system is 3416 02:03:46,599 --> 02:03:48,639 going to corroborate when nodes produce 3417 02:03:48,639 --> 02:03:50,360 a new block and add it to the longest 3418 02:03:50,360 --> 02:03:52,280 chain the other nodes will follow this 3419 02:03:52,280 --> 02:03:53,440 longest chain that the rest of the 3420 02:03:53,440 --> 02:03:55,119 network is agreeing with ADD those 3421 02:03:55,119 --> 02:03:57,599 blocks to their chain and follow up so 3422 02:03:57,599 --> 02:03:59,400 very small reorganizations are actually 3423 02:03:59,400 --> 02:04:01,559 pretty common when a blockchain picks a 3424 02:04:01,559 --> 02:04:03,119 block from a different longest chain 3425 02:04:03,119 --> 02:04:05,559 puts it on and then has to swap it out 3426 02:04:05,559 --> 02:04:07,639 for another block and continue with a 3427 02:04:07,639 --> 02:04:09,320 different blockchain however if a group 3428 02:04:09,320 --> 02:04:11,119 of nodes had enough nodes or enough 3429 02:04:11,119 --> 02:04:13,800 power they could essentially be 51% of 3430 02:04:13,800 --> 02:04:16,239 the network and influence the network in 3431 02:04:16,239 --> 02:04:18,199 whatever direction that they wanted this 3432 02:04:18,199 --> 02:04:20,800 is what's known as a 51% attack and it's 3433 02:04:20,800 --> 02:04:21,880 happened on blockchains like like 3434 02:04:21,880 --> 02:04:24,360 ethereum classic which is not ethereum 3435 02:04:24,360 --> 02:04:26,440 this is why the bigger a blockchain is 3436 02:04:26,440 --> 02:04:28,159 the more decentralized and the more 3437 02:04:28,159 --> 02:04:30,320 secure it becomes so after you watch 3438 02:04:30,320 --> 02:04:31,679 this video and you become a blockchain 3439 02:04:31,679 --> 02:04:33,559 engineering expert I definitely 3440 02:04:33,559 --> 02:04:35,000 recommend you run a note as well because 3441 02:04:35,000 --> 02:04:36,880 you are going to increase the security 3442 02:04:36,880 --> 02:04:39,040 of the network as a whole by running a 3443 02:04:39,040 --> 02:04:41,000 node so proof of work is fantastic 3444 02:04:41,000 --> 02:04:42,480 because it allows us to very easily 3445 02:04:42,480 --> 02:04:44,559 protect against these Cil attacks and 3446 02:04:44,559 --> 02:04:46,639 keep our blockchains decentralized and 3447 02:04:46,639 --> 02:04:49,159 secure however it has some drawbacks as 3448 02:04:49,159 --> 02:04:51,280 well proof of work costs a lot of 3449 02:04:51,280 --> 02:04:52,199 electric 3450 02:04:52,199 --> 02:04:53,679 because every single node is running as 3451 02:04:53,679 --> 02:04:56,119 fast as they can to win this race to get 3452 02:04:56,119 --> 02:04:58,639 the rewards this leads to obviously an 3453 02:04:58,639 --> 02:05:00,679 environmental impact now since proof of 3454 02:05:00,679 --> 02:05:02,320 work in Nakamoto consensus a lot of 3455 02:05:02,320 --> 02:05:04,520 other protocols have taken this idea and 3456 02:05:04,520 --> 02:05:06,079 gone in a different direction with a 3457 02:05:06,079 --> 02:05:08,079 different civil resistance protocol a 3458 02:05:08,079 --> 02:05:09,760 lot of them with the intention to be a 3459 02:05:09,760 --> 02:05:11,800 lot more environmentally friendly and 3460 02:05:11,800 --> 02:05:13,679 the most popular one right now is proof 3461 02:05:13,679 --> 02:05:15,440 of stake there are some chains that are 3462 02:05:15,440 --> 02:05:17,000 already using this proof of stake 3463 02:05:17,000 --> 02:05:19,559 protocol and that are live and thriving 3464 02:05:19,559 --> 02:05:22,159 some of them are like Avalanche Sal 3465 02:05:22,159 --> 02:05:24,400 polygon polka 3466 02:05:24,400 --> 02:05:27,040 dot so let's talk about proof of stake 3467 02:05:27,040 --> 02:05:28,800 now again this is a different civil 3468 02:05:28,800 --> 02:05:30,639 resistance mechanism instead of solving 3469 02:05:30,639 --> 02:05:32,599 this difficult problem proof of stake 3470 02:05:32,599 --> 02:05:34,559 nodes put up some collateral that 3471 02:05:34,559 --> 02:05:37,400 they're going to behave honestly AKA 3472 02:05:37,400 --> 02:05:40,199 they stake in the example of ethereum 2 3473 02:05:40,199 --> 02:05:42,960 nodes put up some ethereum as a stake 3474 02:05:42,960 --> 02:05:44,480 that they're going to behave honestly in 3475 02:05:44,480 --> 02:05:46,400 the network if they misbehaved in the 3476 02:05:46,400 --> 02:05:48,599 network they are going to be slashed or 3477 02:05:48,599 --> 02:05:50,840 removed some of their stake obviously 3478 02:05:50,840 --> 02:05:52,320 this is a very good civil resistance 3479 02:05:52,320 --> 02:05:54,199 mechanism because if you try to create a 3480 02:05:54,199 --> 02:05:56,520 whole bunch of anonymous accounts then 3481 02:05:56,520 --> 02:05:58,079 each one of those accounts you have to 3482 02:05:58,079 --> 02:06:00,559 put up some stake and if you misbehave 3483 02:06:00,559 --> 02:06:02,320 you're going to run the risk of losing 3484 02:06:02,320 --> 02:06:03,599 all the money that you put up as 3485 02:06:03,599 --> 02:06:06,440 collateral in this system miners are 3486 02:06:06,440 --> 02:06:08,040 actually called validators because 3487 02:06:08,040 --> 02:06:09,599 they're no longer binding anything 3488 02:06:09,599 --> 02:06:11,000 they're actually just validating other 3489 02:06:11,000 --> 02:06:13,280 nodes now unlike proof of work which 3490 02:06:13,280 --> 02:06:14,840 every node is racing to be the first one 3491 02:06:14,840 --> 02:06:17,000 to find the Block in proof of stake 3492 02:06:17,000 --> 02:06:19,280 nodes are actually randomly chosen to 3493 02:06:19,280 --> 02:06:21,199 propose the new block and then the rest 3494 02:06:21,199 --> 02:06:23,719 of the validators will validate if that 3495 02:06:23,719 --> 02:06:26,159 note has proposed the block honestly as 3496 02:06:26,159 --> 02:06:27,920 we saw with our cryptography lesson it's 3497 02:06:27,920 --> 02:06:29,920 usually very easy for other notes to 3498 02:06:29,920 --> 02:06:33,000 verify if a proposal or a transaction is 3499 02:06:33,000 --> 02:06:35,000 honest now proof of stake obviously has 3500 02:06:35,000 --> 02:06:36,920 some pros and cons as well Pros are that 3501 02:06:36,920 --> 02:06:38,880 again it is a great civil resistance 3502 02:06:38,880 --> 02:06:40,559 mechanism and a great way to figure out 3503 02:06:40,559 --> 02:06:42,760 who the author of a block should be the 3504 02:06:42,760 --> 02:06:44,800 other Pros are that it's way less 3505 02:06:44,800 --> 02:06:46,760 computationally expensive to figure out 3506 02:06:46,760 --> 02:06:48,920 the new block because instead of every 3507 02:06:48,920 --> 02:06:50,679 single note on the network trying to do 3508 02:06:50,679 --> 02:06:53,559 this only one node needs to do this and 3509 02:06:53,559 --> 02:06:54,880 then the rest of the nodes just need to 3510 02:06:54,880 --> 02:06:56,719 validate it the cons are that it's 3511 02:06:56,719 --> 02:06:58,400 usually considered a slightly less 3512 02:06:58,400 --> 02:07:00,719 decentralized Network due to The Upfront 3513 02:07:00,719 --> 02:07:02,880 staking costs it costs to participate 3514 02:07:02,880 --> 02:07:04,239 now this gets into a little bit of a 3515 02:07:04,239 --> 02:07:05,840 philosophical battle on how 3516 02:07:05,840 --> 02:07:08,000 decentralized is decentralized enough 3517 02:07:08,000 --> 02:07:09,480 and I think that's up to the community 3518 02:07:09,480 --> 02:07:11,480 to decide and as we progress I think 3519 02:07:11,480 --> 02:07:13,040 we'll learn more and more about how 3520 02:07:13,040 --> 02:07:15,199 decentralized is decentralized enough 3521 02:07:15,199 --> 02:07:17,119 the general consensus amongst blockchain 3522 02:07:17,119 --> 02:07:18,800 Engineers though is that proof of stake 3523 02:07:18,800 --> 02:07:21,000 is very very decentralized and very 3524 02:07:21,000 --> 02:07:23,000 secure now there's another term that 3525 02:07:23,000 --> 02:07:24,559 might be the first time you heard it a 3526 02:07:24,559 --> 02:07:26,400 layer one we're going to talk about 3527 02:07:26,400 --> 02:07:28,280 layer ones and layer twos in terms of 3528 02:07:28,280 --> 02:07:30,599 scalability really quickly as well a 3529 02:07:30,599 --> 02:07:33,280 layer one refers to any base layer 3530 02:07:33,280 --> 02:07:35,520 blockchain implementation bitcoin's a 3531 02:07:35,520 --> 02:07:37,679 layer one ethereum's a layer one 3532 02:07:37,679 --> 02:07:39,960 Avalanche is a layer one these are the 3533 02:07:39,960 --> 02:07:42,599 base layer blockchain Solutions a layer 3534 02:07:42,599 --> 02:07:46,119 two is any application that is added on 3535 02:07:46,119 --> 02:07:48,280 top of a layer one added on top of a 3536 02:07:48,280 --> 02:07:50,199 blockchain some examples of layer twos 3537 02:07:50,199 --> 02:07:52,719 are going to be chain link arbitrum or 3538 02:07:52,719 --> 02:07:55,400 optimism arbitrum and optimism are very 3539 02:07:55,400 --> 02:07:57,159 interesting because they are layer twos 3540 02:07:57,159 --> 02:07:59,639 that also look to solve this scalability 3541 02:07:59,639 --> 02:08:01,559 issue arbitrum and optimism are what's 3542 02:08:01,559 --> 02:08:04,920 known as rollups and they roll up their 3543 02:08:04,920 --> 02:08:07,040 transactions into a layer one like 3544 02:08:07,040 --> 02:08:08,559 ethereum we're not going to go too deep 3545 02:08:08,559 --> 02:08:10,400 into rollups and how they actually work 3546 02:08:10,400 --> 02:08:12,000 but all you really need to know is that 3547 02:08:12,000 --> 02:08:13,320 they solve some of the scalability 3548 02:08:13,320 --> 02:08:15,280 issues by being another blockchain that 3549 02:08:15,280 --> 02:08:17,639 people can make transactions on still on 3550 02:08:17,639 --> 02:08:20,679 kind of this base ethereum layer now 3551 02:08:20,679 --> 02:08:22,400 they're different from side chains 3552 02:08:22,400 --> 02:08:24,119 because side chains derive their 3553 02:08:24,119 --> 02:08:26,239 security from their own protocols 3554 02:08:26,239 --> 02:08:28,639 rollups derive their security from the 3555 02:08:28,639 --> 02:08:30,639 base layers so arbitrum and optimism for 3556 02:08:30,639 --> 02:08:32,079 example is going to be just about as 3557 02:08:32,079 --> 02:08:33,920 secure as ethereum there's some 3558 02:08:33,920 --> 02:08:35,400 fantastic guys in there that go a little 3559 02:08:35,400 --> 02:08:37,079 bit deeper into rollups and I've left a 3560 02:08:37,079 --> 02:08:38,599 link in the description for you all 3561 02:08:38,599 --> 02:08:41,000 right so we just talked about a lot of 3562 02:08:41,000 --> 02:08:43,320 stuff so let's do a quick recap before 3563 02:08:43,320 --> 02:08:45,480 moving on civil attacks are prevented 3564 02:08:45,480 --> 02:08:47,320 due to protocols like proof of work and 3565 02:08:47,320 --> 02:08:49,960 proof of stake 51% attacks grow 3566 02:08:49,960 --> 02:08:51,840 increasingly harder with the size of 3567 02:08:51,840 --> 02:08:53,840 blockchain so you should run a node 3568 02:08:53,840 --> 02:08:55,920 consensus is the mechanism that allows a 3569 02:08:55,920 --> 02:08:57,920 blockchain to agree upon what the state 3570 02:08:57,920 --> 02:09:00,079 of the blockchain is sharding and 3571 02:09:00,079 --> 02:09:02,559 rollups are solutions to scalability 3572 02:09:02,559 --> 02:09:05,719 issues on layer ones a layer one is any 3573 02:09:05,719 --> 02:09:07,480 base blockchain implementation like 3574 02:09:07,480 --> 02:09:09,320 Bitcoin or ethereum a blockchain 3575 02:09:09,320 --> 02:09:11,119 scalability problem is that there's not 3576 02:09:11,119 --> 02:09:12,960 always enough block space for the amount 3577 02:09:12,960 --> 02:09:14,920 of transactions that want to get in them 3578 02:09:14,920 --> 02:09:17,520 this leads to very high gas prices and 3579 02:09:17,520 --> 02:09:19,679 again gas prices are how much it costs 3580 02:09:19,679 --> 02:09:22,280 to interact with a blockchain 3581 02:09:22,280 --> 02:09:24,920 so that's it for the blockchain basics 3582 02:09:24,920 --> 02:09:27,440 and the blockchain explainers with just 3583 02:09:27,440 --> 02:09:30,199 this information you now can go off into 3584 02:09:30,199 --> 02:09:32,159 the world and start working with 3585 02:09:32,159 --> 02:09:33,559 blockchains and interacting with 3586 02:09:33,559 --> 02:09:36,040 blockchains with at least some level of 3587 02:09:36,040 --> 02:09:38,040 knowledge as to what's going on you 3588 02:09:38,040 --> 02:09:40,040 should be incredibly proud of yourself 3589 02:09:40,040 --> 02:09:43,119 for just making it this far definitely 3590 02:09:43,119 --> 02:09:44,639 be sure to give yourself a pat on the 3591 02:09:44,639 --> 02:09:46,679 back and Round of Applause now that 3592 02:09:46,679 --> 02:09:48,119 we've gotten a lot of the basics and the 3593 02:09:48,119 --> 02:09:50,400 fundamentals out of the way let's start 3594 02:09:50,400 --> 02:09:53,239 jumping into the coding aspect this is 3595 02:09:53,239 --> 02:09:55,119 where you're going to learn how to 3596 02:09:55,119 --> 02:09:56,840 actually build these smart contracts how 3597 02:09:56,840 --> 02:09:58,360 to build these trust minimized 3598 02:09:58,360 --> 02:10:00,639 agreements in these blockchains and in 3599 02:10:00,639 --> 02:10:03,239 these smart contract platforms this next 3600 02:10:03,239 --> 02:10:05,840 section this solidity Basics the 3601 02:10:05,840 --> 02:10:07,960 solidity fundamentals section will give 3602 02:10:07,960 --> 02:10:10,440 you all the skills to start actually 3603 02:10:10,440 --> 02:10:13,119 coding solidity and understanding how 3604 02:10:13,119 --> 02:10:15,199 these smart contracts work underneath 3605 02:10:15,199 --> 02:10:17,760 the hood so at this point absolutely 3606 02:10:17,760 --> 02:10:19,719 give yourself a high five maybe say hi 3607 02:10:19,719 --> 02:10:21,360 in the GitHub discussions maybe say hi 3608 02:10:21,360 --> 02:10:22,880 high in the community on Twitter on 3609 02:10:22,880 --> 02:10:25,639 Reddit Etc and be proud of just making 3610 02:10:25,639 --> 02:10:28,000 it this far the journey has really only 3611 02:10:28,000 --> 02:10:30,119 just begun but you've already learned so 3612 02:10:30,119 --> 02:10:32,760 much let's begin the next section and 3613 02:10:32,760 --> 02:10:35,559 let's jump into the 3614 02:10:49,760 --> 02:10:51,599 code now that we're going to to the 3615 02:10:51,599 --> 02:10:53,520 coding part I need to stress to 3616 02:10:53,520 --> 02:10:56,599 absolutely use the GitHub repository or 3617 02:10:56,599 --> 02:10:59,360 web3 dev. education associated with this 3618 02:10:59,360 --> 02:11:01,280 course if you're on the GitHub repo 3619 02:11:01,280 --> 02:11:04,000 right now and you scroll down to lesson 3620 02:11:04,000 --> 02:11:05,920 two and this is going to look a little 3621 02:11:05,920 --> 02:11:07,599 bit different when you come to it you 3622 02:11:07,599 --> 02:11:10,040 can click on the GitHub repo associated 3623 02:11:10,040 --> 02:11:12,360 with this lesson this will have all the 3624 02:11:12,360 --> 02:11:13,480 code that we're actually going to be 3625 02:11:13,480 --> 02:11:16,599 working with for this section as well as 3626 02:11:16,599 --> 02:11:18,360 a read me section which is going to have 3627 02:11:18,360 --> 02:11:20,320 a lot of notes on how to actually work 3628 02:11:20,320 --> 02:11:22,639 with the code and instead of making 3629 02:11:22,639 --> 02:11:24,880 issues and discussions on this 3630 02:11:24,880 --> 02:11:27,199 repository here if you have an issue 3631 02:11:27,199 --> 02:11:29,440 please use the discussions tab of The 3632 02:11:29,440 --> 02:11:32,320 Foundry full course here or use any of 3633 02:11:32,320 --> 02:11:34,119 the areas that we've laid out in the 3634 02:11:34,119 --> 02:11:36,119 questions section we're going to teach 3635 02:11:36,119 --> 02:11:37,880 you how to ask questions so that they 3636 02:11:37,880 --> 02:11:39,440 have the highest probability of being 3637 02:11:39,440 --> 02:11:41,159 answered by either somebody else in the 3638 02:11:41,159 --> 02:11:44,559 community by an AI or by a forum 3639 02:11:44,559 --> 02:11:45,880 additionally please be sure to check out 3640 02:11:45,880 --> 02:11:49,360 web 3d. for more information as well I 3641 02:11:49,360 --> 02:11:50,960 highly recommend that you pause the 3642 02:11:50,960 --> 02:11:54,320 video right now and make accounts for 3643 02:11:54,320 --> 02:11:56,880 first of all GitHub and then at least 3644 02:11:56,880 --> 02:11:58,880 stack exchange ethereum additionally 3645 02:11:58,880 --> 02:12:00,760 chat gbt is a great resource to make an 3646 02:12:00,760 --> 02:12:03,480 account for just remember that it will 3647 02:12:03,480 --> 02:12:05,360 often get things wrong and isn't quite 3648 02:12:05,360 --> 02:12:07,679 up to date find you don't need to make 3649 02:12:07,679 --> 02:12:09,880 an account for but it often gets things 3650 02:12:09,880 --> 02:12:12,000 wrong sometimes as well typically for 3651 02:12:12,000 --> 02:12:13,920 each coding section I'll give you a 3652 02:12:13,920 --> 02:12:15,480 brief rundown of what we're actually 3653 02:12:15,480 --> 02:12:17,639 going to be building and in this lesson 3654 02:12:17,639 --> 02:12:19,360 we're going to be building this exact 3655 02:12:19,360 --> 02:12:20,559 smart contract and we're going to be 3656 02:12:20,559 --> 02:12:22,800 building your first smart contract ever 3657 02:12:22,800 --> 02:12:24,400 and we're going to deploy it to a 3658 02:12:24,400 --> 02:12:26,639 blockchain at the end of this section 3659 02:12:26,639 --> 02:12:28,199 you are going to have deployed your 3660 02:12:28,199 --> 02:12:30,599 first smart contract ever so be sure to 3661 02:12:30,599 --> 02:12:32,159 get to the end so you can deploy your 3662 02:12:32,159 --> 02:12:34,000 first smart contract we're going to be 3663 02:12:34,000 --> 02:12:37,159 using something called an IDE called 3664 02:12:37,159 --> 02:12:39,599 remix to deploy and interact and work 3665 02:12:39,599 --> 02:12:41,559 with this smart contract which is going 3666 02:12:41,559 --> 02:12:43,520 to be very exciting it's highly 3667 02:12:43,520 --> 02:12:45,440 recommended to get the best experience 3668 02:12:45,440 --> 02:12:47,320 out of this is for you to follow along 3669 02:12:47,320 --> 02:12:49,559 and you to code with me you can change 3670 02:12:49,559 --> 02:12:51,760 my speed on the YouTube video if I'm 3671 02:12:51,760 --> 02:12:54,520 coding too fast or I'm coding too slow 3672 02:12:54,520 --> 02:12:56,159 but you taking the time to write out the 3673 02:12:56,159 --> 02:12:58,280 code as I code along with you is going 3674 02:12:58,280 --> 02:13:01,520 to ingrain the knowledge into your brain 3675 02:13:01,520 --> 02:13:03,520 repetition is the mother of skill and I 3676 02:13:03,520 --> 02:13:05,079 want to make sure you come out the other 3677 02:13:05,079 --> 02:13:07,840 side with skill actually code this we're 3678 02:13:07,840 --> 02:13:10,000 going to be using a tool called remix 3679 02:13:10,000 --> 02:13:12,040 you can either Google search it or you 3680 02:13:12,040 --> 02:13:13,920 can just come to the GitHub repo or web 3681 02:13:13,920 --> 02:13:16,960 3d. education and click this link to 3682 02:13:16,960 --> 02:13:20,360 remix which will pop open the remix web 3683 02:13:20,360 --> 02:13:22,679 ID so let's go ahead let's jump in and 3684 02:13:22,679 --> 02:13:24,679 let's learn to deploy our first smart 3685 02:13:24,679 --> 02:13:27,119 contract at the end of this lesson you 3686 02:13:27,119 --> 02:13:29,159 will have deployed your first smart 3687 02:13:29,159 --> 02:13:31,079 contract you'll have written your first 3688 02:13:31,079 --> 02:13:33,679 bit of solidity and we are very excited 3689 02:13:33,679 --> 02:13:36,679 to get through this 3690 02:13:38,280 --> 02:13:41,800 part welcome to the remix IDE or the 3691 02:13:41,800 --> 02:13:44,000 integrated development environment this 3692 02:13:44,000 --> 02:13:45,840 is where we're going to learn to write a 3693 02:13:45,840 --> 02:13:48,079 lot of our code in the beginning if you 3694 02:13:48,079 --> 02:13:49,840 want you can go ahead and accept to help 3695 02:13:49,840 --> 02:13:51,719 out remix here and if you've never been 3696 02:13:51,719 --> 02:13:53,400 to the remix website before it'll give 3697 02:13:53,400 --> 02:13:55,320 you a tutorial walkthr of some of the 3698 02:13:55,320 --> 02:13:57,440 features that remix has to offer for 3699 02:13:57,440 --> 02:13:59,520 example it has a solidity compiler 3700 02:13:59,520 --> 02:14:01,520 solidity is the programming language 3701 02:14:01,520 --> 02:14:03,159 that we're going to be using in this 3702 02:14:03,159 --> 02:14:06,159 course to code our smart contracts where 3703 02:14:06,159 --> 02:14:07,639 and we need to compile them when we've 3704 02:14:07,639 --> 02:14:09,119 written the solidity we'll learn about 3705 02:14:09,119 --> 02:14:11,639 that in a little bit we have a tab here 3706 02:14:11,639 --> 02:14:12,920 where we can actually deploy our 3707 02:14:12,920 --> 02:14:15,559 contracts to a blockchain and we have 3708 02:14:15,559 --> 02:14:17,679 all these different folders and scripts 3709 02:14:17,679 --> 02:14:19,960 since we can actually write JavaScript 3710 02:14:19,960 --> 02:14:22,719 and typescript in remix as well but 3711 02:14:22,719 --> 02:14:24,159 don't worry about those too much for now 3712 02:14:24,159 --> 02:14:25,559 because I'm going to be explaining 3713 02:14:25,559 --> 02:14:27,559 everything that we're going to do remix 3714 02:14:27,559 --> 02:14:29,079 is an incredibly powerful tool because 3715 02:14:29,079 --> 02:14:30,679 it has a lot of features that will allow 3716 02:14:30,679 --> 02:14:33,320 us to really see and visualize what our 3717 02:14:33,320 --> 02:14:35,360 smart contracts do eventually we're 3718 02:14:35,360 --> 02:14:37,639 going to move off of remix to a local 3719 02:14:37,639 --> 02:14:39,960 development environment however remix is 3720 02:14:39,960 --> 02:14:42,040 a tool still used by some of the top 3721 02:14:42,040 --> 02:14:43,679 Auditors and smart contract developers 3722 02:14:43,679 --> 02:14:45,400 in the space when they want to quickly 3723 02:14:45,400 --> 02:14:47,480 check something out and additionally 3724 02:14:47,480 --> 02:14:49,040 it's fantastic for learning the 3725 02:14:49,040 --> 02:14:51,360 fundamentals of solidity the left hand 3726 02:14:51,360 --> 02:14:52,719 side is where we're actually going to 3727 02:14:52,719 --> 02:14:55,040 start interacting with remix if we bring 3728 02:14:55,040 --> 02:14:57,440 our Mouse up to the top this little file 3729 02:14:57,440 --> 02:14:58,800 explorer is where we're going to have 3730 02:14:58,800 --> 02:15:00,040 all of our files and where we're going 3731 02:15:00,040 --> 02:15:01,719 to write our solidity or our smart 3732 02:15:01,719 --> 02:15:03,599 contract code if you want you can leave 3733 02:15:03,599 --> 02:15:04,960 all these folders in here but I'm 3734 02:15:04,960 --> 02:15:06,360 actually going to go ahead and delete 3735 02:15:06,360 --> 02:15:08,440 everything so that there's less for me 3736 02:15:08,440 --> 02:15:10,480 to work with or or deal with so I'm just 3737 02:15:10,480 --> 02:15:12,400 going to go ahead and rightclick and 3738 02:15:12,400 --> 02:15:14,679 delete everything in here just so I can 3739 02:15:14,679 --> 02:15:17,040 start completely from scratch again if 3740 02:15:17,040 --> 02:15:19,040 you want to leave all of these in here 3741 02:15:19,040 --> 02:15:21,199 feel free to do so doesn't matter I just 3742 02:15:21,199 --> 02:15:23,760 think it's cluttering up my mental space 3743 02:15:23,760 --> 02:15:26,119 a little bit now we have a blank remix 3744 02:15:26,119 --> 02:15:27,360 project and the first thing that we're 3745 02:15:27,360 --> 02:15:30,000 going to want to do is create our first 3746 02:15:30,000 --> 02:15:32,480 file to start writing and deploying our 3747 02:15:32,480 --> 02:15:34,239 solidity smart contract we're going to 3748 02:15:34,239 --> 02:15:36,199 go ahead and click the create new file 3749 02:15:36,199 --> 02:15:40,480 right here and type in simple storage. 3750 02:15:40,480 --> 02:15:43,079 Soul doou tells our compiler that this 3751 02:15:43,079 --> 02:15:45,559 is going to be a solidity contract a 3752 02:15:45,559 --> 02:15:47,599 solidity file and we're going to be 3753 02:15:47,599 --> 02:15:50,079 writing solidity inside of this file 3754 02:15:50,079 --> 02:15:51,880 which again solidity is the most popular 3755 02:15:51,880 --> 02:15:53,920 smart contract programming language and 3756 02:15:53,920 --> 02:15:56,159 you'll see we actually get popped up a 3757 02:15:56,159 --> 02:15:58,280 simple storage. Soul on the right hand 3758 02:15:58,280 --> 02:16:00,239 side which you can type in and actually 3759 02:16:00,239 --> 02:16:03,040 write our solidity code now right below 3760 02:16:03,040 --> 02:16:05,679 the file explorer button is a little 3761 02:16:05,679 --> 02:16:07,920 search icon which allows us to search 3762 02:16:07,920 --> 02:16:09,360 for different code in all of our 3763 02:16:09,360 --> 02:16:12,239 contracts so for example if I type in 3764 02:16:12,239 --> 02:16:15,040 hello in here and I copy that paste that 3765 02:16:15,040 --> 02:16:17,719 into the search bar hit enter we can see 3766 02:16:17,719 --> 02:16:20,480 that it found this line hello in our 3767 02:16:20,480 --> 02:16:22,599 simple storage. let's go ahead and 3768 02:16:22,599 --> 02:16:24,920 delete that right below that search icon 3769 02:16:24,920 --> 02:16:27,239 is this solidity compiler and you'll see 3770 02:16:27,239 --> 02:16:29,280 a bunch of different stuff pop up which 3771 02:16:29,280 --> 02:16:31,119 tells us about our compiler 3772 02:16:31,119 --> 02:16:33,240 configuration and we can see even more 3773 02:16:33,240 --> 02:16:34,840 advanced configuration if we hit the 3774 02:16:34,840 --> 02:16:36,599 dropdown we're not going to hit that for 3775 02:16:36,599 --> 02:16:38,359 now let's go ahead and double click this 3776 02:16:38,359 --> 02:16:40,479 solidity compiler over here so we can 3777 02:16:40,479 --> 02:16:43,479 just see the simple storage. soulle I'm 3778 02:16:43,479 --> 02:16:45,160 also going to click this hide terminal 3779 02:16:45,160 --> 02:16:47,439 button so that we just see our simple 3780 02:16:47,439 --> 02:16:49,439 storage. soulle now the first thing that 3781 02:16:49,439 --> 02:16:51,519 we want to do in all of our solidity in 3782 02:16:51,519 --> 02:16:53,760 smart contracts is write the solidity 3783 02:16:53,760 --> 02:16:54,960 version that we're going to be working 3784 02:16:54,960 --> 02:16:57,160 with solidity is a constantly changing 3785 02:16:57,160 --> 02:16:59,280 language and we want to be very specific 3786 02:16:59,280 --> 02:17:00,359 about what version we're going to be 3787 02:17:00,359 --> 02:17:02,399 using to write our smart contract as 3788 02:17:02,399 --> 02:17:04,479 each version does different things to 3789 02:17:04,479 --> 02:17:05,960 write your version you're going to do 3790 02:17:05,960 --> 02:17:08,679 pragma solidity and then type your 3791 02:17:08,679 --> 02:17:10,439 version for most of this course we're 3792 02:17:10,439 --> 02:17:12,880 going to be using 3793 02:17:14,280 --> 02:17:16,599 0.819 as that's the most current 3794 02:17:16,599 --> 02:17:18,679 addition of solidity however getting 3795 02:17:18,679 --> 02:17:20,240 used to working with different versions 3796 02:17:20,240 --> 02:17:22,679 of solidity is really good for you as 3797 02:17:22,679 --> 02:17:23,880 you're going to be working with 3798 02:17:23,880 --> 02:17:26,040 different versions of solidity no matter 3799 02:17:26,040 --> 02:17:27,800 where you go certain versions of 3800 02:17:27,800 --> 02:17:29,920 solidity are considered more stable than 3801 02:17:29,920 --> 02:17:31,639 other versions right now there's a 3802 02:17:31,639 --> 02:17:33,160 popular tool called Slither which 3803 02:17:33,160 --> 02:17:35,160 recommends using 3804 02:17:35,160 --> 02:17:38,760 0.818 so if you want to default to 0.818 3805 02:17:38,760 --> 02:17:40,880 for this course feel free to do so we're 3806 02:17:40,880 --> 02:17:42,040 going to be using a couple different 3807 02:17:42,040 --> 02:17:44,559 versions as we code so this line says 3808 02:17:44,559 --> 02:17:47,160 we're stated our version now these two 3809 02:17:47,160 --> 02:17:49,399 slashes here stand for what's called a 3810 02:17:49,399 --> 02:17:51,639 comment in solidity and this allows you 3811 02:17:51,639 --> 02:17:54,559 to write anything after the two slashes 3812 02:17:54,559 --> 02:17:56,800 and when we compile or run our code it 3813 02:17:56,800 --> 02:17:58,760 will just ignore what's in here so we 3814 02:17:58,760 --> 02:18:00,920 could type blah blah blah whatever we 3815 02:18:00,920 --> 02:18:04,359 want cats are cool and it doesn't matter 3816 02:18:04,359 --> 02:18:06,439 you can write anything in here I highly 3817 02:18:06,439 --> 02:18:08,479 recommend as we're going along you 3818 02:18:08,479 --> 02:18:10,160 should write comments in your own code 3819 02:18:10,160 --> 02:18:13,399 as well for you to refer to later on and 3820 02:18:13,399 --> 02:18:15,760 additionally feel free to copy all the 3821 02:18:15,760 --> 02:18:17,840 code that you write and paste it locally 3822 02:18:17,840 --> 02:18:19,719 so that just in case your browser cache 3823 02:18:19,719 --> 02:18:21,399 refreshes or something you won't lose 3824 02:18:21,399 --> 02:18:23,719 all the work you've done so so before 3825 02:18:23,719 --> 02:18:25,760 you lock off for the day copy paste this 3826 02:18:25,760 --> 02:18:27,319 into a text file so that you can have it 3827 02:18:27,319 --> 02:18:29,160 for later but a good comment for here 3828 02:18:29,160 --> 02:18:32,920 might be this is the version now writing 3829 02:18:32,920 --> 02:18:35,200 our version like this in solidity tells 3830 02:18:35,200 --> 02:18:37,080 the solidity compiler that we're only 3831 02:18:37,080 --> 02:18:40,960 allowed to use 0.818 when compiling this 3832 02:18:40,960 --> 02:18:42,679 however maybe a new version comes out 3833 02:18:42,679 --> 02:18:45,120 and we're okay to use anything newer 3834 02:18:45,120 --> 02:18:47,120 than this version to tell the compiler 3835 02:18:47,120 --> 02:18:48,840 that we add this little hat this little 3836 02:18:48,840 --> 02:18:51,240 carrot which says this contract only 3837 02:18:51,240 --> 02:18:52,599 works with 3838 02:18:52,599 --> 02:18:55,920 0.818 or anything greater than that this 3839 02:18:55,920 --> 02:19:00,080 means 0.8.9 would work when 0.820 comes 3840 02:19:00,080 --> 02:19:02,880 out that one would work however 3841 02:19:02,880 --> 02:19:06,399 0.817 would not work if we were working 3842 02:19:06,399 --> 02:19:09,359 with 0.818 or above if we don't have the 3843 02:19:09,359 --> 02:19:11,960 carrot this tells the compiler that only 3844 02:19:11,960 --> 02:19:14,519 0.818 will work with this code if we 3845 02:19:14,519 --> 02:19:16,519 want to use solidity versions within a 3846 02:19:16,519 --> 02:19:19,080 range we could do something like this we 3847 02:19:19,080 --> 02:19:20,479 could say we want our version to be 3848 02:19:20,479 --> 02:19:23,519 greater greater than or equal to 3849 02:19:23,519 --> 02:19:27,040 0.818 but less than 3850 02:19:27,040 --> 02:19:29,840 0.9.0 this would tell the compiler that 3851 02:19:29,840 --> 02:19:32,080 any version between these two is a valid 3852 02:19:32,080 --> 02:19:34,880 version for example 3853 02:19:34,880 --> 02:19:38,800 0.9.1 would not work neither would 3854 02:19:38,800 --> 02:19:41,840 0.9.0 because these are not strictly 3855 02:19:41,840 --> 02:19:43,240 less than 3856 02:19:43,240 --> 02:19:45,319 0.9.0 great so now we know how to do 3857 02:19:45,319 --> 02:19:47,439 compiler versions now the next thing 3858 02:19:47,439 --> 02:19:49,000 every smart contract needs to start with 3859 02:19:49,000 --> 02:19:51,319 is something called the spdx 3860 02:19:51,319 --> 02:19:54,359 license identifier now this actually 3861 02:19:54,359 --> 02:19:56,319 isn't required by the compiler it'll 3862 02:19:56,319 --> 02:19:58,000 actually throw a warning if we compile 3863 02:19:58,000 --> 02:19:59,960 and it won't error it's fine if you 3864 02:19:59,960 --> 02:20:01,800 don't have this however it's highly 3865 02:20:01,800 --> 02:20:03,560 recommended this is a way to make 3866 02:20:03,560 --> 02:20:06,359 licensing and sharing code and IP of 3867 02:20:06,359 --> 02:20:08,399 your contracts a lot easier from a legal 3868 02:20:08,399 --> 02:20:10,439 perspective I have a link to more about 3869 02:20:10,439 --> 02:20:12,840 how licenses work in the GitHub repo 3870 02:20:12,840 --> 02:20:14,399 associated with this section of the 3871 02:20:14,399 --> 02:20:16,920 course MIT is known as one of the most 3872 02:20:16,920 --> 02:20:19,399 permissive licenses it basically means 3873 02:20:19,399 --> 02:20:20,960 anybody can use this code and pretty 3874 02:20:20,960 --> 02:20:22,359 much do whatever they want with it I 3875 02:20:22,359 --> 02:20:23,800 wouldn't worry too much about the 3876 02:20:23,800 --> 02:20:26,040 licenses right now but let's actually go 3877 02:20:26,040 --> 02:20:27,840 back to 3878 02:20:27,840 --> 02:20:30,319 0.8.9 and on the left- hand side let's 3879 02:20:30,319 --> 02:20:32,520 scroll down to this compiler button and 3880 02:20:32,520 --> 02:20:34,840 open this back up even right now now 3881 02:20:34,840 --> 02:20:36,880 that we don't even have any code we can 3882 02:20:36,880 --> 02:20:38,439 actually go ahead and compile this 3883 02:20:38,439 --> 02:20:40,399 contract now you might see a red 3884 02:20:40,399 --> 02:20:42,120 squiggly and you might see a warning 3885 02:20:42,120 --> 02:20:44,160 here but don't worry about that for now 3886 02:20:44,160 --> 02:20:46,399 to choose our compiler version We scroll 3887 02:20:46,399 --> 02:20:48,720 up to this section and we can choose the 3888 02:20:48,720 --> 02:20:50,040 compiler version that we want to work 3889 02:20:50,040 --> 02:20:52,040 with most of the time though if you just 3890 02:20:52,040 --> 02:20:53,920 hit compile simple storage. soulle or 3891 02:20:53,920 --> 02:20:55,800 you hit this big compile button it'll 3892 02:20:55,800 --> 02:20:57,960 automatically choose the version for you 3893 02:20:57,960 --> 02:21:00,359 for example if I scroll down but I hit 3894 02:21:00,359 --> 02:21:03,560 compile it'll automatically flip up to 3895 02:21:03,560 --> 02:21:06,280 08.19 and we were able to go ahead we 3896 02:21:06,280 --> 02:21:08,280 were able to successfully compile this 3897 02:21:08,280 --> 02:21:11,080 code now it says no contract compiled 3898 02:21:11,080 --> 02:21:13,120 yet because we haven't put a contract in 3899 02:21:13,120 --> 02:21:14,319 here yet we just put the version of 3900 02:21:14,319 --> 02:21:16,319 cility that we're working with compiling 3901 02:21:16,319 --> 02:21:18,600 our code means taking our human readable 3902 02:21:18,600 --> 02:21:20,800 code and transforming it into to 3903 02:21:20,800 --> 02:21:22,680 computer readable code which is 3904 02:21:22,680 --> 02:21:24,960 essentially a bunch of zeros and ones or 3905 02:21:24,960 --> 02:21:27,439 it's bite code computer code is very 3906 02:21:27,439 --> 02:21:29,359 specific instructions for the computer 3907 02:21:29,359 --> 02:21:31,720 to use or in our case the blockchain to 3908 02:21:31,720 --> 02:21:34,399 use for our contract we'll learn later 3909 02:21:34,399 --> 02:21:36,560 about Machine level code and op codes 3910 02:21:36,560 --> 02:21:38,960 and evm codes in a much later section of 3911 02:21:38,960 --> 02:21:41,000 this course Additionally you can hit 3912 02:21:41,000 --> 02:21:43,880 command s or controls which will also 3913 02:21:43,880 --> 02:21:46,040 save and compile you'll see I kind of 3914 02:21:46,040 --> 02:21:48,240 have a trigger finger and I will out of 3915 02:21:48,240 --> 02:21:51,200 habit hit command s all the time 3916 02:21:51,200 --> 02:21:52,840 because as somebody who codes a lot I 3917 02:21:52,840 --> 02:21:54,600 need to make sure I save all the time 3918 02:21:54,600 --> 02:21:56,040 otherwise things might not work as 3919 02:21:56,040 --> 02:21:58,160 intended as you saw if we use a 3920 02:21:58,160 --> 02:22:00,040 different version of solidity and we hit 3921 02:22:00,040 --> 02:22:01,680 the compile button it'll automatically 3922 02:22:01,680 --> 02:22:04,160 flip back but for example let's say I 3923 02:22:04,160 --> 02:22:05,240 wanted to use 3924 02:22:05,240 --> 02:22:07,960 0.8.7 anything greater than that and 3925 02:22:07,960 --> 02:22:09,399 we're on compiler 3926 02:22:09,399 --> 02:22:13,040 0.8.9 and we hit compile it won't change 3927 02:22:13,040 --> 02:22:15,280 however if I use something less than 3928 02:22:15,280 --> 02:22:18,280 0.8.7 and we hit compile it'll change 3929 02:22:18,280 --> 02:22:20,280 because it wants to automatically select 3930 02:22:20,280 --> 02:22:23,080 a solidity version that is appropriate 3931 02:22:23,080 --> 02:22:25,520 for the version that you chose again I 3932 02:22:25,520 --> 02:22:27,560 want to use 3933 02:22:27,560 --> 02:22:30,680 0.818 and I'm going to hit compile and 3934 02:22:30,680 --> 02:22:32,319 we're good to go now we're going to go 3935 02:22:32,319 --> 02:22:34,200 ahead and start writing our contract and 3936 02:22:34,200 --> 02:22:35,680 to get the full screen view again we 3937 02:22:35,680 --> 02:22:37,040 just go ahead click the solidity 3938 02:22:37,040 --> 02:22:39,080 compiler so that we can just see our 3939 02:22:39,080 --> 02:22:41,160 code here to start writing our contract 3940 02:22:41,160 --> 02:22:43,080 we're going to use a keyword in solidity 3941 02:22:43,080 --> 02:22:45,800 called contract this tells solidity that 3942 02:22:45,800 --> 02:22:47,680 the next piece of code is going to be 3943 02:22:47,680 --> 02:22:49,680 the name for our contract that we're 3944 02:22:49,680 --> 02:22:51,160 going to create you can think of a 3945 02:22:51,160 --> 02:22:53,240 contract very similar to a class if 3946 02:22:53,240 --> 02:22:55,120 you're familiar with JavaScript or 3947 02:22:55,120 --> 02:22:57,319 python or Java or really any 3948 02:22:57,319 --> 02:22:59,399 object-oriented programming and we're 3949 02:22:59,399 --> 02:23:00,800 going to go ahead and give our contract 3950 02:23:00,800 --> 02:23:02,560 a name here we're going to call ours 3951 02:23:02,560 --> 02:23:05,280 simple storage and then we add this 3952 02:23:05,280 --> 02:23:08,240 little open and closed curly braces or 3953 02:23:08,240 --> 02:23:10,479 curly brackets everything inside of 3954 02:23:10,479 --> 02:23:11,880 these curly brackets is going to be 3955 02:23:11,880 --> 02:23:14,000 considered part of this contract simple 3956 02:23:14,000 --> 02:23:16,279 storage now if we hit enter we go back 3957 02:23:16,279 --> 02:23:18,439 to the compiler and hit compile we can 3958 02:23:18,439 --> 02:23:20,600 see once again this little green check 3959 02:23:20,600 --> 02:23:23,240 Mark pop up this means our compilation 3960 02:23:23,240 --> 02:23:25,800 has been successful if we were to remove 3961 02:23:25,800 --> 02:23:27,399 for example this curly brace and hit 3962 02:23:27,399 --> 02:23:29,880 compile we would see we would get this 3963 02:23:29,880 --> 02:23:32,439 error compilation failed with one error 3964 02:23:32,439 --> 02:23:33,840 and if we scroll to the bottom it'll 3965 02:23:33,840 --> 02:23:36,240 tell us where the error actually is and 3966 02:23:36,240 --> 02:23:38,439 we'll get a little red popup saying what 3967 02:23:38,439 --> 02:23:40,359 line the error is actually on we'll 3968 02:23:40,359 --> 02:23:41,880 learn about debugging these errors in a 3969 02:23:41,880 --> 02:23:43,920 little bit but let's add the curly brace 3970 02:23:43,920 --> 02:23:46,359 back go ahead back to the compiler 3971 02:23:46,359 --> 02:23:50,760 compile and we're good to go 3972 02:23:53,279 --> 02:23:54,560 hypothetically we could deploy this 3973 02:23:54,560 --> 02:23:57,200 smart contract right now this is a valid 3974 02:23:57,200 --> 02:24:00,479 contract although it doesn't do anything 3975 02:24:00,479 --> 02:24:02,880 but congratulations technically with 3976 02:24:02,880 --> 02:24:04,680 just this little piece of code you've 3977 02:24:04,680 --> 02:24:06,960 written your first smart contract I 3978 02:24:06,960 --> 02:24:08,439 spelled version wrong so we're going to 3979 02:24:08,439 --> 02:24:10,640 correct that city has many different 3980 02:24:10,640 --> 02:24:12,800 types of things that you can build in 3981 02:24:12,800 --> 02:24:14,720 these smart contracts many different 3982 02:24:14,720 --> 02:24:17,040 data types or just types if you go to 3983 02:24:17,040 --> 02:24:19,160 the solidity documentation at docs. 3984 02:24:19,160 --> 02:24:21,640 solidity l.org again link this in the 3985 02:24:21,640 --> 02:24:23,840 GitHub we can select the types section 3986 02:24:23,840 --> 02:24:25,680 on the left hand side to learn more 3987 02:24:25,680 --> 02:24:27,880 about solidity types if you want to get 3988 02:24:27,880 --> 02:24:29,600 a holistic view of all the different 3989 02:24:29,600 --> 02:24:31,120 types you can go ahead and read this 3990 02:24:31,120 --> 02:24:33,399 documentation some of the basic types 3991 02:24:33,399 --> 02:24:36,359 are going to be Boolean Boolean uent and 3992 02:24:36,359 --> 02:24:39,600 an address and bytes bytes is a lower 3993 02:24:39,600 --> 02:24:41,120 level type which we'll talk about in a 3994 02:24:41,120 --> 02:24:43,240 little bit a Boolean is some type of 3995 02:24:43,240 --> 02:24:46,120 true false value a uint is going to be 3996 02:24:46,120 --> 02:24:49,920 an unsigned integer AKA a positive whole 3997 02:24:49,920 --> 02:24:52,800 number meaning no decimals no fractions 3998 02:24:52,800 --> 02:24:56,040 a integer is going to be a signed whole 3999 02:24:56,040 --> 02:24:58,359 number meaning it could be positive or 4000 02:24:58,359 --> 02:25:00,880 negative but again is a whole number and 4001 02:25:00,880 --> 02:25:02,319 then we have an address which is going 4002 02:25:02,319 --> 02:25:05,000 to be well an address it's very similar 4003 02:25:05,000 --> 02:25:07,359 to if we open up our metamask and we 4004 02:25:07,359 --> 02:25:09,479 click this account here it's going to be 4005 02:25:09,479 --> 02:25:11,399 something like this there are some other 4006 02:25:11,399 --> 02:25:13,279 types as well and ways to create your 4007 02:25:13,279 --> 02:25:15,000 own custom types but we'll learn more 4008 02:25:15,000 --> 02:25:17,160 about that later on we can use these 4009 02:25:17,160 --> 02:25:19,040 different types to Define different 4010 02:25:19,040 --> 02:25:21,399 variables VAR variables are essentially 4011 02:25:21,399 --> 02:25:23,240 holders for different values and these 4012 02:25:23,240 --> 02:25:25,200 values can have one of these types for 4013 02:25:25,200 --> 02:25:26,800 example we could create a variable 4014 02:25:26,800 --> 02:25:30,880 called has favorite number which would 4015 02:25:30,880 --> 02:25:33,160 represent if somebody has a favorite 4016 02:25:33,160 --> 02:25:35,520 number this has favorite number could be 4017 02:25:35,520 --> 02:25:37,359 true or false either they do have a 4018 02:25:37,359 --> 02:25:39,640 favorite number or they don't to tell 4019 02:25:39,640 --> 02:25:41,800 solidity that this has favorite number 4020 02:25:41,800 --> 02:25:44,200 is a true false or a Boolean we would 4021 02:25:44,200 --> 02:25:46,439 add this Bull keyword before has 4022 02:25:46,439 --> 02:25:48,319 favorite number so this has favorite 4023 02:25:48,319 --> 02:25:49,600 number is going to be either true or 4024 02:25:49,600 --> 02:25:52,080 false and to set its value we're going 4025 02:25:52,080 --> 02:25:53,880 to give it this little equal sign and 4026 02:25:53,880 --> 02:25:56,720 say true so now has favorite number is a 4027 02:25:56,720 --> 02:25:59,040 variable that represents true we could 4028 02:25:59,040 --> 02:26:01,240 also say has favorite number is false 4029 02:26:01,240 --> 02:26:02,840 meaning that somebody doesn't have a 4030 02:26:02,840 --> 02:26:05,040 favorite number for a uent which again 4031 02:26:05,040 --> 02:26:07,920 is an unsigned integer we could say uint 4032 02:26:07,920 --> 02:26:11,800 favorite number equals 88 this means 4033 02:26:11,800 --> 02:26:13,560 that this variable favorite number is 4034 02:26:13,560 --> 02:26:16,680 going to be 88 a uint and int are 4035 02:26:16,680 --> 02:26:18,840 actually special in that we can actually 4036 02:26:18,840 --> 02:26:21,120 specify how many bits or bytes that we 4037 02:26:21,120 --> 02:26:23,600 want to use for example we could say U 4038 02:26:23,600 --> 02:26:26,680 256 U 256 specifies this variable 4039 02:26:26,680 --> 02:26:29,560 favorite number has 256 bits we're not 4040 02:26:29,560 --> 02:26:31,880 going to go over bits and bytes in depth 4041 02:26:31,880 --> 02:26:33,720 right now but if you want to get a quick 4042 02:26:33,720 --> 02:26:35,600 refresher we've left a link in the 4043 02:26:35,600 --> 02:26:37,359 GitHub repo associated with this course 4044 02:26:37,359 --> 02:26:40,200 to give you an overview of bits versus 4045 02:26:40,200 --> 02:26:42,600 bytes and how they work an easier way to 4046 02:26:42,600 --> 02:26:44,479 think about this is really just how big 4047 02:26:44,479 --> 02:26:46,120 can it get the bigger the number over 4048 02:26:46,120 --> 02:26:47,920 here the bigger this favorite number can 4049 02:26:47,920 --> 02:26:51,600 be the maximum size is a ENT 256 and if 4050 02:26:51,600 --> 02:26:54,840 you don't specify the U 256 it defaults 4051 02:26:54,840 --> 02:26:58,439 to being a u 256 so this and this are 4052 02:26:58,439 --> 02:27:01,319 the same thing this this same thing you 4053 02:27:01,319 --> 02:27:05,160 could also have 8 Bits 16 bits 64 bits 4054 02:27:05,160 --> 02:27:07,560 Etc often times it's better when we're 4055 02:27:07,560 --> 02:27:09,200 writing our code for a readability 4056 02:27:09,200 --> 02:27:12,479 standpoint to be as explicit as possible 4057 02:27:12,479 --> 02:27:14,080 so you'll see me pretty much always 4058 02:27:14,080 --> 02:27:16,319 writing U and 256 because I want to be 4059 02:27:16,319 --> 02:27:18,399 very explicit with how many bits I'm 4060 02:27:18,399 --> 02:27:20,439 using for U and 256 even even though 4061 02:27:20,439 --> 02:27:22,399 they mean the same thing instead of a u 4062 02:27:22,399 --> 02:27:25,000 256 we could also have this be an INT 4063 02:27:25,000 --> 02:27:27,600 256 and actually let's add that Boolean 4064 02:27:27,600 --> 02:27:30,120 back up here now an INT can actually be 4065 02:27:30,120 --> 02:27:32,359 positive or negative so we could have 4066 02:27:32,359 --> 02:27:35,560 our favorite number be88 if we wanted to 4067 02:27:35,560 --> 02:27:38,080 we can also have strings or text 4068 02:27:38,080 --> 02:27:39,800 variables which I didn't name up here 4069 02:27:39,800 --> 02:27:41,840 but I'll say why in just a minute we 4070 02:27:41,840 --> 02:27:43,840 could say string 4071 02:27:43,840 --> 02:27:48,319 favorite in text equals 88 let's 4072 02:27:48,319 --> 02:27:50,399 actually make this positive 88 even 4073 02:27:50,399 --> 02:27:51,800 though an INT could be positive or 4074 02:27:51,800 --> 02:27:53,920 negative I'll put this little semicolon 4075 02:27:53,920 --> 02:27:56,080 here you'll notice that at the end of 4076 02:27:56,080 --> 02:27:58,160 every one of these lines I'm adding this 4077 02:27:58,160 --> 02:28:00,439 semicolon the semicolon is how you can 4078 02:28:00,439 --> 02:28:02,279 tell solidity that a statement has 4079 02:28:02,279 --> 02:28:04,359 completed so this semicolon is saying 4080 02:28:04,359 --> 02:28:06,720 the end of this line is right here if we 4081 02:28:06,720 --> 02:28:09,319 wanted to we could put all of our code 4082 02:28:09,319 --> 02:28:11,560 on the same line like this and this 4083 02:28:11,560 --> 02:28:13,600 would compile fine it just looks really 4084 02:28:13,600 --> 02:28:16,279 ugly so we always want to put our code 4085 02:28:16,279 --> 02:28:19,200 on a new line after the semicolon a 4086 02:28:19,200 --> 02:28:20,640 string in solidity 4087 02:28:20,640 --> 02:28:22,840 is basically text that represents well 4088 02:28:22,840 --> 02:28:26,040 words so I could say 88 instead of 4089 02:28:26,040 --> 02:28:28,399 having 88 in here to tell solidity that 4090 02:28:28,399 --> 02:28:30,279 something is a string you have to put it 4091 02:28:30,279 --> 02:28:32,720 in between quotes I could put really any 4092 02:28:32,720 --> 02:28:34,840 combination of characters in here even 4093 02:28:34,840 --> 02:28:38,200 like hello or follow Patrick on Twitter 4094 02:28:38,200 --> 02:28:40,160 and let's actually do U in 256 here 4095 02:28:40,160 --> 02:28:43,279 favorite number and we'll do an in 256 4096 02:28:43,279 --> 02:28:47,000 favorite int equals 88 this way we'll 4097 02:28:47,000 --> 02:28:48,319 just have an example of all these 4098 02:28:48,319 --> 02:28:50,840 different types on screen we can also do 4099 02:28:50,840 --> 02:28:53,720 an address so we can say address my 4100 02:28:53,720 --> 02:28:56,399 address equals and we can go into our 4101 02:28:56,399 --> 02:28:59,600 metamask copy the address and paste it 4102 02:28:59,600 --> 02:29:02,080 right into remix and add that semicolon 4103 02:29:02,080 --> 02:29:04,120 and now we have our address type in 4104 02:29:04,120 --> 02:29:06,200 remix and then finally down here we're 4105 02:29:06,200 --> 02:29:10,880 going to say a bytes 32 object fav bytes 4106 02:29:10,880 --> 02:29:14,080 32 equals cat and we're going to put it 4107 02:29:14,080 --> 02:29:17,000 in quotes just like we did the string up 4108 02:29:17,000 --> 02:29:18,479 here and what's interesting about the 4109 02:29:18,479 --> 02:29:20,240 string object is that strings are 4110 02:29:20,240 --> 02:29:22,920 actually secretly just byes objects 4111 02:29:22,920 --> 02:29:26,120 specifically for text so a string can 4112 02:29:26,120 --> 02:29:28,080 actually get converted to a byes object 4113 02:29:28,080 --> 02:29:30,279 really easily because under the hood 4114 02:29:30,279 --> 02:29:32,160 they're essentially the same thing bites 4115 02:29:32,160 --> 02:29:33,840 typically look like something like xerx 4116 02:29:33,840 --> 02:29:35,520 and then a whole bunch of random numbers 4117 02:29:35,520 --> 02:29:38,240 and letters that represent the hex of 4118 02:29:38,240 --> 02:29:40,439 whatever the bites is and can often be 4119 02:29:40,439 --> 02:29:42,920 represented as strings like cat we'll 4120 02:29:42,920 --> 02:29:44,840 talk about btes more in the future 4121 02:29:44,840 --> 02:29:47,920 similar to U 256 and in 256 you can have 4122 02:29:47,920 --> 02:29:50,840 different size bytes like bytes 2 two 4123 02:29:50,840 --> 02:29:54,720 byes byes four byes 8 Etc all the way up 4124 02:29:54,720 --> 02:29:57,720 to 32 you can also have just straight up 4125 02:29:57,720 --> 02:30:00,720 bytes and not have a number after but 4126 02:30:00,720 --> 02:30:02,120 that's a slightly different type and 4127 02:30:02,120 --> 02:30:04,479 we'll go over that later as well a u 4128 02:30:04,479 --> 02:30:06,920 like this and a u 256 are the same thing 4129 02:30:06,920 --> 02:30:09,439 but a byes 32 and a byes with nothing 4130 02:30:09,439 --> 02:30:11,560 are actually different so keep that in 4131 02:30:11,560 --> 02:30:13,640 mind for now the largest bytes like I 4132 02:30:13,640 --> 02:30:15,960 was saying is actually 32 so for example 4133 02:30:15,960 --> 02:30:18,720 we can't do 8 bytes 64 and if we type 4134 02:30:18,720 --> 02:30:20,680 that in Here remix section goes hey 4135 02:30:20,680 --> 02:30:22,160 there's an issue here and if we try to 4136 02:30:22,160 --> 02:30:24,720 compile this we scroll down we'll again 4137 02:30:24,720 --> 02:30:27,399 see this little error code here and this 4138 02:30:27,399 --> 02:30:29,760 little error pop up it even gives us an 4139 02:30:29,760 --> 02:30:32,399 output declaration error identifier not 4140 02:30:32,399 --> 02:30:35,359 found or not unique it gives us the line 4141 02:30:35,359 --> 02:30:37,479 and we can say ah Whoops a Daisy this 4142 02:30:37,479 --> 02:30:40,160 should be a bytes 32 and we can go back 4143 02:30:40,160 --> 02:30:42,560 and compile this for our simple storage 4144 02:30:42,560 --> 02:30:44,439 contract let's say that we only want to 4145 02:30:44,439 --> 02:30:46,479 store a favorite number this contract is 4146 02:30:46,479 --> 02:30:47,960 going to be a contract that allows us to 4147 02:30:47,960 --> 02:30:49,560 store our favorite number and some 4148 02:30:49,560 --> 02:30:51,160 different people's favorite numbers as 4149 02:30:51,160 --> 02:30:52,800 well so we're going to go ahead and 4150 02:30:52,800 --> 02:30:55,760 delete everything except for the U 256 4151 02:30:55,760 --> 02:30:57,279 favorite number so we're going to go 4152 02:30:57,279 --> 02:30:59,560 ahead and delete everything and boom and 4153 02:30:59,560 --> 02:31:00,960 we'll pick a smaller favorite number 4154 02:31:00,960 --> 02:31:03,160 just to make it a little mentally easier 4155 02:31:03,160 --> 02:31:05,359 now these variables actually have 4156 02:31:05,359 --> 02:31:08,920 default values so for example if I don't 4157 02:31:08,920 --> 02:31:10,840 set my favorite number to anything and I 4158 02:31:10,840 --> 02:31:12,600 have a line that looks like this you'll 4159 02:31:12,600 --> 02:31:14,960 see that this actually compiles fine 4160 02:31:14,960 --> 02:31:16,720 favorite number will actually get 4161 02:31:16,720 --> 02:31:19,520 defaulted to zero and all of these types 4162 02:31:19,520 --> 02:31:22,960 have a different default value U 256 is 4163 02:31:22,960 --> 02:31:27,000 zero booleans is false Etc so saying U 4164 02:31:27,000 --> 02:31:29,399 256 favorite number and not having an 4165 02:31:29,399 --> 02:31:31,319 equal sign after here is the same as 4166 02:31:31,319 --> 02:31:34,120 doing U and 256 favorite number equals z 4167 02:31:34,120 --> 02:31:36,359 so for now let's not initialize it to 4168 02:31:36,359 --> 02:31:38,279 anything so that favorite number starts 4169 02:31:38,279 --> 02:31:40,680 off as zero and remember as you're 4170 02:31:40,680 --> 02:31:42,479 coding along here and typing along with 4171 02:31:42,479 --> 02:31:44,319 me if you get confused make sure to 4172 02:31:44,319 --> 02:31:46,000 write your own comments for example we 4173 02:31:46,000 --> 02:31:50,000 can say favorite number gets initial 4174 02:31:50,000 --> 02:31:56,279 ized to zero if no value is 4175 02:31:58,680 --> 02:32:00,840 given now let's go ahead and learn to 4176 02:32:00,840 --> 02:32:03,279 make our first function basic solidity 4177 02:32:03,279 --> 02:32:06,319 function section functions or methods 4178 02:32:06,319 --> 02:32:09,120 functions or methods are a subsection of 4179 02:32:09,120 --> 02:32:11,920 code that when called will execute a 4180 02:32:11,920 --> 02:32:14,920 very specific small piece of our entire 4181 02:32:14,920 --> 02:32:16,479 codebase if you're familiar with 4182 02:32:16,479 --> 02:32:18,240 JavaScript or python or any other 4183 02:32:18,240 --> 02:32:19,880 programming language functions in 4184 02:32:19,880 --> 02:32:22,399 validity are exactly the same functions 4185 02:32:22,399 --> 02:32:25,439 are identified by the keyword function 4186 02:32:25,439 --> 02:32:27,399 let's create a function and name it 4187 02:32:27,399 --> 02:32:29,479 store and we're going to have this 4188 02:32:29,479 --> 02:32:31,600 function be responsible for actually 4189 02:32:31,600 --> 02:32:33,760 updating our favorite number we're going 4190 02:32:33,760 --> 02:32:36,880 to store a new favorite number so you 4191 02:32:36,880 --> 02:32:38,600 first write the function keyword the 4192 02:32:38,600 --> 02:32:40,760 name of the function and then you add 4193 02:32:40,760 --> 02:32:43,040 these two parentheses whatever is in 4194 02:32:43,040 --> 02:32:45,279 between these two parentheses represents 4195 02:32:45,279 --> 02:32:47,920 what we're going to pass or send to our 4196 02:32:47,920 --> 02:32:49,840 function or the parameters that we're 4197 02:32:49,840 --> 02:32:51,640 we're going to send to our function for 4198 02:32:51,640 --> 02:32:53,600 example we need to tell our store 4199 02:32:53,600 --> 02:32:56,080 function what value it should use to 4200 02:32:56,080 --> 02:32:58,279 update favorite number so we're going to 4201 02:32:58,279 --> 02:33:00,359 tell our store function it should take a 4202 02:33:00,359 --> 02:33:02,359 un 256 and this variable that we're 4203 02:33:02,359 --> 02:33:03,640 going to pass to it we're going to call 4204 02:33:03,640 --> 02:33:06,720 underscore favorit number it's important 4205 02:33:06,720 --> 02:33:08,800 that we give it a different name than 4206 02:33:08,800 --> 02:33:10,439 favorite number up here and we'll talk 4207 02:33:10,439 --> 02:33:12,120 about that in a little bit then we're 4208 02:33:12,120 --> 02:33:13,319 going to say this is going to be a 4209 02:33:13,319 --> 02:33:14,960 public function and we'll explain that 4210 02:33:14,960 --> 02:33:17,000 soon too we want to put these little 4211 02:33:17,000 --> 02:33:19,319 curly brackets in here as well and we're 4212 02:33:19,319 --> 02:33:22,319 just going to say favorite number equals 4213 02:33:22,319 --> 02:33:25,279 underscore favorite number and without 4214 02:33:25,279 --> 02:33:27,120 going too deep into what this is doing 4215 02:33:27,120 --> 02:33:29,000 we're saying I'm not going to explain 4216 02:33:29,000 --> 02:33:31,319 public yet but we will in a minute but 4217 02:33:31,319 --> 02:33:33,399 what we're saying is whenever you call 4218 02:33:33,399 --> 02:33:36,120 this store function you're going to set 4219 02:33:36,120 --> 02:33:39,600 our favorite number variable to whatever 4220 02:33:39,600 --> 02:33:41,840 variable that we passed I'll explain why 4221 02:33:41,840 --> 02:33:43,960 we do this underscore here as well in a 4222 02:33:43,960 --> 02:33:45,840 little bit and with just this we can 4223 02:33:45,840 --> 02:33:47,680 actually start to simulate what this 4224 02:33:47,680 --> 02:33:49,800 smart contract will do and if our store 4225 02:33:49,800 --> 02:33:51,760 function will actually work correctly so 4226 02:33:51,760 --> 02:33:53,319 what we can do with just this code right 4227 02:33:53,319 --> 02:33:56,319 here is come over back to the compile 4228 02:33:56,319 --> 02:33:58,880 Tab and hit compile make sure that we 4229 02:33:58,880 --> 02:34:00,399 get this green check mark and that 4230 02:34:00,399 --> 02:34:02,560 everything looks good and then we can go 4231 02:34:02,560 --> 02:34:04,960 down to this deploy and run transactions 4232 02:34:04,960 --> 02:34:07,279 tab our deploy and run transactions tab 4233 02:34:07,279 --> 02:34:09,399 has a ton of different parameters in 4234 02:34:09,399 --> 02:34:11,720 here on how to actually deploy and run 4235 02:34:11,720 --> 02:34:13,760 with our transactions we're going to 4236 02:34:13,760 --> 02:34:15,960 deploy this contract to a simulated 4237 02:34:15,960 --> 02:34:18,000 virtual environment so we're going to 4238 02:34:18,000 --> 02:34:19,399 deploy it basically to a fake 4239 02:34:19,399 --> 02:34:20,479 environment we're not going to be 4240 02:34:20,479 --> 02:34:22,080 deploying it to a test net we're going 4241 02:34:22,080 --> 02:34:24,240 to deploy it basically in kind of an 4242 02:34:24,240 --> 02:34:26,520 imaginary world in order for us to do 4243 02:34:26,520 --> 02:34:29,279 this first make sure we're on this remix 4244 02:34:29,279 --> 02:34:31,439 VM and for us we're going to just use 4245 02:34:31,439 --> 02:34:33,880 the default which is the merge doesn't 4246 02:34:33,880 --> 02:34:35,680 really matter which one you're on just 4247 02:34:35,680 --> 02:34:38,640 so long as it's the remix VM this remix 4248 02:34:38,640 --> 02:34:41,040 VM is a fake local blockchain where we 4249 02:34:41,040 --> 02:34:42,640 don't have to wait for transactions to 4250 02:34:42,640 --> 02:34:44,560 complete and we don't have to deal with 4251 02:34:44,560 --> 02:34:46,720 any of the oddities on deploying our 4252 02:34:46,720 --> 02:34:49,359 code to a real test net or a real main 4253 02:34:49,359 --> 02:34:51,000 net and don't worry about the rest of 4254 02:34:51,000 --> 02:34:53,040 these for now we also get an account 4255 02:34:53,040 --> 02:34:55,640 here when we run on our fake remix VM we 4256 02:34:55,640 --> 02:34:57,359 get automatically given an account with 4257 02:34:57,359 --> 02:34:59,319 a different amount of ethereum for each 4258 02:34:59,319 --> 02:35:01,240 account you can think of each one of 4259 02:35:01,240 --> 02:35:03,600 these accounts similar to our metamask 4260 02:35:03,600 --> 02:35:05,720 accounts in metamask except for these 4261 02:35:05,720 --> 02:35:08,319 our fake imaginary accounts that remix 4262 02:35:08,319 --> 02:35:10,560 just gives to us for our transactions 4263 02:35:10,560 --> 02:35:11,960 including deploying contracts we're 4264 02:35:11,960 --> 02:35:14,160 given a gas limit values that we can 4265 02:35:14,160 --> 02:35:16,160 send and we can also choose our contract 4266 02:35:16,160 --> 02:35:18,000 depending on which one we've compiled 4267 02:35:18,000 --> 02:35:19,680 since we only have one contract in here 4268 02:35:19,680 --> 02:35:21,520 we only have one to choose from so on 4269 02:35:21,520 --> 02:35:23,240 the left hand side to deploy our 4270 02:35:23,240 --> 02:35:26,160 contract to this fake remix VM 4271 02:35:26,160 --> 02:35:27,439 environment we're going to go ahead and 4272 02:35:27,439 --> 02:35:29,880 collect the deploy button if we scroll 4273 02:35:29,880 --> 02:35:31,520 all the way down to the bottom now under 4274 02:35:31,520 --> 02:35:33,439 this deployed contracts we can see we 4275 02:35:33,439 --> 02:35:35,680 actually deployed a contract here simple 4276 02:35:35,680 --> 02:35:37,640 storage we can see the balance of zero 4277 02:35:37,640 --> 02:35:39,319 and we see this big orange button that 4278 02:35:39,319 --> 02:35:42,640 says store and then u56 favorite number 4279 02:35:42,640 --> 02:35:45,080 on our local blockchain this at blah 4280 02:35:45,080 --> 02:35:46,800 blah blah here this is going to be the 4281 02:35:46,800 --> 02:35:49,920 address of our contract similar to our 4282 02:35:49,920 --> 02:35:51,560 wallets how they have different 4283 02:35:51,560 --> 02:35:54,040 addresses every single contract has a 4284 02:35:54,040 --> 02:35:56,160 unique address as well and if we hit 4285 02:35:56,160 --> 02:35:58,000 this little copy button and we close 4286 02:35:58,000 --> 02:36:00,680 this we put as a comment here and we 4287 02:36:00,680 --> 02:36:02,720 paste it we can see this looks exactly 4288 02:36:02,720 --> 02:36:05,040 similar to an address such as what's in 4289 02:36:05,040 --> 02:36:06,960 our metamask and then let's go ahead and 4290 02:36:06,960 --> 02:36:08,439 open the deploy back up and we see that 4291 02:36:08,439 --> 02:36:10,200 deployed contract is still there 4292 02:36:10,200 --> 02:36:11,800 additionally if you hit this little show 4293 02:36:11,800 --> 02:36:14,279 terminal button and you pull this up we 4294 02:36:14,279 --> 02:36:15,600 can actually see we have this little 4295 02:36:15,600 --> 02:36:17,840 comment here creation of simple storage 4296 02:36:17,840 --> 02:36:19,880 pending and we have this green check 4297 02:36:19,880 --> 02:36:21,880 mark here this is notating that we 4298 02:36:21,880 --> 02:36:23,760 actually sent a transaction to deploy 4299 02:36:23,760 --> 02:36:25,960 this contract similar to sending eth 4300 02:36:25,960 --> 02:36:28,200 back and forth in order for us to deploy 4301 02:36:28,200 --> 02:36:29,880 a contract we actually have to send a 4302 02:36:29,880 --> 02:36:31,479 transaction since we're doing this on 4303 02:36:31,479 --> 02:36:33,279 the remix M this is a simulated 4304 02:36:33,279 --> 02:36:35,920 transaction a pretend transaction inside 4305 02:36:35,920 --> 02:36:37,960 of our remix environment you can even 4306 02:36:37,960 --> 02:36:40,240 hit the little drop down and see even 4307 02:36:40,240 --> 02:36:42,240 more information about this transaction 4308 02:36:42,240 --> 02:36:43,800 you'll see a lot of familiar keywords 4309 02:36:43,800 --> 02:36:47,520 like status transaction hash from to gas 4310 02:36:47,520 --> 02:36:50,279 Etc deploying a contract uses the exact 4311 02:36:50,279 --> 02:36:52,800 same process as sending a transaction 4312 02:36:52,800 --> 02:36:55,040 for just eth the main difference is we 4313 02:36:55,040 --> 02:36:57,240 populate this data or input field with a 4314 02:36:57,240 --> 02:37:00,120 ton of that bite code and if you copy 4315 02:37:00,120 --> 02:37:02,640 this input field or this data field and 4316 02:37:02,640 --> 02:37:04,720 go ahead and make a comment in here 4317 02:37:04,720 --> 02:37:08,640 you'll see it's a massive line and this 4318 02:37:08,640 --> 02:37:11,040 massive line notates all the data 4319 02:37:11,040 --> 02:37:13,120 associated with this smart contract all 4320 02:37:13,120 --> 02:37:16,080 the machine readable code remember 4321 02:37:16,080 --> 02:37:18,600 anytime we do anything that modifies any 4322 02:37:18,600 --> 02:37:20,319 value on the blockchain we actually do 4323 02:37:20,319 --> 02:37:22,840 that by sending a transaction deploying 4324 02:37:22,840 --> 02:37:25,200 a contract is modifying the blockchain 4325 02:37:25,200 --> 02:37:27,560 so we do it in a transaction which means 4326 02:37:27,560 --> 02:37:30,120 yes we spend gas now this big orange 4327 02:37:30,120 --> 02:37:32,040 button over here actually resembles our 4328 02:37:32,040 --> 02:37:34,720 function store in our smart contract and 4329 02:37:34,720 --> 02:37:36,439 if we add some numbers in here and we 4330 02:37:36,439 --> 02:37:39,319 call it again if we pull the terminal up 4331 02:37:39,319 --> 02:37:41,439 we can see transact to simple storage 4332 02:37:41,439 --> 02:37:43,960 pending and we see we sent a transaction 4333 02:37:43,960 --> 02:37:46,359 which called this store if we do this 4334 02:37:46,359 --> 02:37:48,560 again with a different number we call it 4335 02:37:48,560 --> 02:37:50,800 we can see our terminal say oh you sent 4336 02:37:50,800 --> 02:37:52,760 another another transaction to update 4337 02:37:52,760 --> 02:37:54,640 the state of the blockchain and if we 4338 02:37:54,640 --> 02:37:56,600 scroll all the way up to our account 4339 02:37:56,600 --> 02:37:58,319 you'll see that we have a little less 4340 02:37:58,319 --> 02:37:59,920 ether in our account because we had to 4341 02:37:59,920 --> 02:38:01,880 spend the gas associated with well a 4342 02:38:01,880 --> 02:38:03,640 deploying this contract and then B 4343 02:38:03,640 --> 02:38:05,600 calling these functions and then for 4344 02:38:05,600 --> 02:38:07,880 example if I add this if I add five in 4345 02:38:07,880 --> 02:38:09,359 here and hit store we'll send a 4346 02:38:09,359 --> 02:38:11,279 transaction to store five on the 4347 02:38:11,279 --> 02:38:12,920 blockchain now you might be thinking 4348 02:38:12,920 --> 02:38:15,240 okay Patrick that's pretty cool but what 4349 02:38:15,240 --> 02:38:16,760 is the value of favorite number you're 4350 02:38:16,760 --> 02:38:19,200 telling me that this function store is 4351 02:38:19,200 --> 02:38:21,160 up updating favorite number but I can't 4352 02:38:21,160 --> 02:38:23,000 really see it how do I know that 4353 02:38:23,000 --> 02:38:24,120 favorite number has actually been 4354 02:38:24,120 --> 02:38:26,600 updated to five well the reason we can't 4355 02:38:26,600 --> 02:38:28,600 see it is that the visibility of our 4356 02:38:28,600 --> 02:38:30,800 favorite number is actually defaulted to 4357 02:38:30,800 --> 02:38:33,720 internal so us not having anything here 4358 02:38:33,720 --> 02:38:35,880 or right internal are actually meaning 4359 02:38:35,880 --> 02:38:37,840 the same thing and we'll talk about 4360 02:38:37,840 --> 02:38:39,920 visibility and default visibilities in a 4361 02:38:39,920 --> 02:38:41,680 minute but in order for us to actually 4362 02:38:41,680 --> 02:38:43,840 see the value of our favorite number 4363 02:38:43,840 --> 02:38:45,560 we'll go ahead and add the public 4364 02:38:45,560 --> 02:38:47,760 keyword to this this changes the 4365 02:38:47,760 --> 02:38:49,479 visibility of favorite number to public 4366 02:38:49,479 --> 02:38:50,600 and like I said we'll talk about 4367 02:38:50,600 --> 02:38:52,359 visibility in a minute but let's go 4368 02:38:52,359 --> 02:38:54,399 ahead and compile this let's go ahead 4369 02:38:54,399 --> 02:38:56,760 and delete this contract by hitting this 4370 02:38:56,760 --> 02:38:59,720 x here and let's redeploy this contract 4371 02:38:59,720 --> 02:39:01,840 with this new public keyword so let's go 4372 02:39:01,840 --> 02:39:03,680 ahead and hit deploy and now if we 4373 02:39:03,680 --> 02:39:05,240 scroll down and we open up our simple 4374 02:39:05,240 --> 02:39:07,359 storage we actually now see a blue 4375 02:39:07,359 --> 02:39:09,880 button labeled favorite number and if we 4376 02:39:09,880 --> 02:39:13,200 click it now we can see it returns zero 4377 02:39:13,200 --> 02:39:15,359 which makes sense because we know that U 4378 02:39:15,359 --> 02:39:18,960 256 is default to Z now if I go ahead 4379 02:39:18,960 --> 02:39:21,240 and add five into here and hit the store 4380 02:39:21,240 --> 02:39:23,279 button if I pull up the terminal we'll 4381 02:39:23,279 --> 02:39:25,760 see that we went ahead and executed that 4382 02:39:25,760 --> 02:39:28,319 store function call that transaction 4383 02:39:28,319 --> 02:39:31,840 that's going to take input this five as 4384 02:39:31,840 --> 02:39:33,960 favorite number and set it to our 4385 02:39:33,960 --> 02:39:36,040 favorite number now if I hit favorite 4386 02:39:36,040 --> 02:39:37,840 number you can see it does indeed return 4387 02:39:37,840 --> 02:39:40,399 five showing that we actually updated 4388 02:39:40,399 --> 02:39:42,080 our favorite number with this function 4389 02:39:42,080 --> 02:39:43,960 call and remember though I'm going to go 4390 02:39:43,960 --> 02:39:45,160 ahead and do the skan and remember when 4391 02:39:45,160 --> 02:39:47,160 I hit X here this is just removing it 4392 02:39:47,160 --> 02:39:48,640 from this window here if you actually 4393 02:39:48,640 --> 02:39:50,000 deploy a smart contract to the 4394 02:39:50,000 --> 02:39:52,200 blockchain hitting X from this window 4395 02:39:52,200 --> 02:39:53,960 doesn't do anything because once you 4396 02:39:53,960 --> 02:39:55,640 deploy your contract it's immutable it's 4397 02:39:55,640 --> 02:39:56,960 out there and you can't just delete it 4398 02:39:56,960 --> 02:39:59,200 by clicking X and remix functions and 4399 02:39:59,200 --> 02:40:01,520 variables can have one of four different 4400 02:40:01,520 --> 02:40:04,800 visibility specifiers in solidity public 4401 02:40:04,800 --> 02:40:07,160 private external and internal if you 4402 02:40:07,160 --> 02:40:09,120 don't give one of these keywords to your 4403 02:40:09,120 --> 02:40:10,960 variables it'll get defaulted to 4404 02:40:10,960 --> 02:40:12,960 internal public functions mean that 4405 02:40:12,960 --> 02:40:14,880 they're visible externally and 4406 02:40:14,880 --> 02:40:16,600 internally and you'll see here it says 4407 02:40:16,600 --> 02:40:18,600 it creates a getter function for storage 4408 02:40:18,600 --> 02:40:21,160 slst State variables this means that 4409 02:40:21,160 --> 02:40:23,960 other people can call this function or 4410 02:40:23,960 --> 02:40:26,720 call this variable when we didn't have a 4411 02:40:26,720 --> 02:40:28,279 visibility for favorite number it 4412 02:40:28,279 --> 02:40:30,920 defaulted to internal which is why we 4413 02:40:30,920 --> 02:40:33,080 didn't see this blue number pop up 4414 02:40:33,080 --> 02:40:35,319 because internal it means that other 4415 02:40:35,319 --> 02:40:37,240 contracts and people aren't allowed to 4416 02:40:37,240 --> 02:40:39,279 call on this favorite number we have a 4417 02:40:39,279 --> 02:40:40,680 little bit more here it says it actually 4418 02:40:40,680 --> 02:40:43,080 creates a getter function for storage SL 4419 02:40:43,080 --> 02:40:45,439 State variables when we add this public 4420 02:40:45,439 --> 02:40:47,319 keyword here it's actually equivalent to 4421 02:40:47,319 --> 02:40:49,680 us making a getter for this favorite 4422 02:40:49,680 --> 02:40:52,000 number variable a getter function and 4423 02:40:52,000 --> 02:40:53,399 I'll show you exactly what the function 4424 02:40:53,399 --> 02:40:55,240 will look like in a little bit now keep 4425 02:40:55,240 --> 02:40:57,120 in mind though everything on chain is 4426 02:40:57,120 --> 02:40:59,359 technically public so setting a function 4427 02:40:59,359 --> 02:41:01,399 or variable to private isn't a good way 4428 02:41:01,399 --> 02:41:03,800 to hide what the value actually is there 4429 02:41:03,800 --> 02:41:05,000 and we'll talk a little bit more about 4430 02:41:05,000 --> 02:41:07,399 storage and visibility and and that much 4431 02:41:07,399 --> 02:41:09,240 later just remember everything on these 4432 02:41:09,240 --> 02:41:12,200 evm chains is actually public data this 4433 02:41:12,200 --> 02:41:13,640 public variable just means any other 4434 02:41:13,640 --> 02:41:15,800 contract can call this favorite number 4435 02:41:15,800 --> 02:41:17,240 and see the value what's in favorite 4436 02:41:17,240 --> 02:41:19,520 number and private means only the 4437 02:41:19,520 --> 02:41:21,479 current contract can external functions 4438 02:41:21,479 --> 02:41:24,000 mean they're only visible externally and 4439 02:41:24,000 --> 02:41:26,200 this is only for functions not for 4440 02:41:26,200 --> 02:41:28,040 variables and it means another function 4441 02:41:28,040 --> 02:41:29,520 inside this contract couldn't call an 4442 02:41:29,520 --> 02:41:31,279 external function and internal means 4443 02:41:31,279 --> 02:41:33,319 only the current contract and its child 4444 02:41:33,319 --> 02:41:34,960 contracts can call the function we'll 4445 02:41:34,960 --> 02:41:36,319 talk about child contracts and 4446 02:41:36,319 --> 02:41:39,000 inheritance in a later section so let's 4447 02:41:39,000 --> 02:41:40,479 just keep it public for now the reason 4448 02:41:40,479 --> 02:41:42,359 that we have this underscore here in 4449 02:41:42,359 --> 02:41:44,120 this parameter is because we need to 4450 02:41:44,120 --> 02:41:47,040 tell users that this variable in here is 4451 02:41:47,040 --> 02:41:48,840 different than favorite number and 4452 02:41:48,840 --> 02:41:50,359 there's a a couple different conventions 4453 02:41:50,359 --> 02:41:52,560 on naming local variables versus these 4454 02:41:52,560 --> 02:41:54,479 what's known as state variables or 4455 02:41:54,479 --> 02:41:56,840 variables outside of functions and we'll 4456 02:41:56,840 --> 02:41:59,279 go over those later in the course now 4457 02:41:59,279 --> 02:42:00,120 here's something that's really 4458 02:42:00,120 --> 02:42:01,720 interesting as well remember how I told 4459 02:42:01,720 --> 02:42:03,840 you earlier that sending ether is a 4460 02:42:03,840 --> 02:42:06,279 relatively simple transaction right well 4461 02:42:06,279 --> 02:42:07,960 let's see what happens when we call this 4462 02:42:07,960 --> 02:42:10,120 store function and we update favorite 4463 02:42:10,120 --> 02:42:12,000 number to five let's actually call it 4464 02:42:12,000 --> 02:42:13,880 one more time and we hit the little drop 4465 02:42:13,880 --> 02:42:17,160 down here let's go to gas and we'll see 4466 02:42:17,160 --> 02:42:20,560 gas actually cost 27,000 gas which is a 4467 02:42:20,560 --> 02:42:23,279 lot more than the 21,000 gas it costs to 4468 02:42:23,279 --> 02:42:25,240 just send ether between accounts 4469 02:42:25,240 --> 02:42:27,920 remember every time you update the state 4470 02:42:27,920 --> 02:42:30,840 of the blockchain it's going to cost gas 4471 02:42:30,840 --> 02:42:32,279 now what do you think will happen if we 4472 02:42:32,279 --> 02:42:34,720 do more inside of this store function 4473 02:42:34,720 --> 02:42:37,880 for example we say favorite number 4474 02:42:37,880 --> 02:42:41,920 equals itself + 1 let's go ahead and 4475 02:42:41,920 --> 02:42:44,560 compile this let's delete our old simple 4476 02:42:44,560 --> 02:42:47,080 storage let's deploy this new one 4477 02:42:47,080 --> 02:42:50,000 remember the last one cost 27 gas let's 4478 02:42:50,000 --> 02:42:52,080 pull up the terminal and remix actually 4479 02:42:52,080 --> 02:42:54,399 gives us a little tool tip and it's 4480 02:42:54,399 --> 02:42:56,640 saying an infinite gas which we know is 4481 02:42:56,640 --> 02:42:58,520 actually wrong but let's go ahead and 4482 02:42:58,520 --> 02:43:00,080 add one two 3 in here and we'll hit 4483 02:43:00,080 --> 02:43:02,600 store we'll see this transaction we'll 4484 02:43:02,600 --> 02:43:05,760 scroll down we'll see gas is actually a 4485 02:43:05,760 --> 02:43:09,040 lot more it's way more gas it's 50,000 4486 02:43:09,040 --> 02:43:11,520 gas with just adding this line here now 4487 02:43:11,520 --> 02:43:13,160 technically I'm not telling the full 4488 02:43:13,160 --> 02:43:14,800 story here because there are some other 4489 02:43:14,800 --> 02:43:16,359 gas costs associated with the first time 4490 02:43:16,359 --> 02:43:18,960 you run a function but it's still more 4491 02:43:18,960 --> 02:43:20,359 right and that's what's important here 4492 02:43:20,359 --> 02:43:22,120 so so let's go ahead and delete that 4493 02:43:22,120 --> 02:43:24,200 line and go back to our old function 4494 02:43:24,200 --> 02:43:25,800 here now let's talk about something 4495 02:43:25,800 --> 02:43:28,640 called scope for a second so if I create 4496 02:43:28,640 --> 02:43:32,720 a variable in here called U 256 test VAR 4497 02:43:32,720 --> 02:43:35,760 equals 5 and I create a new function 4498 02:43:35,760 --> 02:43:38,880 called something make it public could I 4499 02:43:38,880 --> 02:43:40,479 access the test bar and then maybe 4500 02:43:40,479 --> 02:43:42,640 change it to six or seven what about the 4501 02:43:42,640 --> 02:43:44,359 favorite number VAR what about the 4502 02:43:44,359 --> 02:43:46,279 favorite number variable could I access 4503 02:43:46,279 --> 02:43:48,120 that to seven well let's go ahead and 4504 02:43:48,120 --> 02:43:49,560 see what happens if we try to compile 4505 02:43:49,560 --> 02:43:51,479 this we try to compile we actually go 4506 02:43:51,479 --> 02:43:52,800 ahead and get an error in our 4507 02:43:52,800 --> 02:43:55,120 compilation Undeclared identifier 4508 02:43:55,120 --> 02:43:56,760 whenever you create a variable it can 4509 02:43:56,760 --> 02:43:58,840 only be viewed in the scope of where it 4510 02:43:58,840 --> 02:44:00,840 is if that's confusing just look for the 4511 02:44:00,840 --> 02:44:02,920 curly brackets the reason that our 4512 02:44:02,920 --> 02:44:06,399 something function can read the testar 4513 02:44:06,399 --> 02:44:09,399 is because this testar isn't inside of 4514 02:44:09,399 --> 02:44:11,359 the curly brackets of something the 4515 02:44:11,359 --> 02:44:13,000 reason it can't read the testar is 4516 02:44:13,000 --> 02:44:15,240 because testar was created way up here 4517 02:44:15,240 --> 02:44:18,000 inside of these curly brackets outside 4518 02:44:18,000 --> 02:44:20,840 of something but favorite number wasn't 4519 02:44:20,840 --> 02:44:22,520 created inside of these curly brackets 4520 02:44:22,520 --> 02:44:24,120 so how come it knows what favorite 4521 02:44:24,120 --> 02:44:27,479 number is well something is inside of 4522 02:44:27,479 --> 02:44:29,640 these curly brackets and favorite number 4523 02:44:29,640 --> 02:44:31,600 was created inside of all of these curly 4524 02:44:31,600 --> 02:44:34,279 brackets if favorite number was created 4525 02:44:34,279 --> 02:44:36,560 inside of here it wouldn't be able to 4526 02:44:36,560 --> 02:44:38,800 access favorite number because again 4527 02:44:38,800 --> 02:44:41,560 favorite number is inside of this scope 4528 02:44:41,560 --> 02:44:44,120 and not this scope if you create a 4529 02:44:44,120 --> 02:44:46,520 variable like testar inside of store you 4530 02:44:46,520 --> 02:44:49,279 can only access this testar inside of 4531 02:44:49,279 --> 02:44:51,040 this store function and not anywhere 4532 02:44:51,040 --> 02:44:53,319 else the easy way to know what the scope 4533 02:44:53,319 --> 02:44:54,920 of a variable is is just look for the 4534 02:44:54,920 --> 02:44:56,880 curly brackets so let's go ahead and 4535 02:44:56,880 --> 02:44:59,359 delete this something variable and let's 4536 02:44:59,359 --> 02:45:02,120 delete this test far and let's recompile 4537 02:45:02,120 --> 02:45:04,080 now like we were saying earlier when we 4538 02:45:04,080 --> 02:45:05,800 add this public keyword to favorite 4539 02:45:05,800 --> 02:45:08,080 number it's the exact same as if we 4540 02:45:08,080 --> 02:45:10,920 created a getter function to return this 4541 02:45:10,920 --> 02:45:12,479 favorite number so let's actually write 4542 02:45:12,479 --> 02:45:14,279 a function similar to what this public 4543 02:45:14,279 --> 02:45:16,040 keyword is creating so we're going to 4544 02:45:16,040 --> 02:45:19,720 say function retrieve make this a public 4545 02:45:19,720 --> 02:45:21,600 view function and we'll talk about that 4546 02:45:21,600 --> 02:45:23,960 in just a second and we'll say it 4547 02:45:23,960 --> 02:45:27,200 returns a uint 256 and we'll add the 4548 02:45:27,200 --> 02:45:30,000 curly braces here and we'll say return 4549 02:45:30,000 --> 02:45:32,680 favorit number and often times when 4550 02:45:32,680 --> 02:45:34,960 these Auto suggestions come up like this 4551 02:45:34,960 --> 02:45:36,399 you just hit enter and they will 4552 02:45:36,399 --> 02:45:39,200 automatically do it so if we do favorit 4553 02:45:39,200 --> 02:45:41,240 and then I just hit enter boom 4554 02:45:41,240 --> 02:45:43,080 automatically like that now I'm going to 4555 02:45:43,080 --> 02:45:45,160 hit command s which is equivalent to me 4556 02:45:45,160 --> 02:45:46,600 going to the compile Tab and hitting 4557 02:45:46,600 --> 02:45:49,520 compile now if I go to the deploy Tab 4558 02:45:49,520 --> 02:45:52,160 and let's deploy this contract now we 4559 02:45:52,160 --> 02:45:54,279 scroll down we now see we still have 4560 02:45:54,279 --> 02:45:56,120 that store function we have our favorite 4561 02:45:56,120 --> 02:45:57,840 number function and we have a new blue 4562 02:45:57,840 --> 02:46:00,120 button called retrieve right now they 4563 02:46:00,120 --> 02:46:01,760 both start off as zero and then 4564 02:46:01,760 --> 02:46:03,560 obviously if we update this to five by 4565 02:46:03,560 --> 02:46:06,520 calling store yep I called store these 4566 02:46:06,520 --> 02:46:08,640 now both return five since favorite 4567 02:46:08,640 --> 02:46:10,840 number is the actual variable and 4568 02:46:10,840 --> 02:46:12,640 retrieve is just returning whatever 4569 02:46:12,640 --> 02:46:14,319 favorite number is now as you can see 4570 02:46:14,319 --> 02:46:16,399 here these two functions are blue but 4571 02:46:16,399 --> 02:46:18,960 this one is Orange what's the difference 4572 02:46:18,960 --> 02:46:21,080 why are the colors different well the 4573 02:46:21,080 --> 02:46:23,479 key is actually with this view keyword 4574 02:46:23,479 --> 02:46:26,399 here solidity has a special keyword 4575 02:46:26,399 --> 02:46:29,319 which notates functions that don't 4576 02:46:29,319 --> 02:46:31,279 actually have to run or don't actually 4577 02:46:31,279 --> 02:46:33,160 have to send a transaction for you to 4578 02:46:33,160 --> 02:46:35,080 call them and those two keywords are 4579 02:46:35,080 --> 02:46:38,080 going to be View and pure a function 4580 02:46:38,080 --> 02:46:40,000 marked view means we're just going to 4581 02:46:40,000 --> 02:46:42,680 read state from the blockchain for 4582 02:46:42,680 --> 02:46:45,040 example in our retrieve function we're 4583 02:46:45,040 --> 02:46:47,040 just going to read what the favorite 4584 02:46:47,040 --> 02:46:50,760 number variable is our store function 4585 02:46:50,760 --> 02:46:53,560 isn't reading it's updating something so 4586 02:46:53,560 --> 02:46:54,800 and it's changing the state of the 4587 02:46:54,800 --> 02:46:56,240 blockchain so we have to send a 4588 02:46:56,240 --> 02:46:58,720 transaction since our retrieve function 4589 02:46:58,720 --> 02:47:00,200 doesn't have anything inside here that 4590 02:47:00,200 --> 02:47:02,319 updates anything it just returns 4591 02:47:02,319 --> 02:47:05,000 favorite number we don't need to send a 4592 02:47:05,000 --> 02:47:07,200 transaction so if you add this view 4593 02:47:07,200 --> 02:47:09,160 function in here it disallows any 4594 02:47:09,160 --> 02:47:11,840 modification of State for example I 4595 02:47:11,840 --> 02:47:14,880 couldn't add favorit number equals 4596 02:47:14,880 --> 02:47:18,040 favorit number + one if we go ahead and 4597 02:47:18,040 --> 02:47:20,439 try to compile this we'll get an error 4598 02:47:20,439 --> 02:47:22,520 function cannot be declared as view 4599 02:47:22,520 --> 02:47:24,080 because this expression potentially 4600 02:47:24,080 --> 02:47:26,279 modifies state so we'd have to remove 4601 02:47:26,279 --> 02:47:28,680 this line or we'd have to remove the 4602 02:47:28,680 --> 02:47:31,520 view keyword so view functions disallow 4603 02:47:31,520 --> 02:47:34,479 updating State your functions disallow 4604 02:47:34,479 --> 02:47:37,359 updating State and they disallow even 4605 02:47:37,359 --> 02:47:40,200 reading from state or storage this 4606 02:47:40,200 --> 02:47:41,840 favorite number here is what's known as 4607 02:47:41,840 --> 02:47:44,399 a storage variable because it's stored 4608 02:47:44,399 --> 02:47:47,200 in a place called storage we'll talk 4609 02:47:47,200 --> 02:47:49,680 about that in a later section but if 4610 02:47:49,680 --> 02:47:52,720 this was labeled pure we'd see we get a 4611 02:47:52,720 --> 02:47:55,200 little red underscore here because 4612 02:47:55,200 --> 02:47:57,240 favorite number is reading from State 4613 02:47:57,240 --> 02:47:58,840 instead of returning favorite number we 4614 02:47:58,840 --> 02:48:01,160 would return something like seven so 4615 02:48:01,160 --> 02:48:02,439 this would be an example of a pure 4616 02:48:02,439 --> 02:48:05,080 function this would be an example of a 4617 02:48:05,080 --> 02:48:07,160 view function because we're reading from 4618 02:48:07,160 --> 02:48:09,399 State again we'll explain the difference 4619 02:48:09,399 --> 02:48:11,560 a little bit later and like I was saying 4620 02:48:11,560 --> 02:48:13,760 before if we call a view or a pure 4621 02:48:13,760 --> 02:48:15,680 function we actually don't need to spend 4622 02:48:15,680 --> 02:48:17,840 gas since we're not modifying the state 4623 02:48:17,840 --> 02:48:19,279 that's why these buttons over here are 4624 02:48:19,279 --> 02:48:22,240 blue they're representing view or pure 4625 02:48:22,240 --> 02:48:23,920 functions functions that we can call 4626 02:48:23,920 --> 02:48:26,080 without having to send a transaction for 4627 02:48:26,080 --> 02:48:28,200 example if I pull up the terminal here 4628 02:48:28,200 --> 02:48:31,000 and I pull this up and I call retrieve 4629 02:48:31,000 --> 02:48:33,080 we do get another function but it's just 4630 02:48:33,080 --> 02:48:35,279 a call and it looks different than if I 4631 02:48:35,279 --> 02:48:37,240 hit the store which has this little 4632 02:48:37,240 --> 02:48:39,160 check mark they're different because the 4633 02:48:39,160 --> 02:48:41,640 store is obviously sending a transaction 4634 02:48:41,640 --> 02:48:43,640 and the retrieve is actually just making 4635 02:48:43,640 --> 02:48:45,800 a call and not sending a 4636 02:48:45,800 --> 02:48:47,720 transaction however something weird is 4637 02:48:47,720 --> 02:48:50,200 going on here if I hit retrieve and I go 4638 02:48:50,200 --> 02:48:53,240 into the details of this call I can see 4639 02:48:53,240 --> 02:48:55,160 oh what's what's this why is there an 4640 02:48:55,160 --> 02:48:58,080 execution cost it says cost only applies 4641 02:48:58,080 --> 02:48:59,720 when called by a contract what's going 4642 02:48:59,720 --> 02:49:01,880 on there the reason for that is because 4643 02:49:01,880 --> 02:49:04,240 if another function that does update 4644 02:49:04,240 --> 02:49:06,600 state that does require a transaction 4645 02:49:06,600 --> 02:49:09,600 calls retrieve that transaction does 4646 02:49:09,600 --> 02:49:12,080 need to pay the gas of reading and 4647 02:49:12,080 --> 02:49:14,479 calling this retrieve function so 4648 02:49:14,479 --> 02:49:16,439 calling a view or a pure function 4649 02:49:16,439 --> 02:49:20,800 actually does cost gas only when a gas 4650 02:49:20,800 --> 02:49:23,720 cost transaction is calling it so we can 4651 02:49:23,720 --> 02:49:25,160 go ahead and call these as much as we 4652 02:49:25,160 --> 02:49:27,600 want it costs nothing but if another 4653 02:49:27,600 --> 02:49:29,399 function that does cost gas calls it 4654 02:49:29,399 --> 02:49:31,720 it's going to cost something for example 4655 02:49:31,720 --> 02:49:33,800 if our function store here then went 4656 02:49:33,800 --> 02:49:36,479 ahead and called retrieve like this 4657 02:49:36,479 --> 02:49:38,800 since store cost gas you're telling this 4658 02:49:38,800 --> 02:49:41,080 function hey also call this retrieve 4659 02:49:41,080 --> 02:49:43,319 function which is more work for it to do 4660 02:49:43,319 --> 02:49:44,640 and since it's more work it's going to 4661 02:49:44,640 --> 02:49:47,359 cost more gas so for example if we 4662 02:49:47,359 --> 02:49:49,399 delete this contract over here let's go 4663 02:49:49,399 --> 02:49:51,319 ahead and compile this let's go ahead 4664 02:49:51,319 --> 02:49:53,319 and deploy this with this retrieve in 4665 02:49:53,319 --> 02:49:55,520 here so let's go ahead and look at these 4666 02:49:55,520 --> 02:49:57,720 These are now zero we'll store five in 4667 02:49:57,720 --> 02:49:59,920 here we'll select the drop down we can 4668 02:49:59,920 --> 02:50:02,520 see how much gas we actually sent 50,000 4669 02:50:02,520 --> 02:50:04,520 gas let's go ahead and drop this now 4670 02:50:04,520 --> 02:50:06,800 close this out let's remove the retrieve 4671 02:50:06,800 --> 02:50:10,000 line let's compile we'll hit deploy 4672 02:50:10,000 --> 02:50:12,399 simple storage these are both zero We'll 4673 02:50:12,399 --> 02:50:15,640 add five it's store pull up the terminal 4674 02:50:15,640 --> 02:50:18,040 hit the drop down look at gas it's still 4675 02:50:18,040 --> 02:50:19,800 $50,000 but it's actually a little bit 4676 02:50:19,800 --> 02:50:21,640 less than before although I'm pointing 4677 02:50:21,640 --> 02:50:23,520 at gas we really should be looking at 4678 02:50:23,520 --> 02:50:25,960 transaction cost because gas is really 4679 02:50:25,960 --> 02:50:27,880 just actually how much we're sending 4680 02:50:27,880 --> 02:50:29,920 whereas transaction cost is how much gas 4681 02:50:29,920 --> 02:50:33,040 the transaction actually cost but in any 4682 02:50:33,040 --> 02:50:35,640 case it was a little bit less without 4683 02:50:35,640 --> 02:50:38,120 the retrieve function now I've kind of 4684 02:50:38,120 --> 02:50:39,720 been glossing over this a little bit but 4685 02:50:39,720 --> 02:50:42,479 this returns keyword specifies what this 4686 02:50:42,479 --> 02:50:44,160 function is going to give us when we 4687 02:50:44,160 --> 02:50:46,680 call it so when we have this returns 4688 02:50:46,680 --> 02:50:49,000 keyword in our retrieve function here 4689 02:50:49,000 --> 02:50:50,560 we're saying whenever we call this 4690 02:50:50,560 --> 02:50:52,560 retrieve function we want to get 4691 02:50:52,560 --> 02:50:55,000 returned or we want to be given this 4692 02:50:55,000 --> 02:50:58,239 favorite number of Type U 256 we want to 4693 02:50:58,239 --> 02:51:02,239 return a unu 256 from this 4694 02:51:04,640 --> 02:51:07,800 function now our contract as is is 4695 02:51:07,800 --> 02:51:09,640 pretty good it does one thing pretty 4696 02:51:09,640 --> 02:51:12,560 well it's it allows us to store our 4697 02:51:12,560 --> 02:51:14,520 favorite number update that favorite 4698 02:51:14,520 --> 02:51:16,200 number and then view that favorite 4699 02:51:16,200 --> 02:51:18,279 number and in fact let's go ahead and 4700 02:51:18,279 --> 02:51:21,319 make this an internal variable and we'll 4701 02:51:21,319 --> 02:51:23,479 have the retrieve function be the way to 4702 02:51:23,479 --> 02:51:26,000 get this we can have this public but for 4703 02:51:26,000 --> 02:51:27,720 now we're going to set it up like this 4704 02:51:27,720 --> 02:51:28,960 and I'll tell you why we're going to set 4705 02:51:28,960 --> 02:51:31,160 it up like that in the future but what 4706 02:51:31,160 --> 02:51:32,880 if we wanted to be able to store not 4707 02:51:32,880 --> 02:51:34,680 just our favorite number but other 4708 02:51:34,680 --> 02:51:36,720 people's favorite numbers as well well 4709 02:51:36,720 --> 02:51:38,800 what we could do is we could create 4710 02:51:38,800 --> 02:51:41,640 something called an array or a list of 4711 02:51:41,640 --> 02:51:43,800 favorite numbers what we could do is we 4712 02:51:43,800 --> 02:51:47,279 could say instead of just one uent 256 4713 02:51:47,279 --> 02:51:50,120 we could have a list of un 256 called 4714 02:51:50,120 --> 02:51:54,160 list of favorite numbers this bracket 4715 02:51:54,160 --> 02:51:56,439 syntax here identifies that we have a 4716 02:51:56,439 --> 02:52:00,040 list of un 256 or a list of numbers or 4717 02:52:00,040 --> 02:52:02,560 an array of numbers an array of numbers 4718 02:52:02,560 --> 02:52:04,239 is going to look something like this 4719 02:52:04,239 --> 02:52:05,920 it's going to have maybe the first 4720 02:52:05,920 --> 02:52:07,640 element is going to be zero maybe the 4721 02:52:07,640 --> 02:52:10,200 second favorite number is going to be 78 4722 02:52:10,200 --> 02:52:11,439 maybe the third favorite number is going 4723 02:52:11,439 --> 02:52:14,600 to be 90 now arrays are very common in 4724 02:52:14,600 --> 02:52:16,279 computer science and programming and an 4725 02:52:16,279 --> 02:52:18,600 array in solidity is exactly the same as 4726 02:52:18,600 --> 02:52:20,160 an array in any other programming 4727 02:52:20,160 --> 02:52:22,120 language if you're unfamiliar with 4728 02:52:22,120 --> 02:52:24,960 arrays arrays or lists are actually zero 4729 02:52:24,960 --> 02:52:28,040 indexed so the zero here is actually at 4730 02:52:28,040 --> 02:52:31,120 index zero so we refer to this object 4731 02:52:31,120 --> 02:52:33,439 here as the zero withth object right 4732 02:52:33,439 --> 02:52:35,640 this could be 77 and this would be the 4733 02:52:35,640 --> 02:52:38,439 zero withth object the 78 is going to be 4734 02:52:38,439 --> 02:52:40,439 the first element the 90 is going to be 4735 02:52:40,439 --> 02:52:42,160 the second element and so on and so 4736 02:52:42,160 --> 02:52:43,960 forth it's very common in computer 4737 02:52:43,960 --> 02:52:45,399 science to actually start counting from 4738 02:52:45,399 --> 02:52:47,520 the number zero and arrays start 4739 02:52:47,520 --> 02:52:49,399 counting from the number Z we'll learn 4740 02:52:49,399 --> 02:52:51,640 to play around with arrays more in just 4741 02:52:51,640 --> 02:52:53,319 a minute so this list of favorite 4742 02:52:53,319 --> 02:52:56,760 numbers is great but how do we know who 4743 02:52:56,760 --> 02:52:59,160 favorite number each section is this is 4744 02:52:59,160 --> 02:53:01,200 our list of favorite numbers how do we 4745 02:53:01,200 --> 02:53:05,239 know who zero is who 78 is who 90 is ETC 4746 02:53:05,239 --> 02:53:07,279 well maybe what we would do instead of 4747 02:53:07,279 --> 02:53:08,960 just having a raw list like this let's 4748 02:53:08,960 --> 02:53:10,880 go ahead and comment this line out maybe 4749 02:53:10,880 --> 02:53:12,760 we could create a new type called a 4750 02:53:12,760 --> 02:53:14,720 person in solidity you can actually 4751 02:53:14,720 --> 02:53:17,479 create your own types using the struct 4752 02:53:17,479 --> 02:53:19,720 keyword so we're going to say struct 4753 02:53:19,720 --> 02:53:22,800 person and do little curly brackets like 4754 02:53:22,800 --> 02:53:25,279 this inside of these curly brackets we 4755 02:53:25,279 --> 02:53:27,560 can Define what this struct person 4756 02:53:27,560 --> 02:53:30,200 custom type is comprised of and we're 4757 02:53:30,200 --> 02:53:32,439 going to say for every person they're 4758 02:53:32,439 --> 02:53:36,520 going to have a u 256 favorite number 4759 02:53:36,520 --> 02:53:39,080 and a string name now something 4760 02:53:39,080 --> 02:53:41,600 important to note is oh whoops we have 4761 02:53:41,600 --> 02:53:43,600 two favorite numbers here remember what 4762 02:53:43,600 --> 02:53:46,239 we learned about scope since this 4763 02:53:46,239 --> 02:53:49,000 favorite number is inside of these curly 4764 02:53:49,000 --> 02:53:51,880 brackets these would Clash a little bit 4765 02:53:51,880 --> 02:53:53,920 so what we're going to do instead is 4766 02:53:53,920 --> 02:53:55,840 we're going to rename favorite number up 4767 02:53:55,840 --> 02:53:58,760 here to my favorite number and we're 4768 02:53:58,760 --> 02:54:00,760 going to copy paste that down here as 4769 02:54:00,760 --> 02:54:03,720 well so we're we're renaming this state 4770 02:54:03,720 --> 02:54:05,640 variable this storage variable to my 4771 02:54:05,640 --> 02:54:07,560 favorite number and just keeping it down 4772 02:54:07,560 --> 02:54:08,880 here that way we can have favorite 4773 02:54:08,880 --> 02:54:10,880 number inside of this struct in any case 4774 02:54:10,880 --> 02:54:13,720 we created this new type of type person 4775 02:54:13,720 --> 02:54:16,680 which is a combination of each person 4776 02:54:16,680 --> 02:54:18,520 has a favorite number and each person 4777 02:54:18,520 --> 02:54:20,920 also has a name now similar to how we 4778 02:54:20,920 --> 02:54:23,920 can have a u 256 a Boolean a string and 4779 02:54:23,920 --> 02:54:27,600 in 256 Etc we now have a type of person 4780 02:54:27,600 --> 02:54:30,439 and this is similar to each one of these 4781 02:54:30,439 --> 02:54:31,760 oh and we're also going to have to 4782 02:54:31,760 --> 02:54:34,040 update the retrieve down here with my 4783 02:54:34,040 --> 02:54:35,399 favorite number instead of favorite 4784 02:54:35,399 --> 02:54:37,720 number now since we have our own new 4785 02:54:37,720 --> 02:54:39,880 type we can actually create a variable 4786 02:54:39,880 --> 02:54:42,120 of type person the exact same way we 4787 02:54:42,120 --> 02:54:44,000 created a variable of type my favorite 4788 02:54:44,000 --> 02:54:47,239 number so we could say person visibility 4789 02:54:47,239 --> 02:54:50,720 will be public my friend equals and 4790 02:54:50,720 --> 02:54:52,920 we'll put person here and put some 4791 02:54:52,920 --> 02:54:54,880 parentheses here because when you're 4792 02:54:54,880 --> 02:54:56,760 working with custom types you have to 4793 02:54:56,760 --> 02:54:58,840 Define both on the left side and on the 4794 02:54:58,840 --> 02:55:01,279 right side what type it is and in here 4795 02:55:01,279 --> 02:55:03,359 we would assign a favorite number and a 4796 02:55:03,359 --> 02:55:07,560 name so we could say seven and Pat like 4797 02:55:07,560 --> 02:55:11,200 that so now Pat is going to be a person 4798 02:55:11,200 --> 02:55:13,640 with a favorite number of seven and a 4799 02:55:13,640 --> 02:55:17,239 name of Pat see the first parameter goes 4800 02:55:17,239 --> 02:55:18,880 to the first 4801 02:55:18,880 --> 02:55:21,200 item in the person struct and the second 4802 02:55:21,200 --> 02:55:23,840 parameter goes to the second item I like 4803 02:55:23,840 --> 02:55:26,279 being a little bit more explicit when 4804 02:55:26,279 --> 02:55:28,000 working with structs and actually what 4805 02:55:28,000 --> 02:55:29,760 you can do is you can put little 4806 02:55:29,760 --> 02:55:32,880 brackets here instead and you can say 4807 02:55:32,880 --> 02:55:35,720 exactly what value you're going to 4808 02:55:35,720 --> 02:55:38,760 assign to what section so I can say 4809 02:55:38,760 --> 02:55:42,279 favorite number is going to be seven and 4810 02:55:42,279 --> 02:55:45,560 name is going to be that and we can hit 4811 02:55:45,560 --> 02:55:47,800 command s or just go straight to compile 4812 02:55:47,800 --> 02:55:49,439 to see if it worked correctly get that 4813 02:55:49,439 --> 02:55:51,439 little green check mark Now by doing 4814 02:55:51,439 --> 02:55:54,000 this we've created our own type person 4815 02:55:54,000 --> 02:55:56,439 and we've created a variable named Pat 4816 02:55:56,439 --> 02:55:58,239 with a favorite number of seven and a 4817 02:55:58,239 --> 02:56:01,800 name of Pat now if we were to go ahead 4818 02:56:01,800 --> 02:56:03,760 let's delete this old simple storage and 4819 02:56:03,760 --> 02:56:06,399 let's deploy our new simple storage we 4820 02:56:06,399 --> 02:56:08,479 scroll down we now have a new blue 4821 02:56:08,479 --> 02:56:10,560 button since this is a public variable 4822 02:56:10,560 --> 02:56:12,880 called Pat and if we click the button if 4823 02:56:12,880 --> 02:56:16,319 we call this variable we'll see favorite 4824 02:56:16,319 --> 02:56:19,800 number of seven and string name Pat you 4825 02:56:19,800 --> 02:56:22,000 can also see this zero and this one 4826 02:56:22,000 --> 02:56:23,840 which shows the index of each one of 4827 02:56:23,840 --> 02:56:26,680 these variables or parameters zero is 4828 02:56:26,680 --> 02:56:29,439 for favorite number one is for name if 4829 02:56:29,439 --> 02:56:33,080 we added another one maybe bull is cool 4830 02:56:33,080 --> 02:56:35,560 bull is cool would be at index 2 4831 02:56:35,560 --> 02:56:37,640 whenever you create a custom type like 4832 02:56:37,640 --> 02:56:40,399 this solidity will automatically index 4833 02:56:40,399 --> 02:56:42,640 them similar to the way that we index 4834 02:56:42,640 --> 02:56:44,760 our list or our Rays favorite number 4835 02:56:44,760 --> 02:56:47,600 zero name one whatever is next would be 4836 02:56:47,600 --> 02:56:50,479 two EX Etc now this is great for one 4837 02:56:50,479 --> 02:56:52,120 friend but what if you have a lot of 4838 02:56:52,120 --> 02:56:54,239 friends which I know a lot of you do 4839 02:56:54,239 --> 02:56:55,439 because you're taking this course which 4840 02:56:55,439 --> 02:56:57,319 automatically means you're cool maybe 4841 02:56:57,319 --> 02:56:59,200 what if you have your friend Mariah that 4842 02:56:59,200 --> 02:57:00,960 you would like to add to our smart 4843 02:57:00,960 --> 02:57:02,560 contract like this and her favorite 4844 02:57:02,560 --> 02:57:05,760 number is 16 or maybe your friend John 4845 02:57:05,760 --> 02:57:08,279 you'd have to copy paste the line add JN 4846 02:57:08,279 --> 02:57:10,120 in here his favorite number is going to 4847 02:57:10,120 --> 02:57:13,279 be 12 so on and so forth it might get 4848 02:57:13,279 --> 02:57:15,960 very tedious to have to write variables 4849 02:57:15,960 --> 02:57:18,479 for all of these people for all these 4850 02:57:18,479 --> 02:57:20,880 friends this obviously isn't a great way 4851 02:57:20,880 --> 02:57:22,680 for us to create lists of people or 4852 02:57:22,680 --> 02:57:24,600 lists of our friends so instead of this 4853 02:57:24,600 --> 02:57:27,120 we can actually use this array syntax 4854 02:57:27,120 --> 02:57:29,640 that we just learned and create an array 4855 02:57:29,640 --> 02:57:33,399 of person or a list of persons so I'm 4856 02:57:33,399 --> 02:57:35,399 going to comment all these out for now 4857 02:57:35,399 --> 02:57:37,399 and a quick tip here if you're on a Mac 4858 02:57:37,399 --> 02:57:39,439 and you highlight a couple if you're on 4859 02:57:39,439 --> 02:57:41,840 a Mac and you hit command backslash or 4860 02:57:41,840 --> 02:57:43,600 command question mark it'll 4861 02:57:43,600 --> 02:57:45,960 automatically comment or uncomment those 4862 02:57:45,960 --> 02:57:47,840 lines if you're on a Windows I believe 4863 02:57:47,840 --> 02:57:50,800 it is control slash but you might be 4864 02:57:50,800 --> 02:57:52,439 able to Google what the actual keyboard 4865 02:57:52,439 --> 02:57:54,319 shortcut is this is a keyboard shortcut 4866 02:57:54,319 --> 02:57:56,239 I use all the time so what we're going 4867 02:57:56,239 --> 02:57:58,160 to do now is we're going to create a 4868 02:57:58,160 --> 02:58:01,160 list or an array of persons so exact 4869 02:58:01,160 --> 02:58:03,720 same as we did it up here we'll say our 4870 02:58:03,720 --> 02:58:06,439 type first is going to be type person 4871 02:58:06,439 --> 02:58:09,319 array so we're type person array then 4872 02:58:09,319 --> 02:58:11,560 we'll State our visibility which is 4873 02:58:11,560 --> 02:58:14,200 going to be public then we'll get our 4874 02:58:14,200 --> 02:58:16,720 variable name which is going to be list 4875 02:58:16,720 --> 02:58:20,120 of people like this so we've created a 4876 02:58:20,120 --> 02:58:22,840 person array with visibility public and 4877 02:58:22,840 --> 02:58:25,239 the name list of people and we'll just 4878 02:58:25,239 --> 02:58:27,560 leave it blank for now so it'll get 4879 02:58:27,560 --> 02:58:30,560 defaulted to being an empty list which 4880 02:58:30,560 --> 02:58:32,520 would look like this now if I were to go 4881 02:58:32,520 --> 02:58:34,680 ahead and deploy this let's delete the 4882 02:58:34,680 --> 02:58:39,080 last one let's compile deploy we scroll 4883 02:58:39,080 --> 02:58:42,120 down we select this we now see we have 4884 02:58:42,120 --> 02:58:43,920 our retrieve blue button and we also 4885 02:58:43,920 --> 02:58:45,920 have this blue button for list of people 4886 02:58:45,920 --> 02:58:47,640 when you create arrays with a public 4887 02:58:47,640 --> 02:58:48,640 keyword 4888 02:58:48,640 --> 02:58:50,399 instead of being able to see the whole 4889 02:58:50,399 --> 02:58:52,880 array with this list of people button 4890 02:58:52,880 --> 02:58:55,640 you actually have to put in the index of 4891 02:58:55,640 --> 02:58:57,080 the elements you want to work with and 4892 02:58:57,080 --> 02:58:59,279 you get to see that exact element it 4893 02:58:59,279 --> 02:59:01,600 wants to take a u 256 as an input 4894 02:59:01,600 --> 02:59:04,279 parameter however obviously our array is 4895 02:59:04,279 --> 02:59:06,640 blank so if we say what is the person at 4896 02:59:06,640 --> 02:59:09,239 the zeroth index it'll say well nothing 4897 02:59:09,239 --> 02:59:11,080 because you have a blank array well what 4898 02:59:11,080 --> 02:59:13,239 about the first index well nothing what 4899 02:59:13,239 --> 02:59:15,279 about the second one well nothing no 4900 02:59:15,279 --> 02:59:17,040 matter what you put in the box right now 4901 02:59:17,040 --> 02:59:19,279 it's going to return nothing we'll show 4902 02:59:19,279 --> 02:59:21,439 you how to add to this array in just a 4903 02:59:21,439 --> 02:59:24,120 second this kind of array is known as a 4904 02:59:24,120 --> 02:59:26,560 dynamic array because the size of the 4905 02:59:26,560 --> 02:59:29,200 array can actually grow and shrink in 4906 02:59:29,200 --> 02:59:31,920 solidity a dynamic array is signified by 4907 02:59:31,920 --> 02:59:33,560 what's inside of these little brackets 4908 02:59:33,560 --> 02:59:36,120 here if we added a three in here this 4909 02:59:36,120 --> 02:59:39,760 would be a static array we're saying 4910 02:59:39,760 --> 02:59:42,600 this list of people can only have a 4911 02:59:42,600 --> 02:59:45,760 maximum size of three so we can only put 4912 02:59:45,760 --> 02:59:48,600 three persons in this array 4913 02:59:48,600 --> 02:59:51,600 Dynamic array static array can have any 4914 02:59:51,600 --> 02:59:54,880 size can only go up to three any size up 4915 02:59:54,880 --> 02:59:57,399 to three any size up to four hopefully 4916 02:59:57,399 --> 02:59:59,279 you get the picture we're going to work 4917 02:59:59,279 --> 03:00:00,960 with a dynamic array because we're going 4918 03:00:00,960 --> 03:00:04,120 to want to add a arbitrary number of 4919 03:00:04,120 --> 03:00:06,840 people to this person array so let's 4920 03:00:06,840 --> 03:00:09,120 create a function that will allow us to 4921 03:00:09,120 --> 03:00:11,200 actually add people and update this 4922 03:00:11,200 --> 03:00:13,960 array and let's delete this comment so 4923 03:00:13,960 --> 03:00:16,200 below our retrieve function we'll create 4924 03:00:16,200 --> 03:00:18,840 a function add person 4925 03:00:18,840 --> 03:00:21,319 and this is going to take two variables 4926 03:00:21,319 --> 03:00:23,920 as input it's going to take the name of 4927 03:00:23,920 --> 03:00:25,720 the person that we're going to add it's 4928 03:00:25,720 --> 03:00:27,279 going to take the favorite number of the 4929 03:00:27,279 --> 03:00:29,080 person that we're going to add as well 4930 03:00:29,080 --> 03:00:33,000 as the name so we'll say string memory 4931 03:00:33,000 --> 03:00:35,000 name and I'll explain this memory 4932 03:00:35,000 --> 03:00:37,120 keyword in a little bit and we'll do 4933 03:00:37,120 --> 03:00:41,120 uint 256 unor favorite number and let's 4934 03:00:41,120 --> 03:00:44,080 do and let's do underscore name and 4935 03:00:44,080 --> 03:00:46,520 we'll make this a public function and 4936 03:00:46,520 --> 03:00:48,000 what we're going to do inside of this ad 4937 03:00:48,000 --> 03:00:49,880 person function is we're going to take 4938 03:00:49,880 --> 03:00:52,399 this list of people object and call the 4939 03:00:52,399 --> 03:00:55,439 push function on it arrays come built in 4940 03:00:55,439 --> 03:00:57,720 with a function called push which allows 4941 03:00:57,720 --> 03:01:01,439 us to add elements or add person to our 4942 03:01:01,439 --> 03:01:03,439 list of people array so what we're going 4943 03:01:03,439 --> 03:01:05,640 to do is we're going to say list of 4944 03:01:05,640 --> 03:01:08,279 people. push and we'll add these little 4945 03:01:08,279 --> 03:01:10,880 parentheses here and we're going to push 4946 03:01:10,880 --> 03:01:13,720 a new person onto this array now what we 4947 03:01:13,720 --> 03:01:15,800 could do now let's comment this out for 4948 03:01:15,800 --> 03:01:17,520 now now what we could do is we could 4949 03:01:17,520 --> 03:01:21,680 create a new person person new person 4950 03:01:21,680 --> 03:01:25,600 equals person name favorite number like 4951 03:01:25,600 --> 03:01:27,680 we did above oops excuse me these are 4952 03:01:27,680 --> 03:01:30,960 backwards person memory new person which 4953 03:01:30,960 --> 03:01:32,960 we're going to ignore that for now and 4954 03:01:32,960 --> 03:01:36,080 then just do list of people. push new 4955 03:01:36,080 --> 03:01:38,760 person we could do this this is valid 4956 03:01:38,760 --> 03:01:40,479 syntax and I'll explain this memory 4957 03:01:40,479 --> 03:01:42,680 keyword in a little bit this is going to 4958 03:01:42,680 --> 03:01:44,319 create a new person and we push to the 4959 03:01:44,319 --> 03:01:48,239 list or we could just add this person 4960 03:01:48,239 --> 03:01:51,120 right into this push piece here so we 4961 03:01:51,120 --> 03:01:52,680 could delete this line instead of 4962 03:01:52,680 --> 03:01:54,439 creating a new person on its own line we 4963 03:01:54,439 --> 03:01:57,680 could say list of people. push person 4964 03:01:57,680 --> 03:02:00,640 and then we'll add in here favorite 4965 03:02:00,640 --> 03:02:03,359 number name since we're calling this 4966 03:02:03,359 --> 03:02:05,640 person favorite number name inside of 4967 03:02:05,640 --> 03:02:07,560 this push object solidity is smart 4968 03:02:07,560 --> 03:02:10,160 enough to execute this line of code 4969 03:02:10,160 --> 03:02:13,120 first create a new person and then 4970 03:02:13,120 --> 03:02:16,040 execute this line to push our person 4971 03:02:16,040 --> 03:02:18,920 into this list of people object so this 4972 03:02:18,920 --> 03:02:21,319 function should allow us to push new 4973 03:02:21,319 --> 03:02:24,200 people into our list of people array so 4974 03:02:24,200 --> 03:02:26,439 what we can do now is let's compile this 4975 03:02:26,439 --> 03:02:28,120 let's deploy this let's delete the old 4976 03:02:28,120 --> 03:02:29,720 one we'll hit 4977 03:02:29,720 --> 03:02:33,080 deploy now we see if we call our list of 4978 03:02:33,080 --> 03:02:35,520 people at zero we'll get nothing back 4979 03:02:35,520 --> 03:02:37,960 because it starts off as a blank array 4980 03:02:37,960 --> 03:02:40,439 but now we have this new add person 4981 03:02:40,439 --> 03:02:43,000 function where we can you can kind of 4982 03:02:43,000 --> 03:02:45,359 see very faintly it takes a string name 4983 03:02:45,359 --> 03:02:48,160 and a un 256 a favorite number so we can 4984 03:02:48,160 --> 03:02:53,000 add Patrick 7 we'll hit add person which 4985 03:02:53,000 --> 03:02:54,520 if you have your terminal you'll see we 4986 03:02:54,520 --> 03:02:56,720 made a transaction and now if we hit 4987 03:02:56,720 --> 03:02:59,319 list of people at zero we see we have 4988 03:02:59,319 --> 03:03:01,560 indeed added a person to the zero withth 4989 03:03:01,560 --> 03:03:03,960 index Patrick has a favorite number of 4990 03:03:03,960 --> 03:03:07,279 seven and his name is Patrick obviously 4991 03:03:07,279 --> 03:03:10,600 if we hit one we'll get nothing back and 4992 03:03:10,600 --> 03:03:12,520 this will just stay up but if we add 4993 03:03:12,520 --> 03:03:17,359 another person maybe John 16 add person 4994 03:03:17,359 --> 03:03:20,399 now at list of people index one we now 4995 03:03:20,399 --> 03:03:23,760 see John 16 so 0o it's going to be 4996 03:03:23,760 --> 03:03:28,359 Patrick 7 1 John 16 2 is nothing so 4997 03:03:28,359 --> 03:03:30,640 nothing 4998 03:03:33,200 --> 03:03:35,200 happens now we've talked about this a 4999 03:03:35,200 --> 03:03:37,720 little bit already but if we go ahead 5000 03:03:37,720 --> 03:03:39,120 for example and maybe delete this 5001 03:03:39,120 --> 03:03:41,880 semicolon and we go to try to compile 5002 03:03:41,880 --> 03:03:43,880 and we scroll down you'll see we get 5003 03:03:43,880 --> 03:03:46,120 this error parser error expected 5004 03:03:46,120 --> 03:03:48,800 semicolon but got bracket instead and it 5005 03:03:48,800 --> 03:03:51,000 gives us this little red exclamation 5006 03:03:51,000 --> 03:03:52,680 mark and the line that it's having an 5007 03:03:52,680 --> 03:03:55,200 issue with all these red errors mean 5008 03:03:55,200 --> 03:03:57,239 that your code isn't compiling and you 5009 03:03:57,239 --> 03:03:58,560 can't actually deploy this to the 5010 03:03:58,560 --> 03:04:00,479 blockchain because solidity doesn't know 5011 03:04:00,479 --> 03:04:02,479 how to turn this human readable code 5012 03:04:02,479 --> 03:04:04,680 into machine readable code so we need to 5013 03:04:04,680 --> 03:04:07,640 add this semicolon here recompile so we 5014 03:04:07,640 --> 03:04:10,239 get no errors now interestingly though 5015 03:04:10,239 --> 03:04:12,279 if we go to the top and let's say we 5016 03:04:12,279 --> 03:04:14,800 delete this SPX license identifier and 5017 03:04:14,800 --> 03:04:18,120 now we compile we scroll down we get a 5018 03:04:18,120 --> 03:04:20,520 yellow box and it says warning instead 5019 03:04:20,520 --> 03:04:22,680 of error says warning spdx license 5020 03:04:22,680 --> 03:04:24,760 identifier not provided source file blah 5021 03:04:24,760 --> 03:04:26,800 blah blah interestingly though if we 5022 03:04:26,800 --> 03:04:29,080 compile this we actually let's delete 5023 03:04:29,080 --> 03:04:31,840 our last symbol storage we can deploy 5024 03:04:31,840 --> 03:04:35,000 this so something important to note is 5025 03:04:35,000 --> 03:04:37,080 warnings are just that they're just 5026 03:04:37,080 --> 03:04:38,680 warnings they won't prevent you from 5027 03:04:38,680 --> 03:04:41,279 deploying or compiling your code errors 5028 03:04:41,279 --> 03:04:43,160 will prevent you from deploying or 5029 03:04:43,160 --> 03:04:45,239 compiling your code now even with that 5030 03:04:45,239 --> 03:04:47,720 being said though it is good to try to 5031 03:04:47,720 --> 03:04:49,439 remove all of the warnings because the 5032 03:04:49,439 --> 03:04:51,080 warnings are generally there for a 5033 03:04:51,080 --> 03:04:52,840 reason they're warning you that you 5034 03:04:52,840 --> 03:04:54,920 might be doing something bad and 5035 03:04:54,920 --> 03:04:56,840 sometimes if you have a bug in your code 5036 03:04:56,840 --> 03:04:58,520 simply just listening to the warnings 5037 03:04:58,520 --> 03:05:00,319 would have solved it so it's best to 5038 03:05:00,319 --> 03:05:02,520 listen to the warnings here so to 5039 03:05:02,520 --> 03:05:04,279 summarize if it's red it's broken if 5040 03:05:04,279 --> 03:05:05,600 it's yellow you might want to check it 5041 03:05:05,600 --> 03:05:07,960 out and additionally when it comes to 5042 03:05:07,960 --> 03:05:09,600 these errors and These Warnings this is 5043 03:05:09,600 --> 03:05:11,760 where using our Ai and Google searching 5044 03:05:11,760 --> 03:05:13,800 skills can really come in handy let's 5045 03:05:13,800 --> 03:05:16,680 say for example I ran our code I get 5046 03:05:16,680 --> 03:05:19,040 this error I read the error and I don't 5047 03:05:19,040 --> 03:05:21,279 really understand what's going on here 5048 03:05:21,279 --> 03:05:23,520 what we can do is we could maybe copy 5049 03:05:23,520 --> 03:05:26,279 this error and use any of the search 5050 03:05:26,279 --> 03:05:28,200 features that we talked about resources 5051 03:05:28,200 --> 03:05:30,399 for this course we can use chat gbt or 5052 03:05:30,399 --> 03:05:32,800 find GitHub discussions stack exchange 5053 03:05:32,800 --> 03:05:35,080 ethereum and panum and I'll explain what 5054 03:05:35,080 --> 03:05:37,560 each one of these is good for later in 5055 03:05:37,560 --> 03:05:40,279 the course but for example let's go and 5056 03:05:40,279 --> 03:05:42,920 try out find find is an AI search engine 5057 03:05:42,920 --> 03:05:45,319 for developers what it does is it first 5058 03:05:45,319 --> 03:05:47,160 does a Google Search and then it reads 5059 03:05:47,160 --> 03:05:48,479 all those links links and based off the 5060 03:05:48,479 --> 03:05:49,840 links it reads it tries to give you an 5061 03:05:49,840 --> 03:05:51,880 answer so what we could do is we could 5062 03:05:51,880 --> 03:05:56,640 say I am getting this compiler error in 5063 03:05:56,640 --> 03:06:00,359 solidity how do I fix it we hit this 5064 03:06:00,359 --> 03:06:03,239 little dropdown put any code or context 5065 03:06:03,239 --> 03:06:06,760 here we'll paste our error this is the 5066 03:06:06,760 --> 03:06:09,560 error like this and we'll go ahead and 5067 03:06:09,560 --> 03:06:11,760 hit 5068 03:06:14,600 --> 03:06:17,600 search we get a pretty verbose response 5069 03:06:17,600 --> 03:06:19,479 on what's going on with our code we 5070 03:06:19,479 --> 03:06:21,479 could actually take this a step further 5071 03:06:21,479 --> 03:06:24,439 and we could copy our entire code base 5072 03:06:24,439 --> 03:06:27,120 and we could paste it under here we say 5073 03:06:27,120 --> 03:06:29,600 code I usually put three back ticks 5074 03:06:29,600 --> 03:06:31,680 before and after any code that I use and 5075 03:06:31,680 --> 03:06:33,760 I'll teach you why in the future well 5076 03:06:33,760 --> 03:06:35,479 let's go ahead and hit enter and 5077 03:06:35,479 --> 03:06:38,080 research it actually is able to read our 5078 03:06:38,080 --> 03:06:41,160 code and say one way to fix the error is 5079 03:06:41,160 --> 03:06:42,880 to Simply add a semicolon at the end of 5080 03:06:42,880 --> 03:06:44,439 the line where you push the new person 5081 03:06:44,439 --> 03:06:46,880 to the dynamic array list of people and 5082 03:06:46,880 --> 03:06:49,600 we can see if we do indeed get a way to 5083 03:06:49,600 --> 03:06:52,520 just copy our ad person function and we 5084 03:06:52,520 --> 03:06:55,439 can scroll down and just paste it on top 5085 03:06:55,439 --> 03:06:57,359 with it being fixed and we could also 5086 03:06:57,359 --> 03:06:58,960 say concise because it's being a little 5087 03:06:58,960 --> 03:07:01,960 too verbose for us we'll hit enter again 5088 03:07:01,960 --> 03:07:04,279 and it wasn't that concise but a lot of 5089 03:07:04,279 --> 03:07:06,399 these AI tools like I said are still in 5090 03:07:06,399 --> 03:07:08,560 beta but this was a good example of how 5091 03:07:08,560 --> 03:07:10,319 using an AI tool like this can actually 5092 03:07:10,319 --> 03:07:12,960 help you detect bugs like I said often 5093 03:07:12,960 --> 03:07:14,880 times they will still get things wrong 5094 03:07:14,880 --> 03:07:16,080 which is why it's important for you to 5095 03:07:16,080 --> 03:07:17,800 know about GitHub discussions stack 5096 03:07:17,800 --> 03:07:20,560 exchange piranha Etc later in the course 5097 03:07:20,560 --> 03:07:22,520 I'll explain more about how to ask good 5098 03:07:22,520 --> 03:07:24,960 questions how to do good AI prompting 5099 03:07:24,960 --> 03:07:26,720 how to format your questions and how to 5100 03:07:26,720 --> 03:07:28,880 search and learn more one of the key 5101 03:07:28,880 --> 03:07:30,439 pieces of being a really good software 5102 03:07:30,439 --> 03:07:32,640 engineer or a good prompt engineer is 5103 03:07:32,640 --> 03:07:33,960 less about actually knowing the 5104 03:07:33,960 --> 03:07:36,080 information and more about knowing where 5105 03:07:36,080 --> 03:07:38,720 to find the information so throughout 5106 03:07:38,720 --> 03:07:40,960 this course I want you to practice using 5107 03:07:40,960 --> 03:07:42,640 these resources because they're going to 5108 03:07:42,640 --> 03:07:44,920 help you be a much stronger developer 5109 03:07:44,920 --> 03:07:46,600 much stronger prompt engineer and just 5110 03:07:46,600 --> 03:07:47,880 be better at every thing that we're 5111 03:07:47,880 --> 03:07:50,040 going to go over in this course if find 5112 03:07:50,040 --> 03:07:53,120 or chat gbt gives you a poor answer be 5113 03:07:53,120 --> 03:07:55,000 sure to use the GitHub discussions if 5114 03:07:55,000 --> 03:07:56,439 you have a question specific to this 5115 03:07:56,439 --> 03:07:58,120 course be sure to use the GitHub 5116 03:07:58,120 --> 03:07:59,920 discussions or if you have a more 5117 03:07:59,920 --> 03:08:02,319 general question about solidity about 5118 03:08:02,319 --> 03:08:04,279 Foundry or anything like that you can 5119 03:08:04,279 --> 03:08:06,239 use one of these resources again I'll go 5120 03:08:06,239 --> 03:08:08,560 over this more later but great job 5121 03:08:08,560 --> 03:08:09,960 you've done your first bit of prompt 5122 03:08:09,960 --> 03:08:12,640 engineering 5123 03:08:15,680 --> 03:08:17,840 congratulations you don't have to 5124 03:08:17,840 --> 03:08:19,880 understand this section fully now one 5125 03:08:19,880 --> 03:08:21,520 thing that we didn't really go over and 5126 03:08:21,520 --> 03:08:23,600 we kind of glossed over was this memory 5127 03:08:23,600 --> 03:08:25,239 keyword and you'll notice if we actually 5128 03:08:25,239 --> 03:08:26,880 delete this keyword and you try to 5129 03:08:26,880 --> 03:08:30,080 compile we'll get an error data location 5130 03:08:30,080 --> 03:08:32,359 must be memory or call data for 5131 03:08:32,359 --> 03:08:34,720 parameter in function but none was given 5132 03:08:34,720 --> 03:08:36,479 now there are actually six places you 5133 03:08:36,479 --> 03:08:38,880 can store data in solidity you have the 5134 03:08:38,880 --> 03:08:43,279 stack memory storage call data code and 5135 03:08:43,279 --> 03:08:45,239 logs we're not going to go over all of 5136 03:08:45,239 --> 03:08:46,840 these areas right now but we are going 5137 03:08:46,840 --> 03:08:49,000 to go over some of the big ones which 5138 03:08:49,000 --> 03:08:53,800 are call data memory and storage and 5139 03:08:53,800 --> 03:08:54,880 this is going to be a little bit 5140 03:08:54,880 --> 03:08:56,520 Advanced here so if you don't understand 5141 03:08:56,520 --> 03:08:58,359 this section the first time don't worry 5142 03:08:58,359 --> 03:09:00,239 about it just keep pushing through it'll 5143 03:09:00,239 --> 03:09:02,239 make more sense as you go later on in 5144 03:09:02,239 --> 03:09:05,040 the course call data and memory both 5145 03:09:05,040 --> 03:09:07,520 mean that this variable is only going to 5146 03:09:07,520 --> 03:09:09,960 exist temporarily it's only going to 5147 03:09:09,960 --> 03:09:11,800 exist for the duration of the function 5148 03:09:11,800 --> 03:09:14,479 call any anytime we call AD person with 5149 03:09:14,479 --> 03:09:17,399 a different name we can only access this 5150 03:09:17,399 --> 03:09:19,479 name variable that one time that we call 5151 03:09:19,479 --> 03:09:23,000 this function if I call add name Patrick 5152 03:09:23,000 --> 03:09:25,920 7 and now I try to list of people at 5153 03:09:25,920 --> 03:09:28,000 zero obviously we see Patrick at 5154 03:09:28,000 --> 03:09:30,160 favorite number seven we can actually 5155 03:09:30,160 --> 03:09:32,600 never access that Patrick variable ever 5156 03:09:32,600 --> 03:09:35,439 again because it existed in memory it 5157 03:09:35,439 --> 03:09:37,800 existed for a very short period of time 5158 03:09:37,800 --> 03:09:40,239 just for that single call we could also 5159 03:09:40,239 --> 03:09:42,479 have call data here and we'll go ahead 5160 03:09:42,479 --> 03:09:45,680 remove this deploy the drop down and do 5161 03:09:45,680 --> 03:09:47,840 the same thing we'll add Pat 5162 03:09:47,840 --> 03:09:49,520 and actually you don't even need the 5163 03:09:49,520 --> 03:09:53,120 quotes Patrick do 88 add person we'll 5164 03:09:53,120 --> 03:09:55,920 see if it's in there sure is call data 5165 03:09:55,920 --> 03:09:58,520 and memory both mean temporary variables 5166 03:09:58,520 --> 03:10:00,399 inside of functions most variables 5167 03:10:00,399 --> 03:10:02,640 automatically default to memory 5168 03:10:02,640 --> 03:10:05,000 variables strings are a special type in 5169 03:10:05,000 --> 03:10:06,760 solidity so you have to specify memory 5170 03:10:06,760 --> 03:10:08,840 or call data and it has to do with the 5171 03:10:08,840 --> 03:10:10,760 way arrays work in memory but we'll talk 5172 03:10:10,760 --> 03:10:13,200 about that much later on the course now 5173 03:10:13,200 --> 03:10:14,880 the question obviously then follows okay 5174 03:10:14,880 --> 03:10:16,760 well if call data and memory are both 5175 03:10:16,760 --> 03:10:19,200 temporary variables why have two what's 5176 03:10:19,200 --> 03:10:21,200 the difference between these two well 5177 03:10:21,200 --> 03:10:23,080 let's try something let's have this be a 5178 03:10:23,080 --> 03:10:25,319 memory variable and in here we'll say 5179 03:10:25,319 --> 03:10:28,640 name equals cat so we're going to 5180 03:10:28,640 --> 03:10:30,680 reassign whatever people put in here to 5181 03:10:30,680 --> 03:10:32,880 Cat Let's compile this looks like it 5182 03:10:32,880 --> 03:10:35,760 compiles fine now let's do call data and 5183 03:10:35,760 --> 03:10:38,640 try to compile ah we get an error type 5184 03:10:38,640 --> 03:10:41,160 error type literal string cat is not 5185 03:10:41,160 --> 03:10:43,399 implicitly convertible to expected type 5186 03:10:43,399 --> 03:10:45,800 string call data the difference between 5187 03:10:45,800 --> 03:10:47,840 memory and call data is that 5188 03:10:47,840 --> 03:10:49,880 a memory variable can be changed it can 5189 03:10:49,880 --> 03:10:52,359 be manipulated if we pass a memory 5190 03:10:52,359 --> 03:10:55,200 variable to a function we can go 5191 03:10:55,200 --> 03:10:58,239 ahead memory and I hit and I hit command 5192 03:10:58,239 --> 03:11:02,040 s to compile this is valid solidity this 5193 03:11:02,040 --> 03:11:04,880 is not if you pass a call data variable 5194 03:11:04,880 --> 03:11:07,399 you cannot modify it call data is 5195 03:11:07,399 --> 03:11:09,640 temporary variables that cannot be 5196 03:11:09,640 --> 03:11:12,359 modified memory is temporary variables 5197 03:11:12,359 --> 03:11:15,640 that can be modified and storage is 5198 03:11:15,640 --> 03:11:19,040 permanent variables that can be modified 5199 03:11:19,040 --> 03:11:20,600 my favorite number was actually 5200 03:11:20,600 --> 03:11:22,600 implicitly converted to a storage 5201 03:11:22,600 --> 03:11:25,040 variable since it's added in this state 5202 03:11:25,040 --> 03:11:27,720 context outside of a function if you 5203 03:11:27,720 --> 03:11:29,399 create a variable that's outside of any 5204 03:11:29,399 --> 03:11:31,080 function inside of a contract it'll 5205 03:11:31,080 --> 03:11:33,439 automatically be a storage variable and 5206 03:11:33,439 --> 03:11:36,239 let's delete this line let's compile 5207 03:11:36,239 --> 03:11:38,960 let's deploy again delete this deploy we 5208 03:11:38,960 --> 03:11:40,279 know it's a permanent variable because 5209 03:11:40,279 --> 03:11:42,439 we can hit retrieve and we can always 5210 03:11:42,439 --> 03:11:44,800 access what is in favorite number so if 5211 03:11:44,800 --> 03:11:48,040 we store 1 2 3 we hit store or we can 5212 03:11:48,040 --> 03:11:51,520 hit retrieve and we can access 1 2 3 so 5213 03:11:51,520 --> 03:11:54,600 this variable 1 2 3 exists outside of 5214 03:11:54,600 --> 03:11:56,439 function calls now even though I said 5215 03:11:56,439 --> 03:11:58,479 there are more places like stack code 5216 03:11:58,479 --> 03:12:01,640 log return Etc we can only make these 5217 03:12:01,640 --> 03:12:03,760 variables call data memory or storage 5218 03:12:03,760 --> 03:12:05,279 and like I said we'll explain that later 5219 03:12:05,279 --> 03:12:07,279 in the course so let's go ahead let's 5220 03:12:07,279 --> 03:12:09,399 add this back to memory because that's 5221 03:12:09,399 --> 03:12:11,200 normally what you'll see now the next 5222 03:12:11,200 --> 03:12:12,840 question that logically follows is oh 5223 03:12:12,840 --> 03:12:14,120 okay Patrick well why do we need to put 5224 03:12:14,120 --> 03:12:16,319 memory here but we don't need to put 5225 03:12:16,319 --> 03:12:18,319 memory over here in fact if we try to 5226 03:12:18,319 --> 03:12:20,760 put memory there we'll get an error data 5227 03:12:20,760 --> 03:12:23,040 location can only be specified for array 5228 03:12:23,040 --> 03:12:25,359 struct or mapping types but memory was 5229 03:12:25,359 --> 03:12:27,520 given like I was saying earlier arrays 5230 03:12:27,520 --> 03:12:29,200 structs or mappings are considered 5231 03:12:29,200 --> 03:12:31,239 special types in solidity and the way 5232 03:12:31,239 --> 03:12:32,880 that memory management works under the 5233 03:12:32,880 --> 03:12:34,960 hood makes it so that we have to put 5234 03:12:34,960 --> 03:12:37,760 this memory keyword un 256 is known as a 5235 03:12:37,760 --> 03:12:39,720 primitive type and solidity is smart 5236 03:12:39,720 --> 03:12:41,160 enough to know where to put this 5237 03:12:41,160 --> 03:12:43,319 favorite number always under the hood 5238 03:12:43,319 --> 03:12:45,000 like we were saying earlier a string is 5239 03:12:45,000 --> 03:12:47,720 actually an array of bytes and so so as 5240 03:12:47,720 --> 03:12:49,000 we just saw with the air we need to put 5241 03:12:49,000 --> 03:12:51,040 the memory keyword for arrays so then 5242 03:12:51,040 --> 03:12:52,680 the next question is okay well what 5243 03:12:52,680 --> 03:12:54,800 about the storage variable can I put 5244 03:12:54,800 --> 03:12:56,960 that here no you can't put that here 5245 03:12:56,960 --> 03:12:59,680 either since this is a function solidity 5246 03:12:59,680 --> 03:13:01,960 is smart enough to at least know that ah 5247 03:13:01,960 --> 03:13:03,600 okay this is a temporary variable that 5248 03:13:03,600 --> 03:13:05,160 you're working with it's got to be 5249 03:13:05,160 --> 03:13:07,120 memory or call data it's not going to be 5250 03:13:07,120 --> 03:13:09,600 storage since this name is only going to 5251 03:13:09,600 --> 03:13:12,040 exist for a short duration so you got to 5252 03:13:12,040 --> 03:13:13,720 pick one of these other two so the 5253 03:13:13,720 --> 03:13:15,560 summary of this section is that strs 5254 03:13:15,560 --> 03:13:17,439 mappings and arrays need to be given 5255 03:13:17,439 --> 03:13:19,800 this memory keyword string is an array 5256 03:13:19,800 --> 03:13:21,800 of bytes so it needs this memory or call 5257 03:13:21,800 --> 03:13:24,080 data 5258 03:13:26,399 --> 03:13:28,399 keyword so this code is starting to 5259 03:13:28,399 --> 03:13:30,399 shape up it has a lot of functionality 5260 03:13:30,399 --> 03:13:32,359 here we can store variables we can add 5261 03:13:32,359 --> 03:13:35,520 people but it has a bit of an issue if 5262 03:13:35,520 --> 03:13:37,319 we have this contract and we want to say 5263 03:13:37,319 --> 03:13:39,680 oh what was Kelly's favorite number 5264 03:13:39,680 --> 03:13:40,880 let's say we have four people in the 5265 03:13:40,880 --> 03:13:43,160 array let's have Pat 5266 03:13:43,160 --> 03:13:48,120 7 John 8 5267 03:13:48,120 --> 03:13:49,920 Mariah 5268 03:13:49,920 --> 03:13:54,359 10 and Chelsea 22 or 5269 03:13:54,359 --> 03:13:57,439 232 and we asked the question ah what 5270 03:13:57,439 --> 03:13:59,520 was Chelsea's favorite number well the 5271 03:13:59,520 --> 03:14:00,880 way we would do it is we'd have to 5272 03:14:00,880 --> 03:14:03,439 actually Loop through this list of 5273 03:14:03,439 --> 03:14:05,920 people to find Chelsea so we'd say okay 5274 03:14:05,920 --> 03:14:08,680 what's at zero ah okay that's Pat that's 5275 03:14:08,680 --> 03:14:11,520 not Chelsea what's at two Ah that's John 5276 03:14:11,520 --> 03:14:13,880 what's at three Ah that's Mariah excuse 5277 03:14:13,880 --> 03:14:15,680 me what's at three Ah that's Chelsea 5278 03:14:15,680 --> 03:14:18,439 favorite number 232 okay perfect I found 5279 03:14:18,439 --> 03:14:20,880 Chelsea but obviously if we had a 5280 03:14:20,880 --> 03:14:22,880 thousand people in this array that would 5281 03:14:22,880 --> 03:14:24,960 be a very tedious process and that would 5282 03:14:24,960 --> 03:14:26,880 take a long time for us to find the 5283 03:14:26,880 --> 03:14:28,560 person that we wanted so the question 5284 03:14:28,560 --> 03:14:30,720 then is is there a better data structure 5285 03:14:30,720 --> 03:14:33,080 than a list or an array to use that 5286 03:14:33,080 --> 03:14:35,840 makes it much easier to access and find 5287 03:14:35,840 --> 03:14:37,239 the information about the people that we 5288 03:14:37,239 --> 03:14:39,560 want and the answer to this is using a 5289 03:14:39,560 --> 03:14:41,880 mapping you can think of a mapping as a 5290 03:14:41,880 --> 03:14:44,200 dictionary it's a set of keys with each 5291 03:14:44,200 --> 03:14:45,720 key returning a special set of 5292 03:14:45,720 --> 03:14:47,680 information about that key so it's 5293 03:14:47,680 --> 03:14:49,239 similar to a dictionary if you look up 5294 03:14:49,239 --> 03:14:52,000 the wordthe the wordthe will have a 5295 03:14:52,000 --> 03:14:54,239 whole bunch of text Associated only with 5296 03:14:54,239 --> 03:14:56,560 the word thee so let's create a mapping 5297 03:14:56,560 --> 03:14:58,239 type and you'll see how it works in 5298 03:14:58,239 --> 03:14:59,760 practice so we're going to create a 5299 03:14:59,760 --> 03:15:01,960 mapping like this with this mapping 5300 03:15:01,960 --> 03:15:04,479 keyword and we'll say the key is going 5301 03:15:04,479 --> 03:15:07,960 to be a string and It'll point to a uent 5302 03:15:07,960 --> 03:15:10,840 256 so this is going to be our type 5303 03:15:10,840 --> 03:15:12,640 obviously what comes after the type our 5304 03:15:12,640 --> 03:15:14,840 visibility so let's just go ahead and do 5305 03:15:14,840 --> 03:15:17,000 public for this as well and I like to be 5306 03:15:17,000 --> 03:15:18,560 very explicit with my naming so I'm 5307 03:15:18,560 --> 03:15:21,239 going to say name 5308 03:15:21,239 --> 03:15:24,960 to number signifying that this mapping 5309 03:15:24,960 --> 03:15:27,600 Maps someone's name to their favorite 5310 03:15:27,600 --> 03:15:29,560 number and now with this we have 5311 03:15:29,560 --> 03:15:31,160 essentially a dictionary where every 5312 03:15:31,160 --> 03:15:33,840 single name or every single string is 5313 03:15:33,840 --> 03:15:36,560 going to map to one number so for 5314 03:15:36,560 --> 03:15:39,279 example if we looked up Chelsea we'd 5315 03:15:39,279 --> 03:15:41,359 automatically get returned the 232 that 5316 03:15:41,359 --> 03:15:43,120 we're looking for instead of having to 5317 03:15:43,120 --> 03:15:45,560 iterate through this list so let's add 5318 03:15:45,560 --> 03:15:47,359 some capabilities to our ad person 5319 03:15:47,359 --> 03:15:50,080 function here so that we can update our 5320 03:15:50,080 --> 03:15:52,560 mapping so we have this list of people. 5321 03:15:52,560 --> 03:15:54,960 push which adds someone to the array 5322 03:15:54,960 --> 03:15:57,399 let's also update this so it will also 5323 03:15:57,399 --> 03:16:00,040 add somebody to our mapping to do that 5324 03:16:00,040 --> 03:16:04,000 we'll say name to favorite number and we 5325 03:16:04,000 --> 03:16:05,840 put these little brackets in here to 5326 03:16:05,840 --> 03:16:08,479 specify what the key is and we'll 5327 03:16:08,479 --> 03:16:12,560 saycore name and we'll assign that 5328 03:16:12,560 --> 03:16:15,960 toore favorite number what this line is 5329 03:16:15,960 --> 03:16:17,800 doing is now it's saying all right in 5330 03:16:17,800 --> 03:16:19,560 our mapping up here in our name to 5331 03:16:19,560 --> 03:16:21,880 favorite number mapping anytime you look 5332 03:16:21,880 --> 03:16:23,319 for that person's name you'll 5333 03:16:23,319 --> 03:16:24,720 automatically get their favorite number 5334 03:16:24,720 --> 03:16:27,279 back and now you have a much quicker way 5335 03:16:27,279 --> 03:16:29,560 to access people's favorite numbers just 5336 03:16:29,560 --> 03:16:31,720 by knowing their name so let's go ahead 5337 03:16:31,720 --> 03:16:33,319 let's compile 5338 03:16:33,319 --> 03:16:35,760 this let's deploy this let's delete our 5339 03:16:35,760 --> 03:16:37,720 old one we'll deploy 5340 03:16:37,720 --> 03:16:40,120 this now we have this new name to 5341 03:16:40,120 --> 03:16:42,560 favorite number blue button and so let's 5342 03:16:42,560 --> 03:16:44,040 go through the same problem so let's say 5343 03:16:44,040 --> 03:16:47,319 we have Pat 7 5344 03:16:47,319 --> 03:16:49,479 John 5345 03:16:49,479 --> 03:16:52,880 16 Mariah 5346 03:16:52,880 --> 03:16:56,600 32 Chelsea 5347 03:16:56,600 --> 03:16:59,560 232 now same thing list of people zero 5348 03:16:59,560 --> 03:17:01,720 returns Pat list of people one John so 5349 03:17:01,720 --> 03:17:04,319 on and so forth or we could just go down 5350 03:17:04,319 --> 03:17:07,880 here and let's say let's look up Chelsea 5351 03:17:07,880 --> 03:17:09,960 and we automatically get 232 we get 5352 03:17:09,960 --> 03:17:11,399 Chelsea's favorite number back 5353 03:17:11,399 --> 03:17:13,680 automatically same thing if we look up 5354 03:17:13,680 --> 03:17:17,760 Pat we get seven if we look up JN 5355 03:17:17,760 --> 03:17:21,600 we get Mariah and if we look up 5356 03:17:21,600 --> 03:17:24,720 cheesecake we get nothing back in a 5357 03:17:24,720 --> 03:17:27,080 mapping the default value for all the 5358 03:17:27,080 --> 03:17:30,040 keys is zero so if you look up a key or 5359 03:17:30,040 --> 03:17:31,720 a word that we haven't added in the 5360 03:17:31,720 --> 03:17:34,199 mapping yet it defaults to the default 5361 03:17:34,199 --> 03:17:36,720 value of whatever that type is since RS 5362 03:17:36,720 --> 03:17:40,120 is a string to U at 256 U at 256 default 5363 03:17:40,120 --> 03:17:42,399 type is zero if we look for a key that 5364 03:17:42,399 --> 03:17:46,960 we haven't added we get zero back 5365 03:17:49,199 --> 03:17:50,359 so now that we've added all this 5366 03:17:50,359 --> 03:17:52,800 functionality we're looking pretty good 5367 03:17:52,800 --> 03:17:54,920 we really like the way that our contract 5368 03:17:54,920 --> 03:17:57,960 is set up we have our my favorite number 5369 03:17:57,960 --> 03:18:00,279 which is a internal variable but we have 5370 03:18:00,279 --> 03:18:03,160 a way to read it with retrieve we have 5371 03:18:03,160 --> 03:18:06,120 our new typing person we have a public 5372 03:18:06,120 --> 03:18:08,479 list of people array we've got a public 5373 03:18:08,479 --> 03:18:10,560 name to favorite number got a way to 5374 03:18:10,560 --> 03:18:12,399 update the favorite number retrieve the 5375 03:18:12,399 --> 03:18:14,560 favorite number and add people to both 5376 03:18:14,560 --> 03:18:17,120 our list and our mapping now now in the 5377 03:18:17,120 --> 03:18:18,560 future you'll hear me say that you 5378 03:18:18,560 --> 03:18:20,120 should never do this before you write 5379 03:18:20,120 --> 03:18:22,840 any tests before you get it audited but 5380 03:18:22,840 --> 03:18:25,040 for now this is just a dummy contract 5381 03:18:25,040 --> 03:18:26,399 that we're going to deploy on a test net 5382 03:18:26,399 --> 03:18:28,080 so we don't really care but let's go 5383 03:18:28,080 --> 03:18:29,600 ahead and learn how to actually deploy 5384 03:18:29,600 --> 03:18:31,920 this to a real test net this is going to 5385 03:18:31,920 --> 03:18:33,600 simulate what deploying to a real 5386 03:18:33,600 --> 03:18:35,199 network with real money is going to look 5387 03:18:35,199 --> 03:18:37,199 like are you ready you should be this is 5388 03:18:37,199 --> 03:18:39,199 going to be incredibly exciting after 5389 03:18:39,199 --> 03:18:41,920 you do this successfully you should 100% 5390 03:18:41,920 --> 03:18:44,160 tweet about it on Twitter on LinkedIn on 5391 03:18:44,160 --> 03:18:46,120 lens protocol on whatever social media 5392 03:18:46,120 --> 03:18:47,960 you want it's important to celebrate 5393 03:18:47,960 --> 03:18:50,239 your small wins surprisingly it'll help 5394 03:18:50,239 --> 03:18:52,760 motivate you moving forward so first off 5395 03:18:52,760 --> 03:18:54,600 let's make sure this actually compiles 5396 03:18:54,600 --> 03:18:56,279 okay cool we've got a green chat Mark 5397 03:18:56,279 --> 03:18:58,279 there's no warnings there's no errors 5398 03:18:58,279 --> 03:19:00,199 fantastic now let's go back to the 5399 03:19:00,199 --> 03:19:02,640 deploy Tab and we'll delete this down 5400 03:19:02,640 --> 03:19:04,479 here and we'll scroll up and we're going 5401 03:19:04,479 --> 03:19:06,800 to change the environment we're in this 5402 03:19:06,800 --> 03:19:08,960 remix VM and we're actually going to 5403 03:19:08,960 --> 03:19:12,040 move to injected provider metamask 5404 03:19:12,040 --> 03:19:14,279 remember this remix VM is kind of this 5405 03:19:14,279 --> 03:19:18,199 fake world that remix gives to us 5406 03:19:18,199 --> 03:19:20,239 injected provider metamask means that 5407 03:19:20,239 --> 03:19:22,840 we're going to literally inject our 5408 03:19:22,840 --> 03:19:25,760 metamask into this remix we're going to 5409 03:19:25,760 --> 03:19:28,239 inject our metamask into this website 5410 03:19:28,239 --> 03:19:30,359 we're going to allow this website to 5411 03:19:30,359 --> 03:19:32,960 interact with our metamask we'll first 5412 03:19:32,960 --> 03:19:34,600 get prompted by metamask to pick the 5413 03:19:34,600 --> 03:19:36,040 account we want to use I'm going to use 5414 03:19:36,040 --> 03:19:38,160 account one and hit next and we're going 5415 03:19:38,160 --> 03:19:40,040 to go ahead and hit connect similar to 5416 03:19:40,040 --> 03:19:41,920 the way we connected to the faucet we 5417 03:19:41,920 --> 03:19:44,000 scroll up to our metamask we now see oh 5418 03:19:44,000 --> 03:19:45,560 it says your account is not connected 5419 03:19:45,560 --> 03:19:47,239 that's because I'm currently on account 5420 03:19:47,239 --> 03:19:49,840 two let's flip to account one and we do 5421 03:19:49,840 --> 03:19:52,560 indeed see that account one is connected 5422 03:19:52,560 --> 03:19:54,960 and now before where we saw kind of this 5423 03:19:54,960 --> 03:19:57,279 fake account with fake ether we see our 5424 03:19:57,279 --> 03:19:59,160 actual account with the actual amount of 5425 03:19:59,160 --> 03:20:02,199 sapoia e that we have make sure that 5426 03:20:02,199 --> 03:20:03,319 again be sure to use whatever 5427 03:20:03,319 --> 03:20:04,640 recommended test net we have in the 5428 03:20:04,640 --> 03:20:07,399 GitHub repo for us we're using sapoia 5429 03:20:07,399 --> 03:20:08,800 don't worry about the rest of these for 5430 03:20:08,800 --> 03:20:10,960 now so make sure you're on the correct 5431 03:20:10,960 --> 03:20:13,000 test net to deploy to a test net you're 5432 03:20:13,000 --> 03:20:15,439 going to need some seia eth so if you 5433 03:20:15,439 --> 03:20:17,000 haven't been to the faucet be to head 5434 03:20:17,000 --> 03:20:19,319 over to the faucet to get some suppo eth 5435 03:20:19,319 --> 03:20:20,399 remember you can find those in the 5436 03:20:20,399 --> 03:20:23,880 GitHub or web 3d. education now in remix 5437 03:20:23,880 --> 03:20:25,120 what we're going to do we're going to do 5438 03:20:25,120 --> 03:20:27,040 the exact same process we use to deploy 5439 03:20:27,040 --> 03:20:29,000 to the virtual remix environment we're 5440 03:20:29,000 --> 03:20:30,720 going to do that to deploy to the test 5441 03:20:30,720 --> 03:20:31,920 set environment so we're going to go 5442 03:20:31,920 --> 03:20:34,000 ahead hit the deploy button and metamask 5443 03:20:34,000 --> 03:20:35,760 is actually going to go ahead and pop up 5444 03:20:35,760 --> 03:20:37,160 this is similar to what we saw with the 5445 03:20:37,160 --> 03:20:38,640 blockchain example with signing 5446 03:20:38,640 --> 03:20:40,120 transactions we're actually going to 5447 03:20:40,120 --> 03:20:42,960 sign and send a transaction on the test 5448 03:20:42,960 --> 03:20:45,840 set it's similar again to us sending 5449 03:20:45,840 --> 03:20:48,040 ether to our ourselves the difference 5450 03:20:48,040 --> 03:20:50,520 here is though that our data section has 5451 03:20:50,520 --> 03:20:53,600 a ton of information here all this data 5452 03:20:53,600 --> 03:20:55,399 is associated with sending this 5453 03:20:55,399 --> 03:20:57,840 transaction but this one has all of this 5454 03:20:57,840 --> 03:21:00,080 contract information encoded in machine 5455 03:21:00,080 --> 03:21:03,239 readable code or our compiled code in 5456 03:21:03,239 --> 03:21:04,880 details we can see all the pavement 5457 03:21:04,880 --> 03:21:06,359 information associated with this 5458 03:21:06,359 --> 03:21:08,640 transaction we can see exactly how much 5459 03:21:08,640 --> 03:21:10,760 gas it's going to cost to deploy this 5460 03:21:10,760 --> 03:21:12,840 contract on chain but again we're on the 5461 03:21:12,840 --> 03:21:14,680 aoia test Network so this is fake money 5462 03:21:14,680 --> 03:21:16,319 anyways to actually deploy this we're 5463 03:21:16,319 --> 03:21:17,520 going to go go ahead and hit the confirm 5464 03:21:17,520 --> 03:21:19,520 button and now we're going to have sent 5465 03:21:19,520 --> 03:21:21,680 our function if you have the terminal up 5466 03:21:21,680 --> 03:21:24,279 you can see we have this call created 5467 03:21:24,279 --> 03:21:25,920 and it says creation of simple storage 5468 03:21:25,920 --> 03:21:27,720 pending with this view on ether scan 5469 03:21:27,720 --> 03:21:29,720 button if you click the view on ether 5470 03:21:29,720 --> 03:21:31,600 scan button you'll get brought to this 5471 03:21:31,600 --> 03:21:33,319 ether scan page with this transaction 5472 03:21:33,319 --> 03:21:35,920 going through on sepolia you'll see it's 5473 03:21:35,920 --> 03:21:38,080 currently being indexed by Ether scan 5474 03:21:38,080 --> 03:21:39,120 but there's a good chance it already 5475 03:21:39,120 --> 03:21:40,880 went through and back in remix it 5476 03:21:40,880 --> 03:21:41,960 actually goes ahead and gives us this 5477 03:21:41,960 --> 03:21:43,800 green check mark saying that we did 5478 03:21:43,800 --> 03:21:47,040 indeed deploy this contract 5479 03:21:47,040 --> 03:21:48,359 you might have to wait a few minutes for 5480 03:21:48,359 --> 03:21:49,560 this to complete because again we're 5481 03:21:49,560 --> 03:21:51,160 sending a transaction to a test net 5482 03:21:51,160 --> 03:21:53,199 blockchain and the blockchain needs to 5483 03:21:53,199 --> 03:21:55,120 actually ruce the block with our 5484 03:21:55,120 --> 03:21:57,080 transaction in it but if we wait a few 5485 03:21:57,080 --> 03:21:58,800 minutes on either scan we'll eventually 5486 03:21:58,800 --> 03:22:01,520 see a success status with block 5487 03:22:01,520 --> 03:22:04,080 confirmations on this block section here 5488 03:22:04,080 --> 03:22:05,720 and exactly the same as what we saw with 5489 03:22:05,720 --> 03:22:07,960 sending e to ourselves we see all this 5490 03:22:07,960 --> 03:22:09,279 information about the transaction 5491 03:22:09,279 --> 03:22:12,720 transaction hash status block time from 5492 03:22:12,720 --> 03:22:15,840 to blah blah Etc but if we scroll down 5493 03:22:15,840 --> 03:22:18,160 this input data field is much bigger 5494 03:22:18,160 --> 03:22:19,600 than anything we've seen before because 5495 03:22:19,600 --> 03:22:21,520 again this is all the data associated 5496 03:22:21,520 --> 03:22:23,560 with creating this contract and of 5497 03:22:23,560 --> 03:22:25,960 course we see more gas fee information 5498 03:22:25,960 --> 03:22:27,760 because again deploying a smart contract 5499 03:22:27,760 --> 03:22:29,760 to the chain is modifying the blockchain 5500 03:22:29,760 --> 03:22:32,000 so we have to spend gas now if we come 5501 03:22:32,000 --> 03:22:33,680 back to our remix and scroll down we're 5502 03:22:33,680 --> 03:22:35,920 able to see our simple storage contract 5503 03:22:35,920 --> 03:22:37,920 and we're able to copy the address that 5504 03:22:37,920 --> 03:22:40,359 it's at so if we copy this address we go 5505 03:22:40,359 --> 03:22:42,399 back to Ether scan we can even paste 5506 03:22:42,399 --> 03:22:44,560 this into the bar here and we can see 5507 03:22:44,560 --> 03:22:46,080 this contract that we went ahead and 5508 03:22:46,080 --> 03:22:48,080 deployed ether scan is smart enough to 5509 03:22:48,080 --> 03:22:50,640 know that this transaction created a new 5510 03:22:50,640 --> 03:22:52,520 contract remember this has to be on The 5511 03:22:52,520 --> 03:22:54,760 seoa Ether scan not the main net ether 5512 03:22:54,760 --> 03:22:56,560 scan because we sent this on the sepolia 5513 03:22:56,560 --> 03:22:58,080 testnet so now that we have this 5514 03:22:58,080 --> 03:22:59,640 contract created we have all the exact 5515 03:22:59,640 --> 03:23:01,279 same functions that we had in our 5516 03:23:01,279 --> 03:23:03,600 virtual environment but these functions 5517 03:23:03,600 --> 03:23:05,800 are actually on a test net with a 5518 03:23:05,800 --> 03:23:07,560 contract that we actually deployed now 5519 03:23:07,560 --> 03:23:08,880 we can do all the exact same things we 5520 03:23:08,880 --> 03:23:10,800 were doing on our fake remix environment 5521 03:23:10,800 --> 03:23:12,800 on this test environment for example we 5522 03:23:12,800 --> 03:23:14,800 can call retrieve which doesn't send a 5523 03:23:14,800 --> 03:23:16,080 transaction it just reads off the 5524 03:23:16,080 --> 03:23:17,000 blockchain 5525 03:23:17,000 --> 03:23:18,560 and we get zero same as what we got 5526 03:23:18,560 --> 03:23:21,399 before if we look up a name like Pat in 5527 03:23:21,399 --> 03:23:23,439 name to favorite number we get nothing 5528 03:23:23,439 --> 03:23:25,439 back cuz we haven't updated anything if 5529 03:23:25,439 --> 03:23:27,640 we add zero in here for list of people 5530 03:23:27,640 --> 03:23:29,920 we get nothing back as well metamask 5531 03:23:29,920 --> 03:23:31,720 didn't pop up here because these blue 5532 03:23:31,720 --> 03:23:34,399 buttons are view functions View and pure 5533 03:23:34,399 --> 03:23:36,399 functions like we said don't send 5534 03:23:36,399 --> 03:23:38,239 transactions now let's go ahead and 5535 03:23:38,239 --> 03:23:40,120 actually send a transaction let's update 5536 03:23:40,120 --> 03:23:42,199 the blockchain let's update our contract 5537 03:23:42,199 --> 03:23:44,399 by storing a new favorite number so 5538 03:23:44,399 --> 03:23:46,680 let's do 7878 5539 03:23:46,680 --> 03:23:48,439 and we'll hit store and we'll press this 5540 03:23:48,439 --> 03:23:50,160 orange button you'll see you'll get 5541 03:23:50,160 --> 03:23:51,960 prompted with metamask actually popping 5542 03:23:51,960 --> 03:23:54,239 up saying okay let's update the 5543 03:23:54,239 --> 03:23:56,800 blockchain let's send this transaction 5544 03:23:56,800 --> 03:23:58,800 and if we go ahead and hit confirm the 5545 03:23:58,800 --> 03:24:00,520 exact same thing happens we'll get this 5546 03:24:00,520 --> 03:24:02,960 transact to simple Storage storage 5547 03:24:02,960 --> 03:24:04,560 transact to simple storage. store 5548 03:24:04,560 --> 03:24:06,800 pending view an ether scan this little 5549 03:24:06,800 --> 03:24:08,880 check mark we view it we can see the 5550 03:24:08,880 --> 03:24:11,199 transaction indexing on ether scan and 5551 03:24:11,199 --> 03:24:13,080 after you wait for a little bit the 5552 03:24:13,080 --> 03:24:14,920 transaction will go through and now if 5553 03:24:14,920 --> 03:24:17,640 we hit the retrieve button we can see we 5554 03:24:17,640 --> 03:24:21,600 have now stored 7878 on chain if we copy 5555 03:24:21,600 --> 03:24:23,840 the contract address again we paste it 5556 03:24:23,840 --> 03:24:27,000 into sapoia ether scan we scroll down 5557 03:24:27,000 --> 03:24:28,920 after a few minutes we'll actually see a 5558 03:24:28,920 --> 03:24:31,319 second transaction come through we see 5559 03:24:31,319 --> 03:24:33,080 two transactions associated with this 5560 03:24:33,080 --> 03:24:35,319 contract the first transaction obviously 5561 03:24:35,319 --> 03:24:38,199 is the contract creation transaction and 5562 03:24:38,199 --> 03:24:39,920 the second transaction is us actually 5563 03:24:39,920 --> 03:24:42,279 calling the store method ether scan is 5564 03:24:42,279 --> 03:24:44,120 smart enough to know that this is the 5565 03:24:44,120 --> 03:24:46,120 store method it's not always smart 5566 03:24:46,120 --> 03:24:47,520 enough to know that but for this one 5567 03:24:47,520 --> 03:24:49,319 it's smart enough to know and we see 5568 03:24:49,319 --> 03:24:52,279 that we actually updated our contract 5569 03:24:52,279 --> 03:24:53,960 and remember in the future please use 5570 03:24:53,960 --> 03:24:55,960 these testet sparingly we're just 5571 03:24:55,960 --> 03:24:57,640 starting out and we're just learning so 5572 03:24:57,640 --> 03:24:58,760 it's okay for us to send these 5573 03:24:58,760 --> 03:25:00,439 transactions here though but let's go 5574 03:25:00,439 --> 03:25:02,239 ahead and let's keep going because named 5575 03:25:02,239 --> 03:25:03,920 a favorite number of Pat still returns 5576 03:25:03,920 --> 03:25:05,720 nothing list of people zero still 5577 03:25:05,720 --> 03:25:07,840 returns nothing so let's go to add 5578 03:25:07,840 --> 03:25:11,080 person we'll do Pat 16 we'll hit add 5579 03:25:11,080 --> 03:25:13,199 person metam Mass pops up obviously 5580 03:25:13,199 --> 03:25:14,960 because we're updating the state of our 5581 03:25:14,960 --> 03:25:17,160 contract we'll hit confirm we see 5582 03:25:17,160 --> 03:25:19,120 transact to simple storage. adderson is 5583 03:25:19,120 --> 03:25:21,720 pending it looks like it has succeeded 5584 03:25:21,720 --> 03:25:23,520 so now if we do name the favorite number 5585 03:25:23,520 --> 03:25:26,520 of Pat we see 16 get returned and if we 5586 03:25:26,520 --> 03:25:29,040 do list of people at zero we see we get 5587 03:25:29,040 --> 03:25:31,640 Pat whose favorite number is 16 and 5588 03:25:31,640 --> 03:25:33,680 guess what at this point you've 5589 03:25:33,680 --> 03:25:36,040 successfully deployed a smart contract 5590 03:25:36,040 --> 03:25:38,680 to a real test net congratulations you 5591 03:25:38,680 --> 03:25:40,040 should be incredibly excited for 5592 03:25:40,040 --> 03:25:42,120 yourself be sure to give yourself a pat 5593 03:25:42,120 --> 03:25:44,279 on the back maybe go for a walk maybe 5594 03:25:44,279 --> 03:25:45,800 have an extra cup of coffee or an ice 5595 03:25:45,800 --> 03:25:47,880 cream because additionally you've also 5596 03:25:47,880 --> 03:25:50,520 interacted with that contract with these 5597 03:25:50,520 --> 03:25:52,279 buttons and remix that allow us to send 5598 03:25:52,279 --> 03:25:54,560 transactions to update the state of our 5599 03:25:54,560 --> 03:25:56,439 contracts congratulations you're a 5600 03:25:56,439 --> 03:25:58,760 solidity developer but we've got a lot 5601 03:25:58,760 --> 03:26:01,120 more to go and like I said make sure to 5602 03:26:01,120 --> 03:26:03,080 celebrate these little wins celebrating 5603 03:26:03,080 --> 03:26:05,120 little wins will motivate you and excite 5604 03:26:05,120 --> 03:26:06,880 you to continue to move forward so be 5605 03:26:06,880 --> 03:26:08,520 sure to take the time to Pat yourself in 5606 03:26:08,520 --> 03:26:10,760 the back congratulations if you've got 5607 03:26:10,760 --> 03:26:13,080 this far there's a ton more for us to 5608 03:26:13,080 --> 03:26:15,399 learn but just you getting here is a 5609 03:26:15,399 --> 03:26:17,920 fantastic achievement in itself now here 5610 03:26:17,920 --> 03:26:19,720 if we wanted to deploy to a different 5611 03:26:19,720 --> 03:26:21,880 test net all we would have to do in our 5612 03:26:21,880 --> 03:26:24,479 metamask is switch to a different testet 5613 03:26:24,479 --> 03:26:26,760 like linear Gilli since we don't have 5614 03:26:26,760 --> 03:26:29,279 any linear Gil we actually can't deploy 5615 03:26:29,279 --> 03:26:31,120 this to a test net but if we used a 5616 03:26:31,120 --> 03:26:34,040 faucet to get more linear gorill eth 5617 03:26:34,040 --> 03:26:35,439 that's how we would deploy it 5618 03:26:35,439 --> 03:26:36,640 additionally we could do the same 5619 03:26:36,640 --> 03:26:38,279 methodology for deploying to ethereum 5620 03:26:38,279 --> 03:26:40,000 main net or any other main net that you 5621 03:26:40,000 --> 03:26:41,680 want to work with throughout this course 5622 03:26:41,680 --> 03:26:43,199 the difference here is obviously you 5623 03:26:43,199 --> 03:26:45,359 just need to buy some ethereum to 5624 03:26:45,359 --> 03:26:46,439 actually deploy this smart smart 5625 03:26:46,439 --> 03:26:48,800 contract remix will automatically update 5626 03:26:48,800 --> 03:26:50,279 to whatever Network you're working with 5627 03:26:50,279 --> 03:26:51,640 for example right here it says Ah you're 5628 03:26:51,640 --> 03:26:54,239 working on the main network but if we 5629 03:26:54,239 --> 03:26:56,319 were to switch to gelli it would say ah 5630 03:26:56,319 --> 03:26:58,040 you're working on gelli but if we were 5631 03:26:58,040 --> 03:26:59,479 to switch again it would say ah you're 5632 03:26:59,479 --> 03:27:01,279 working on lenia in the future we'll 5633 03:27:01,279 --> 03:27:02,720 learn to add different networks so you 5634 03:27:02,720 --> 03:27:04,840 can learn how to deploy to any other evm 5635 03:27:04,840 --> 03:27:08,000 compatible network that you want 5636 03:27:10,359 --> 03:27:12,479 to now I've mentioned this a couple of 5637 03:27:12,479 --> 03:27:14,760 times but whenever we compile this code 5638 03:27:14,760 --> 03:27:16,359 it compiles it down to something called 5639 03:27:16,359 --> 03:27:20,640 the evm or the ethereum virtual machine 5640 03:27:20,640 --> 03:27:22,560 don't worry too much about exactly what 5641 03:27:22,560 --> 03:27:24,800 this means but essentially the evm is a 5642 03:27:24,800 --> 03:27:27,120 standard for how to compile and how to 5643 03:27:27,120 --> 03:27:30,000 deploy smart contracts to a blockchain 5644 03:27:30,000 --> 03:27:31,960 any blockchain that is evm compatible 5645 03:27:31,960 --> 03:27:33,760 you should be able to deploy solidity 5646 03:27:33,760 --> 03:27:36,560 code to some examples of evm compatible 5647 03:27:36,560 --> 03:27:38,840 blockchains and layer 2os which again 5648 03:27:38,840 --> 03:27:40,319 we're going to go over working with 5649 03:27:40,319 --> 03:27:42,279 layer twos more in the future are going 5650 03:27:42,279 --> 03:27:46,640 to be ethereum polygon arbitrum 5651 03:27:46,640 --> 03:27:49,840 optimism ZK sync and more just note that 5652 03:27:49,840 --> 03:27:50,920 it's important to double check the 5653 03:27:50,920 --> 03:27:53,279 blockchain before you launch to it for 5654 03:27:53,279 --> 03:27:55,560 example ZK sync is zvm compatible but a 5655 03:27:55,560 --> 03:27:57,160 couple of keywords don't actually work 5656 03:27:57,160 --> 03:27:59,640 with ZK sync now let's do a quick recap 5657 03:27:59,640 --> 03:28:01,279 of everything we learned in this lesson 5658 03:28:01,279 --> 03:28:02,960 and then after we do this be absolutely 5659 03:28:02,960 --> 03:28:04,640 be certain to take a break maybe go get 5660 03:28:04,640 --> 03:28:07,000 some ice cream go get that extra coffee 5661 03:28:07,000 --> 03:28:09,000 or whatever you like to do the first 5662 03:28:09,000 --> 03:28:10,640 thing you want to do in any smart 5663 03:28:10,640 --> 03:28:12,600 contract or solidity code that you write 5664 03:28:12,600 --> 03:28:14,439 be sure to write the version that you 5665 03:28:14,439 --> 03:28:16,279 want to work with and above the the 5666 03:28:16,279 --> 03:28:18,800 version be sure to add the spdx license 5667 03:28:18,800 --> 03:28:20,439 identifier if you're not sure what 5668 03:28:20,439 --> 03:28:22,760 version to use for now just default to 5669 03:28:22,760 --> 03:28:24,600 MIT then you have to create your 5670 03:28:24,600 --> 03:28:27,279 contract object and name your contract a 5671 03:28:27,279 --> 03:28:30,040 contract is similar to a class in other 5672 03:28:30,040 --> 03:28:32,479 programming languages anything inside of 5673 03:28:32,479 --> 03:28:34,439 the curly brackets for the contract is 5674 03:28:34,439 --> 03:28:36,520 part of that contract there are many 5675 03:28:36,520 --> 03:28:39,160 different types in solidity like U 256 5676 03:28:39,160 --> 03:28:42,279 string Boolean int Etc if we want to 5677 03:28:42,279 --> 03:28:44,279 create our own type in solidity we can 5678 03:28:44,279 --> 03:28:46,359 use what's called a struct you can 5679 03:28:46,359 --> 03:28:49,199 create arrays or lists in solidity you 5680 03:28:49,199 --> 03:28:51,720 can create mappings or dictionaries or 5681 03:28:51,720 --> 03:28:54,399 hash tables in solidity where if you 5682 03:28:54,399 --> 03:28:55,840 give it a key it'll spit out the 5683 03:28:55,840 --> 03:28:57,720 variable associated with that specific 5684 03:28:57,720 --> 03:29:00,000 key we can create functions in solidity 5685 03:29:00,000 --> 03:29:02,199 that modify the state of the blockchain 5686 03:29:02,199 --> 03:29:04,199 we can also create functions in solidity 5687 03:29:04,199 --> 03:29:05,840 that don't modify the state of the 5688 03:29:05,840 --> 03:29:08,399 blockchain view and pure functions don't 5689 03:29:08,399 --> 03:29:10,080 modify the state of the blockchain we 5690 03:29:10,080 --> 03:29:11,720 can also specify different data 5691 03:29:11,720 --> 03:29:14,520 locations in our parameters of our 5692 03:29:14,520 --> 03:29:16,760 functions but we can only do for special 5693 03:29:16,760 --> 03:29:19,640 types like strings strs and arrays call 5694 03:29:19,640 --> 03:29:22,040 data and memory mean that that variable 5695 03:29:22,040 --> 03:29:24,720 is only temporary and will only exists 5696 03:29:24,720 --> 03:29:26,760 for the duration of the function call 5697 03:29:26,760 --> 03:29:28,640 Storage variables are permanent and stay 5698 03:29:28,640 --> 03:29:30,600 in the contract forever function 5699 03:29:30,600 --> 03:29:32,640 parameters can't be storage variables 5700 03:29:32,640 --> 03:29:34,160 since they're only going to exist for 5701 03:29:34,160 --> 03:29:36,000 the duration of the function call 5702 03:29:36,000 --> 03:29:37,520 whenever we hit compile in our smart 5703 03:29:37,520 --> 03:29:39,160 contracts it actually compiles our 5704 03:29:39,160 --> 03:29:42,439 solidity code down to evm compatible B 5705 03:29:42,439 --> 03:29:44,359 code or machine readable code we'll 5706 03:29:44,359 --> 03:29:45,800 learn more about those specifications 5707 03:29:45,800 --> 03:29:46,560 later 5708 03:29:46,560 --> 03:29:48,279 and last but not least congratulations 5709 03:29:48,279 --> 03:29:51,479 on your first contract 5710 03:30:09,040 --> 03:30:11,720 here all right let's get started now 5711 03:30:11,720 --> 03:30:13,760 with our lesson three remember 5712 03:30:13,760 --> 03:30:15,520 everything is in the GitHub repository 5713 03:30:15,520 --> 03:30:18,359 or the web3 dev. education we scroll 5714 03:30:18,359 --> 03:30:20,880 down once again we can scroll to lesson 5715 03:30:20,880 --> 03:30:23,479 three and again a lot of this is undone 5716 03:30:23,479 --> 03:30:25,319 but it'll be done for the actual video 5717 03:30:25,319 --> 03:30:27,239 scroll down to lesson 3 and we have 5718 03:30:27,239 --> 03:30:30,000 lesson 3 remix storage Factory all the 5719 03:30:30,000 --> 03:30:31,840 code that we're going to be working with 5720 03:30:31,840 --> 03:30:34,880 is in this remix storage Factory f23 5721 03:30:34,880 --> 03:30:37,080 GitHub repository all of the GitHub 5722 03:30:37,080 --> 03:30:39,160 repos associated with this course end 5723 03:30:39,160 --> 03:30:39,960 with 5724 03:30:39,960 --> 03:30:43,640 f23 which stands for Foundry 2023 I'm 5725 03:30:43,640 --> 03:30:46,080 going to first do a brief walkthrough of 5726 03:30:46,080 --> 03:30:47,359 what we're going to be coding for this 5727 03:30:47,359 --> 03:30:49,319 lesson so for now just sit back and 5728 03:30:49,319 --> 03:30:51,439 relax and enjoy for this lesson we're 5729 03:30:51,439 --> 03:30:52,800 going to be working with three new 5730 03:30:52,800 --> 03:30:54,960 contracts our original simple storage 5731 03:30:54,960 --> 03:30:56,840 doso which we're going to do a slate 5732 03:30:56,840 --> 03:31:00,479 modification to a new five storage. or 5733 03:31:00,479 --> 03:31:03,359 add F storage. and a storage factory. 5734 03:31:03,359 --> 03:31:06,000 soou our storage factory. is actually 5735 03:31:06,000 --> 03:31:08,080 going to be responsible for deploying 5736 03:31:08,080 --> 03:31:11,000 new simple storage contracts yes other 5737 03:31:11,000 --> 03:31:13,880 contracts can deploy contracts not only 5738 03:31:13,880 --> 03:31:15,359 is this going to be able to deploy other 5739 03:31:15,359 --> 03:31:16,640 contracts but but it's going to be able 5740 03:31:16,640 --> 03:31:19,439 to interact with other contracts as well 5741 03:31:19,439 --> 03:31:22,000 what we could do is we could deploy this 5742 03:31:22,000 --> 03:31:25,760 to a remix VM H deploy we'll compile all 5743 03:31:25,760 --> 03:31:29,080 of our code go to a remix VM scroll down 5744 03:31:29,080 --> 03:31:31,239 to select the contract we're going to 5745 03:31:31,239 --> 03:31:33,120 select storage Factory not simple 5746 03:31:33,120 --> 03:31:36,040 storage deploy this see that contract 5747 03:31:36,040 --> 03:31:37,960 that we just deployed down at the bottom 5748 03:31:37,960 --> 03:31:39,880 and you'll see our top function is this 5749 03:31:39,880 --> 03:31:41,600 function called create simple storage 5750 03:31:41,600 --> 03:31:43,560 contract where if we pull up our 5751 03:31:43,560 --> 03:31:45,359 terminal and we click create simple 5752 03:31:45,359 --> 03:31:47,080 storage contct contract you'll see we 5753 03:31:47,080 --> 03:31:49,399 get a new transaction at the bottom and 5754 03:31:49,399 --> 03:31:51,199 this transaction is the transaction that 5755 03:31:51,199 --> 03:31:53,560 we deployed a simple storage contract 5756 03:31:53,560 --> 03:31:56,239 from our storage Factory contract now we 5757 03:31:56,239 --> 03:31:58,080 can actually go ahead and interact with 5758 03:31:58,080 --> 03:32:00,439 our simple storage contract remember in 5759 03:32:00,439 --> 03:32:02,600 simple storage we have a function called 5760 03:32:02,600 --> 03:32:05,319 store which takes a favorite number we 5761 03:32:05,319 --> 03:32:07,439 can actually call this store function on 5762 03:32:07,439 --> 03:32:09,960 our simple storage contract from our 5763 03:32:09,960 --> 03:32:12,520 storage Factory contract using this F 5764 03:32:12,520 --> 03:32:15,279 store function so we'll add the index of 5765 03:32:15,279 --> 03:32:17,359 our simple store contract which since we 5766 03:32:17,359 --> 03:32:19,319 only deployed one so far it'll be at 5767 03:32:19,319 --> 03:32:21,520 inex zero and we'll say our new favorite 5768 03:32:21,520 --> 03:32:24,399 number is 1 123 and we'll hit F store 5769 03:32:24,399 --> 03:32:27,439 and we'll click SF store at 0123 SF 5770 03:32:27,439 --> 03:32:29,800 store stands for storage Factory Store 5771 03:32:29,800 --> 03:32:32,359 so we're going to store the number 123 5772 03:32:32,359 --> 03:32:35,040 on index0 and again don't worry about 5773 03:32:35,040 --> 03:32:36,359 this making too much sense yet we're 5774 03:32:36,359 --> 03:32:38,000 going to explain this all in a minute 5775 03:32:38,000 --> 03:32:41,239 now if we hit SF get of zero we'll go 5776 03:32:41,239 --> 03:32:43,080 ahead and get back 1 2 3 we're saying 5777 03:32:43,080 --> 03:32:45,040 let's get the value of the simple 5778 03:32:45,040 --> 03:32:47,160 storage contract stored at index Zer and 5779 03:32:47,160 --> 03:32:49,520 we do indeed get 1 2 3 additionally we 5780 03:32:49,520 --> 03:32:51,000 have this list of simple storage 5781 03:32:51,000 --> 03:32:54,319 contracts array or list and it's only 5782 03:32:54,319 --> 03:32:56,399 size one right now but if we type in 5783 03:32:56,399 --> 03:32:58,880 zero here we get back the address of 5784 03:32:58,880 --> 03:33:00,479 that original simple storage contract 5785 03:33:00,479 --> 03:33:02,239 that we deployed additionally in this 5786 03:33:02,239 --> 03:33:03,600 lesson we're going to learn about a ton 5787 03:33:03,600 --> 03:33:05,000 of incredibly important solidity 5788 03:33:05,000 --> 03:33:07,960 features such as Imports and inheritance 5789 03:33:07,960 --> 03:33:11,199 without further Ado let's get 5790 03:33:13,319 --> 03:33:15,399 froggy and one more time of course 5791 03:33:15,399 --> 03:33:17,080 remember all the code is available in 5792 03:33:17,080 --> 03:33:19,279 The Foundry full course f23 of the chain 5793 03:33:19,279 --> 03:33:22,439 exelor or on the web 3d. ucation site 5794 03:33:22,439 --> 03:33:24,359 once it's up so here we are back in 5795 03:33:24,359 --> 03:33:27,239 remix with our simpl storage. soulle if 5796 03:33:27,239 --> 03:33:29,040 you skipped over the last section and 5797 03:33:29,040 --> 03:33:31,000 want to get that contract just come to 5798 03:33:31,000 --> 03:33:32,680 the full repository go down to lesson 5799 03:33:32,680 --> 03:33:35,040 two go over to the code in the GitHub 5800 03:33:35,040 --> 03:33:36,520 repo associated with this course the 5801 03:33:36,520 --> 03:33:39,640 remix simple storage f23 and just copy 5802 03:33:39,640 --> 03:33:42,399 and paste everything into remix yourself 5803 03:33:42,399 --> 03:33:43,720 to make sure you've done it correctly be 5804 03:33:43,720 --> 03:33:46,040 sure to hit compile we have our simple 5805 03:33:46,040 --> 03:33:47,600 storage contract that we created in our 5806 03:33:47,600 --> 03:33:49,359 last lesson which is great it allows us 5807 03:33:49,359 --> 03:33:51,359 to store our favorite number and it 5808 03:33:51,359 --> 03:33:53,399 allows us to store a list of people who 5809 03:33:53,399 --> 03:33:54,880 have different favorite numbers also a 5810 03:33:54,880 --> 03:33:56,439 mapping and some other different 5811 03:33:56,439 --> 03:33:58,000 functionality with interacting with 5812 03:33:58,000 --> 03:34:00,279 people's favorite number but we want to 5813 03:34:00,279 --> 03:34:02,479 go even further with this we want 5814 03:34:02,479 --> 03:34:04,359 another contract to actually deploy this 5815 03:34:04,359 --> 03:34:06,080 simple storage contract for us and 5816 03:34:06,080 --> 03:34:08,160 interact with it contracts interacting 5817 03:34:08,160 --> 03:34:09,600 with each other seamlessly and 5818 03:34:09,600 --> 03:34:12,120 permissionless is a feature of smart 5819 03:34:12,120 --> 03:34:13,399 contracts and blockchain development 5820 03:34:13,399 --> 03:34:15,000 that's absolutely essential and crucial 5821 03:34:15,000 --> 03:34:16,399 and one of the reasons why blockchain 5822 03:34:16,399 --> 03:34:18,399 development is so powerful the ability 5823 03:34:18,399 --> 03:34:19,880 for contracts to interact with each 5824 03:34:19,880 --> 03:34:21,760 other seamlessly is something known as 5825 03:34:21,760 --> 03:34:23,800 composability smart contracts are 5826 03:34:23,800 --> 03:34:25,399 composable because they can easily 5827 03:34:25,399 --> 03:34:27,359 interact with each other this becomes 5828 03:34:27,359 --> 03:34:28,640 even more important when we get to 5829 03:34:28,640 --> 03:34:30,279 topics such as defi where we can have 5830 03:34:30,279 --> 03:34:31,800 incredibly complicated Financial 5831 03:34:31,800 --> 03:34:33,279 products and instruments interact with 5832 03:34:33,279 --> 03:34:34,960 each other seamlessly because they're 5833 03:34:34,960 --> 03:34:36,399 all using the same smart contract 5834 03:34:36,399 --> 03:34:37,760 interface so we're going to keep our 5835 03:34:37,760 --> 03:34:40,760 simpl storage. the exact same way it was 5836 03:34:40,760 --> 03:34:42,680 from the last lesson and we'll update it 5837 03:34:42,680 --> 03:34:44,160 in a little bit but let's go ahead and 5838 03:34:44,160 --> 03:34:46,080 create a new contract called called 5839 03:34:46,080 --> 03:34:48,880 storage factory. Soul so let's go ahead 5840 03:34:48,880 --> 03:34:50,840 and get this contract set up now we're 5841 03:34:50,840 --> 03:34:52,120 going to be doing this a lot and when we 5842 03:34:52,120 --> 03:34:54,680 work with AI pair programmer now we're 5843 03:34:54,680 --> 03:34:56,080 going to be doing this a lot and when we 5844 03:34:56,080 --> 03:34:57,800 work with AI pair programming this is 5845 03:34:57,800 --> 03:34:59,560 going to be a lot easier for us to do 5846 03:34:59,560 --> 03:35:01,239 but for now repetition is the mother 5847 03:35:01,239 --> 03:35:03,239 skill so let's keep going first thing we 5848 03:35:03,239 --> 03:35:05,000 need to do is what if you want to pause 5849 03:35:05,000 --> 03:35:07,199 the video and add the first two things 5850 03:35:07,199 --> 03:35:08,600 you should put at the top of every slity 5851 03:35:08,600 --> 03:35:11,000 smart contract right now go ahead but 5852 03:35:11,000 --> 03:35:12,479 for those of you who didn't pause let's 5853 03:35:12,479 --> 03:35:13,600 go ahead and do 5854 03:35:13,600 --> 03:35:18,000 spdx license ident to fire MIT and then 5855 03:35:18,000 --> 03:35:21,359 let's do pragma solidity 5856 03:35:21,359 --> 03:35:24,040 0.818 or 19 or whatever you want to do 5857 03:35:24,040 --> 03:35:25,720 you know what let's do 19 what do we do 5858 03:35:25,720 --> 03:35:28,399 in simple storage we did 18 let's do 5859 03:35:28,399 --> 03:35:30,680 18 and then we'll do contract so this 5860 03:35:30,680 --> 03:35:32,439 will be the third thing actually 5861 03:35:32,439 --> 03:35:36,439 contract storage Factory like this and I 5862 03:35:36,439 --> 03:35:38,680 hit command s but you can also go and 5863 03:35:38,680 --> 03:35:40,720 compile like so and I'm also just going 5864 03:35:40,720 --> 03:35:42,239 to add the carrot here meaning we're 5865 03:35:42,239 --> 03:35:44,720 going to use 0.818 but any version 5866 03:35:44,720 --> 03:35:47,120 greater than that all also works as well 5867 03:35:47,120 --> 03:35:48,560 awesome now this storage Factory 5868 03:35:48,560 --> 03:35:50,199 contract is going to be deploying a 5869 03:35:50,199 --> 03:35:52,720 simple storage contract so let's create 5870 03:35:52,720 --> 03:35:54,479 a function that can actually deploy or 5871 03:35:54,479 --> 03:35:56,439 create a simple storage contract so 5872 03:35:56,439 --> 03:36:00,399 we'll say function create simple storage 5873 03:36:00,399 --> 03:36:02,399 contract and we'll make this a public 5874 03:36:02,399 --> 03:36:03,720 function and we're going to have this 5875 03:36:03,720 --> 03:36:05,239 create simple storage contract function 5876 03:36:05,239 --> 03:36:07,600 deploy a contract and then save it to a 5877 03:36:07,600 --> 03:36:10,199 state variable or a storage variable but 5878 03:36:10,199 --> 03:36:12,160 the question is okay well how does the 5879 03:36:12,160 --> 03:36:13,960 storage Factory know what the simple 5880 03:36:13,960 --> 03:36:15,920 storage contract even looks like how 5881 03:36:15,920 --> 03:36:19,160 does this contract know about this 5882 03:36:19,160 --> 03:36:21,319 contract how does this contract know 5883 03:36:21,319 --> 03:36:23,600 that this contract even exists the first 5884 03:36:23,600 --> 03:36:25,000 way that we could do this is we can 5885 03:36:25,000 --> 03:36:27,239 actually go to our simple storage. Soul 5886 03:36:27,239 --> 03:36:29,920 contract and start highlighting from the 5887 03:36:29,920 --> 03:36:32,279 contract word and scroll all the way 5888 03:36:32,279 --> 03:36:35,000 down to the end of the contract copy it 5889 03:36:35,000 --> 03:36:38,040 command C or rightclick copy go back 5890 03:36:38,040 --> 03:36:41,199 over to storage Factory and Below pragma 5891 03:36:41,199 --> 03:36:43,800 solidity but above contract storage 5892 03:36:43,800 --> 03:36:46,439 Factory paste it in here if we go ahead 5893 03:36:46,439 --> 03:36:48,600 and command s or compile this you'll see 5894 03:36:48,600 --> 03:36:50,080 that this actually goes ahead and 5895 03:36:50,080 --> 03:36:53,199 compiles successfully huh so this is to 5896 03:36:53,199 --> 03:36:55,239 show you that yes right now in our 5897 03:36:55,239 --> 03:36:57,479 storage factory. soulle we have contract 5898 03:36:57,479 --> 03:36:59,880 simple storage which ends here and we 5899 03:36:59,880 --> 03:37:04,239 also have contract storage Factory down 5900 03:37:05,960 --> 03:37:08,479 here you're allowed to have multiple 5901 03:37:08,479 --> 03:37:11,359 contracts in the same file now this 5902 03:37:11,359 --> 03:37:13,720 isn't a best practice because we really 5903 03:37:13,720 --> 03:37:15,600 don't want to be having multiple 5904 03:37:15,600 --> 03:37:17,840 contracts in the same file when we could 5905 03:37:17,840 --> 03:37:19,880 separate them out into their own files 5906 03:37:19,880 --> 03:37:21,439 as your projects get bigger and bigger 5907 03:37:21,439 --> 03:37:23,080 if you just add all of your contracts 5908 03:37:23,080 --> 03:37:25,040 into the same file it can get really 5909 03:37:25,040 --> 03:37:27,199 really confusing really difficult to 5910 03:37:27,199 --> 03:37:29,080 jump around the code and find the places 5911 03:37:29,080 --> 03:37:30,479 where you want to add stuff so normally 5912 03:37:30,479 --> 03:37:31,960 it's best practice to keep them 5913 03:37:31,960 --> 03:37:34,040 separated like we did above but we'll 5914 03:37:34,040 --> 03:37:35,120 learn a little bit more about how to 5915 03:37:35,120 --> 03:37:36,680 keep them separate in just a minute if 5916 03:37:36,680 --> 03:37:38,960 you go down to the deploy Tab and you 5917 03:37:38,960 --> 03:37:41,439 say on the remix VM and scroll down you 5918 03:37:41,439 --> 03:37:42,880 actually have this section to choose 5919 03:37:42,880 --> 03:37:45,120 your contract we can choose either one 5920 03:37:45,120 --> 03:37:46,960 of these contracts right now and if on 5921 03:37:46,960 --> 03:37:48,319 the right side you have storagea 5922 03:37:48,319 --> 03:37:50,600 factory. in this contract section you 5923 03:37:50,600 --> 03:37:53,040 can actually choose either one simple 5924 03:37:53,040 --> 03:37:54,760 storage or storage Factory and you can 5925 03:37:54,760 --> 03:37:56,399 see they're both in storage factory. 5926 03:37:56,399 --> 03:37:58,080 soulle if on the right hand side we go 5927 03:37:58,080 --> 03:38:00,199 to simple storage and we go back to this 5928 03:38:00,199 --> 03:38:01,720 contract section we can only chose 5929 03:38:01,720 --> 03:38:03,199 simple storage because the simple 5930 03:38:03,199 --> 03:38:04,960 storage contract only has one contract 5931 03:38:04,960 --> 03:38:06,920 in it the storage Factory has both 5932 03:38:06,920 --> 03:38:09,080 simple storage and storage Factory so 5933 03:38:09,080 --> 03:38:10,800 that can get a little confusing as well 5934 03:38:10,800 --> 03:38:12,080 if you have multiple contracts in the 5935 03:38:12,080 --> 03:38:13,760 same file but let's stick with this 5936 03:38:13,760 --> 03:38:15,760 methodology for now in our storage 5937 03:38:15,760 --> 03:38:17,279 Factory and let's even close out simple 5938 03:38:17,279 --> 03:38:18,760 storage. Soul at the top just so we 5939 03:38:18,760 --> 03:38:20,720 don't get confused in our storage 5940 03:38:20,720 --> 03:38:22,560 factory. Soul let's scroll back down to 5941 03:38:22,560 --> 03:38:25,160 storage Factory because now that we have 5942 03:38:25,160 --> 03:38:27,040 our simple storage in this file we can 5943 03:38:27,040 --> 03:38:30,520 actually deploy the simple storage 5944 03:38:33,960 --> 03:38:36,199 contract so this function is going to 5945 03:38:36,199 --> 03:38:37,800 deploy a simple storage contract but 5946 03:38:37,800 --> 03:38:39,680 we're going to save it to a storage or 5947 03:38:39,680 --> 03:38:41,399 state variable and we're going to do it 5948 03:38:41,399 --> 03:38:43,279 the exact same way we've been saving any 5949 03:38:43,279 --> 03:38:45,760 variable first thing remember like 5950 03:38:45,760 --> 03:38:48,520 remember how we did U 256 public 5951 03:38:48,520 --> 03:38:50,720 favorite number this was in the format 5952 03:38:50,720 --> 03:38:53,680 type visibility name we're going to do 5953 03:38:53,680 --> 03:38:55,680 the exact same thing the type of a 5954 03:38:55,680 --> 03:38:57,520 simple storage contract is going to be 5955 03:38:57,520 --> 03:38:59,520 simple storage and the reason that 5956 03:38:59,520 --> 03:39:01,080 solidity is going to be able to identify 5957 03:39:01,080 --> 03:39:02,800 this keyword is because it's the same 5958 03:39:02,800 --> 03:39:05,800 name as contract in the same sense that 5959 03:39:05,800 --> 03:39:08,000 our struct keyword allows us to create a 5960 03:39:08,000 --> 03:39:10,479 person type the contract keyword allows 5961 03:39:10,479 --> 03:39:12,720 you to create a new type of well a type 5962 03:39:12,720 --> 03:39:15,399 of simple storage contract so simple 5963 03:39:15,399 --> 03:39:17,000 storage for now we'll just give it a 5964 03:39:17,000 --> 03:39:19,199 visibility of public and we'll give it a 5965 03:39:19,199 --> 03:39:21,800 variable name simple storage now this is 5966 03:39:21,800 --> 03:39:23,199 going to be a syntax you're going to see 5967 03:39:23,199 --> 03:39:24,560 a lot and it might be a little bit 5968 03:39:24,560 --> 03:39:25,880 confusing the first couple times you 5969 03:39:25,880 --> 03:39:27,880 read it the difference between these two 5970 03:39:27,880 --> 03:39:29,800 is very subtle the difference between 5971 03:39:29,800 --> 03:39:31,520 simple storage on the left and simple 5972 03:39:31,520 --> 03:39:33,680 storage on the right is very subtle it's 5973 03:39:33,680 --> 03:39:35,840 simply that the S is lowercased over 5974 03:39:35,840 --> 03:39:38,880 here and the S is capitalized over here 5975 03:39:38,880 --> 03:39:41,640 solidity is case sensitive so these are 5976 03:39:41,640 --> 03:39:44,439 actually different word simple storage 5977 03:39:44,439 --> 03:39:46,040 here is referring to the contract simple 5978 03:39:46,040 --> 03:39:47,399 storage here is referring to the 5979 03:39:47,399 --> 03:39:49,239 variable you'll often see people use the 5980 03:39:49,239 --> 03:39:50,680 syntax when working with contracts where 5981 03:39:50,680 --> 03:39:52,720 they name the variable the exact same as 5982 03:39:52,720 --> 03:39:55,120 the contract itself if this is confusing 5983 03:39:55,120 --> 03:39:59,000 to you you can do my simple storage 5984 03:39:59,000 --> 03:40:01,760 instead of simple storage with lowercase 5985 03:40:01,760 --> 03:40:03,960 so either one of these works it's good 5986 03:40:03,960 --> 03:40:07,080 to get used to this as such but if 5987 03:40:07,080 --> 03:40:08,840 that's confusing you can do my simple 5988 03:40:08,840 --> 03:40:10,960 storage now in our create simple storage 5989 03:40:10,960 --> 03:40:12,720 contract function we're going to say 5990 03:40:12,720 --> 03:40:17,680 simple storage equals new simple storage 5991 03:40:17,680 --> 03:40:19,680 like this this new keyword is how 5992 03:40:19,680 --> 03:40:22,720 solidity knows to deploy a contract so 5993 03:40:22,720 --> 03:40:24,359 adjust this code alone if we go to the 5994 03:40:24,359 --> 03:40:26,760 compile tab we compile this this does 5995 03:40:26,760 --> 03:40:29,319 indeed compile we can go to deploy we 5996 03:40:29,319 --> 03:40:30,680 need to make sure we're on the storage 5997 03:40:30,680 --> 03:40:32,960 factory. Soul on the right hand side 5998 03:40:32,960 --> 03:40:35,000 we'll scroll down to the contract we can 5999 03:40:35,000 --> 03:40:37,399 actually deploy our storage Factory like 6000 03:40:37,399 --> 03:40:39,399 so hitting the deploy button and 6001 03:40:39,399 --> 03:40:41,520 remember you can see the transaction in 6002 03:40:41,520 --> 03:40:43,600 the terminal here and we can scroll down 6003 03:40:43,600 --> 03:40:45,840 to the contract right now there's two 6004 03:40:45,840 --> 03:40:48,279 buttons we have our blue view function 6005 03:40:48,279 --> 03:40:50,319 simple storage because again the public 6006 03:40:50,319 --> 03:40:52,520 keyword automatically gives the variable 6007 03:40:52,520 --> 03:40:54,520 name a getter function or a view 6008 03:40:54,520 --> 03:40:56,080 function and of course we have our 6009 03:40:56,080 --> 03:40:58,279 create simple storage contract orange 6010 03:40:58,279 --> 03:40:59,680 button because it is actually a 6011 03:40:59,680 --> 03:41:01,720 transaction right now simple storage 6012 03:41:01,720 --> 03:41:04,239 returns nothing the zero the default 6013 03:41:04,239 --> 03:41:06,080 value for an address which is the zero 6014 03:41:06,080 --> 03:41:08,640 address and if we call create simple 6015 03:41:08,640 --> 03:41:11,239 storage contract we get see a green 6016 03:41:11,239 --> 03:41:13,239 check mark meaning that transaction went 6017 03:41:13,239 --> 03:41:14,960 through now if we call the simple 6018 03:41:14,960 --> 03:41:17,640 storeage blue view function we see we 6019 03:41:17,640 --> 03:41:19,359 indeed get an address here we have 6020 03:41:19,359 --> 03:41:21,560 deployed our simple storage contract 6021 03:41:21,560 --> 03:41:24,600 from another contract oh my goodness so 6022 03:41:24,600 --> 03:41:26,120 congratulations now you know how a 6023 03:41:26,120 --> 03:41:28,000 contract can deploy another contract 6024 03:41:28,000 --> 03:41:30,319 awesome 6025 03:41:32,479 --> 03:41:35,560 job but the thing is like I was saying 6026 03:41:35,560 --> 03:41:37,640 if we just add all of our contracts into 6027 03:41:37,640 --> 03:41:39,479 the same file and we have these massive 6028 03:41:39,479 --> 03:41:41,120 contracts all interweave between each 6029 03:41:41,120 --> 03:41:42,960 other and can get very cluttered and 6030 03:41:42,960 --> 03:41:44,840 very confusing so is there a better way 6031 03:41:44,840 --> 03:41:46,720 we can actually arrange and organize our 6032 03:41:46,720 --> 03:41:48,479 code other than this and this is 6033 03:41:48,479 --> 03:41:49,960 actually even a little bit redundant 6034 03:41:49,960 --> 03:41:51,159 since we already have our simple 6035 03:41:51,159 --> 03:41:53,439 storage. soulle if I change something in 6036 03:41:53,439 --> 03:41:55,359 here then I would also have to go and 6037 03:41:55,359 --> 03:41:57,239 change it in here and that's too much 6038 03:41:57,239 --> 03:41:59,520 work for me as an engineer I will work 6039 03:41:59,520 --> 03:42:02,279 incredibly hard to be incredibly lazy so 6040 03:42:02,279 --> 03:42:04,000 instead of doing this we can use what's 6041 03:42:04,000 --> 03:42:06,120 called an import if we go ahead and 6042 03:42:06,120 --> 03:42:08,640 delete our contract simple storage in 6043 03:42:08,640 --> 03:42:11,080 our storage Factory here so that now we 6044 03:42:11,080 --> 03:42:13,520 just have the storage Factory contract 6045 03:42:13,520 --> 03:42:15,279 we can go ahead and use the import key 6046 03:42:15,279 --> 03:42:17,520 word to import simple storage. soulle so 6047 03:42:17,520 --> 03:42:19,199 we can do 6048 03:42:19,199 --> 03:42:20,960 import 6049 03:42:20,960 --> 03:42:23,279 do/ simple 6050 03:42:23,279 --> 03:42:25,880 storage. and a little semicolon here 6051 03:42:25,880 --> 03:42:29,239 this import do/ simple storage. is the 6052 03:42:29,239 --> 03:42:30,800 exact same as if we had this giant 6053 03:42:30,800 --> 03:42:33,000 simple storage in here so this import 6054 03:42:33,000 --> 03:42:35,239 simple storage. soulle is a shorthand 6055 03:42:35,239 --> 03:42:37,000 version of copy pasting that simple 6056 03:42:37,000 --> 03:42:39,600 storage. soulle into this contract and 6057 03:42:39,600 --> 03:42:42,720 now we're able to have simple storage. 6058 03:42:42,720 --> 03:42:45,600 in its own file and storage Factory just 6059 03:42:45,600 --> 03:42:48,080 import it from simple storage making our 6060 03:42:48,080 --> 03:42:50,560 lives much easier it takes our path 6061 03:42:50,560 --> 03:42:52,720 package or GitHub which we'll explain in 6062 03:42:52,720 --> 03:42:55,760 a little bit and and copy paste whatever 6063 03:42:55,760 --> 03:42:58,800 in that file at the top of our file 6064 03:42:58,800 --> 03:43:00,520 literally solidity for us is copy 6065 03:43:00,520 --> 03:43:02,319 pasting everything in here and sticking 6066 03:43:02,319 --> 03:43:05,040 it up here so we can go ahead run this 6067 03:43:05,040 --> 03:43:07,960 again let's compile delete our old 6068 03:43:07,960 --> 03:43:11,239 contract run remix VM let's be sure 6069 03:43:11,239 --> 03:43:13,080 we're on storage Factory we'll go to 6070 03:43:13,080 --> 03:43:15,120 storage Factory we'll deploy it scroll 6071 03:43:15,120 --> 03:43:17,359 scroll down click here simple storage 6072 03:43:17,359 --> 03:43:19,159 starts up as nothing create simple 6073 03:43:19,159 --> 03:43:21,319 storage oh my goodness look we deployed 6074 03:43:21,319 --> 03:43:24,479 a contract huzzah great work so now that 6075 03:43:24,479 --> 03:43:25,479 we're starting to work with different 6076 03:43:25,479 --> 03:43:26,960 files there's a number of things we want 6077 03:43:26,960 --> 03:43:28,880 to consider first one is actually the 6078 03:43:28,880 --> 03:43:30,760 solidity version so right now we're 6079 03:43:30,760 --> 03:43:34,600 using 0.8.1 with no carat and in storage 6080 03:43:34,600 --> 03:43:37,760 Factor we're using 0.8.1 with a carat if 6081 03:43:37,760 --> 03:43:39,640 I were to for example move the solidity 6082 03:43:39,640 --> 03:43:42,239 version of this down to 6083 03:43:42,239 --> 03:43:45,960 0.8.6 and go to compile this with a 6084 03:43:45,960 --> 03:43:47,800 different version remix is actually 6085 03:43:47,800 --> 03:43:49,439 going to remix is actually going to 6086 03:43:49,439 --> 03:43:51,600 automatically bump this up to 6087 03:43:51,600 --> 03:43:53,920 0.8.9 or actually remix is actually 6088 03:43:53,920 --> 03:43:55,439 going to automatically bump this up to 6089 03:43:55,439 --> 03:43:57,920 0.818 if I'm on the simple storage 6090 03:43:57,920 --> 03:44:00,680 because 0.818 is the version that works 6091 03:44:00,680 --> 03:44:02,760 for simple storage and it still is 6092 03:44:02,760 --> 03:44:05,239 compatible with storage Factory however 6093 03:44:05,239 --> 03:44:06,960 if I were to take storage Factory and 6094 03:44:06,960 --> 03:44:08,199 move it to 6095 03:44:08,199 --> 03:44:10,840 0.7.5 and try to compile it's going to 6096 03:44:10,840 --> 03:44:12,399 try to compile this with 6097 03:44:12,399 --> 03:44:15,399 0.7.0 and our simple storage with 0 . 6098 03:44:15,399 --> 03:44:17,439 7.6 and it's not going to be able to do 6099 03:44:17,439 --> 03:44:18,960 it for both and so we're going to get a 6100 03:44:18,960 --> 03:44:20,840 compilation error so when working with 6101 03:44:20,840 --> 03:44:22,439 multiple files it's important to keep 6102 03:44:22,439 --> 03:44:24,760 the version of solidity in mind because 6103 03:44:24,760 --> 03:44:25,920 you want to make sure that all of your 6104 03:44:25,920 --> 03:44:28,199 contracts can actually compile together 6105 03:44:28,199 --> 03:44:29,680 so this is great and all but right from 6106 03:44:29,680 --> 03:44:31,399 the get-go I want to teach you the more 6107 03:44:31,399 --> 03:44:33,399 advanced import that you should always 6108 03:44:33,399 --> 03:44:35,800 use so this is good but we actually 6109 03:44:35,800 --> 03:44:37,520 never want to default to this we want to 6110 03:44:37,520 --> 03:44:39,439 default to something called named 6111 03:44:39,439 --> 03:44:41,520 Imports let's say our simple storage. 6112 03:44:41,520 --> 03:44:43,199 Soul contract had a ton of other 6113 03:44:43,199 --> 03:44:47,080 contracts like contract simple storage 2 6114 03:44:47,080 --> 03:44:50,359 simple storage 3 simple storage 4 and 6115 03:44:50,359 --> 03:44:52,680 these were all massive massive contracts 6116 03:44:52,680 --> 03:44:54,920 as we have this right now import simple 6117 03:44:54,920 --> 03:44:57,399 storage. would import everything from 6118 03:44:57,399 --> 03:44:59,439 here simple storage simple storage 2 6119 03:44:59,439 --> 03:45:01,880 simple storage 3 simple storage 4 and if 6120 03:45:01,880 --> 03:45:03,720 these files were incredibly big when we 6121 03:45:03,720 --> 03:45:05,720 deploy our storage Factory it would have 6122 03:45:05,720 --> 03:45:08,640 to calculate all this extra computation 6123 03:45:08,640 --> 03:45:10,439 making the deployment of our storage 6124 03:45:10,439 --> 03:45:12,279 Factory more expensive if that's 6125 03:45:12,279 --> 03:45:13,680 confusing to you don't worry about it 6126 03:45:13,680 --> 03:45:15,880 right now additionally in the future 6127 03:45:15,880 --> 03:45:17,800 these can import from weird places that 6128 03:45:17,800 --> 03:45:20,720 aren't compatible with storage Factory 6129 03:45:20,720 --> 03:45:21,920 again that's not going to make sense 6130 03:45:21,920 --> 03:45:24,239 quite yet and that's okay but in any 6131 03:45:24,239 --> 03:45:26,520 case there's a way for us to not import 6132 03:45:26,520 --> 03:45:28,880 this whole file but only a very specific 6133 03:45:28,880 --> 03:45:31,040 contract or a specific section of our 6134 03:45:31,040 --> 03:45:33,600 simple storage. sole so instead what we 6135 03:45:33,600 --> 03:45:35,880 can do is in our import statement we can 6136 03:45:35,880 --> 03:45:38,120 specify the exact contract that we want 6137 03:45:38,120 --> 03:45:40,640 to import from this file so in our 6138 03:45:40,640 --> 03:45:42,840 simple storage. soou let's say we do 6139 03:45:42,840 --> 03:45:45,279 have these other contracts in here we 6140 03:45:45,279 --> 03:45:47,120 could say we only want to import simple 6141 03:45:47,120 --> 03:45:49,720 storage not simple storage 2 not not 6142 03:45:49,720 --> 03:45:52,239 simple storage 3 not simple storage 4 by 6143 03:45:52,239 --> 03:45:55,720 saying import these little brackets here 6144 03:45:55,720 --> 03:45:58,760 simple storage from simpl storage. 6145 03:45:58,760 --> 03:46:00,800 soulle and this goes ahead and compiles 6146 03:46:00,800 --> 03:46:04,159 correctly we could also import multiple 6147 03:46:04,159 --> 03:46:06,199 contracts from our simple storage for 6148 03:46:06,199 --> 03:46:07,760 example we could do import simple 6149 03:46:07,760 --> 03:46:11,239 storage simple storage 2 from simple 6150 03:46:11,239 --> 03:46:14,199 storage. soulle this way we only import 6151 03:46:14,199 --> 03:46:16,239 the exact specific contracts that we 6152 03:46:16,239 --> 03:46:18,720 want from these other files and I 6153 03:46:18,720 --> 03:46:21,040 promise you in the future always 6154 03:46:21,040 --> 03:46:24,439 referring to named Imports instead of 6155 03:46:24,439 --> 03:46:26,439 this type of imports will save you a lot 6156 03:46:26,439 --> 03:46:28,880 of headache in the future so always 6157 03:46:28,880 --> 03:46:31,680 default to this never default to this 6158 03:46:31,680 --> 03:46:33,120 just by learning this you are already 6159 03:46:33,120 --> 03:46:35,239 better than 80% of the current solidity 6160 03:46:35,239 --> 03:46:36,680 developers so 6161 03:46:36,680 --> 03:46:39,040 congratulations but all right fantastic 6162 03:46:39,040 --> 03:46:40,920 so we've learned about Imports we're 6163 03:46:40,920 --> 03:46:43,199 able to import our simple storage from 6164 03:46:43,199 --> 03:46:45,439 simpl storage. soou We're importing it 6165 03:46:45,439 --> 03:46:48,880 in the more advanced way 6166 03:46:52,159 --> 03:46:54,319 congratulations now already here you 6167 03:46:54,319 --> 03:46:55,880 might actually start running into some 6168 03:46:55,880 --> 03:46:57,239 questions right and we're going to get 6169 03:46:57,239 --> 03:46:59,159 more and more advanced with this course 6170 03:46:59,159 --> 03:47:00,760 and you're going to have questions which 6171 03:47:00,760 --> 03:47:02,640 is a good thing if you don't understand 6172 03:47:02,640 --> 03:47:03,720 stuff that means you're thinking 6173 03:47:03,720 --> 03:47:06,120 critically and you're approaching the 6174 03:47:06,120 --> 03:47:08,319 subject matter the right way so this is 6175 03:47:08,319 --> 03:47:10,359 where we're going to jump into again 6176 03:47:10,359 --> 03:47:13,279 doing a little bit of an AI chat example 6177 03:47:13,279 --> 03:47:15,399 so for example on this line let's say 6178 03:47:15,399 --> 03:47:17,359 you're a little bit confused and you go 6179 03:47:17,359 --> 03:47:18,720 what's the difference between simple 6180 03:47:18,720 --> 03:47:21,279 storage here and simple storage here I 6181 03:47:21,279 --> 03:47:24,120 don't understand so let's learn how to 6182 03:47:24,120 --> 03:47:26,920 work with chat chbt or any AI buddy to 6183 03:47:26,920 --> 03:47:28,960 ask them to help clarify so we're going 6184 03:47:28,960 --> 03:47:31,279 to go ahead I'm going to hit command a 6185 03:47:31,279 --> 03:47:33,760 or you can just highlight everything 6186 03:47:33,760 --> 03:47:36,960 command C to copy or rightclick copy 6187 03:47:36,960 --> 03:47:39,399 we'll go over to chat gbt and in here 6188 03:47:39,399 --> 03:47:42,319 we're going to ask the question hi I'm 6189 03:47:42,319 --> 03:47:46,359 having a hard time and let's zoom in 6190 03:47:46,359 --> 03:47:49,600 understanding the difference between the 6191 03:47:49,600 --> 03:47:53,640 simple storages on this line and here's 6192 03:47:53,640 --> 03:47:56,239 where we want to be very specific when 6193 03:47:56,239 --> 03:47:57,920 we're talking with AIS so I'm going to 6194 03:47:57,920 --> 03:48:00,279 hit shift enter so that it doesn't 6195 03:48:00,279 --> 03:48:03,399 actually send the question to chat TBT 6196 03:48:03,399 --> 03:48:05,479 but I'm going to put three back ticks 6197 03:48:05,479 --> 03:48:08,359 shift enter again and actually I said 6198 03:48:08,359 --> 03:48:09,600 we're going to copy the whole thing but 6199 03:48:09,600 --> 03:48:12,479 let's just copy this this single line 6200 03:48:12,479 --> 03:48:15,680 and paste it in here shift enter again 6201 03:48:15,680 --> 03:48:17,800 three back ticks again adding this 6202 03:48:17,800 --> 03:48:21,399 delimiter tells chat gbt that this is a 6203 03:48:21,399 --> 03:48:23,680 block of code and it makes it easier for 6204 03:48:23,680 --> 03:48:26,239 chat gbt to be able to understand that 6205 03:48:26,239 --> 03:48:28,000 this is a block of code and I'll hit 6206 03:48:28,000 --> 03:48:30,960 shift enter twice and if you have a lot 6207 03:48:30,960 --> 03:48:32,399 of code you're not going to be able to 6208 03:48:32,399 --> 03:48:34,479 copy your whole contract because a lot 6209 03:48:34,479 --> 03:48:37,600 of these AIS can only understand so much 6210 03:48:37,600 --> 03:48:40,040 in a question but this is small enough 6211 03:48:40,040 --> 03:48:41,479 that we can actually just go ahead and 6212 03:48:41,479 --> 03:48:43,439 copy the whole thing bring it back over 6213 03:48:43,439 --> 03:48:47,399 to chat yout and say here is my full 6214 03:48:47,399 --> 03:48:50,319 code and then we'll do again shift enter 6215 03:48:50,319 --> 03:48:53,479 three back ticks shift enter paste shift 6216 03:48:53,479 --> 03:48:56,000 enter three back ticks so now we have a 6217 03:48:56,000 --> 03:48:59,279 little AI prompt here that we can ask in 6218 03:48:59,279 --> 03:49:02,159 chubbt and and I don't have this in here 6219 03:49:02,159 --> 03:49:04,560 yet but in the GitHub repo associated 6220 03:49:04,560 --> 03:49:06,359 with this lesson I will add this AI 6221 03:49:06,359 --> 03:49:09,000 prompt in here so let's go to the bottom 6222 03:49:09,000 --> 03:49:10,399 and I was saying you need to use shift 6223 03:49:10,399 --> 03:49:11,880 enter but I guess you could just use 6224 03:49:11,880 --> 03:49:13,359 enter that's fine let's go ahead and 6225 03:49:13,359 --> 03:49:14,720 click the send button and it'll send 6226 03:49:14,720 --> 03:49:17,120 send it the question so now it'll start 6227 03:49:17,120 --> 03:49:18,680 outputting here and let's see what it 6228 03:49:18,680 --> 03:49:20,560 says and this is where we can already 6229 03:49:20,560 --> 03:49:23,000 start to see the power of these AI 6230 03:49:23,000 --> 03:49:25,159 buddies as learning buddies we see in 6231 03:49:25,159 --> 03:49:27,399 the given code simple storage is a 6232 03:49:27,399 --> 03:49:29,960 variable of type simple storage which is 6233 03:49:29,960 --> 03:49:31,720 a contract defined in simple storage. 6234 03:49:31,720 --> 03:49:34,359 Soul tells us what the line is doing it 6235 03:49:34,359 --> 03:49:36,120 clarifies the differences a little bit 6236 03:49:36,120 --> 03:49:38,840 more and a lot of this beginner basic 6237 03:49:38,840 --> 03:49:41,359 stuff AIS are really good at once we get 6238 03:49:41,359 --> 03:49:43,199 more and more advanced AIS are going to 6239 03:49:43,199 --> 03:49:45,399 start breaking apart but but at least 6240 03:49:45,399 --> 03:49:47,080 for the beginning of this course AIS are 6241 03:49:47,080 --> 03:49:48,279 going to be incredibly helpful and 6242 03:49:48,279 --> 03:49:49,880 Incredibly good at explaining a lot of 6243 03:49:49,880 --> 03:49:51,720 these what we could do if we wanted to 6244 03:49:51,720 --> 03:49:53,520 is we could also go ahead and copy this 6245 03:49:53,520 --> 03:49:55,560 prompt we can go over to something like 6246 03:49:55,560 --> 03:49:58,279 Bard paste it in here and ask Bard the 6247 03:49:58,279 --> 03:49:59,800 same thing and here's already a good 6248 03:49:59,800 --> 03:50:01,720 example of where an AI can get things 6249 03:50:01,720 --> 03:50:04,199 wrong if we scroll down it's telling me 6250 03:50:04,199 --> 03:50:05,720 you can use simple storage variable to 6251 03:50:05,720 --> 03:50:07,439 interact with the new simple storage 6252 03:50:07,439 --> 03:50:09,359 contract for example you could call the 6253 03:50:09,359 --> 03:50:11,359 set function to set the value on stored 6254 03:50:11,359 --> 03:50:13,359 data variable or you could call the get 6255 03:50:13,359 --> 03:50:15,279 function to get the value of the stored 6256 03:50:15,279 --> 03:50:18,000 date variable uh there is no stored data 6257 03:50:18,000 --> 03:50:19,960 variable so I don't know where it's 6258 03:50:19,960 --> 03:50:21,880 getting that from so just remember keep 6259 03:50:21,880 --> 03:50:24,199 in mind that AI can get things wrong and 6260 03:50:24,199 --> 03:50:26,359 that when they do there are other forums 6261 03:50:26,359 --> 03:50:28,000 that to use as well like I said we're 6262 03:50:28,000 --> 03:50:29,199 going to be learning about them as we go 6263 03:50:29,199 --> 03:50:32,120 on like stack exchange of theum piranha 6264 03:50:32,120 --> 03:50:34,880 or like I said of course the discussions 6265 03:50:34,880 --> 03:50:38,760 for of this course so if Bard or chbt or 6266 03:50:38,760 --> 03:50:40,120 whatever AI budy you're working with 6267 03:50:40,120 --> 03:50:42,080 gives you something confusing be sure to 6268 03:50:42,080 --> 03:50:44,239 go to the GitHub discussions or ask on 6269 03:50:44,239 --> 03:50:46,640 one of these 6270 03:50:49,120 --> 03:50:51,199 forms now as you can see though right 6271 03:50:51,199 --> 03:50:53,399 now every single time we call create 6272 03:50:53,399 --> 03:50:55,000 simple storage contract we're going to 6273 03:50:55,000 --> 03:50:58,120 deploy a new simple storage contract but 6274 03:50:58,120 --> 03:50:59,640 we're going to override it in this 6275 03:50:59,640 --> 03:51:01,680 simple storage right so if we go ahead 6276 03:51:01,680 --> 03:51:04,040 and deploy this right now scroll down 6277 03:51:04,040 --> 03:51:06,399 here simple storage at the zero address 6278 03:51:06,399 --> 03:51:08,399 create okay now it's at a new address 6279 03:51:08,399 --> 03:51:10,399 create again okay now it's at a new 6280 03:51:10,399 --> 03:51:12,600 address we're not keeping track of all 6281 03:51:12,600 --> 03:51:14,600 the different addresses that this simple 6282 03:51:14,600 --> 03:51:16,560 storage contract is being deployed to so 6283 03:51:16,560 --> 03:51:18,640 let's actually create a running list of 6284 03:51:18,640 --> 03:51:19,840 all the different simple storage 6285 03:51:19,840 --> 03:51:21,720 contracts that we're deploying so 6286 03:51:21,720 --> 03:51:24,560 instead of having this variable be just 6287 03:51:24,560 --> 03:51:26,439 a single simple storage contract let's 6288 03:51:26,439 --> 03:51:28,680 have it be an array or list of simple 6289 03:51:28,680 --> 03:51:30,840 storage contracts and we'll change the 6290 03:51:30,840 --> 03:51:36,120 name to list of simple storage contracts 6291 03:51:36,120 --> 03:51:37,640 so now when we deploy it instead of 6292 03:51:37,640 --> 03:51:39,159 saving it like this we're going to do 6293 03:51:39,159 --> 03:51:41,159 what we did before in our last section 6294 03:51:41,159 --> 03:51:44,000 we'll say simple storage new simple 6295 03:51:44,000 --> 03:51:47,319 storage contract equals new simple 6296 03:51:47,319 --> 03:51:49,880 storage and then we'll push it onto our 6297 03:51:49,880 --> 03:51:53,040 Dynamic array so we'll say list of 6298 03:51:53,040 --> 03:51:58,279 simple storage contracts push new simple 6299 03:51:58,279 --> 03:52:00,920 storage contract so let's go ahead and 6300 03:52:00,920 --> 03:52:03,199 compile this okay looks good let's go 6301 03:52:03,199 --> 03:52:04,479 ahead and deploy this we'll delete our 6302 03:52:04,479 --> 03:52:06,600 old one we're on the remix VM great 6303 03:52:06,600 --> 03:52:08,760 storage Factory and look at this you can 6304 03:52:08,760 --> 03:52:10,800 even see make sure we're on storage 6305 03:52:10,800 --> 03:52:12,479 Factory okay great we'll go ahead and 6306 03:52:12,479 --> 03:52:14,680 deploy that awesome we get list of of 6307 03:52:14,680 --> 03:52:16,479 simple storage contracts which now has 6308 03:52:16,479 --> 03:52:19,880 this U 256 input which allows us to 6309 03:52:19,880 --> 03:52:22,080 choose the index of the variable we'll 6310 03:52:22,080 --> 03:52:24,399 go ahead and create simple storage now 6311 03:52:24,399 --> 03:52:26,319 we go check the zerith index we have an 6312 03:52:26,319 --> 03:52:29,120 address if we check the first index 6313 03:52:29,120 --> 03:52:31,479 nothing happens if we call create again 6314 03:52:31,479 --> 03:52:33,680 which sorry if I have the terminal up 6315 03:52:33,680 --> 03:52:36,120 I'll call create again again now there 6316 03:52:36,120 --> 03:52:38,120 is one at the first index and since I 6317 03:52:38,120 --> 03:52:39,399 called it twice there's also one at the 6318 03:52:39,399 --> 03:52:41,199 second there's nothing at the third I'll 6319 03:52:41,199 --> 03:52:42,880 hit create again there's no one at the 6320 03:52:42,880 --> 03:52:46,040 fourth oh at the third excuse me awesome 6321 03:52:46,040 --> 03:52:47,800 so now we actually have a running list 6322 03:52:47,800 --> 03:52:49,960 of all of our simple storage contracts 6323 03:52:49,960 --> 03:52:51,520 now let's learn how to actually interact 6324 03:52:51,520 --> 03:52:54,199 with other contracts from a contract for 6325 03:52:54,199 --> 03:52:55,760 now we can think of our storage Factory 6326 03:52:55,760 --> 03:52:57,840 as a sort of manager for all these other 6327 03:52:57,840 --> 03:53:00,080 contracts so let's learn how our storage 6328 03:53:00,080 --> 03:53:02,319 Factory contract can actually call the 6329 03:53:02,319 --> 03:53:04,760 store function of the simple storage 6330 03:53:04,760 --> 03:53:06,880 that it deploys so let's create a 6331 03:53:06,880 --> 03:53:09,880 function called SF store which is going 6332 03:53:09,880 --> 03:53:12,880 to stand for storage Factory Store and 6333 03:53:12,880 --> 03:53:16,080 it's going to take two variables a u 256 6334 03:53:16,080 --> 03:53:21,760 undor simple storage index and a u 256 6335 03:53:21,760 --> 03:53:26,720 uncore new simple storage number we make 6336 03:53:26,720 --> 03:53:29,080 this public like this now in order to 6337 03:53:29,080 --> 03:53:30,800 interact with a contract you're always 6338 03:53:30,800 --> 03:53:32,640 going to need two things and we're going 6339 03:53:32,640 --> 03:53:34,520 to refer to this a lot you're going to 6340 03:53:34,520 --> 03:53:36,840 need an address and you're going to need 6341 03:53:36,840 --> 03:53:40,120 the AI now this is technically a lie you 6342 03:53:40,120 --> 03:53:42,080 really just need the function selector 6343 03:53:42,080 --> 03:53:43,600 but we're going to learn that way way 6344 03:53:43,600 --> 03:53:45,760 later in the course for now just think 6345 03:53:45,760 --> 03:53:47,840 okay I always need the address and I 6346 03:53:47,840 --> 03:53:50,840 always need the ABI the ABI stands for 6347 03:53:50,840 --> 03:53:54,199 application binary interface the ABI 6348 03:53:54,199 --> 03:53:56,520 will tell our code exactly how it can 6349 03:53:56,520 --> 03:53:58,520 interact with another contract we'll go 6350 03:53:58,520 --> 03:54:00,920 deeper into the ABI later on in this 6351 03:54:00,920 --> 03:54:03,120 course but for now if you go to the 6352 03:54:03,120 --> 03:54:05,760 compile tab H compile and you scroll 6353 03:54:05,760 --> 03:54:07,520 down there's this little button at the 6354 03:54:07,520 --> 03:54:10,520 bottom that says copy abi2 clipboard or 6355 03:54:10,520 --> 03:54:12,520 you can also go to compilation details 6356 03:54:12,520 --> 03:54:14,080 you can see a ton of information about 6357 03:54:14,080 --> 03:54:16,080 the compliation details such as the bite 6358 03:54:16,080 --> 03:54:18,279 code with the op codes some metadata the 6359 03:54:18,279 --> 03:54:21,720 name but also the ABI which tells us the 6360 03:54:21,720 --> 03:54:23,720 ways we can interact with this contract 6361 03:54:23,720 --> 03:54:25,560 if we hit the drop down for the zero we 6362 03:54:25,560 --> 03:54:27,319 see there's an input create simple 6363 03:54:27,319 --> 03:54:28,720 storage contract which is one of our 6364 03:54:28,720 --> 03:54:31,040 functions and you see state mutability 6365 03:54:31,040 --> 03:54:32,239 which we'll talk about later but if we 6366 03:54:32,239 --> 03:54:34,000 had another drop down we see list of 6367 03:54:34,000 --> 03:54:35,640 simple storage contracts and the other 6368 03:54:35,640 --> 03:54:38,080 drop down we'll see SF store these as 6369 03:54:38,080 --> 03:54:40,279 you know are the buttons that we can 6370 03:54:40,279 --> 03:54:42,439 press when we deploy this contract right 6371 03:54:42,439 --> 03:54:44,680 so if I redeploy this we see those exact 6372 03:54:44,680 --> 03:54:46,000 three buttons these are the three 6373 03:54:46,000 --> 03:54:47,960 buttons that were inside of that ABI 6374 03:54:47,960 --> 03:54:49,960 this is how remix knows to put three 6375 03:54:49,960 --> 03:54:51,600 buttons here because it looks at the ABI 6376 03:54:51,600 --> 03:54:53,359 and sees that there's three buttons so 6377 03:54:53,359 --> 03:54:55,520 in our code here our compiler knows what 6378 03:54:55,520 --> 03:54:57,560 the ABI is so in our code here the 6379 03:54:57,560 --> 03:54:59,600 compiler automatically knows what the 6380 03:54:59,600 --> 03:55:01,840 ABI is because the compiler is the one 6381 03:55:01,840 --> 03:55:03,960 that generates the API and we know where 6382 03:55:03,960 --> 03:55:05,880 the address is because we have a list of 6383 03:55:05,880 --> 03:55:07,319 all of our addresses that we're keeping 6384 03:55:07,319 --> 03:55:09,479 track of up here so the reason we have 6385 03:55:09,479 --> 03:55:11,920 the ABI is because we're importing our 6386 03:55:11,920 --> 03:55:13,319 simple storage contract and actually 6387 03:55:13,319 --> 03:55:15,279 let's delete this simple storage 2 we 6388 03:55:15,279 --> 03:55:17,080 don't really need the simple storage 2 6389 03:55:17,080 --> 03:55:18,680 so when we compile simple storage we 6390 03:55:18,680 --> 03:55:21,080 automatically get the ABI for solidity 6391 03:55:21,080 --> 03:55:22,520 in the future we'll learn other ways to 6392 03:55:22,520 --> 03:55:25,000 get the API so down here let's get a 6393 03:55:25,000 --> 03:55:27,000 simple storage contract to interact with 6394 03:55:27,000 --> 03:55:29,680 from our list and to do that we'll say 6395 03:55:29,680 --> 03:55:34,239 simple storage my simple storage equals 6396 03:55:34,239 --> 03:55:39,000 list of simple storage contracts at 6397 03:55:39,000 --> 03:55:42,159 index simple storage index like this 6398 03:55:42,159 --> 03:55:44,399 since this is an array of simple storage 6399 03:55:44,399 --> 03:55:46,560 contracts we can just automatically get 6400 03:55:46,560 --> 03:55:49,439 the contract itself like this however 6401 03:55:49,439 --> 03:55:50,720 let's say that instead of this being an 6402 03:55:50,720 --> 03:55:52,439 array of simple storage contracts this 6403 03:55:52,439 --> 03:55:55,560 was an array an array of addresses a 6404 03:55:55,560 --> 03:56:00,319 list of simple storage addresses like 6405 03:56:00,319 --> 03:56:02,399 this you don't have to code along with 6406 03:56:02,399 --> 03:56:03,960 me for this section just go ahead and 6407 03:56:03,960 --> 03:56:07,040 follow along and watch if we had a list 6408 03:56:07,040 --> 03:56:09,120 of addresses and this would be to be a 6409 03:56:09,120 --> 03:56:10,720 little bit different but we had a list 6410 03:56:10,720 --> 03:56:12,840 of addresses instead we could say simple 6411 03:56:12,840 --> 03:56:16,239 storage my simple storage equals list of 6412 03:56:16,239 --> 03:56:18,880 simple storage addresses at the index 6413 03:56:18,880 --> 03:56:20,479 and then do something called type 6414 03:56:20,479 --> 03:56:23,560 casting and we'd wrap this in 6415 03:56:23,560 --> 03:56:25,920 parentheses like so let me zoom out a 6416 03:56:25,920 --> 03:56:27,479 little bit so this is something we'll 6417 03:56:27,479 --> 03:56:29,880 learn about a little bit later so 6418 03:56:29,880 --> 03:56:31,159 basically what we're doing is this list 6419 03:56:31,159 --> 03:56:32,720 of simple storage addresses simple 6420 03:56:32,720 --> 03:56:34,720 storage Index this line returns an 6421 03:56:34,720 --> 03:56:37,960 address and we're wrapping that address 6422 03:56:37,960 --> 03:56:40,880 in simple storage like so if this is a 6423 03:56:40,880 --> 03:56:42,520 little confusing for you now don't worry 6424 03:56:42,520 --> 03:56:44,239 too much about it we will learn about 6425 03:56:44,239 --> 03:56:46,319 about it more later now that we have our 6426 03:56:46,319 --> 03:56:47,920 simple storage contract we can actually 6427 03:56:47,920 --> 03:56:50,319 call the store function directly on this 6428 03:56:50,319 --> 03:56:52,960 contract so now we can say my simple 6429 03:56:52,960 --> 03:56:56,319 storage. store and we'll add the new 6430 03:56:56,319 --> 03:56:58,720 simple storage number and this is great 6431 03:56:58,720 --> 03:57:00,359 if we were to deploy this contract right 6432 03:57:00,359 --> 03:57:01,880 now though and call this SF store 6433 03:57:01,880 --> 03:57:03,520 function though we wouldn't be able to 6434 03:57:03,520 --> 03:57:06,640 read the new variable that we just 6435 03:57:06,640 --> 03:57:08,479 updated our simple storage contract with 6436 03:57:08,479 --> 03:57:10,199 so let's create a function that allows 6437 03:57:10,199 --> 03:57:12,359 us to read from our simple storage 6438 03:57:12,359 --> 03:57:14,439 contracts as well so we'll create a 6439 03:57:14,439 --> 03:57:18,080 function called SF get which will take a 6440 03:57:18,080 --> 03:57:23,239 un 256 undor simple storage index is an 6441 03:57:23,239 --> 03:57:25,880 input parameter we'll make this a public 6442 03:57:25,880 --> 03:57:29,399 view function that will return a uent 6443 03:57:29,399 --> 03:57:33,479 256 you in 256 and we'll say simple 6444 03:57:33,479 --> 03:57:36,640 storage my simple storage equals and 6445 03:57:36,640 --> 03:57:38,960 we'll use this exact same syntax that we 6446 03:57:38,960 --> 03:57:40,520 used above to get the simple storage 6447 03:57:40,520 --> 03:57:42,800 index equals list of simple storage 6448 03:57:42,800 --> 03:57:45,120 contracts at the simple storage index 6449 03:57:45,120 --> 03:57:47,920 and now we're going to do return my 6450 03:57:47,920 --> 03:57:49,960 simple storage and again if you see 6451 03:57:49,960 --> 03:57:51,760 these autocompletes that come up you can 6452 03:57:51,760 --> 03:57:55,479 just hit tab but do retrieve so perfect 6453 03:57:55,479 --> 03:57:57,279 now let's go ahead and compile we'll go 6454 03:57:57,279 --> 03:57:59,159 ahead and delete the old 6455 03:57:59,159 --> 03:58:01,319 deploy we'll make sure we're on storagea 6456 03:58:01,319 --> 03:58:03,920 factory. soul we'll hit deploy and we 6457 03:58:03,920 --> 03:58:06,800 see storage Factory down here now let's 6458 03:58:06,800 --> 03:58:08,520 go ahead run through that exact same 6459 03:58:08,520 --> 03:58:10,880 exercise so we'll pull up the terminal 6460 03:58:10,880 --> 03:58:12,720 just to see our transactions go through 6461 03:58:12,720 --> 03:58:14,760 we'll hit create simple storage let's 6462 03:58:14,760 --> 03:58:15,960 see that it's actually there at the 6463 03:58:15,960 --> 03:58:18,479 zeroth index okay cool we see an address 6464 03:58:18,479 --> 03:58:22,120 there so now let's store a new variable 6465 03:58:22,120 --> 03:58:24,680 at index0 so at this address so we'll 6466 03:58:24,680 --> 03:58:28,199 say at index0 we'll store the number 1 2 6467 03:58:28,199 --> 03:58:30,640 3 and actually before I hit this button 6468 03:58:30,640 --> 03:58:33,120 if we go down here we hit zero we get 6469 03:58:33,120 --> 03:58:35,399 nothing back right but now if I hit SF 6470 03:58:35,399 --> 03:58:37,760 store with index zero favorite number 1 6471 03:58:37,760 --> 03:58:39,960 2 3 looks like the transaction did go 6472 03:58:39,960 --> 03:58:42,920 through now if I hit SF get we go ahead 6473 03:58:42,920 --> 03:58:44,640 and get 1 2 3 6474 03:58:44,640 --> 03:58:47,040 so our storage Factory contract was able 6475 03:58:47,040 --> 03:58:49,439 to create its own simple storage 6476 03:58:49,439 --> 03:58:52,720 contract store a variable in that 6477 03:58:52,720 --> 03:58:54,439 contract from the storage Factory and we 6478 03:58:54,439 --> 03:58:56,840 were able to read back the number one 6479 03:58:56,840 --> 03:58:58,640 two 3 all from within our storage 6480 03:58:58,640 --> 03:59:00,960 Factory contract feel free to pause 6481 03:59:00,960 --> 03:59:02,640 right now and play around with adding 6482 03:59:02,640 --> 03:59:03,920 different values creating different 6483 03:59:03,920 --> 03:59:05,359 simple storage contracts so that you 6484 03:59:05,359 --> 03:59:07,159 really understand what's going on you 6485 03:59:07,159 --> 03:59:09,080 can also feel free to hit the little 6486 03:59:09,080 --> 03:59:11,199 dropdowns and read more information 6487 03:59:11,199 --> 03:59:14,080 about these transactions just as a recap 6488 03:59:14,080 --> 03:59:15,640 in our storage Factory contract we have 6489 03:59:15,640 --> 03:59:17,439 a function called create simple storage 6490 03:59:17,439 --> 03:59:19,120 contract which creates new simple 6491 03:59:19,120 --> 03:59:21,359 storage contracts from the storage 6492 03:59:21,359 --> 03:59:23,479 Factory contract the reason it's able to 6493 03:59:23,479 --> 03:59:25,720 do this is because we're importing from 6494 03:59:25,720 --> 03:59:28,319 our simpl storage. file using something 6495 03:59:28,319 --> 03:59:30,560 called named Imports we're only 6496 03:59:30,560 --> 03:59:32,560 importing simple storage we're not 6497 03:59:32,560 --> 03:59:34,279 importing anything in these other 6498 03:59:34,279 --> 03:59:38,199 contracts then we use SF store to store 6499 03:59:38,199 --> 03:59:39,840 a new number on one of those simple 6500 03:59:39,840 --> 03:59:41,920 storage contracts using the index in our 6501 03:59:41,920 --> 03:59:43,760 array it can do this because we have the 6502 03:59:43,760 --> 03:59:46,040 address address and the ABI the list of 6503 03:59:46,040 --> 03:59:47,840 simple storage contracts automatically 6504 03:59:47,840 --> 03:59:50,640 compact with the address and the ABI and 6505 03:59:50,640 --> 03:59:52,800 then finally we can read back those 6506 03:59:52,800 --> 03:59:55,120 simple storage values that we stored now 6507 03:59:55,120 --> 03:59:57,479 we can make this sfg function even more 6508 03:59:57,479 --> 04:00:00,760 condensed since this list of simple 6509 04:00:00,760 --> 04:00:02,960 storage contracts simple storage index 6510 04:00:02,960 --> 04:00:06,080 returns an object of type simple storage 6511 04:00:06,080 --> 04:00:08,439 we can actually delete this whole line 6512 04:00:08,439 --> 04:00:09,760 copy 6513 04:00:09,760 --> 04:00:12,960 this paste it here and delete this line 6514 04:00:12,960 --> 04:00:15,399 and this will work exactly the same as 6515 04:00:15,399 --> 04:00:17,680 what we had before go ahead and save or 6516 04:00:17,680 --> 04:00:19,040 compile you'll go ahead and get that 6517 04:00:19,040 --> 04:00:21,399 green check mark there this retrieve is 6518 04:00:21,399 --> 04:00:22,640 saying we're going to call the retrieve 6519 04:00:22,640 --> 04:00:26,000 function on whatever this is and this 6520 04:00:26,000 --> 04:00:28,120 whatever this is is of type simple 6521 04:00:28,120 --> 04:00:30,199 storage contract we can actually do the 6522 04:00:30,199 --> 04:00:32,600 same thing up here by deleting this part 6523 04:00:32,600 --> 04:00:34,399 copying this line except for the 6524 04:00:34,399 --> 04:00:37,040 semicolon and pasting it over the myle 6525 04:00:37,040 --> 04:00:39,880 storage and hitting save or compile 6526 04:00:39,880 --> 04:00:43,840 awesome great job so far 6527 04:00:46,359 --> 04:00:48,479 awesome now let's say you really like 6528 04:00:48,479 --> 04:00:50,439 this simple storage contract you love 6529 04:00:50,439 --> 04:00:52,520 all the functionality except for one 6530 04:00:52,520 --> 04:00:55,000 thing you wish that the store function 6531 04:00:55,000 --> 04:00:56,520 didn't just store the favorite number 6532 04:00:56,520 --> 04:00:58,520 you wish it added five so for some 6533 04:00:58,520 --> 04:01:00,080 reason you want a contract that does 6534 04:01:00,080 --> 04:01:01,760 everything this contract does but just 6535 04:01:01,760 --> 04:01:03,760 adds five whenever you call store for 6536 04:01:03,760 --> 04:01:05,239 some reason you want everyone's favorite 6537 04:01:05,239 --> 04:01:07,239 number to be five larger than what they 6538 04:01:07,239 --> 04:01:09,040 think it is well one thing we could do 6539 04:01:09,040 --> 04:01:10,680 is we could just copy paste this into a 6540 04:01:10,680 --> 04:01:12,399 new file but again that's kind of too 6541 04:01:12,399 --> 04:01:13,960 much work for me I'm a lazy engineer 6542 04:01:13,960 --> 04:01:15,680 here but let's go ahead and see how we 6543 04:01:15,680 --> 04:01:17,439 can approach this problem so let's 6544 04:01:17,439 --> 04:01:19,720 create a new file and we'll call it add 6545 04:01:19,720 --> 04:01:22,680 five storage. soul and same thing since 6546 04:01:22,680 --> 04:01:23,920 this is a new contract we're going to 6547 04:01:23,920 --> 04:01:25,199 follow the exact same tips we're going 6548 04:01:25,199 --> 04:01:30,000 to do spdx license identifier MIT we're 6549 04:01:30,000 --> 04:01:33,600 going do pragma solidity 6550 04:01:33,600 --> 04:01:35,840 0.818 let's even do the little carrot 6551 04:01:35,840 --> 04:01:38,840 here and we'll do contract add five 6552 04:01:38,840 --> 04:01:42,359 storage like so compile great looking 6553 04:01:42,359 --> 04:01:44,399 good oh I'm getting a warning 6554 04:01:44,399 --> 04:01:47,399 spdx license spelled license wrong so 6555 04:01:47,399 --> 04:01:48,960 let's spell that right okay cool looks 6556 04:01:48,960 --> 04:01:50,600 good so like I said the first thing that 6557 04:01:50,600 --> 04:01:52,159 we could do is we could copy paste 6558 04:01:52,159 --> 04:01:53,920 everything in here and then just change 6559 04:01:53,920 --> 04:01:56,080 the pieces that we don't like in our ad 6560 04:01:56,080 --> 04:01:57,840 five storage this is a little bit 6561 04:01:57,840 --> 04:02:00,000 redundant a little bit too much work and 6562 04:02:00,000 --> 04:02:02,000 we are Engineers we want to work as hard 6563 04:02:02,000 --> 04:02:04,319 as possible to be as lazy as possible so 6564 04:02:04,319 --> 04:02:06,000 how can we do that well this is where we 6565 04:02:06,000 --> 04:02:08,120 can do something called inheritance we 6566 04:02:08,120 --> 04:02:10,199 can have our ad five storage contract be 6567 04:02:10,199 --> 04:02:12,840 something called a child contract of our 6568 04:02:12,840 --> 04:02:14,479 simple storage contract 6569 04:02:14,479 --> 04:02:16,880 and we can have our ad five storage 6570 04:02:16,880 --> 04:02:19,960 inherit all of the functionality all of 6571 04:02:19,960 --> 04:02:22,080 the functionality of our simple storage 6572 04:02:22,080 --> 04:02:24,439 contract so first of course in order for 6573 04:02:24,439 --> 04:02:26,600 our ad five storage to know about our 6574 04:02:26,600 --> 04:02:28,000 symol storage contract we're going to go 6575 04:02:28,000 --> 04:02:29,920 ahead and have to import it so we're 6576 04:02:29,920 --> 04:02:31,760 going to do import and we're going to do 6577 04:02:31,760 --> 04:02:33,920 once again the named Imports because 6578 04:02:33,920 --> 04:02:36,159 we're Advanced solidity Engineers so 6579 04:02:36,159 --> 04:02:38,640 we're going to say import simple storage 6580 04:02:38,640 --> 04:02:41,600 just the simple storage contract 6581 04:02:41,600 --> 04:02:44,880 froms simple storage. soul now if this 6582 04:02:44,880 --> 04:02:46,880 do slash is confusing to you don't worry 6583 04:02:46,880 --> 04:02:48,560 we'll learn about directory structures 6584 04:02:48,560 --> 04:02:50,640 later on in the course and then we'll 6585 04:02:50,640 --> 04:02:53,880 say our contract add five storage is 6586 04:02:53,880 --> 04:02:56,439 simple storage now our ad five storage 6587 04:02:56,439 --> 04:02:58,359 is going to do what's called inherit 6588 04:02:58,359 --> 04:03:00,800 everything from simple storage and our 6589 04:03:00,800 --> 04:03:02,760 ad five storage is going to have all the 6590 04:03:02,760 --> 04:03:05,080 same functionality as simple storage we 6591 04:03:05,080 --> 04:03:06,880 can actually see this directly if we go 6592 04:03:06,880 --> 04:03:09,680 to compile let's go ahead and delete our 6593 04:03:09,680 --> 04:03:11,520 previously deployed contracts we're on 6594 04:03:11,520 --> 04:03:14,199 the remix VM let's make sure we're we've 6595 04:03:14,199 --> 04:03:16,920 selected ad five storage adiv storage. 6596 04:03:16,920 --> 04:03:19,120 Soul let's go ahead and deploy it and if 6597 04:03:19,120 --> 04:03:21,680 we scroll down we can actually see oh my 6598 04:03:21,680 --> 04:03:23,760 goodness it's got all the same buttons 6599 04:03:23,760 --> 04:03:26,120 as simple storage even though the 6600 04:03:26,120 --> 04:03:27,399 contract itself doesn't have anything 6601 04:03:27,399 --> 04:03:30,000 defined that's because we inherited all 6602 04:03:30,000 --> 04:03:32,279 of the buttons We inherited all of the 6603 04:03:32,279 --> 04:03:34,439 functionality of simple storage into ad 6604 04:03:34,439 --> 04:03:36,960 five storage if you want a contract to 6605 04:03:36,960 --> 04:03:38,560 inherit the functionality of another 6606 04:03:38,560 --> 04:03:40,520 contract you just import it in and then 6607 04:03:40,520 --> 04:03:43,199 say your contract is that other contract 6608 04:03:43,199 --> 04:03:45,040 now we can keep going though and add our 6609 04:03:45,040 --> 04:03:46,920 own custom functionality into ad five 6610 04:03:46,920 --> 04:03:49,199 storage that's not in simple storage so 6611 04:03:49,199 --> 04:03:51,520 for example we could say function say 6612 04:03:51,520 --> 04:03:54,239 hello it's going to be a public and it 6613 04:03:54,239 --> 04:03:56,880 returns a string memory and again you 6614 04:03:56,880 --> 04:03:58,800 need the memory keyword because strings 6615 04:03:58,800 --> 04:04:01,080 are special in solidity and we can just 6616 04:04:01,080 --> 04:04:04,439 say return hello like so this will be a 6617 04:04:04,439 --> 04:04:06,520 public pure it's not a view because 6618 04:04:06,520 --> 04:04:08,319 we're not reading from storage and again 6619 04:04:08,319 --> 04:04:09,760 if that dissertion is a little confusing 6620 04:04:09,760 --> 04:04:12,120 to you don't worry too much about it now 6621 04:04:12,120 --> 04:04:13,720 but if we go to deploy it it's still 6622 04:04:13,720 --> 04:04:15,920 delete our old one we'll deploy this one 6623 04:04:15,920 --> 04:04:17,680 we see we have all the functionality of 6624 04:04:17,680 --> 04:04:19,680 simple storage plus this say hello 6625 04:04:19,680 --> 04:04:22,479 function great but let's delete that for 6626 04:04:22,479 --> 04:04:24,080 now let's say instead of wanting to add 6627 04:04:24,080 --> 04:04:26,239 additional customization you actually 6628 04:04:26,239 --> 04:04:28,520 love every function in here except for 6629 04:04:28,520 --> 04:04:30,319 one remember the reason we wanted this 6630 04:04:30,319 --> 04:04:32,159 adiv storage. soulle is because we 6631 04:04:32,159 --> 04:04:33,560 actually want to change the store 6632 04:04:33,560 --> 04:04:35,760 function to have it add an additional 6633 04:04:35,760 --> 04:04:37,680 five to people's favorite numbers maybe 6634 04:04:37,680 --> 04:04:39,479 you're mischievous and you want people's 6635 04:04:39,479 --> 04:04:40,920 favorite numbers to be five greater than 6636 04:04:40,920 --> 04:04:42,720 they are well to add this ad five 6637 04:04:42,720 --> 04:04:44,439 customization to that store function we 6638 04:04:44,439 --> 04:04:46,720 can do something called overrides to do 6639 04:04:46,720 --> 04:04:48,520 overrides there are two keywords that we 6640 04:04:48,520 --> 04:04:50,399 need to be aware of those are virtual 6641 04:04:50,399 --> 04:04:52,279 and override if our were to try to 6642 04:04:52,279 --> 04:04:54,439 create a store function for our ad five 6643 04:04:54,439 --> 04:04:56,199 storage right now what do you think will 6644 04:04:56,199 --> 04:04:57,920 happen well let's try it out so let's 6645 04:04:57,920 --> 04:05:01,159 say function store un 6646 04:05:01,159 --> 04:05:03,640 256 undor new 6647 04:05:03,640 --> 04:05:06,720 number public if we try to compile this 6648 04:05:06,720 --> 04:05:08,640 right now we'll actually get an error 6649 04:05:08,640 --> 04:05:10,680 even if there's nothing in this store 6650 04:05:10,680 --> 04:05:12,920 function we roll over we say from 6651 04:05:12,920 --> 04:05:15,640 solidity type error overriding function 6652 04:05:15,640 --> 04:05:17,880 is missing override specifier and 6653 04:05:17,880 --> 04:05:20,080 remember if you get lost or confused an 6654 04:05:20,080 --> 04:05:21,319 error like this is something perfect for 6655 04:05:21,319 --> 04:05:23,720 you to ask chat TBT or maybe even find 6656 04:05:23,720 --> 04:05:27,560 we could say I am trying to compile my 6657 04:05:27,560 --> 04:05:31,800 solidity code but I'm getting this error 6658 04:05:31,800 --> 04:05:33,840 we can copy this whole error here paste 6659 04:05:33,840 --> 04:05:36,199 it in here and then in additional 6660 04:05:36,199 --> 04:05:38,560 context we'll just add the code like 6661 04:05:38,560 --> 04:05:40,920 this we'll hit search see what it gives 6662 04:05:40,920 --> 04:05:43,159 us we'll say and it looks like find was 6663 04:05:43,159 --> 04:05:45,239 able to find the answer the error 6664 04:05:45,239 --> 04:05:46,920 message indicates the function store in 6665 04:05:46,920 --> 04:05:48,479 the ad five storage contract is missing 6666 04:05:48,479 --> 04:05:50,880 the override specifier which is required 6667 04:05:50,880 --> 04:05:52,640 because it overrides a virtual function 6668 04:05:52,640 --> 04:05:54,760 from the simple storage contract thanks 6669 04:05:54,760 --> 04:05:56,279 I'll explain what find is giving us in 6670 04:05:56,279 --> 04:05:58,359 just a minute it's right we need to tell 6671 04:05:58,359 --> 04:06:01,600 solidity that it needs to override the 6672 04:06:01,600 --> 04:06:04,000 store function in simple storage we want 6673 04:06:04,000 --> 04:06:06,560 to be very explicit and say hey do this 6674 04:06:06,560 --> 04:06:08,319 store function and not what's in simple 6675 04:06:08,319 --> 04:06:10,560 storage. soole so let's go ahead and add 6676 04:06:10,560 --> 04:06:12,680 that keyword override now though if we 6677 04:06:12,680 --> 04:06:14,159 just add that keyword we go ahead and 6678 04:06:14,159 --> 04:06:16,479 try to compile we still get an error 6679 04:06:16,479 --> 04:06:18,439 trying to override a non- virtual 6680 04:06:18,439 --> 04:06:20,720 function did you forget to add virtual 6681 04:06:20,720 --> 04:06:23,040 in order for a function to be override a 6682 04:06:23,040 --> 04:06:25,439 bowl you need to add this virtual 6683 04:06:25,439 --> 04:06:27,920 keyword in the base class or the parent 6684 04:06:27,920 --> 04:06:29,920 class so in simple storage we need to 6685 04:06:29,920 --> 04:06:32,000 add virtual to store this virtual 6686 04:06:32,000 --> 04:06:33,800 keyword means that this function is 6687 04:06:33,800 --> 04:06:35,840 overridable any function that doesn't 6688 04:06:35,840 --> 04:06:38,359 have this keyword you can't override now 6689 04:06:38,359 --> 04:06:41,279 our store function is override a and 6690 04:06:41,279 --> 04:06:42,880 we've specified that we are indeed going 6691 04:06:42,880 --> 04:06:45,560 to override the store function now if we 6692 04:06:45,560 --> 04:06:47,159 go ahead and compile we'll see 6693 04:06:47,159 --> 04:06:49,120 everything compiles successfully all 6694 04:06:49,120 --> 04:06:50,960 right great so now let's just add the 6695 04:06:50,960 --> 04:06:53,600 functionality to store remember since ad 6696 04:06:53,600 --> 04:06:55,239 five storage inherits everything from 6697 04:06:55,239 --> 04:06:57,560 simple storage this means that we even 6698 04:06:57,560 --> 04:06:59,720 have access to my favorite number so 6699 04:06:59,720 --> 04:07:01,520 what we can do is we can say my favorite 6700 04:07:01,520 --> 04:07:04,159 number equals underscore new 6701 04:07:04,159 --> 04:07:07,120 number plus 5 we'll compile this and now 6702 04:07:07,120 --> 04:07:09,760 let's try it out we're on remix VM we 6703 04:07:09,760 --> 04:07:11,600 want to make sure we're with ad five 6704 04:07:11,600 --> 04:07:13,600 storage we'll delete the other ones 6705 04:07:13,600 --> 04:07:15,800 we'll deploy scroll down hit the drop 6706 04:07:15,800 --> 04:07:18,399 down retrieve currently return zero now 6707 04:07:18,399 --> 04:07:21,760 if we store two pull up the terminal to 6708 04:07:21,760 --> 04:07:22,880 make sure we're actually sending 6709 04:07:22,880 --> 04:07:25,600 transactions we'll hit store and now if 6710 04:07:25,600 --> 04:07:27,520 we hit retrieve we see we indeed get 6711 04:07:27,520 --> 04:07:31,000 seven back cuz 2 + 5 is 7 we add five we 6712 04:07:31,000 --> 04:07:33,399 hit store retrieve now returns 10 So 6713 04:07:33,399 --> 04:07:35,119 This Is How We Do inheritance and 6714 04:07:35,119 --> 04:07:37,720 override 6715 04:07:40,239 --> 04:07:42,520 functions and that's it for this section 6716 04:07:42,520 --> 04:07:44,080 you've learned a ton of incredibly 6717 04:07:44,080 --> 04:07:45,960 powerful features in solidity so let's 6718 04:07:45,960 --> 04:07:47,600 do a quick recap of what we learned this 6719 04:07:47,600 --> 04:07:49,880 section we learned that with the new 6720 04:07:49,880 --> 04:07:52,159 keyword we can actually deploy contracts 6721 04:07:52,159 --> 04:07:54,119 from other contracts we learned that we 6722 04:07:54,119 --> 04:07:55,640 can actually import other contracts 6723 04:07:55,640 --> 04:07:57,159 which is essentially the same as copy 6724 04:07:57,159 --> 04:07:59,760 pasting the code into this file we also 6725 04:07:59,760 --> 04:08:01,800 learned this thing called named Imports 6726 04:08:01,800 --> 04:08:03,680 which is going to make you look even 6727 04:08:03,680 --> 04:08:05,199 better than most of the solidity devs 6728 04:08:05,199 --> 04:08:06,600 out there we learned that we can 6729 04:08:06,600 --> 04:08:08,319 interact with other contracts so long as 6730 04:08:08,319 --> 04:08:10,199 we have the address and the ABI the 6731 04:08:10,199 --> 04:08:12,080 simple storage type automatically comes 6732 04:08:12,080 --> 04:08:14,560 with the address and the ABI so we can 6733 04:08:14,560 --> 04:08:17,159 just access it like this we didn't learn 6734 04:08:17,159 --> 04:08:18,680 too much about the ABI but we'll learn 6735 04:08:18,680 --> 04:08:20,439 more about it later we learned that if 6736 04:08:20,439 --> 04:08:22,080 we want to make a child contract and 6737 04:08:22,080 --> 04:08:23,840 inherit the functionality of some other 6738 04:08:23,840 --> 04:08:25,640 contract we can just import that 6739 04:08:25,640 --> 04:08:27,960 contract and then use the is keyword in 6740 04:08:27,960 --> 04:08:30,199 the contract declaration to override a 6741 04:08:30,199 --> 04:08:32,159 function we need the override keyword 6742 04:08:32,159 --> 04:08:34,760 and we need the base class or the parent 6743 04:08:34,760 --> 04:08:37,640 class to have the virtual keyword on the 6744 04:08:37,640 --> 04:08:39,640 function you want to override and that 6745 04:08:39,640 --> 04:08:41,560 is the end of this lesson so be sure to 6746 04:08:41,560 --> 04:08:43,600 give yourself a huge pat on the back 6747 04:08:43,600 --> 04:08:45,520 take a break breaks are good for your 6748 04:08:45,520 --> 04:08:47,720 brain go for a walk grab a coffee get 6749 04:08:47,720 --> 04:08:49,720 some ice cream go tell your friends go 6750 04:08:49,720 --> 04:08:51,560 post on Twitter you're getting more and 6751 04:08:51,560 --> 04:08:53,479 more advanced with solidity very quickly 6752 04:08:53,479 --> 04:08:55,359 so be sure to celebrate the little wins 6753 04:08:55,359 --> 04:08:57,319 to keep being excited and keep that 6754 04:08:57,319 --> 04:08:59,399 Curiosity congratulations youve 6755 04:08:59,399 --> 04:09:03,119 completed this lesson 6756 04:09:20,880 --> 04:09:22,720 all right everybody welcome back we are 6757 04:09:22,720 --> 04:09:25,319 now headed into Lesson Four this is 6758 04:09:25,319 --> 04:09:27,720 going to be our remix fundme and once 6759 04:09:27,720 --> 04:09:29,800 again you can find all the code 6760 04:09:29,800 --> 04:09:31,399 associated with this lesson in the 6761 04:09:31,399 --> 04:09:33,119 GitHub repository associated with this 6762 04:09:33,119 --> 04:09:36,560 course and also web3 dev. and let's do a 6763 04:09:36,560 --> 04:09:37,840 quick walkthrough of these contracts 6764 04:09:37,840 --> 04:09:39,119 before we actually start coding anything 6765 04:09:39,119 --> 04:09:40,279 to see what we're going to be doing 6766 04:09:40,279 --> 04:09:41,880 we're going to be creating one contract 6767 04:09:41,880 --> 04:09:44,199 funme doou we're also going to have 6768 04:09:44,199 --> 04:09:45,600 another file called price converter 6769 04:09:45,600 --> 04:09:47,119 dossou and we'll talk about that in a 6770 04:09:47,119 --> 04:09:48,760 little bit the fundme contract is going 6771 04:09:48,760 --> 04:09:50,720 to be our main contract this is going to 6772 04:09:50,720 --> 04:09:52,640 be an example of a crowdsourcing 6773 04:09:52,640 --> 04:09:54,800 application or a way to raise money you 6774 04:09:54,800 --> 04:09:56,600 can think of it as a web 3 decentralized 6775 04:09:56,600 --> 04:09:58,720 Kickstarter will allow users to send 6776 04:09:58,720 --> 04:10:02,359 ethereum polygon Avalanche Etc or really 6777 04:10:02,359 --> 04:10:04,840 any native blockchain cryptocurrency 6778 04:10:04,840 --> 04:10:06,880 into this contract and allow the owner 6779 04:10:06,880 --> 04:10:08,439 of the contract to actually withdraw all 6780 04:10:08,439 --> 04:10:10,080 the funds for them to go spend on their 6781 04:10:10,080 --> 04:10:12,319 new project and we are going to actually 6782 04:10:12,319 --> 04:10:15,080 deploy this contract to a test net and 6783 04:10:15,080 --> 04:10:17,760 remember use the test net transactions 6784 04:10:17,760 --> 04:10:19,880 sparingly but if we deploy this to a 6785 04:10:19,880 --> 04:10:22,040 test net we scroll down we actually see 6786 04:10:22,040 --> 04:10:23,920 that we have a couple of buttons and a 6787 04:10:23,920 --> 04:10:25,800 new color button we'll actually get a 6788 04:10:25,800 --> 04:10:28,760 new red button for our fund function a 6789 04:10:28,760 --> 04:10:30,520 red button indicates that a function is 6790 04:10:30,520 --> 04:10:32,520 payable and we can send native ethereum 6791 04:10:32,520 --> 04:10:34,840 or polygon or Avalanche or whatever the 6792 04:10:34,840 --> 04:10:36,479 native cryptocurrency of the blockchain 6793 04:10:36,479 --> 04:10:38,640 we're working with is We additionally 6794 04:10:38,640 --> 04:10:41,399 will indicate a minimum USD amount to 6795 04:10:41,399 --> 04:10:43,640 send to the contract so fun have to 6796 04:10:43,640 --> 04:10:45,520 spend at least $5 worth of ethereum in 6797 04:10:45,520 --> 04:10:47,479 order to call this fund contract so if 6798 04:10:47,479 --> 04:10:49,000 we go up to the value section we can 6799 04:10:49,000 --> 04:10:51,359 actually send some value with this 6800 04:10:51,359 --> 04:10:52,960 transaction and again don't worry about 6801 04:10:52,960 --> 04:10:54,800 this making sense yet but if I want to 6802 04:10:54,800 --> 04:10:57,640 send 0.01 ether I'll grab that amount in 6803 04:10:57,640 --> 04:11:00,319 way paste it into the value section here 6804 04:11:00,319 --> 04:11:01,840 I'll scroll down I'll hit the fund 6805 04:11:01,840 --> 04:11:04,680 button minimass will pop up I'll confirm 6806 04:11:04,680 --> 04:11:06,159 we can see at the top the current 6807 04:11:06,159 --> 04:11:08,239 balance of the contract is zero and 6808 04:11:08,239 --> 04:11:09,239 we'll wait a little bit for the 6809 04:11:09,239 --> 04:11:11,279 transaction to finish going through and 6810 04:11:11,279 --> 04:11:12,600 after the transaction finish is going 6811 04:11:12,600 --> 04:11:14,080 through we can see ether scan we have a 6812 04:11:14,080 --> 04:11:17,119 balance of 0.01 eth and we can also see 6813 04:11:17,119 --> 04:11:19,520 that after remix after a slight delay 6814 04:11:19,520 --> 04:11:21,040 then we can allow the owner of the 6815 04:11:21,040 --> 04:11:23,000 contract to withdraw those funds right 6816 04:11:23,000 --> 04:11:25,399 now the owner of the contract is also us 6817 04:11:25,399 --> 04:11:27,080 and after this transaction goes through 6818 04:11:27,080 --> 04:11:28,680 we'll see that balance removed from the 6819 04:11:28,680 --> 04:11:30,359 contract and it'll go back into our 6820 04:11:30,359 --> 04:11:32,560 wallet and as you just saw there if we 6821 04:11:32,560 --> 04:11:34,119 held our metamask up for long enough 6822 04:11:34,119 --> 04:11:35,640 eventually it would pop back into our 6823 04:11:35,640 --> 04:11:37,560 metamask are you excited we you should 6824 04:11:37,560 --> 04:11:38,960 be because after you complete this 6825 04:11:38,960 --> 04:11:41,040 section you'll actually know most of the 6826 04:11:41,040 --> 04:11:42,880 fundamentals of working with solidity 6827 04:11:42,880 --> 04:11:44,080 we're going to going to be going over a 6828 04:11:44,080 --> 04:11:46,319 lot of advanced features in this section 6829 04:11:46,319 --> 04:11:48,040 and I'll let you know the specific parts 6830 04:11:48,040 --> 04:11:49,960 that you don't need to fully understand 6831 04:11:49,960 --> 04:11:51,880 quite yet there's going to be a couple 6832 04:11:51,880 --> 04:11:53,920 parts where if it doesn't totally make 6833 04:11:53,920 --> 04:11:55,439 sense just keep going with the course 6834 04:11:55,439 --> 04:11:56,920 and as we get later into the course 6835 04:11:56,920 --> 04:11:58,680 you'll figure out why they make sense 6836 04:11:58,680 --> 04:12:00,080 but it might be a good idea to write 6837 04:12:00,080 --> 04:12:01,600 down the questions that you have to ask 6838 04:12:01,600 --> 04:12:04,199 either an AI on the GitHub discussions 6839 04:12:04,199 --> 04:12:07,000 or web3 education. make sure of course 6840 04:12:07,000 --> 04:12:08,680 to use the discussions Tab In The 6841 04:12:08,680 --> 04:12:11,119 Foundry full course f23 to ask questions 6842 04:12:11,119 --> 04:12:12,720 and interact with other developers who 6843 04:12:12,720 --> 04:12:14,640 are taking this same course or go to 6844 04:12:14,640 --> 04:12:17,239 web3 dev. education to learn more all 6845 04:12:17,239 --> 04:12:20,000 right let's get 6846 04:12:21,640 --> 04:12:23,560 froggy so the first thing that we want 6847 04:12:23,560 --> 04:12:25,040 to do is let's once again delete 6848 04:12:25,040 --> 04:12:26,600 everything in our remix so we can start 6849 04:12:26,600 --> 04:12:28,840 from scratch so I have the contracts 6850 04:12:28,840 --> 04:12:29,840 that we're actually going to be building 6851 04:12:29,840 --> 04:12:31,080 in here you might have the simple 6852 04:12:31,080 --> 04:12:32,920 storage the ad five extra the storage 6853 04:12:32,920 --> 04:12:34,840 Factory Etc let's go ahead right click 6854 04:12:34,840 --> 04:12:36,279 and just delete everything we're going 6855 04:12:36,279 --> 04:12:38,520 to start completely from blank here so 6856 04:12:38,520 --> 04:12:41,239 let's go ahead and delete everything in 6857 04:12:41,239 --> 04:12:43,359 here all right great so let's go ahead 6858 04:12:43,359 --> 04:12:44,359 and start creating our contract we're 6859 04:12:44,359 --> 04:12:46,279 going to call it fund. Soul one thing 6860 04:12:46,279 --> 04:12:47,439 that's really good when you actually 6861 04:12:47,439 --> 04:12:49,239 start building any code at all is to 6862 04:12:49,239 --> 04:12:51,319 First write down what you want it to do 6863 04:12:51,319 --> 04:12:53,600 so what do we want ours to do we want to 6864 04:12:53,600 --> 04:12:56,119 get funds from users into this contract 6865 04:12:56,119 --> 04:12:58,159 withdraw funds to the owner of the 6866 04:12:58,159 --> 04:12:59,840 contract or whoever has created this 6867 04:12:59,840 --> 04:13:01,960 fundme contract and then we also want to 6868 04:13:01,960 --> 04:13:04,600 set a minimum funding value in USD we 6869 04:13:04,600 --> 04:13:05,960 don't want people to be able to donate 6870 04:13:05,960 --> 04:13:07,640 just a penny so let's go ahead and set 6871 04:13:07,640 --> 04:13:08,840 this up 6872 04:13:08,840 --> 04:13:14,359 spdx license identifier identifier MIT 6873 04:13:14,359 --> 04:13:18,319 do pragma solidity carot 6874 04:13:18,319 --> 04:13:21,640 0.818 contract fund me let's go ahead 6875 04:13:21,640 --> 04:13:23,359 and delete these comments so before we 6876 04:13:23,359 --> 04:13:25,080 embark on writing all of our 6877 04:13:25,080 --> 04:13:26,479 functionality out let's just write down 6878 04:13:26,479 --> 04:13:28,600 the functions that we want to build so 6879 04:13:28,600 --> 04:13:29,920 we're probably going to want a function 6880 04:13:29,920 --> 04:13:31,640 fund which is going to be the function 6881 04:13:31,640 --> 04:13:33,600 they call to send money to our contract 6882 04:13:33,600 --> 04:13:36,399 we're going to want a function withdraw 6883 04:13:36,399 --> 04:13:38,000 which is going to be the function that 6884 04:13:38,000 --> 04:13:39,439 the owner of the contract is going to 6885 04:13:39,439 --> 04:13:40,760 use to withdraw the money that the 6886 04:13:40,760 --> 04:13:42,720 funders send us and those are going to 6887 04:13:42,720 --> 04:13:44,760 be the two main functions that our 6888 04:13:44,760 --> 04:13:46,439 contract is going to need we're going to 6889 04:13:46,439 --> 04:13:48,399 be implementing more functions than just 6890 04:13:48,399 --> 04:13:50,000 this but these are going to be the main 6891 04:13:50,000 --> 04:13:52,040 functions to interact with our protocol 6892 04:13:52,040 --> 04:13:54,080 or interact with our fundme contract 6893 04:13:54,080 --> 04:13:55,800 let's comment out withdraw for now and 6894 04:13:55,800 --> 04:13:59,000 just start focusing on 6895 04:14:00,399 --> 04:14:03,000 fund we want anyone to be able to call 6896 04:14:03,000 --> 04:14:04,840 this fund function so we're going to 6897 04:14:04,840 --> 04:14:06,600 make this public and we want this 6898 04:14:06,600 --> 04:14:08,399 function to do what well we wanted to 6899 04:14:08,399 --> 04:14:10,399 allow users to send money and we want to 6900 04:14:10,399 --> 04:14:12,199 have a minimum dollar amount that they 6901 04:14:12,199 --> 04:14:14,080 have to send so the first question we 6902 04:14:14,080 --> 04:14:16,000 need to answer is how do we send eth to 6903 04:14:16,000 --> 04:14:17,600 this contract how do we have it when a 6904 04:14:17,600 --> 04:14:19,239 user calls the Fone function eth 6905 04:14:19,239 --> 04:14:20,520 automatically gets sent into our 6906 04:14:20,520 --> 04:14:22,560 contract whenever we send a transaction 6907 04:14:22,560 --> 04:14:23,960 on the blockchain there's actually 6908 04:14:23,960 --> 04:14:26,520 always a value field that gets populated 6909 04:14:26,520 --> 04:14:27,680 and most of the time it gets sent with 6910 04:14:27,680 --> 04:14:30,520 zero even before when we called the send 6911 04:14:30,520 --> 04:14:32,680 function between our accounts when we 6912 04:14:32,680 --> 04:14:35,600 added an amount in our metamask this 6913 04:14:35,600 --> 04:14:38,000 amount value populated the value field 6914 04:14:38,000 --> 04:14:40,479 of our transaction this value field is 6915 04:14:40,479 --> 04:14:42,199 the amount of native blockchain 6916 04:14:42,199 --> 04:14:44,080 cryptocurrency that gets sent with every 6917 04:14:44,080 --> 04:14:45,840 transaction the first thing that we need 6918 04:14:45,840 --> 04:14:48,399 to do to allow a function in solidity to 6919 04:14:48,399 --> 04:14:50,479 accept this native blockchain currency 6920 04:14:50,479 --> 04:14:51,760 in the first place is to make the 6921 04:14:51,760 --> 04:14:53,479 function payable it's this payable 6922 04:14:53,479 --> 04:14:54,960 keyword that makes the function look red 6923 04:14:54,960 --> 04:14:57,560 in the remix UI just like how wallets 6924 04:14:57,560 --> 04:14:59,159 can hold funds contracts can actually 6925 04:14:59,159 --> 04:15:01,159 hold funds as well so whenever you 6926 04:15:01,159 --> 04:15:03,000 deploy a contract similar to a wallet 6927 04:15:03,000 --> 04:15:04,960 address it actually acts almost the same 6928 04:15:04,960 --> 04:15:06,399 as a wallet address you can send money 6929 04:15:06,399 --> 04:15:08,439 to it you can interact with it Etc and 6930 04:15:08,439 --> 04:15:09,680 like we did in the demo you'll see this 6931 04:15:09,680 --> 04:15:11,680 contract actually gain a balance just 6932 04:15:11,680 --> 04:15:13,680 like a wallet you can access this value 6933 04:15:13,680 --> 04:15:15,239 amount of a transaction using one of the 6934 04:15:15,239 --> 04:15:17,159 globals in solidity called 6935 04:15:17,159 --> 04:15:19,439 message. solidity has a number of these 6936 04:15:19,439 --> 04:15:21,159 globally available keywords and 6937 04:15:21,159 --> 04:15:22,840 functions and you can find these in the 6938 04:15:22,840 --> 04:15:24,920 solidity documentation one of them is 6939 04:15:24,920 --> 04:15:26,880 message. value which is the number of 6940 04:15:26,880 --> 04:15:29,000 way sent with the message if we wanted 6941 04:15:29,000 --> 04:15:31,199 users to be required to spend at least 6942 04:15:31,199 --> 04:15:33,920 one whole ether with this fund function 6943 04:15:33,920 --> 04:15:35,439 we could use something called require to 6944 04:15:35,439 --> 04:15:37,359 do so in order to do that we would add 6945 04:15:37,359 --> 04:15:40,359 this line require message. value is 6946 04:15:40,359 --> 04:15:43,720 greater than 1 E8 6947 04:15:43,720 --> 04:15:45,000 and there's a couple of things to unpack 6948 04:15:45,000 --> 04:15:48,720 here 1 E18 is equal to 1 ether which is 6949 04:15:48,720 --> 04:15:52,439 equal to 1 1 2 3 4 5 6 7 8 9 10 1 2 3 4 6950 04:15:52,439 --> 04:15:54,920 5 6 7 8 or put another way it's equal to 6951 04:15:54,920 --> 04:15:58,720 1 * 10 raised to the 18th in solidity a 6952 04:15:58,720 --> 04:16:00,680 double asri or double multiply sign is 6953 04:16:00,680 --> 04:16:03,359 how you do a power or an exponent this 6954 04:16:03,359 --> 04:16:05,359 value here is the value in way of one 6955 04:16:05,359 --> 04:16:06,840 ethereum in your smart contracts and at 6956 04:16:06,840 --> 04:16:08,479 the lowest level this is how they 6957 04:16:08,479 --> 04:16:10,199 process numbers in this giant wave 6958 04:16:10,199 --> 04:16:12,439 format so if we wanted people to be 6959 04:16:12,439 --> 04:16:14,399 forced to send at least one whole eth 6960 04:16:14,399 --> 04:16:15,520 with this fund function we would just 6961 04:16:15,520 --> 04:16:17,920 say require message. value is greater 6962 04:16:17,920 --> 04:16:20,279 than 1 E18 you can use something like 6963 04:16:20,279 --> 04:16:23,080 eth converter.com see to convert one 6964 04:16:23,080 --> 04:16:25,600 ether between ether whey and gay is 6965 04:16:25,600 --> 04:16:27,720 actually another value in between ether 6966 04:16:27,720 --> 04:16:29,880 and Wei and we saw gu actually when we 6967 04:16:29,880 --> 04:16:32,399 saw gas costs normally gas costs are 6968 04:16:32,399 --> 04:16:34,560 shown in forms of guay this required 6969 04:16:34,560 --> 04:16:36,040 keyword is a checker it's basically 6970 04:16:36,040 --> 04:16:37,720 saying hey is message. value greater 6971 04:16:37,720 --> 04:16:40,439 than 1 E18 if not then revert this 6972 04:16:40,439 --> 04:16:42,640 transaction and if we want we could add 6973 04:16:42,640 --> 04:16:44,199 a little revert message we could say 6974 04:16:44,199 --> 04:16:47,600 like didn't send enough eth we can 6975 04:16:47,600 --> 04:16:49,000 actually deploy this we can actually 6976 04:16:49,000 --> 04:16:52,680 compile and deploy this on a remix 6977 04:16:56,640 --> 04:16:59,920 vmy scroll down and if we hit fund and 6978 04:16:59,920 --> 04:17:02,600 if we pull up our terminal we hit fund 6979 04:17:02,600 --> 04:17:04,159 we actually see we get this little X 6980 04:17:04,159 --> 04:17:05,880 here meaning our transaction didn't go 6981 04:17:05,880 --> 04:17:08,000 through and if we hit the drop down oh 6982 04:17:08,000 --> 04:17:09,760 again same thing same thing we know that 6983 04:17:09,760 --> 04:17:11,199 this error is because we have this 6984 04:17:11,199 --> 04:17:12,920 require statement in here in our 6985 04:17:12,920 --> 04:17:14,720 transaction is reverting or not going 6986 04:17:14,720 --> 04:17:16,239 through so we know that with this 6987 04:17:16,239 --> 04:17:18,359 transaction we need to send at least 1 6988 04:17:18,359 --> 04:17:22,319 eth or or 1 E18 way worth of eth in the 6989 04:17:22,319 --> 04:17:24,080 value section of our transaction so if 6990 04:17:24,080 --> 04:17:26,040 we scroll up we can actually just change 6991 04:17:26,040 --> 04:17:29,119 the unit to Ether put one in here scroll 6992 04:17:29,119 --> 04:17:31,319 down and now if we hit fund oh it 6993 04:17:31,319 --> 04:17:32,439 doesn't go through because we have 6994 04:17:32,439 --> 04:17:34,279 strictly greater than so excuse me Let's 6995 04:17:34,279 --> 04:17:36,920 do let's do two now I'll scroll down 6996 04:17:36,920 --> 04:17:39,000 we'll hit fund and we see we get a green 6997 04:17:39,000 --> 04:17:40,720 check mark and we see the fundme balance 6998 04:17:40,720 --> 04:17:43,439 actually has improved to two if we 6999 04:17:43,439 --> 04:17:45,239 update the value to two again and we 7000 04:17:45,239 --> 04:17:47,239 scroll down we had fund again we see our 7001 04:17:47,239 --> 04:17:48,439 transaction went through and we have 7002 04:17:48,439 --> 04:17:50,479 four if we try to do less like let's 7003 04:17:50,479 --> 04:17:53,040 change this to way and we'll do you know 7004 04:17:53,040 --> 04:17:55,800 th way scroll down we hit fund up it 7005 04:17:55,800 --> 04:17:59,840 fails because 100 way is less than 1 E18 7006 04:17:59,840 --> 04:18:02,560 way right because 18 E18 way is this 7007 04:18:02,560 --> 04:18:05,600 much way so obviously th000 or however 7008 04:18:05,600 --> 04:18:08,000 much I put in is much less so this 7009 04:18:08,000 --> 04:18:10,000 require says if this first section is 7010 04:18:10,000 --> 04:18:11,920 false then go ahead and revert with 7011 04:18:11,920 --> 04:18:15,279 whatever this second section 7012 04:18:16,600 --> 04:18:19,119 is reverts can be a little bit confusing 7013 04:18:19,119 --> 04:18:21,040 and a little bit tricky so what is a 7014 04:18:21,040 --> 04:18:23,640 revert a revert undoes any actions that 7015 04:18:23,640 --> 04:18:25,840 have been done previously and sends the 7016 04:18:25,840 --> 04:18:27,520 remaining gas associated with that 7017 04:18:27,520 --> 04:18:29,359 transaction back so what does that 7018 04:18:29,359 --> 04:18:32,040 actually mean well let's say for example 7019 04:18:32,040 --> 04:18:34,720 in our fundme contract we have a u 256 7020 04:18:34,720 --> 04:18:37,239 public my value and let's have my value 7021 04:18:37,239 --> 04:18:39,199 initialized to one now in our fun 7022 04:18:39,199 --> 04:18:42,840 function let's say my value equals my 7023 04:18:42,840 --> 04:18:46,080 Value Plus two so every time this fun 7024 04:18:46,080 --> 04:18:48,159 function successfully goes through we 7025 04:18:48,159 --> 04:18:51,000 add two to my value however if we get to 7026 04:18:51,000 --> 04:18:53,680 a revert statement even though we added 7027 04:18:53,680 --> 04:18:56,560 two to my value previously since our 7028 04:18:56,560 --> 04:18:58,399 contract reverts this would actually 7029 04:18:58,399 --> 04:19:00,840 revert this action or reset it back to 7030 04:19:00,840 --> 04:19:03,040 its initial state so if this transaction 7031 04:19:03,040 --> 04:19:05,479 reverts my value would go back to one or 7032 04:19:05,479 --> 04:19:07,359 whatever it was previously if we compile 7033 04:19:07,359 --> 04:19:09,520 fundme we delete our previous deploys 7034 04:19:09,520 --> 04:19:11,279 we're on the remix VM we'll deploy 7035 04:19:11,279 --> 04:19:13,479 fundme we'll scroll down we have my 7036 04:19:13,479 --> 04:19:16,439 value which defaults to one if we call 7037 04:19:16,439 --> 04:19:19,800 fund right now without any value we pull 7038 04:19:19,800 --> 04:19:21,159 up our terminal we can see the 7039 04:19:21,159 --> 04:19:24,760 transaction failed my value is still one 7040 04:19:24,760 --> 04:19:26,880 even though this line technically 7041 04:19:26,880 --> 04:19:29,319 executed this line executed but then 7042 04:19:29,319 --> 04:19:31,239 this line hit and it reverted what was 7043 04:19:31,239 --> 04:19:33,640 done here so if we scroll back up though 7044 04:19:33,640 --> 04:19:36,399 we go to Ether we'll put one in for now 7045 04:19:36,399 --> 04:19:39,439 scroll back down now we'll hit fund oh 7046 04:19:39,439 --> 04:19:41,119 needs to be more than one excuse me 7047 04:19:41,119 --> 04:19:43,479 we'll add two here scroll back down now 7048 04:19:43,479 --> 04:19:45,199 we'll hit fund that transaction did go 7049 04:19:45,199 --> 04:19:47,760 through which means my value will now be 7050 04:19:47,760 --> 04:19:51,159 equal to three and again if I set value 7051 04:19:51,159 --> 04:19:54,399 to zero we call fund it reverts so my 7052 04:19:54,399 --> 04:19:56,960 value is still three so then the 7053 04:19:56,960 --> 04:19:58,520 question might be oh well did we spend 7054 04:19:58,520 --> 04:20:00,119 gas to do this if my transaction didn't 7055 04:20:00,119 --> 04:20:01,880 even go through well unfortunately the 7056 04:20:01,880 --> 04:20:04,800 answer here is yes if you send a failed 7057 04:20:04,800 --> 04:20:07,439 transaction you will spend gas because 7058 04:20:07,439 --> 04:20:09,520 computers executed this line and then 7059 04:20:09,520 --> 04:20:12,040 they executed this line and just failed 7060 04:20:12,040 --> 04:20:14,119 so users can actually specify how much 7061 04:20:14,119 --> 04:20:15,840 gas they send with every function let's 7062 04:20:15,840 --> 04:20:17,479 say there was a ton of computation after 7063 04:20:17,479 --> 04:20:19,040 this require line we would need to send 7064 04:20:19,040 --> 04:20:21,760 a ton of gas to operate and run our fund 7065 04:20:21,760 --> 04:20:23,920 function however once it gets to this 7066 04:20:23,920 --> 04:20:26,000 require line and it reverts however much 7067 04:20:26,000 --> 04:20:28,159 gas that we sent to execute the rest of 7068 04:20:28,159 --> 04:20:29,840 the computation would just get refunded 7069 04:20:29,840 --> 04:20:32,199 to whoever initiated the transaction 7070 04:20:32,199 --> 04:20:33,840 like I said sometimes the refunds and 7071 04:20:33,840 --> 04:20:34,760 some of that can be a little bit 7072 04:20:34,760 --> 04:20:37,040 confusing so again for now just know 7073 04:20:37,040 --> 04:20:40,279 that if a transaction reverts it undoes 7074 04:20:40,279 --> 04:20:42,319 anything it does previously and you can 7075 04:20:42,319 --> 04:20:45,159 consider consider the transaction failed 7076 04:20:45,159 --> 04:20:46,359 however if you send a reverted 7077 04:20:46,359 --> 04:20:48,920 transaction you will still spend gas but 7078 04:20:48,920 --> 04:20:51,279 okay let's delete this value for now 7079 04:20:51,279 --> 04:20:52,720 delete it from the global scope and 7080 04:20:52,720 --> 04:20:55,199 delete some of these like that in fact 7081 04:20:55,199 --> 04:20:57,359 every single transaction that we send 7082 04:20:57,359 --> 04:20:59,960 will have these fields it'll have a nuns 7083 04:20:59,960 --> 04:21:02,600 or the transaction count the account the 7084 04:21:02,600 --> 04:21:05,359 gas price the gas limit that we've seen 7085 04:21:05,359 --> 04:21:08,560 on ether scan a two aka the address that 7086 04:21:08,560 --> 04:21:11,199 the transaction is sent to a value which 7087 04:21:11,199 --> 04:21:12,640 is going to be this amount that we're 7088 04:21:12,640 --> 04:21:14,640 talking about we'll also have data which 7089 04:21:14,640 --> 04:21:16,600 is going to be what we send if we make a 7090 04:21:16,600 --> 04:21:19,040 function call or deploy a contract and 7091 04:21:19,040 --> 04:21:22,000 then it'll have this vrs components 7092 04:21:22,000 --> 04:21:23,359 we're not really going to go over these 7093 04:21:23,359 --> 04:21:25,119 VR ands because this is that 7094 04:21:25,119 --> 04:21:27,399 cryptographic magic that's happening 7095 04:21:27,399 --> 04:21:29,359 when a transaction is signed but just 7096 04:21:29,359 --> 04:21:31,520 know that that's in there for sending 7097 04:21:31,520 --> 04:21:33,520 value we can populate some of these 7098 04:21:33,520 --> 04:21:35,720 fields the gas limit for example is 7099 04:21:35,720 --> 04:21:38,640 populated to 21,000 data is going to be 7100 04:21:38,640 --> 04:21:41,319 empty and then that two is going to be 7101 04:21:41,319 --> 04:21:43,000 the address of the transaction want to 7102 04:21:43,000 --> 04:21:45,640 send to for a function call we can also 7103 04:21:45,640 --> 04:21:48,279 still populate the way that we want to 7104 04:21:48,279 --> 04:21:51,199 send so we can call a function and send 7105 04:21:51,199 --> 04:21:53,560 a value at the same time in remix it has 7106 04:21:53,560 --> 04:21:56,439 a little drop down here way gu finny and 7107 04:21:56,439 --> 04:21:58,359 ether we're going to ignore finny for 7108 04:21:58,359 --> 04:22:00,560 now but of course we have our whey gay 7109 04:22:00,560 --> 04:22:03,439 and ether again where one ether is worth 7110 04:22:03,439 --> 04:22:07,399 this much gay and this much 7111 04:22:08,479 --> 04:22:10,800 whey so right now our contract is pretty 7112 04:22:10,800 --> 04:22:12,960 minimal right we're requir iring the 7113 04:22:12,960 --> 04:22:15,000 message. value is greater than one whole 7114 04:22:15,000 --> 04:22:16,920 ether but we want to actually require 7115 04:22:16,920 --> 04:22:19,040 that it's less than some value like 7116 04:22:19,040 --> 04:22:21,080 let's say we want to have users spend a 7117 04:22:21,080 --> 04:22:23,880 minimum of $5 as opposed to one whole 7118 04:22:23,880 --> 04:22:26,640 ethereum so let's first specify that $5 7119 04:22:26,640 --> 04:22:27,800 we can do that at the top of our 7120 04:22:27,800 --> 04:22:31,600 contract we'll say U 256 minimum USD 7121 04:22:31,600 --> 04:22:34,680 equals 5 and we'll make this public 7122 04:22:34,680 --> 04:22:36,600 instead of internal we'll update this 7123 04:22:36,600 --> 04:22:38,319 minimum USD in the future to make this 7124 04:22:38,319 --> 04:22:40,359 more gas efficient so what we want to do 7125 04:22:40,359 --> 04:22:42,760 is we want to require that our fun 7126 04:22:42,760 --> 04:22:44,880 function requires that the message. 7127 04:22:44,880 --> 04:22:46,399 value is greater than let's say greater 7128 04:22:46,399 --> 04:22:49,359 than or equal to minimum USD however 7129 04:22:49,359 --> 04:22:51,800 minimum USD is in terms of USD or 7130 04:22:51,800 --> 04:22:54,159 dollars and message. value is in terms 7131 04:22:54,159 --> 04:22:57,439 of eth or way in terms of ethereum so 7132 04:22:57,439 --> 04:22:59,080 how do we convert the amount of ethereum 7133 04:22:59,080 --> 04:23:01,800 to its price in dollar this is where 7134 04:23:01,800 --> 04:23:04,080 oracles and chain link comes into play 7135 04:23:04,080 --> 04:23:05,760 the dollar price of an asset like 7136 04:23:05,760 --> 04:23:07,399 ethereum is something that we've 7137 04:23:07,399 --> 04:23:09,600 assigned to ethereum outside of the 7138 04:23:09,600 --> 04:23:11,479 blockchain in the real world so in order 7139 04:23:11,479 --> 04:23:13,199 to get this abstract concept of the 7140 04:23:13,199 --> 04:23:14,800 price of the Native cryptocurrency of 7141 04:23:14,800 --> 04:23:16,680 the blockchain working with so we need 7142 04:23:16,680 --> 04:23:18,479 to use a decentralized Oracle Network or 7143 04:23:18,479 --> 04:23:20,119 something called an oracle to get this 7144 04:23:20,119 --> 04:23:22,119 price so before we keep going let's 7145 04:23:22,119 --> 04:23:23,479 learn a little bit more about 7146 04:23:23,479 --> 04:23:25,800 decentralized oracles chain link and how 7147 04:23:25,800 --> 04:23:27,279 they work so that we can understand how 7148 04:23:27,279 --> 04:23:29,159 to get the price of ethereum into our 7149 04:23:29,159 --> 04:23:31,199 smart contracts as we've talked about 7150 04:23:31,199 --> 04:23:33,439 blockchains are deterministic systems 7151 04:23:33,439 --> 04:23:35,600 which means that they themselves can't 7152 04:23:35,600 --> 04:23:37,479 actually interact with real world data 7153 04:23:37,479 --> 04:23:39,439 and events they don't know what the 7154 04:23:39,439 --> 04:23:41,199 value of an ethereum is they don't know 7155 04:23:41,199 --> 04:23:42,800 what random numbers are they don't know 7156 04:23:42,800 --> 04:23:44,279 if it's sunny outside they don't know 7157 04:23:44,279 --> 04:23:45,920 the temperature they don't know who's 7158 04:23:45,920 --> 04:23:47,640 President they don't know any of this 7159 04:23:47,640 --> 04:23:50,159 information these blockchains also can't 7160 04:23:50,159 --> 04:23:52,760 do any external computation maybe you 7161 04:23:52,760 --> 04:23:54,199 have some amazing artificial 7162 04:23:54,199 --> 04:23:55,439 intelligence model that you want to 7163 04:23:55,439 --> 04:23:57,520 integrate with a smart contract smart 7164 04:23:57,520 --> 04:23:59,199 contracts by themselves can't do 7165 04:23:59,199 --> 04:24:01,040 anything with that as we've mentioned 7166 04:24:01,040 --> 04:24:02,560 this is because blockchains are 7167 04:24:02,560 --> 04:24:05,080 deterministic by Design This is so that 7168 04:24:05,080 --> 04:24:07,159 all the nodes can reach consensus if you 7169 04:24:07,159 --> 04:24:09,479 start adding variable data or random 7170 04:24:09,479 --> 04:24:12,520 data or values that return from an API 7171 04:24:12,520 --> 04:24:14,479 call different nodes could get different 7172 04:24:14,479 --> 04:24:16,119 results and they would never be able to 7173 04:24:16,119 --> 04:24:18,439 reach a consensus this is known as the 7174 04:24:18,439 --> 04:24:20,800 smart contract connectivity problem or 7175 04:24:20,800 --> 04:24:23,159 the Oracle problem and this is bad news 7176 04:24:23,159 --> 04:24:24,800 because we want our smart contracts to 7177 04:24:24,800 --> 04:24:26,880 be able to replace traditional 7178 04:24:26,880 --> 04:24:29,239 agreements and traditional agreements 7179 04:24:29,239 --> 04:24:30,920 need data and they need to interact with 7180 04:24:30,920 --> 04:24:33,080 the real world this is where chain link 7181 04:24:33,080 --> 04:24:35,840 and blockchain oracles come into place a 7182 04:24:35,840 --> 04:24:37,520 blockchain Oracle is going to be any 7183 04:24:37,520 --> 04:24:39,359 device that interacts with the offchain 7184 04:24:39,359 --> 04:24:41,119 world to provide external data or 7185 04:24:41,119 --> 04:24:43,159 computation to Smart contract 7186 04:24:43,159 --> 04:24:44,880 however the whole story doesn't even end 7187 04:24:44,880 --> 04:24:48,040 there if we use a centralized Oracle we 7188 04:24:48,040 --> 04:24:50,560 are reintroducing a point of failure 7189 04:24:50,560 --> 04:24:52,560 we've done all this work to make our 7190 04:24:52,560 --> 04:24:55,239 logic layer decentralized but if we get 7191 04:24:55,239 --> 04:24:57,000 our data through a centralized node or 7192 04:24:57,000 --> 04:24:59,359 through a centralized API or we decide 7193 04:24:59,359 --> 04:25:01,359 we want to make the API call ourselves 7194 04:25:01,359 --> 04:25:03,439 we are reintroducing these trust 7195 04:25:03,439 --> 04:25:05,319 assumptions that we've worked so hard to 7196 04:25:05,319 --> 04:25:07,680 get rid of we're essentially ruining the 7197 04:25:07,680 --> 04:25:09,239 entire purpose of building a smart 7198 04:25:09,239 --> 04:25:11,119 contract so we don't want to get our 7199 04:25:11,119 --> 04:25:13,279 data or do external computation through 7200 04:25:13,279 --> 04:25:16,080 centralized nodes those are bad news 7201 04:25:16,080 --> 04:25:18,399 chain link is the solution here chain 7202 04:25:18,399 --> 04:25:20,760 link is a decentralized Oracle Network 7203 04:25:20,760 --> 04:25:22,319 for bringing data and external 7204 04:25:22,319 --> 04:25:24,960 computation into our smart contracts as 7205 04:25:24,960 --> 04:25:26,960 we mentioned before this gives rise to 7206 04:25:26,960 --> 04:25:28,680 these hybrid smart contracts which 7207 04:25:28,680 --> 04:25:30,840 combine onchain and offchain to make 7208 04:25:30,840 --> 04:25:33,960 incredibly featur powerful applications 7209 04:25:33,960 --> 04:25:36,040 chain link is a modular decentralized 7210 04:25:36,040 --> 04:25:38,159 oracal Network that can be customized to 7211 04:25:38,159 --> 04:25:40,279 deliver any data or do any external 7212 04:25:40,279 --> 04:25:43,000 computation that you like so for example 7213 04:25:43,000 --> 04:25:45,199 a lot of people say oh I can just make 7214 04:25:45,199 --> 04:25:48,119 an https call to some 7215 04:25:48,119 --> 04:25:50,720 API and we'll be good to go the 7216 04:25:50,720 --> 04:25:52,840 blockchain nodes can't make these https 7217 04:25:52,840 --> 04:25:54,520 calls because they wouldn't be able to 7218 04:25:54,520 --> 04:25:56,359 reach consensus if they called the node 7219 04:25:56,359 --> 04:25:58,399 at different times or they did something 7220 04:25:58,399 --> 04:26:01,319 else all the consensus would be broken 7221 04:26:01,319 --> 04:26:03,399 so instead we need a decentralized 7222 04:26:03,399 --> 04:26:05,680 network of chain L oracles to do this 7223 04:26:05,680 --> 04:26:08,199 and then in transaction this network of 7224 04:26:08,199 --> 04:26:10,640 nodes will return the data to our smart 7225 04:26:10,640 --> 04:26:13,279 contracts for us now chain link networks 7226 04:26:13,279 --> 04:26:15,199 can be completely customized to bring 7227 04:26:15,199 --> 04:26:17,520 any data or any external computation 7228 04:26:17,520 --> 04:26:19,560 that you want however doing the 7229 04:26:19,560 --> 04:26:21,520 customization can be a little bit extra 7230 04:26:21,520 --> 04:26:23,040 work there are a ton of chain link 7231 04:26:23,040 --> 04:26:24,640 features that come out of the box 7232 04:26:24,640 --> 04:26:26,399 completely decentralized ready to Plug 7233 04:26:26,399 --> 04:26:27,840 and Play into your smart contract 7234 04:26:27,840 --> 04:26:30,000 applications what are those features the 7235 04:26:30,000 --> 04:26:31,520 first one is going to be chain link data 7236 04:26:31,520 --> 04:26:33,000 feeds and that's the one we're actually 7237 04:26:33,000 --> 04:26:34,520 going to be using for our application 7238 04:26:34,520 --> 04:26:36,720 here chain link data feeds currently at 7239 04:26:36,720 --> 04:26:38,479 the time of recording are powering over 7240 04:26:38,479 --> 04:26:41,000 $50 billion in the defi world the way 7241 04:26:41,000 --> 04:26:43,319 they work is a a network of train link 7242 04:26:43,319 --> 04:26:46,159 nodes gets data from different exchanges 7243 04:26:46,159 --> 04:26:48,960 and data providers and brings that data 7244 04:26:48,960 --> 04:26:50,960 through a network of decentralized chain 7245 04:26:50,960 --> 04:26:52,800 link nodes the chain link nodes use a 7246 04:26:52,800 --> 04:26:54,760 median to figure out what the actual 7247 04:26:54,760 --> 04:26:56,680 price of the asset is and then deliver 7248 04:26:56,680 --> 04:26:59,399 that in a single transaction to what's 7249 04:26:59,399 --> 04:27:01,319 called a reference contract a price feed 7250 04:27:01,319 --> 04:27:03,640 contract or a data contract on chain 7251 04:27:03,640 --> 04:27:05,800 that other smart contracts can use and 7252 04:27:05,800 --> 04:27:07,800 then those smart contracts use that that 7253 04:27:07,800 --> 04:27:09,880 pricing information to power their defi 7254 04:27:09,880 --> 04:27:12,319 application we can see an example we see 7255 04:27:12,319 --> 04:27:15,680 an example at data. chain. 7256 04:27:15,680 --> 04:27:18,359 link and you can change networks you can 7257 04:27:18,359 --> 04:27:20,359 change price feeds you can change whole 7258 04:27:20,359 --> 04:27:22,159 bunch of information to see some of the 7259 04:27:22,159 --> 04:27:24,000 most popular price feeds let's look at 7260 04:27:24,000 --> 04:27:25,680 ethusd for 7261 04:27:25,680 --> 04:27:28,600 example on ethusd we can see this whole 7262 04:27:28,600 --> 04:27:30,520 network of independent chain link node 7263 04:27:30,520 --> 04:27:32,399 operators that are each getting 7264 04:27:32,399 --> 04:27:35,040 different answers for the price of vusd 7265 04:27:35,040 --> 04:27:36,399 they're getting aggregated by the 7266 04:27:36,399 --> 04:27:38,560 network and then delivered on chain we 7267 04:27:38,560 --> 04:27:40,720 can see how often they're updated these 7268 04:27:40,720 --> 04:27:43,199 ones are updated for 05 deviation 7269 04:27:43,199 --> 04:27:46,000 threshold or a few hour heartbeat which 7270 04:27:46,000 --> 04:27:47,760 everyone hits first we can see when the 7271 04:27:47,760 --> 04:27:49,880 last update was we can see the number of 7272 04:27:49,880 --> 04:27:52,560 Oracle responses 7273 04:27:52,560 --> 04:27:55,439 Etc we can see the contract address 7274 04:27:55,439 --> 04:27:56,760 directly on 7275 04:27:56,760 --> 04:27:59,080 chain we can even look at the contract 7276 04:27:59,080 --> 04:28:01,399 on ether 7277 04:28:01,399 --> 04:28:04,560 scan we can see some of the history we 7278 04:28:04,560 --> 04:28:06,319 can see all the responses of the 7279 04:28:06,319 --> 04:28:08,439 different 7280 04:28:08,439 --> 04:28:10,439 Oracles and then at the bottom we can 7281 04:28:10,439 --> 04:28:12,560 see the different users and sponsors 7282 04:28:12,560 --> 04:28:15,439 keeping this network 7283 04:28:19,159 --> 04:28:22,479 up similar to transaction gas whenever a 7284 04:28:22,479 --> 04:28:25,159 node operator delivers data to a Smart 7285 04:28:25,159 --> 04:28:27,040 contract the chain link node operators 7286 04:28:27,040 --> 04:28:28,840 are paid a little bit of Oracle gas in 7287 04:28:28,840 --> 04:28:30,680 the chain link token right now these 7288 04:28:30,680 --> 04:28:32,520 users of the protocol are sponsoring 7289 04:28:32,520 --> 04:28:34,279 keeping these feeds up and are paying 7290 04:28:34,279 --> 04:28:35,880 the Oracle gas associated with 7291 04:28:35,880 --> 04:28:37,840 delivering this data on chain here's an 7292 04:28:37,840 --> 04:28:39,960 illustration of what the current model 7293 04:28:39,960 --> 04:28:41,760 of these data feeds look like a network 7294 04:28:41,760 --> 04:28:43,840 of these chain like nodes each reaches 7295 04:28:43,840 --> 04:28:45,720 out and gets the information about an 7296 04:28:45,720 --> 04:28:48,199 asset and then signs the data with their 7297 04:28:48,199 --> 04:28:50,520 own private key in a single transaction 7298 04:28:50,520 --> 04:28:53,399 then one node will deliver all the data 7299 04:28:53,399 --> 04:28:55,239 with all the different signatures to a 7300 04:28:55,239 --> 04:28:57,199 reference contract if that node doesn't 7301 04:28:57,199 --> 04:28:58,960 deliver the data another node will send 7302 04:28:58,960 --> 04:29:01,080 it instead reputation is incredibly 7303 04:29:01,080 --> 04:29:02,319 important when you're a chain link node 7304 04:29:02,319 --> 04:29:04,159 operator if you miss data updates if you 7305 04:29:04,159 --> 04:29:05,840 forget to send transactions you'll 7306 04:29:05,840 --> 04:29:07,119 probably be quickly kicked off these 7307 04:29:07,119 --> 04:29:08,840 networks and have no chance of making 7308 04:29:08,840 --> 04:29:10,520 any more money in the future these data 7309 04:29:10,520 --> 04:29:12,119 feeds are used by some of the largest 7310 04:29:12,119 --> 04:29:14,119 protocols in the space such as 7311 04:29:14,119 --> 04:29:17,840 synthetics Sushi swap compound and a 7312 04:29:17,840 --> 04:29:19,840 with several billion dollars each we can 7313 04:29:19,840 --> 04:29:22,600 take a look at an example over at docs. 7314 04:29:22,600 --> 04:29:24,760 chain. link work with evm contracts 7315 04:29:24,760 --> 04:29:27,479 we're going to hit evm chains scroll 7316 04:29:27,479 --> 04:29:29,119 down to data 7317 04:29:29,119 --> 04:29:31,520 feeds we'll scroll down to the solidity 7318 04:29:31,520 --> 04:29:33,760 section and we can see an example of an 7319 04:29:33,760 --> 04:29:36,439 entire contract that uses and reads from 7320 04:29:36,439 --> 04:29:37,880 one of these tring price 7321 04:29:37,880 --> 04:29:43,720 feeds we can even open this up in remix 7322 04:29:44,720 --> 04:29:47,439 and work with it in remix it looks like 7323 04:29:47,439 --> 04:29:49,319 this example is reading from a price 7324 04:29:49,319 --> 04:29:51,520 feed on coven the reason we're actually 7325 04:29:51,520 --> 04:29:53,399 going to use a test net to see this work 7326 04:29:53,399 --> 04:29:54,520 is that there's a set of chain link 7327 04:29:54,520 --> 04:29:57,040 nodes monitoring the test Network to to 7328 04:29:57,040 --> 04:29:59,000 show you exactly how this works out once 7329 04:29:59,000 --> 04:30:00,600 we get deeper into the course we'll show 7330 04:30:00,600 --> 04:30:02,199 you how to actually run tests and work 7331 04:30:02,199 --> 04:30:04,359 with Chain Lake nodes without actually 7332 04:30:04,359 --> 04:30:06,000 being on a test net which will make your 7333 04:30:06,000 --> 04:30:07,800 development much faster but I highly 7334 04:30:07,800 --> 04:30:10,119 recommend walking through this section 7335 04:30:10,119 --> 04:30:12,239 along with me so that you can see 7336 04:30:12,239 --> 04:30:14,359 firsthand how this actually works so 7337 04:30:14,359 --> 04:30:18,159 let's go ahead faucets. chain. linken 7338 04:30:18,159 --> 04:30:21,600 we're going to switch to the coven 7339 04:30:21,680 --> 04:30:23,840 Network and we're going to get some Coen 7340 04:30:23,840 --> 04:30:25,800 eth but remember look at the network 7341 04:30:25,800 --> 04:30:27,960 flag and use whatever network is in the 7342 04:30:27,960 --> 04:30:30,880 documentation so to get some Coen we're 7343 04:30:30,880 --> 04:30:32,279 going to come to the faucet we're going 7344 04:30:32,279 --> 04:30:34,439 to turn off test link we'll just stay 7345 04:30:34,439 --> 04:30:39,199 with eth I'm not a robot 7346 04:30:50,560 --> 04:30:52,920 and then send request once our Coen 7347 04:30:52,920 --> 04:30:55,080 ethereum has reached our wallet we can 7348 04:30:55,080 --> 04:30:56,800 go ahead and close and we can take a 7349 04:30:56,800 --> 04:30:59,359 look in our wallet and see that we do 7350 04:30:59,359 --> 04:31:02,239 indeed have 0.1 eth on koven now let's 7351 04:31:02,239 --> 04:31:06,159 go back to our remix we'll compile this 7352 04:31:06,159 --> 04:31:08,800 contract we go and deploy this on 7353 04:31:08,800 --> 04:31:11,000 injected web 3 and again the reason 7354 04:31:11,000 --> 04:31:12,520 we're going to use injected web 3 7355 04:31:12,520 --> 04:31:15,159 instead of JavaScript VM is that there's 7356 04:31:15,159 --> 04:31:17,800 no network of chain link nodes watching 7357 04:31:17,800 --> 04:31:19,960 our little fake JavaScript VM there are 7358 04:31:19,960 --> 04:31:21,840 network of Chain Lake nodes watching the 7359 04:31:21,840 --> 04:31:24,960 test St so we'll scroll down we'll 7360 04:31:24,960 --> 04:31:27,680 switch contract to the price consumer V3 7361 04:31:27,680 --> 04:31:31,000 and we'll hit deploy mamas will pop up 7362 04:31:31,000 --> 04:31:33,119 and after a brief delay we can see our 7363 04:31:33,119 --> 04:31:35,239 price feed consumer down here and we can 7364 04:31:35,239 --> 04:31:37,560 hit get the latest price which shows us 7365 04:31:37,560 --> 04:31:40,239 the latest price of ethereum in terms of 7366 04:31:40,239 --> 04:31:43,000 USD you may be wondering why the number 7367 04:31:43,000 --> 04:31:44,560 looks so weird that seems like a really 7368 04:31:44,560 --> 04:31:46,119 large number for the price of ethereum 7369 04:31:46,119 --> 04:31:48,119 in terms of USD and this is because 7370 04:31:48,119 --> 04:31:50,520 decimals don't actually work so well in 7371 04:31:50,520 --> 04:31:52,279 solidity and we'll get to that in a 7372 04:31:52,279 --> 04:31:54,520 little bit there's a decimals flag 7373 04:31:54,520 --> 04:31:56,600 associated with this price feed address 7374 04:31:56,600 --> 04:31:58,279 that tells us how many decimals to 7375 04:31:58,279 --> 04:32:01,359 include with this price it's also in the 7376 04:32:01,359 --> 04:32:03,199 documentation however I know that this 7377 04:32:03,199 --> 04:32:05,439 one has eight decimals so this is saying 7378 04:32:05,439 --> 04:32:07,830 the value of ethereum right now is 7379 04:32:07,830 --> 04:32:09,000 [Music] 7380 04:32:09,000 --> 04:32:11,359 $3,262 it may of course be different 7381 04:32:11,359 --> 04:32:13,199 when you go go ahead and try this now 7382 04:32:13,199 --> 04:32:14,359 there's a number of things that happen 7383 04:32:14,359 --> 04:32:16,080 in this contract that I'll explain in 7384 04:32:16,080 --> 04:32:17,920 our fundme example but if you want to 7385 04:32:17,920 --> 04:32:19,319 take a look now and see if you can 7386 04:32:19,319 --> 04:32:20,880 figure out what's going on I recommend 7387 04:32:20,880 --> 04:32:22,520 you do so price feeds are one of the 7388 04:32:22,520 --> 04:32:23,920 most powerful out of the-box 7389 04:32:23,920 --> 04:32:25,920 decentralized features you can use in 7390 04:32:25,920 --> 04:32:28,000 your smart contract to level them up 7391 04:32:28,000 --> 04:32:30,000 especially for decentralized finance if 7392 04:32:30,000 --> 04:32:31,640 you're looking for different addresses 7393 04:32:31,640 --> 04:32:33,239 of different price feeds you can check 7394 04:32:33,239 --> 04:32:35,399 the contract addresses section of the 7395 04:32:35,399 --> 04:32:37,479 documentation choose the network that 7396 04:32:37,479 --> 04:32:38,680 you 7397 04:32:38,680 --> 04:32:41,199 want and then scroll down and then look 7398 04:32:41,199 --> 04:32:43,159 some of the different addresses of the 7399 04:32:43,159 --> 04:32:45,399 different price feeds for example this 7400 04:32:45,399 --> 04:32:47,920 address will give you the price of 1 in 7401 04:32:47,920 --> 04:32:51,159 token in terms of ethereum this address 7402 04:32:51,159 --> 04:32:53,520 will give you the price of the Apple 7403 04:32:53,520 --> 04:32:56,479 stock in terms of USD and so on and so 7404 04:32:56,479 --> 04:32:58,760 forth the next decentralized application 7405 04:32:58,760 --> 04:33:00,359 right at the box is going to be chain 7406 04:33:00,359 --> 04:33:02,840 link vrf or chain link verifiable 7407 04:33:02,840 --> 04:33:04,680 Randomness function once we do our 7408 04:33:04,680 --> 04:33:06,840 Lottery example a little bit later we'll 7409 04:33:06,840 --> 04:33:08,680 talk about how Randomness can be 7410 04:33:08,680 --> 04:33:10,439 manipulated in blockchain blockchains 7411 04:33:10,439 --> 04:33:12,561 are deterministic system which by 7412 04:33:12,561 --> 04:33:14,320 definition means that they can't have 7413 04:33:14,320 --> 04:33:16,199 Randomness if you can determine what a 7414 04:33:16,199 --> 04:33:17,920 random number is it's not really random 7415 04:33:17,920 --> 04:33:19,959 anymore is it so we need a way to get a 7416 04:33:19,959 --> 04:33:21,719 provably random number by looking 7417 04:33:21,719 --> 04:33:23,879 outside of the blockchain and oracles 7418 04:33:23,879 --> 04:33:26,000 are perfectly positioned to do exactly 7419 04:33:26,000 --> 04:33:28,000 that chain link verifiable Randomness 7420 04:33:28,000 --> 04:33:29,840 function is a way to get provably a 7421 04:33:29,840 --> 04:33:32,199 random number into our smart contract to 7422 04:33:32,199 --> 04:33:33,799 guarantee fairness and guarantee 7423 04:33:33,799 --> 04:33:35,840 randomness of applications many 7424 04:33:35,840 --> 04:33:38,039 protocols like pull together axi 7425 04:33:38,039 --> 04:33:41,840 Infinity ether cards avag gois and more 7426 04:33:41,840 --> 04:33:44,439 chain link vrf for lotteries randomizing 7427 04:33:44,439 --> 04:33:47,039 nfts for gaming and for more we're going 7428 04:33:47,039 --> 04:33:49,320 to do an example of chain link vrf in a 7429 04:33:49,320 --> 04:33:51,279 later section once we get to the lottery 7430 04:33:51,279 --> 04:33:52,879 section if you want to see if you can 7431 04:33:52,879 --> 04:33:54,160 play with the randomness yourself right 7432 04:33:54,160 --> 04:33:55,879 now I recommend you're going to docs. 7433 04:33:55,879 --> 04:33:58,639 chain. link evm chains and scroll down 7434 04:33:58,639 --> 04:34:00,561 to get a random number and this will 7435 04:34:00,561 --> 04:34:02,439 teach you how to get a provably random 7436 04:34:02,439 --> 04:34:04,359 number into your applications the next 7437 04:34:04,359 --> 04:34:06,119 decentralized out ofth the box feature 7438 04:34:06,119 --> 04:34:08,639 of chain link is chain link Keepers 7439 04:34:08,639 --> 04:34:10,719 which is decentralized event driven 7440 04:34:10,719 --> 04:34:13,000 execution as you've seen in order to 7441 04:34:13,000 --> 04:34:15,039 kick off some type of transaction 7442 04:34:15,039 --> 04:34:17,000 somebody needs to spend the gas and 7443 04:34:17,000 --> 04:34:18,840 somebody needs to sit down and hit the 7444 04:34:18,840 --> 04:34:20,840 go button or hit the transact button or 7445 04:34:20,840 --> 04:34:22,520 hit the send button this is obviously a 7446 04:34:22,520 --> 04:34:24,160 centralized Vector if you have a 7447 04:34:24,160 --> 04:34:25,959 decentralized application that needs to 7448 04:34:25,959 --> 04:34:28,439 run at specific times or after specific 7449 04:34:28,439 --> 04:34:30,199 events are triggered chain link keepers 7450 04:34:30,199 --> 04:34:31,799 are the solution to this chain link 7451 04:34:31,799 --> 04:34:34,000 keepers are chain link nodes that listen 7452 04:34:34,000 --> 04:34:36,400 to a registration contract for different 7453 04:34:36,400 --> 04:34:38,879 events that you specify to fire maybe 7454 04:34:38,879 --> 04:34:40,840 you say every 10 minutes you want to do 7455 04:34:40,840 --> 04:34:43,279 something or once a week do something or 7456 04:34:43,279 --> 04:34:45,000 if the price of some asset hits some 7457 04:34:45,000 --> 04:34:47,561 number or maybe a liquidity pool is at a 7458 04:34:47,561 --> 04:34:49,799 certain level whatever event that you 7459 04:34:49,799 --> 04:34:52,000 want to code you absolutely can the 7460 04:34:52,000 --> 04:34:54,240 chain link nodes constantly listen for 7461 04:34:54,240 --> 04:34:56,439 these triggers to happen and check the 7462 04:34:56,439 --> 04:34:58,480 different contracts for these triggers 7463 04:34:58,480 --> 04:35:00,920 once a trigger returns true the chain 7464 04:35:00,920 --> 04:35:02,840 link nodes will then perform whatever 7465 04:35:02,840 --> 04:35:04,520 action that you tell the chain link 7466 04:35:04,520 --> 04:35:06,480 nodes to do we're also not going to go 7467 04:35:06,480 --> 04:35:08,080 over the chain link Keepers examples 7468 04:35:08,080 --> 04:35:09,799 right now because we're going to get to 7469 04:35:09,799 --> 04:35:11,799 them in a later module however if you 7470 04:35:11,799 --> 04:35:14,760 want to try them out go to docs. chain. 7471 04:35:14,760 --> 04:35:18,000 linkum going and go to making compatible 7472 04:35:18,000 --> 04:35:19,680 contracts and feel free to read the 7473 04:35:19,680 --> 04:35:21,480 documentation and try it out yourself 7474 04:35:21,480 --> 04:35:23,039 the last outof the-box feature of chain 7475 04:35:23,039 --> 04:35:25,400 link is the most customizable but also 7476 04:35:25,400 --> 04:35:27,439 the hardest to get correct end to end 7477 04:35:27,439 --> 04:35:29,400 reliability is the ultimate promise of 7478 04:35:29,400 --> 04:35:31,480 our smart contracts and we want and need 7479 04:35:31,480 --> 04:35:33,920 them to be able to do anything we want 7480 04:35:33,920 --> 04:35:36,680 to be able to take any input and get any 7481 04:35:36,680 --> 04:35:39,080 output chain link functions is the last 7482 04:35:39,080 --> 04:35:41,199 decentralized out of thebox tool and it 7483 04:35:41,199 --> 04:35:43,480 allows you to make any API call in a 7484 04:35:43,480 --> 04:35:45,279 decentralized context through a network 7485 04:35:45,279 --> 04:35:47,080 of chain link nodes we're not going to 7486 04:35:47,080 --> 04:35:48,920 be going over that at all in this video 7487 04:35:48,920 --> 04:35:49,879 but be sure to check out the 7488 04:35:49,879 --> 04:35:51,199 documentation if that's something that 7489 04:35:51,199 --> 04:35:53,199 you're interested in to me chain link 7490 04:35:53,199 --> 04:35:54,520 functions is going to be the future of 7491 04:35:54,520 --> 04:35:55,840 Defi and smart contracts and if you're 7492 04:35:55,840 --> 04:35:57,000 looking to make something novel and if 7493 04:35:57,000 --> 04:35:57,959 you're looking to make something that's 7494 04:35:57,959 --> 04:36:00,680 never been done before I 100% recommend 7495 04:36:00,680 --> 04:36:02,320 you check out chain link functions later 7496 04:36:02,320 --> 04:36:03,561 on after this course or whatever you 7497 04:36:03,561 --> 04:36:05,199 want to do as of filming it came out 7498 04:36:05,199 --> 04:36:06,760 about a month or two ago and people are 7499 04:36:06,760 --> 04:36:08,520 just beginning to build amazing things 7500 04:36:08,520 --> 04:36:09,879 with training functions so be sure to 7501 04:36:09,879 --> 04:36:11,760 check this out after or during the 7502 04:36:11,760 --> 04:36:13,320 course we're going to be using the chain 7503 04:36:13,320 --> 04:36:14,879 link Automation in a later section in 7504 04:36:14,879 --> 04:36:16,400 this course again if you want to try 7505 04:36:16,400 --> 04:36:17,920 these out in remix on a real test net 7506 04:36:17,920 --> 04:36:19,439 you can go to the documentation and play 7507 04:36:19,439 --> 04:36:21,799 with them 7508 04:36:23,000 --> 04:36:25,039 here now I know we haven't actually 7509 04:36:25,039 --> 04:36:26,439 written that much code but we've gone 7510 04:36:26,439 --> 04:36:28,039 over a ton so I want to do a quick 7511 04:36:28,039 --> 04:36:30,000 review in order for a function to 7512 04:36:30,000 --> 04:36:31,480 receive native blockchain token like 7513 04:36:31,480 --> 04:36:33,160 ethereum you need to mark that function 7514 04:36:33,160 --> 04:36:34,959 as payable if you want to force a 7515 04:36:34,959 --> 04:36:36,719 transaction to do something and you want 7516 04:36:36,719 --> 04:36:38,600 it to fail if that wasn't done you can 7517 04:36:38,600 --> 04:36:40,561 use a require statement a transaction 7518 04:36:40,561 --> 04:36:42,600 that reverts means it undoes any work 7519 04:36:42,600 --> 04:36:44,119 that it did previously and returns any 7520 04:36:44,119 --> 04:36:46,039 gas to the user to get the value sent 7521 04:36:46,039 --> 04:36:47,400 with a transaction you can use the 7522 04:36:47,400 --> 04:36:50,520 solidity Global message. Val chain link 7523 04:36:50,520 --> 04:36:51,920 is a technology for getting external 7524 04:36:51,920 --> 04:36:53,439 data and computation into our smart 7525 04:36:53,439 --> 04:36:55,799 contracts and most importantly getting 7526 04:36:55,799 --> 04:36:58,160 that data in a decentralized context in 7527 04:36:58,160 --> 04:36:59,359 this example we're going to be using a 7528 04:36:59,359 --> 04:37:00,840 chain link data feed or a chain link 7529 04:37:00,840 --> 04:37:03,119 price feed which is a decentralized way 7530 04:37:03,119 --> 04:37:05,000 to get pricing information from Real 7531 04:37:05,000 --> 04:37:08,279 World assets into our smart 7532 04:37:09,799 --> 04:37:11,840 contracts now in order for for us to 7533 04:37:11,840 --> 04:37:13,561 figure out if the amount of ethereum 7534 04:37:13,561 --> 04:37:15,439 sent with a transaction is greater than 7535 04:37:15,439 --> 04:37:18,320 or equal to our minimum USD of $5 we 7536 04:37:18,320 --> 04:37:20,520 need to convert the amount of ethereum 7537 04:37:20,520 --> 04:37:23,480 into its value of dollars so how are we 7538 04:37:23,480 --> 04:37:24,680 going to do that well the first thing 7539 04:37:24,680 --> 04:37:25,719 that we're going to need to do is we're 7540 04:37:25,719 --> 04:37:27,480 going to need to get the price of 7541 04:37:27,480 --> 04:37:29,359 ethereum or Avalanche or polygon or 7542 04:37:29,359 --> 04:37:30,639 whatever native blockchain token that 7543 04:37:30,639 --> 04:37:32,480 we're working with so let's create a 7544 04:37:32,480 --> 04:37:34,400 function to do that we'll create a 7545 04:37:34,400 --> 04:37:37,000 function get price and this function is 7546 04:37:37,000 --> 04:37:38,719 just going to get the price of ethereum 7547 04:37:38,719 --> 04:37:40,480 in terms of USD and then we're also 7548 04:37:40,480 --> 04:37:42,359 going to create a function called get 7549 04:37:42,359 --> 04:37:44,719 conversion rate rate which is going to 7550 04:37:44,719 --> 04:37:48,320 convert a value to its converted value 7551 04:37:48,320 --> 04:37:49,520 based off of the price for now we're 7552 04:37:49,520 --> 04:37:50,920 going to make them both public functions 7553 04:37:50,920 --> 04:37:52,320 so we can play with them test them and 7554 04:37:52,320 --> 04:37:53,920 do whatever we want with them to get the 7555 04:37:53,920 --> 04:37:55,039 price of ethereum we're going to use a 7556 04:37:55,039 --> 04:37:56,600 chain link data feed and we go through 7557 04:37:56,600 --> 04:37:57,959 the documentation to get that 7558 04:37:57,959 --> 04:37:59,920 information so in the documentation I'm 7559 04:37:59,920 --> 04:38:02,320 going to scroll down using data feeds 7560 04:38:02,320 --> 04:38:03,840 they've got an example here right and 7561 04:38:03,840 --> 04:38:05,480 solidity and if you wanted to like I 7562 04:38:05,480 --> 04:38:07,000 said you could easily open this up in 7563 04:38:07,000 --> 04:38:09,119 remix now you can see this example in 7564 04:38:09,119 --> 04:38:10,639 the documentation what's actually going 7565 04:38:10,639 --> 04:38:13,439 on working with a chain link price feed 7566 04:38:13,439 --> 04:38:14,680 there's a contract out there add an 7567 04:38:14,680 --> 04:38:16,119 address and we're going to call this 7568 04:38:16,119 --> 04:38:18,199 latest round data function on that 7569 04:38:18,199 --> 04:38:20,119 contract gives us a whole bunch of data 7570 04:38:20,119 --> 04:38:22,119 but we really only care about the price 7571 04:38:22,119 --> 04:38:23,240 so we're going to want to do the same 7572 04:38:23,240 --> 04:38:24,480 thing we want to reach out to that 7573 04:38:24,480 --> 04:38:26,160 contract that's currently storing and 7574 04:38:26,160 --> 04:38:28,160 having the price updated so since we 7575 04:38:28,160 --> 04:38:29,480 want to reach out to and work with the 7576 04:38:29,480 --> 04:38:31,160 contract we're going to need two things 7577 04:38:31,160 --> 04:38:32,719 right what are those two things well we 7578 04:38:32,719 --> 04:38:35,000 need the address and we need the AI the 7579 04:38:35,000 --> 04:38:36,279 address of the contract is going to be 7580 04:38:36,279 --> 04:38:37,959 really easy we can get the address by 7581 04:38:37,959 --> 04:38:39,439 going to the chain link documentation 7582 04:38:39,439 --> 04:38:40,760 and let's go to this price feed 7583 04:38:40,760 --> 04:38:42,039 addresses section 7584 04:38:42,039 --> 04:38:43,840 we'll scroll down we want to be on 7585 04:38:43,840 --> 04:38:47,000 ethereum okay great let's look for seia 7586 04:38:47,000 --> 04:38:48,840 looks like it's way down here and all 7587 04:38:48,840 --> 04:38:51,520 right awesome e2d great there's an e2d 7588 04:38:51,520 --> 04:38:53,359 price feed so now that we have the 7589 04:38:53,359 --> 04:38:55,400 address how do we get the ABI well 7590 04:38:55,400 --> 04:38:57,119 before with simple storage we imported 7591 04:38:57,119 --> 04:38:58,879 the entire contract from the top and we 7592 04:38:58,879 --> 04:39:01,080 compiled and we got the API like that we 7593 04:39:01,080 --> 04:39:02,719 could do that here but that's kind of a 7594 04:39:02,719 --> 04:39:04,320 lot of code and we don't actually care 7595 04:39:04,320 --> 04:39:06,439 about what the whole contract looks like 7596 04:39:06,439 --> 04:39:07,520 we only really want to know what the 7597 04:39:07,520 --> 04:39:09,039 functions are so we can call that latest 7598 04:39:09,039 --> 04:39:10,959 round data function remember if we're on 7599 04:39:10,959 --> 04:39:13,119 remix and we go down to the compilation 7600 04:39:13,119 --> 04:39:15,561 details the ABI is really just this list 7601 04:39:15,561 --> 04:39:17,561 of functions that we can call on a 7602 04:39:17,561 --> 04:39:20,199 contract the ABI itself doesn't actually 7603 04:39:20,199 --> 04:39:22,039 need to include any of the logic it just 7604 04:39:22,039 --> 04:39:23,680 needs to say hey these are the functions 7605 04:39:23,680 --> 04:39:25,520 you can interact with and here are their 7606 04:39:25,520 --> 04:39:27,600 inputs and here's whether or not they're 7607 04:39:27,600 --> 04:39:28,959 payable and here's whether or not their 7608 04:39:28,959 --> 04:39:30,920 view functions Etc like I said though 7609 04:39:30,920 --> 04:39:32,680 this kind of is a white lie you can also 7610 04:39:32,680 --> 04:39:34,080 use a function selector or some other 7611 04:39:34,080 --> 04:39:35,439 ways but we're just going to ignore that 7612 04:39:35,439 --> 04:39:38,040 for now how can we get the ABI there's a 7613 04:39:38,040 --> 04:39:39,840 concept in solidity known as the 7614 04:39:39,840 --> 04:39:41,878 interface if we go to the chain link 7615 04:39:41,878 --> 04:39:44,200 GitHub we go to smart contract kit / 7616 04:39:44,200 --> 04:39:46,280 chainlink we can see a lot of different 7617 04:39:46,280 --> 04:39:48,240 contracts in the chain link repository 7618 04:39:48,240 --> 04:39:50,560 we go to contracts SRC this might look a 7619 04:39:50,560 --> 04:39:52,040 little bit different based off of when 7620 04:39:52,040 --> 04:39:53,760 you're looking at it 7621 04:39:53,760 --> 04:39:57,240 v0.8 interfaces and we go to aggregator 7622 04:39:57,240 --> 04:39:59,638 V3 interface if we scroll down we can 7623 04:39:59,638 --> 04:40:01,680 actually see a whole bunch of function 7624 04:40:01,680 --> 04:40:03,440 declarations but none of them are 7625 04:40:03,440 --> 04:40:05,798 actually implemented it's just function 7626 04:40:05,798 --> 04:40:07,638 the name of the function some stuff 7627 04:40:07,638 --> 04:40:09,200 external view blah blah blah but then 7628 04:40:09,200 --> 04:40:10,760 just the semicolon and nothing inside of 7629 04:40:10,760 --> 04:40:13,080 them this is what's known as an 7630 04:40:13,080 --> 04:40:15,840 interface if you compile this this will 7631 04:40:15,840 --> 04:40:17,718 actually give us that ABI because it 7632 04:40:17,718 --> 04:40:19,440 defines all the different functions that 7633 04:40:19,440 --> 04:40:21,120 you can call on a contract it just 7634 04:40:21,120 --> 04:40:22,958 doesn't have any of the logic again we 7635 04:40:22,958 --> 04:40:24,200 don't really even need to know what the 7636 04:40:24,200 --> 04:40:26,680 functions do we just need to know how to 7637 04:40:26,680 --> 04:40:28,320 interact with the contract and if a 7638 04:40:28,320 --> 04:40:29,878 contract is deployed it'll have that 7639 04:40:29,878 --> 04:40:32,400 logic in its deployment so what we can 7640 04:40:32,400 --> 04:40:34,680 do is we can copy this whole thing 7641 04:40:34,680 --> 04:40:36,400 scroll all the way to the bottom hit the 7642 04:40:36,400 --> 04:40:38,360 copy button and paste it in our remix 7643 04:40:38,360 --> 04:40:39,400 now hold on though if you're following 7644 04:40:39,400 --> 04:40:41,440 along you don't have to copy paste it in 7645 04:40:41,440 --> 04:40:42,520 with me cuz I'm going to teach you 7646 04:40:42,520 --> 04:40:43,638 something in just a minute that makes 7647 04:40:43,638 --> 04:40:45,160 this a little bit easier this pasted 7648 04:40:45,160 --> 04:40:46,760 code alert comes up we're running 7649 04:40:46,760 --> 04:40:48,120 solidity code so this is going to be 7650 04:40:48,120 --> 04:40:49,560 okay since we're only working on test 7651 04:40:49,560 --> 04:40:51,200 Nets here we're going to be okay that we 7652 04:40:51,200 --> 04:40:52,600 don't have to worry about p a code alert 7653 04:40:52,600 --> 04:40:53,718 if you want to take a second to read it 7654 04:40:53,718 --> 04:40:55,240 please do but we're going to paste this 7655 04:40:55,240 --> 04:40:57,120 code in here just like we did before 7656 04:40:57,120 --> 04:40:58,798 with simple storage for now you don't 7657 04:40:58,798 --> 04:41:00,160 have to follow along I'm about to show 7658 04:41:00,160 --> 04:41:01,520 you an easier way just follow along and 7659 04:41:01,520 --> 04:41:03,480 watch now that we have this interface 7660 04:41:03,480 --> 04:41:05,440 aggregator V3 interface we can use this 7661 04:41:05,440 --> 04:41:07,560 interface to make API calls because now 7662 04:41:07,560 --> 04:41:09,840 we have the address and we have the API 7663 04:41:09,840 --> 04:41:11,878 and we can even compile this and it'll 7664 04:41:11,878 --> 04:41:14,760 compile fine so we can say aggregator V3 7665 04:41:14,760 --> 04:41:17,638 interface at address this and the 7666 04:41:17,638 --> 04:41:19,760 combination of these two give us 7667 04:41:19,760 --> 04:41:22,120 whatever code is at this address with 7668 04:41:22,120 --> 04:41:24,160 all the functions from the aggregator V3 7669 04:41:24,160 --> 04:41:25,920 interface and just to test this out we 7670 04:41:25,920 --> 04:41:28,120 can do something simple like dot version 7671 04:41:28,120 --> 04:41:29,920 since if we scroll up looks like there 7672 04:41:29,920 --> 04:41:32,200 is indeed a version function put a 7673 04:41:32,200 --> 04:41:34,760 little semicolon at the end so let's 7674 04:41:34,760 --> 04:41:36,040 actually go ahead and actually copy this 7675 04:41:36,040 --> 04:41:38,760 line give it its own function called get 7676 04:41:38,760 --> 04:41:42,240 version this we'll have this public view 7677 04:41:42,240 --> 04:41:44,360 Returns what is the version up here 7678 04:41:44,360 --> 04:41:48,440 return a un 256 return a un 256 paste 7679 04:41:48,440 --> 04:41:50,160 that line in here aggregator V3 7680 04:41:50,160 --> 04:41:52,680 interface at its address version we'll 7681 04:41:52,680 --> 04:41:55,798 say return all of that now I'm going to 7682 04:41:55,798 --> 04:41:58,000 go ahead and deploy this to the seoa 7683 04:41:58,000 --> 04:41:59,520 test net just to show you what this 7684 04:41:59,520 --> 04:42:01,400 would actually look like however I'm 7685 04:42:01,400 --> 04:42:02,680 going to recommend you don't do that for 7686 04:42:02,680 --> 04:42:04,520 now just know that this will work this 7687 04:42:04,520 --> 04:42:05,878 way you won't have to wait forever for 7688 04:42:05,878 --> 04:42:07,040 your transactions to go through on the 7689 04:42:07,040 --> 04:42:08,840 test net so to do this I'm going to go 7690 04:42:08,840 --> 04:42:10,718 ahead scroll to the top go to injected 7691 04:42:10,718 --> 04:42:13,040 metamask change the contract from 7692 04:42:13,040 --> 04:42:15,480 aggregator V3 interface to fundme going 7693 04:42:15,480 --> 04:42:17,440 to go ahead and hit deploy my metamask 7694 04:42:17,440 --> 04:42:18,760 is going to pop up I'm going to go ahead 7695 04:42:18,760 --> 04:42:20,520 and hit confirm and we're going to 7696 04:42:20,520 --> 04:42:22,280 scroll down and now we have a big blue 7697 04:42:22,280 --> 04:42:24,000 button called get version which I'm 7698 04:42:24,000 --> 04:42:25,120 going to go ahead and click and we can 7699 04:42:25,120 --> 04:42:27,878 see we get a four return because at this 7700 04:42:27,878 --> 04:42:30,120 contract address on the blockchain it 7701 04:42:30,120 --> 04:42:31,600 has the functionality for get version 7702 04:42:31,600 --> 04:42:33,718 returning 4 and for the rest of this 7703 04:42:33,718 --> 04:42:35,320 lesson I'm going to be showing you guys 7704 04:42:35,320 --> 04:42:37,680 and testing this on an actual test net 7705 04:42:37,680 --> 04:42:40,080 however I recommend that you don't test 7706 04:42:40,080 --> 04:42:42,320 all of these as I along just watch me do 7707 04:42:42,320 --> 04:42:43,680 them because again waiting for 7708 04:42:43,680 --> 04:42:45,600 transactions on a test net can be really 7709 04:42:45,600 --> 04:42:47,638 annoying sometimes a test net might be 7710 04:42:47,638 --> 04:42:49,638 having issues because again it's people 7711 04:42:49,638 --> 04:42:50,760 running them out of the goodness of 7712 04:42:50,760 --> 04:42:52,600 their heart so for this lesson just 7713 04:42:52,600 --> 04:42:54,320 follow along write the code with me and 7714 04:42:54,320 --> 04:42:56,638 then maybe at the end deploy everything 7715 04:42:56,638 --> 04:42:58,280 so this is a really easy way and a 7716 04:42:58,280 --> 04:42:59,920 common way that people use to interact 7717 04:42:59,920 --> 04:43:01,680 with other contracts outside of their 7718 04:43:01,680 --> 04:43:04,240 projects they get the interface of that 7719 04:43:04,240 --> 04:43:06,920 contract using the interface keyword 7720 04:43:06,920 --> 04:43:08,840 they compile it and the compiler 7721 04:43:08,840 --> 04:43:11,360 actually gives us an API and then you 7722 04:43:11,360 --> 04:43:13,400 just wrap an address around with that 7723 04:43:13,400 --> 04:43:15,560 interface keyword and you can call any 7724 04:43:15,560 --> 04:43:18,120 function at that address and and this is 7725 04:43:18,120 --> 04:43:19,560 one of these things as we work with more 7726 04:43:19,560 --> 04:43:21,120 and more it'll start to make more sense 7727 04:43:21,120 --> 04:43:22,280 in the beginning it might be a little 7728 04:43:22,280 --> 04:43:24,160 hard to grasp but just bear with me for 7729 04:43:24,160 --> 04:43:25,840 now the more we do it the better you'll 7730 04:43:25,840 --> 04:43:27,840 get don't get discouraged take a deep 7731 04:43:27,840 --> 04:43:31,638 breath and exhale and let's keep 7732 04:43:32,958 --> 04:43:35,638 coding and if this is confusing to you 7733 04:43:35,638 --> 04:43:37,320 this is again where we can work with our 7734 04:43:37,320 --> 04:43:39,360 AI friends or any of the forums that 7735 04:43:39,360 --> 04:43:41,440 we're working with again very soon I'm 7736 04:43:41,440 --> 04:43:43,400 about to show you how to ask really good 7737 04:43:43,400 --> 04:43:45,440 questions and make really good prompts 7738 04:43:45,440 --> 04:43:47,440 but one we could ask here is hey I'm 7739 04:43:47,440 --> 04:43:49,240 confused how does this solidity function 7740 04:43:49,240 --> 04:43:50,798 return the value four when I didn't 7741 04:43:50,798 --> 04:43:53,040 Define any logic in aggregator V3 7742 04:43:53,040 --> 04:43:56,040 interface and I just posted that code 7743 04:43:56,040 --> 04:43:58,480 from get version here because a common 7744 04:43:58,480 --> 04:44:00,200 issue that I see new developers run into 7745 04:44:00,200 --> 04:44:02,878 is they go oh wait wait how does this 7746 04:44:02,878 --> 04:44:05,360 version return four my aggregator V3 7747 04:44:05,360 --> 04:44:07,200 interface doesn't have any code in it 7748 04:44:07,200 --> 04:44:09,798 why why does putting an address in here 7749 04:44:09,798 --> 04:44:11,878 make it work like what's going going on 7750 04:44:11,878 --> 04:44:13,920 and let's see if our AI is able to help 7751 04:44:13,920 --> 04:44:17,638 us here so this is chat gbt version 3.5 7752 04:44:17,638 --> 04:44:20,040 again I prefer version 4 but this is the 7753 04:44:20,040 --> 04:44:22,878 cheaper one and it says in the code you 7754 04:44:22,878 --> 04:44:24,840 provided the get version function is 7755 04:44:24,840 --> 04:44:26,638 calling the version function of an 7756 04:44:26,638 --> 04:44:28,718 instance of the aggregator V3 interface 7757 04:44:28,718 --> 04:44:30,798 contract it appears that the contract 7758 04:44:30,798 --> 04:44:33,400 address here is being used to create an 7759 04:44:33,400 --> 04:44:35,480 instance of aggregator V3 interface the 7760 04:44:35,480 --> 04:44:37,360 aggregator V3 interface is an interface 7761 04:44:37,360 --> 04:44:39,240 contract that defines a set of functions 7762 04:44:39,240 --> 04:44:41,120 that must be implemented by another 7763 04:44:41,120 --> 04:44:43,160 contract it serves as a way to interact 7764 04:44:43,160 --> 04:44:45,200 with the contract at the given address 7765 04:44:45,200 --> 04:44:47,200 by providing a common interface the 7766 04:44:47,200 --> 04:44:49,360 version function being called in your 7767 04:44:49,360 --> 04:44:51,360 code is likely defined in the actual 7768 04:44:51,360 --> 04:44:53,840 contract that implements this uh and 7769 04:44:53,840 --> 04:44:55,320 this is pretty much correct right and so 7770 04:44:55,320 --> 04:44:57,320 it gives us some more context here this 7771 04:44:57,320 --> 04:45:00,120 is exactly correct this address has a 7772 04:45:00,120 --> 04:45:03,160 version function and US surrounding it 7773 04:45:03,160 --> 04:45:05,280 with this aggregative E3 interface like 7774 04:45:05,280 --> 04:45:07,240 typ casting it in these parentheses like 7775 04:45:07,240 --> 04:45:09,160 this is just telling our solidity 7776 04:45:09,160 --> 04:45:11,920 compiler hey there's a version function 7777 04:45:11,920 --> 04:45:15,480 at this address or there's a latest 7778 04:45:15,480 --> 04:45:17,600 round data function or all the functions 7779 04:45:17,600 --> 04:45:19,718 all the functions in this aggregator V3 7780 04:45:19,718 --> 04:45:21,958 interface are at this address if this 7781 04:45:21,958 --> 04:45:24,040 address doesn't have a version function 7782 04:45:24,040 --> 04:45:25,798 this would just break and this is a good 7783 04:45:25,798 --> 04:45:27,280 example of again where we can actually 7784 04:45:27,280 --> 04:45:29,280 follow up with these AIS they're 7785 04:45:29,280 --> 04:45:31,360 typically very good at keeping context 7786 04:45:31,360 --> 04:45:33,920 so we could even ask what would happen 7787 04:45:33,920 --> 04:45:37,798 if that contract address didn't have 7788 04:45:37,798 --> 04:45:39,638 that 7789 04:45:39,638 --> 04:45:41,360 function and we see if the 7790 04:45:41,360 --> 04:45:42,958 implementation contract at the given 7791 04:45:42,958 --> 04:45:44,760 address does not have a version function 7792 04:45:44,760 --> 04:45:46,080 or if it has a different function 7793 04:45:46,080 --> 04:45:47,680 signature calling version on the 7794 04:45:47,680 --> 04:45:49,400 contract would result in a compilation 7795 04:45:49,400 --> 04:45:51,480 error or a runtime error so it wouldn't 7796 04:45:51,480 --> 04:45:53,240 result on a compilation error but the 7797 04:45:53,240 --> 04:45:55,320 transaction would revert so so this is 7798 04:45:55,320 --> 04:45:57,360 pretty helpful here but again we always 7799 04:45:57,360 --> 04:45:58,600 want to double check this so this is 7800 04:45:58,600 --> 04:45:59,760 where we'd probably go back to the 7801 04:45:59,760 --> 04:46:03,560 discussions forum and follow up 7802 04:46:04,560 --> 04:46:06,680 there so now that we actually have the 7803 04:46:06,680 --> 04:46:08,440 interface we can start calling these 7804 04:46:08,440 --> 04:46:10,600 functions and calling these addresses 7805 04:46:10,600 --> 04:46:12,200 however having a ton of these interfaces 7806 04:46:12,200 --> 04:46:13,878 is really going to clog up our contracts 7807 04:46:13,878 --> 04:46:15,320 and clog up our files and be really 7808 04:46:15,320 --> 04:46:17,400 gross to work with is there a better way 7809 04:46:17,400 --> 04:46:19,680 for us to do this well when we worked 7810 04:46:19,680 --> 04:46:21,480 with simple storage yes there was we 7811 04:46:21,480 --> 04:46:23,760 just went ahead and used Imports right 7812 04:46:23,760 --> 04:46:25,560 but that's when we had all the code in 7813 04:46:25,560 --> 04:46:27,638 our locally in our directory we don't 7814 04:46:27,638 --> 04:46:29,040 have all the code locally we didn't 7815 04:46:29,040 --> 04:46:30,680 create the aggregator V3 interface we 7816 04:46:30,680 --> 04:46:32,520 didn't create the price feed contracts 7817 04:46:32,520 --> 04:46:34,080 so can we do something like import 7818 04:46:34,080 --> 04:46:36,160 simple storage. but with a contract 7819 04:46:36,160 --> 04:46:38,360 outside of our project well again we 7820 04:46:38,360 --> 04:46:39,920 could copy paste it to its own file and 7821 04:46:39,920 --> 04:46:43,240 import add k T V3 aggregator V3 7822 04:46:43,240 --> 04:46:45,240 interface. so and of course we're going 7823 04:46:45,240 --> 04:46:47,240 to use this named import syntax because 7824 04:46:47,240 --> 04:46:49,480 we're awesome developers we could copy 7825 04:46:49,480 --> 04:46:51,680 paste it like this and do exactly what 7826 04:46:51,680 --> 04:46:53,320 we did before we could create a new file 7827 04:46:53,320 --> 04:46:55,440 called aggregator V3 interface paste the 7828 04:46:55,440 --> 04:46:57,638 code in there or we could actually 7829 04:46:57,638 --> 04:47:00,440 import directly from GitHub if we go 7830 04:47:00,440 --> 04:47:01,958 back to the documentation associated 7831 04:47:01,958 --> 04:47:03,920 with using data feeds we scroll down to 7832 04:47:03,920 --> 04:47:06,760 using data feeds here scroll down we see 7833 04:47:06,760 --> 04:47:08,878 at the top they do this import like this 7834 04:47:08,878 --> 04:47:11,400 import at chainlink contracts as C blah 7835 04:47:11,400 --> 04:47:13,600 blah blah this import actually has the 7836 04:47:13,600 --> 04:47:16,760 same setup as as the path of what's in 7837 04:47:16,760 --> 04:47:19,280 the GitHub repository so instead of us 7838 04:47:19,280 --> 04:47:21,400 copy pasting from GitHub we can actually 7839 04:47:21,400 --> 04:47:24,520 import directly from GitHub or mpm we 7840 04:47:24,520 --> 04:47:26,878 can copy this line back in our remix we 7841 04:47:26,878 --> 04:47:29,240 could paste it in like this remix is 7842 04:47:29,240 --> 04:47:30,638 smart enough to know that this at 7843 04:47:30,638 --> 04:47:33,360 chainlink contracts is referring to the 7844 04:47:33,360 --> 04:47:36,680 what's known as an mpm package chainlink 7845 04:47:36,680 --> 04:47:39,000 contracts chainlink contracts is what's 7846 04:47:39,000 --> 04:47:40,958 known as a package manager and it keeps 7847 04:47:40,958 --> 04:47:42,600 different versions of combinations of 7848 04:47:42,600 --> 04:47:44,878 code for us to download at chainlink 7849 04:47:44,878 --> 04:47:46,878 contracts is created directly from chain 7850 04:47:46,878 --> 04:47:49,280 link repository remix downloads all this 7851 04:47:49,280 --> 04:47:51,320 code from mpm which is Created from the 7852 04:47:51,320 --> 04:47:53,120 GitHub so it essentially downloads it 7853 04:47:53,120 --> 04:47:55,638 from the GitHub so us doing this import 7854 04:47:55,638 --> 04:47:57,520 like this is the same as is just copy 7855 04:47:57,520 --> 04:47:58,958 pasting the entire interface at the top 7856 04:47:58,958 --> 04:48:00,760 of our contract now we have this 7857 04:48:00,760 --> 04:48:02,280 aggregator V3 interface that we want to 7858 04:48:02,280 --> 04:48:03,840 work with we can go ahead and compile 7859 04:48:03,840 --> 04:48:06,600 and bada bing bada 7860 04:48:07,680 --> 04:48:09,958 boom so great so now that we have the 7861 04:48:09,958 --> 04:48:11,558 interface here which will give a 7862 04:48:11,558 --> 04:48:13,520 minimalistic ABI for us to interact with 7863 04:48:13,520 --> 04:48:14,958 the contract how do we actually get the 7864 04:48:14,958 --> 04:48:17,240 pricing information well again if we go 7865 04:48:17,240 --> 04:48:19,520 back to the docs we can see right here 7866 04:48:19,520 --> 04:48:21,520 gives us an example of the code we can 7867 04:48:21,520 --> 04:48:23,320 use to get the latest price but let's 7868 04:48:23,320 --> 04:48:24,760 write it ourselves just so that we know 7869 04:48:24,760 --> 04:48:28,320 what's going on we'll say agregator V3 7870 04:48:28,320 --> 04:48:30,000 interface and we'll actually create a 7871 04:48:30,000 --> 04:48:32,638 new variable called price feed equals 7872 04:48:32,638 --> 04:48:35,718 aggregator V3 interface contract at this 7873 04:48:35,718 --> 04:48:37,718 address which again only works for 7874 04:48:37,718 --> 04:48:40,040 sapoia now we can call this latest round 7875 04:48:40,040 --> 04:48:42,760 data function on the price feed so we'll 7876 04:48:42,760 --> 04:48:46,600 say price feed. late round data and if 7877 04:48:46,600 --> 04:48:48,480 we look at the interface on GitHub we 7878 04:48:48,480 --> 04:48:50,000 can actually see latest round data 7879 04:48:50,000 --> 04:48:51,798 doesn't just return one variable it 7880 04:48:51,798 --> 04:48:53,480 returns a whole bunch of different types 7881 04:48:53,480 --> 04:48:56,080 of variables and to return multiple 7882 04:48:56,080 --> 04:48:58,040 types we do some syntax that looks like 7883 04:48:58,040 --> 04:49:02,400 this and we'll say uint 80 round ID and 7884 04:49:02,400 --> 04:49:04,240 you can even flip back and forth between 7885 04:49:04,240 --> 04:49:05,600 the documentation make sure you have it 7886 04:49:05,600 --> 04:49:08,320 right int price which again we know in 7887 04:49:08,320 --> 04:49:12,120 int defaults to an INT 256 you uint 256 7888 04:49:12,120 --> 04:49:16,000 started app uint 256 Tim stamp and then 7889 04:49:16,000 --> 04:49:20,440 uint 80 answered in round there's a lot 7890 04:49:20,440 --> 04:49:22,200 of code in here since this function 7891 04:49:22,200 --> 04:49:23,958 returns so many variables we have to set 7892 04:49:23,958 --> 04:49:25,718 something up to capture them but we 7893 04:49:25,718 --> 04:49:26,798 don't care about any of these other 7894 04:49:26,798 --> 04:49:28,440 stuff we just care about price so what 7895 04:49:28,440 --> 04:49:30,280 we can do is actually just remove them 7896 04:49:30,280 --> 04:49:32,240 and leave the commas in there so we're 7897 04:49:32,240 --> 04:49:34,400 going to remove started at remove time 7898 04:49:34,400 --> 04:49:36,718 stamp remove answered and round and I 7899 04:49:36,718 --> 04:49:38,400 hit command s to compile we're going to 7900 04:49:38,400 --> 04:49:39,920 get these yellow squiggly lines which 7901 04:49:39,920 --> 04:49:41,400 are warnings but we're going to fix them 7902 04:49:41,400 --> 04:49:43,798 in a minute now we have in price equals 7903 04:49:43,798 --> 04:49:45,718 Price feed. latest round data because we 7904 04:49:45,718 --> 04:49:47,400 only care about getting the price from 7905 04:49:47,400 --> 04:49:49,638 the return the reason price is an into 7906 04:49:49,638 --> 04:49:51,840 56 is because some price feeds could be 7907 04:49:51,840 --> 04:49:54,120 negative now that we have the price this 7908 04:49:54,120 --> 04:49:55,240 price variable is going to be 7909 04:49:55,240 --> 04:49:59,120 representing the price of eth in terms 7910 04:49:59,120 --> 04:50:01,400 of USD and it's going to return a number 7911 04:50:01,400 --> 04:50:03,120 that looks like this because again slity 7912 04:50:03,120 --> 04:50:04,600 doesn't work with decimals so we know 7913 04:50:04,600 --> 04:50:06,320 that this price feed has eight decimals 7914 04:50:06,320 --> 04:50:08,480 but it'll get a return like this boom 7915 04:50:08,480 --> 04:50:10,120 like this it'll return a value that 7916 04:50:10,120 --> 04:50:11,520 looks like this 7917 04:50:11,520 --> 04:50:12,878 if we want to double check how many 7918 04:50:12,878 --> 04:50:14,638 decimals there are in a price feed it 7919 04:50:14,638 --> 04:50:16,160 actually has a decimals function which 7920 04:50:16,160 --> 04:50:18,040 allows you to check that as well now as 7921 04:50:18,040 --> 04:50:20,558 we know message. value is going to have 7922 04:50:20,558 --> 04:50:22,878 18 decimal places how do we know that 7923 04:50:22,878 --> 04:50:24,520 well because we know that one ether is 7924 04:50:24,520 --> 04:50:27,400 equal to this many way and this many way 7925 04:50:27,400 --> 04:50:32,160 has 18 zeros 1 2 3 4 5 6 7 8 9 10 1 2 3 7926 04:50:32,160 --> 04:50:35,120 4 5 6 7 8 so this massive number is 7927 04:50:35,120 --> 04:50:38,840 equal to 1 ethereum right 1. 1 2 3 4 5 6 7928 04:50:38,840 --> 04:50:41,798 7 8 9 10 1 2 3 4 5 6 7 eight so right 7929 04:50:41,798 --> 04:50:43,878 now message. value and price actually 7930 04:50:43,878 --> 04:50:46,600 have different decimal places price has 7931 04:50:46,600 --> 04:50:49,718 eight message. value is going to have 18 7932 04:50:49,718 --> 04:50:52,160 so to get them to match up we have to do 7933 04:50:52,160 --> 04:50:57,558 return price times 1 E10 or to add those 7934 04:50:57,558 --> 04:50:59,798 additional 10 decimal places and yes I 7935 04:50:59,798 --> 04:51:01,040 know we have a red line I'll fix this in 7936 04:51:01,040 --> 04:51:04,680 a minute price as we know is a in 256 7937 04:51:04,680 --> 04:51:07,040 and message. value is going to be a u 7938 04:51:07,040 --> 04:51:09,160 256 so the types are actually different 7939 04:51:09,160 --> 04:51:11,000 so we want to get the price and terms of 7940 04:51:11,000 --> 04:51:14,360 U 256 instead of in 256 to convert them 7941 04:51:14,360 --> 04:51:16,160 we can again do a thing called type 7942 04:51:16,160 --> 04:51:17,718 casting there are a lot of different 7943 04:51:17,718 --> 04:51:19,280 types that can be easely converted 7944 04:51:19,280 --> 04:51:21,520 between each other not all types can be 7945 04:51:21,520 --> 04:51:24,280 typ casted but an INT and a un 256 can 7946 04:51:24,280 --> 04:51:28,000 be so to make our price a u 256 we would 7947 04:51:28,000 --> 04:51:31,680 just do uint 256 and wrap price like 7948 04:51:31,680 --> 04:51:33,798 this or we could just wrap both of them 7949 04:51:33,798 --> 04:51:35,920 like this now of course since we're not 7950 04:51:35,920 --> 04:51:37,958 modifying any state but we are reading 7951 04:51:37,958 --> 04:51:40,040 storage we can make this a view function 7952 04:51:40,040 --> 04:51:43,320 and then we'll say it returns a uint 256 7953 04:51:43,320 --> 04:51:46,040 like so now if we compile we get rid of 7954 04:51:46,040 --> 04:51:48,080 all those errors and warnings now math 7955 04:51:48,080 --> 04:51:49,878 could be a little bit tricky in solidity 7956 04:51:49,878 --> 04:51:51,200 but the more you do it the better you'll 7957 04:51:51,200 --> 04:51:52,798 get and the reason math can be tricky is 7958 04:51:52,798 --> 04:51:54,280 because there aren't any decimal places 7959 04:51:54,280 --> 04:51:55,958 so you need to only work with whole 7960 04:51:55,958 --> 04:51:57,558 numbers the more you work with it the 7961 04:51:57,558 --> 04:52:00,200 better you'll get 7962 04:52:01,240 --> 04:52:03,440 though awesome so now we have a get 7963 04:52:03,440 --> 04:52:05,240 price function which is going to return 7964 04:52:05,240 --> 04:52:08,200 the value of ethereum in terms of USD as 7965 04:52:08,200 --> 04:52:11,400 a u 256 now all we we have to do is 7966 04:52:11,400 --> 04:52:13,718 convert our message. value in terms of 7967 04:52:13,718 --> 04:52:15,798 dollars using this get price function to 7968 04:52:15,798 --> 04:52:16,920 do that we're going to use our get 7969 04:52:16,920 --> 04:52:18,680 conversion rate function this get 7970 04:52:18,680 --> 04:52:19,958 conversion rate function is going to 7971 04:52:19,958 --> 04:52:23,558 take a u 256 eth amount as an input and 7972 04:52:23,558 --> 04:52:25,400 we're to convert this eth amount to its 7973 04:52:25,400 --> 04:52:28,040 value in dollars this will be a public 7974 04:52:28,040 --> 04:52:30,480 view function that will return a uint 7975 04:52:30,480 --> 04:52:32,360 256 so first we're going to get the 7976 04:52:32,360 --> 04:52:36,080 price of ethereum by doing U 256 e price 7977 04:52:36,080 --> 04:52:38,280 equals our get price function that we 7978 04:52:38,280 --> 04:52:40,080 just defined and then we're going to do 7979 04:52:40,080 --> 04:52:46,480 U 256 eth amount in USD equals eth price 7980 04:52:46,480 --> 04:52:49,200 time eth amount and then we actually 7981 04:52:49,200 --> 04:52:52,160 have to divide by 1 E18 the reason we 7982 04:52:52,160 --> 04:52:55,040 divide by 1 E18 is because both of these 7983 04:52:55,040 --> 04:52:57,520 have 18 decimal places and if we 7984 04:52:57,520 --> 04:53:01,240 multiply 1 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 7985 04:53:01,240 --> 04:53:04,040 8 9 10 if we multiply these by each 7986 04:53:04,040 --> 04:53:05,320 other where both of these are 7987 04:53:05,320 --> 04:53:07,160 representing one we're actually going to 7988 04:53:07,160 --> 04:53:09,440 get a number that's absolutely massive 7989 04:53:09,440 --> 04:53:12,040 with 38 decimal places so we need to 7990 04:53:12,040 --> 04:53:14,920 divide by 188 to reduce it back down to 7991 04:53:14,920 --> 04:53:16,558 what it should actually be an important 7992 04:53:16,558 --> 04:53:18,840 rule with working with math and solidity 7993 04:53:18,840 --> 04:53:21,360 is you always want to multiply before 7994 04:53:21,360 --> 04:53:23,798 you divide the reason for this is since 7995 04:53:23,798 --> 04:53:25,480 again only whole numbers work in 7996 04:53:25,480 --> 04:53:28,480 solidity you were to do 1 iD two you 7997 04:53:28,480 --> 04:53:30,840 would end up getting zero so you always 7998 04:53:30,840 --> 04:53:32,360 want to multiply first when we get to 7999 04:53:32,360 --> 04:53:33,638 the foundary section of this course 8000 04:53:33,638 --> 04:53:35,000 testing all this math is going to be a 8001 04:53:35,000 --> 04:53:36,798 lot easier if you're really struggling 8002 04:53:36,798 --> 04:53:38,200 with some of the math bits right now I 8003 04:53:38,200 --> 04:53:39,680 wouldn't let that slow you down because 8004 04:53:39,680 --> 04:53:41,160 one of the things that AI is really good 8005 04:53:41,160 --> 04:53:42,558 at is doing a lot of these math 8006 04:53:42,558 --> 04:53:44,680 conversions but in any case this eth 8007 04:53:44,680 --> 04:53:46,600 amount in USD is the number that we're 8008 04:53:46,600 --> 04:53:48,600 looking for so we can say return e them 8009 04:53:48,600 --> 04:53:50,718 out in USD and awesome now we have a get 8010 04:53:50,718 --> 04:53:52,360 conversion rate function let's walk 8011 04:53:52,360 --> 04:53:53,480 through this together just so that you 8012 04:53:53,480 --> 04:53:55,240 can understand what's actually going on 8013 04:53:55,240 --> 04:53:57,120 let's say we want to see how much one 8014 04:53:57,120 --> 04:53:59,360 eth is worth well we're going to get the 8015 04:53:59,360 --> 04:54:02,400 eth price which let's say it's $2,000 8016 04:54:02,400 --> 04:54:04,638 but it's going to be $2,000 with one2 3 8017 04:54:04,638 --> 04:54:09,798 4 5 6 7 8 1 2 3 4 5 6 7 8 9 10 18 zeros 8018 04:54:09,798 --> 04:54:12,440 so e might look something like this so 8019 04:54:12,440 --> 04:54:15,080 that means we're going to do this 2,000 8020 04:54:15,080 --> 04:54:18,638 with 18 decimal places times 1 E which 8021 04:54:18,638 --> 04:54:22,718 is going to be 1 1 2 3 4 5 6 7 8 1 2 3 4 8022 04:54:22,718 --> 04:54:25,400 5 6 7 8 8 9 10 we're going to multiply 8023 04:54:25,400 --> 04:54:27,558 those together and then since we're 8024 04:54:27,558 --> 04:54:29,840 going to get an additional 36 zeros then 8025 04:54:29,840 --> 04:54:32,600 we just divide by 1 E18 and that's how 8026 04:54:32,600 --> 04:54:33,958 we would get 8027 04:54:33,958 --> 04:54:37,360 $2,000 equals 1 E it's going to be 2,000 8028 04:54:37,360 --> 04:54:39,520 of course with 18 decimal places one of 8029 04:54:39,520 --> 04:54:40,878 the good reasons for using whole numbers 8030 04:54:40,878 --> 04:54:42,920 in solidity is that it's not possible to 8031 04:54:42,920 --> 04:54:45,120 have decimal places so we don't lose any 8032 04:54:45,120 --> 04:54:46,920 Precision which is really good so 8033 04:54:46,920 --> 04:54:48,558 normally we should test this function 8034 04:54:48,558 --> 04:54:50,240 before continuing but since we're doing 8035 04:54:50,240 --> 04:54:51,718 all this on a test that and I promise 8036 04:54:51,718 --> 04:54:53,360 you that I tested this all beforehand 8037 04:54:53,360 --> 04:54:54,320 we're just going to go ahead and keep 8038 04:54:54,320 --> 04:54:56,440 going so now that we've done all this 8039 04:54:56,440 --> 04:54:58,638 work if we want to make sure that our 8040 04:54:58,638 --> 04:55:01,920 users are sending at least $5 we can do 8041 04:55:01,920 --> 04:55:04,718 get conversion rate of message. sender 8042 04:55:04,718 --> 04:55:06,798 needs to be greater than minimum USD 8043 04:55:06,798 --> 04:55:08,440 because get conversion rate takes an eth 8044 04:55:08,440 --> 04:55:10,600 amount as input uses the price pricing 8045 04:55:10,600 --> 04:55:13,280 information to get the dollar value back 8046 04:55:13,280 --> 04:55:15,200 and we're going to check to see that the 8047 04:55:15,200 --> 04:55:17,160 dollar value of the message. value is 8048 04:55:17,160 --> 04:55:20,080 greater than the minimum USD however 8049 04:55:20,080 --> 04:55:21,840 since get conversion rate returns a 8050 04:55:21,840 --> 04:55:24,040 value with 18 decimal places we need to 8051 04:55:24,040 --> 04:55:28,280 update our minimum USD to say 5 * 10 8052 04:55:28,280 --> 04:55:30,680 raised to the 18th or we could also do 5 8053 04:55:30,680 --> 04:55:35,718 E18 or we do 5 * 1 8054 04:55:37,280 --> 04:55:40,440 E18 I personally like this 5e8 syntax 8055 04:55:40,440 --> 04:55:42,240 but whatever works for you I'm going to 8056 04:55:42,240 --> 04:55:43,520 deploy this to a test net just to 8057 04:55:43,520 --> 04:55:45,280 demonstrate this working but again you 8058 04:55:45,280 --> 04:55:46,958 do not have to so we're going to go 8059 04:55:46,958 --> 04:55:49,040 ahead delete our previous deployments 8060 04:55:49,040 --> 04:55:51,718 injected web 3 deploy metam Mass pops up 8061 04:55:51,718 --> 04:55:53,600 going to go ahead and confirm after a 8062 04:55:53,600 --> 04:55:54,920 long delay we'll get our deployed 8063 04:55:54,920 --> 04:55:57,080 contract here we have all this stuff we 8064 04:55:57,080 --> 04:55:58,520 can call get price and we can see the 8065 04:55:58,520 --> 04:56:00,798 value of ethereum right now is this with 8066 04:56:00,798 --> 04:56:02,638 18 decimal places which is awesome so 8067 04:56:02,638 --> 04:56:04,480 it's around 8068 04:56:04,480 --> 04:56:07,200 $1,896 so if I were to try to fund this 8069 04:56:07,200 --> 04:56:09,718 with maybe 100 way I know for a fact 8070 04:56:09,718 --> 04:56:11,878 that way isn't going to be enough so if 8071 04:56:11,878 --> 04:56:13,680 we call this fun function we're actually 8072 04:56:13,680 --> 04:56:16,440 going to get this gas estimation failed 8073 04:56:16,440 --> 04:56:18,040 gas estimation error failed with the 8074 04:56:18,040 --> 04:56:20,440 following message blah blah blah error 8075 04:56:20,440 --> 04:56:23,040 execution reverted didn't send enough 8076 04:56:23,040 --> 04:56:25,760 eth which is actually exactly the error 8077 04:56:25,760 --> 04:56:28,480 message that we have here it's exactly 8078 04:56:28,480 --> 04:56:29,958 what our error message is here in our 8079 04:56:29,958 --> 04:56:31,878 require didn't send enough eth so if we 8080 04:56:31,878 --> 04:56:33,520 try to fund it we're going to get didn't 8081 04:56:33,520 --> 04:56:36,080 send enough eth and this gas estimation 8082 04:56:36,080 --> 04:56:38,240 failed is a pretty common error that 8083 04:56:38,240 --> 04:56:41,360 you'll see in remix and solidity and evm 8084 04:56:41,360 --> 04:56:43,200 in general it's kind of just the boiler 8085 04:56:43,200 --> 04:56:45,600 plane answer for something went wrong 8086 04:56:45,600 --> 04:56:47,320 luckily we got the actual error message 8087 04:56:47,320 --> 04:56:49,280 here so we could debug here's what's 8088 04:56:49,280 --> 04:56:50,958 actually going on now you see here we 8089 04:56:50,958 --> 04:56:52,840 could still send this transaction like I 8090 04:56:52,840 --> 04:56:55,400 said we would actually spend gas to send 8091 04:56:55,400 --> 04:56:57,480 a failed transaction and this isn't 8092 04:56:57,480 --> 04:56:58,520 something that we want to do so we're 8093 04:56:58,520 --> 04:57:01,080 going to go ahead and cancel however if 8094 04:57:01,080 --> 04:57:05,240 we did send maybe 1 1 2 3 4 5 6 7 8 1 2 8095 04:57:05,240 --> 04:57:08,760 3 4 5 6 7 8 9 so if we go to Google 8096 04:57:08,760 --> 04:57:10,600 actually we can even see like an e to 8097 04:57:10,600 --> 04:57:13,120 dollar conversion rate so if we sent 8098 04:57:13,120 --> 04:57:17,040 0.01 0.01 eth right now is worth $8 8099 04:57:17,040 --> 04:57:18,520 dollar it might be different depending 8100 04:57:18,520 --> 04:57:20,680 on when you actually do it so we send 8101 04:57:20,680 --> 04:57:24,160 0.01 e in our remix and we can do that 8102 04:57:24,160 --> 04:57:27,798 by doing 1 1 2 3 4 5 6 7 8 9 10 1 2 3 4 8103 04:57:27,798 --> 04:57:32,840 5 6 so it's 1 e16 and we hit fund now we 8104 04:57:32,840 --> 04:57:34,440 actually see metam Mass pops up we don't 8105 04:57:34,440 --> 04:57:36,520 get that gas estimation error we can go 8106 04:57:36,520 --> 04:57:38,200 ahead and confirm and we can see that 8107 04:57:38,200 --> 04:57:40,600 our function is working as expected 8108 04:57:40,600 --> 04:57:42,200 which is great it's reverting 8109 04:57:42,200 --> 04:57:44,958 transactions that have less than $5 and 8110 04:57:44,958 --> 04:57:46,440 it's letting transactions go through 8111 04:57:46,440 --> 04:57:48,958 that have at least $5 awesome and if we 8112 04:57:48,958 --> 04:57:50,760 select minimum USD we can obviously see 8113 04:57:50,760 --> 04:57:53,280 that here and we can see we have 0.01 8114 04:57:53,280 --> 04:57:56,558 eth here fantastic and since we don't 8115 04:57:56,558 --> 04:57:57,878 have a withdrawal function here we 8116 04:57:57,878 --> 04:57:59,200 actually can't pull it out which is 8117 04:57:59,200 --> 04:58:01,240 another reason why I say hey maybe don't 8118 04:58:01,240 --> 04:58:02,718 test this right now but great we've 8119 04:58:02,718 --> 04:58:04,000 confirmed our get conversion rate is 8120 04:58:04,000 --> 04:58:07,718 working so let's move on 8121 04:58:09,120 --> 04:58:11,360 fantastic so what's the next thing that 8122 04:58:11,360 --> 04:58:13,480 we should do in this contract well we 8123 04:58:13,480 --> 04:58:15,200 probably want to keep track of the users 8124 04:58:15,200 --> 04:58:17,320 who send us money in this contract so we 8125 04:58:17,320 --> 04:58:18,878 can keep an array of addresses called 8126 04:58:18,878 --> 04:58:20,840 funders and keep updating that depending 8127 04:58:20,840 --> 04:58:23,360 on who actually sends US money so up at 8128 04:58:23,360 --> 04:58:25,638 the top we'll make an address array or 8129 04:58:25,638 --> 04:58:27,958 an address list we'll make it public and 8130 04:58:27,958 --> 04:58:30,360 we'll call it funders and anytime 8131 04:58:30,360 --> 04:58:32,200 somebody sends US money we'll say 8132 04:58:32,200 --> 04:58:36,200 funders do push message. sender like 8133 04:58:36,200 --> 04:58:39,000 message. Val message. sender is another 8134 04:58:39,000 --> 04:58:40,760 Global variable we can use in solidity 8135 04:58:40,760 --> 04:58:42,440 which refers to whoever called this 8136 04:58:42,440 --> 04:58:44,400 function the sender of the transaction 8137 04:58:44,400 --> 04:58:46,718 to this contract so if we're on sapoia 8138 04:58:46,718 --> 04:58:48,240 and we initialize a transaction for a 8139 04:58:48,240 --> 04:58:50,280 metamask the message. sender is going to 8140 04:58:50,280 --> 04:58:52,200 be this account right here and then 8141 04:58:52,200 --> 04:58:54,798 maybe we want to even make a mapping of 8142 04:58:54,798 --> 04:58:56,878 addresses to to make it easier to look 8143 04:58:56,878 --> 04:58:59,480 up how much money each funer has sent so 8144 04:58:59,480 --> 04:59:03,000 we'll make a mapping of an address to a 8145 04:59:03,000 --> 04:59:06,718 u into 256 we'll call it public address 8146 04:59:06,718 --> 04:59:09,718 to amount funded now something that's 8147 04:59:09,718 --> 04:59:11,760 newer in solidity is you can actually 8148 04:59:11,760 --> 04:59:13,840 name the types in your mapping so you 8149 04:59:13,840 --> 04:59:17,680 could say address fun mapped to un 56 8150 04:59:17,680 --> 04:59:19,840 amount funded usually this is what's 8151 04:59:19,840 --> 04:59:21,638 known as a little syntactic sugar it's 8152 04:59:21,638 --> 04:59:24,040 just to make it easier to read what this 8153 04:59:24,040 --> 04:59:27,000 mapping is Right fun to amount funded 8154 04:59:27,000 --> 04:59:28,480 and then our variable name is very 8155 04:59:28,480 --> 04:59:30,760 explicit address to amount funded now if 8156 04:59:30,760 --> 04:59:32,160 somebody funds our contract we'll of 8157 04:59:32,160 --> 04:59:34,120 course do address to amount funded the 8158 04:59:34,120 --> 04:59:37,638 message. senders address plus equals 8159 04:59:37,638 --> 04:59:39,480 whatever they previously have funded 8160 04:59:39,480 --> 04:59:41,680 Plus message. value whatever they're 8161 04:59:41,680 --> 04:59:43,520 additionally adding all right great and 8162 04:59:43,520 --> 04:59:45,080 now we have a way for us to keep track 8163 04:59:45,080 --> 04:59:47,400 of funders sending money to our contract 8164 04:59:47,400 --> 04:59:49,480 and have an easy way with a mapping to 8165 04:59:49,480 --> 04:59:52,878 look up how much they've spent in 8166 04:59:54,000 --> 04:59:56,440 total now I know we've gone over a lot 8167 04:59:56,440 --> 04:59:58,120 of advanced solidity here so let's do a 8168 04:59:58,120 --> 04:59:59,760 quick refresher of what we've learned so 8169 04:59:59,760 --> 05:00:01,958 far whenever we interact with a contract 8170 05:00:01,958 --> 05:00:04,638 we always need the address and the ABI 8171 05:00:04,638 --> 05:00:06,558 compiling an interface allows us to get 8172 05:00:06,558 --> 05:00:09,080 that ABI very easily for us to interact 8173 05:00:09,080 --> 05:00:10,840 with another contract when we combine 8174 05:00:10,840 --> 05:00:12,440 the contract address with the interface 8175 05:00:12,440 --> 05:00:14,440 we can easily call the functions on that 8176 05:00:14,440 --> 05:00:16,360 contract chain link price feeds are an 8177 05:00:16,360 --> 05:00:18,840 easy way to get data especially pricing 8178 05:00:18,840 --> 05:00:20,920 data from The Real World into our smart 8179 05:00:20,920 --> 05:00:22,680 contracts when working with math in 8180 05:00:22,680 --> 05:00:25,120 solidity and the evm in general decimals 8181 05:00:25,120 --> 05:00:26,718 don't work so we need to always make 8182 05:00:26,718 --> 05:00:28,080 sure we're using the correct number of 8183 05:00:28,080 --> 05:00:29,718 units whenever we interact with our 8184 05:00:29,718 --> 05:00:32,440 contracts message. value and message. 8185 05:00:32,440 --> 05:00:34,558 sender are known as globally available 8186 05:00:34,558 --> 05:00:36,638 units in solidity and they refer to the 8187 05:00:36,638 --> 05:00:38,920 send a of a message of the current call 8188 05:00:38,920 --> 05:00:41,040 or the number of way sent with a message 8189 05:00:41,040 --> 05:00:42,920 or transaction there's a whole bunch of 8190 05:00:42,920 --> 05:00:44,320 these and you can view them all in the 8191 05:00:44,320 --> 05:00:46,760 solidity 8192 05:00:48,280 --> 05:00:49,958 documentation all right great so we've 8193 05:00:49,958 --> 05:00:51,240 got a way to actually get this pricing 8194 05:00:51,240 --> 05:00:53,240 information pretty easily however our 8195 05:00:53,240 --> 05:00:54,600 code is getting a little bit cluttered 8196 05:00:54,600 --> 05:00:56,000 with these get price and G conversion 8197 05:00:56,000 --> 05:00:57,680 rate you'd think that these are 8198 05:00:57,680 --> 05:00:59,240 functions that would be reused pretty 8199 05:00:59,240 --> 05:01:00,878 often anyways for anybody looking to 8200 05:01:00,878 --> 05:01:03,080 work with chain link price feeds so is 8201 05:01:03,080 --> 05:01:04,600 there an easier way for us to work with 8202 05:01:04,600 --> 05:01:06,240 this pricing information maybe doing 8203 05:01:06,240 --> 05:01:07,718 some math like this is pretty common and 8204 05:01:07,718 --> 05:01:09,440 we'd want other contracts to be able to 8205 05:01:09,440 --> 05:01:12,040 import this conversion functionality and 8206 05:01:12,040 --> 05:01:13,240 a way that we can do that is actually 8207 05:01:13,240 --> 05:01:15,080 creating something called a library 8208 05:01:15,080 --> 05:01:16,440 there's a site out there called solidity 8209 05:01:16,440 --> 05:01:19,080 by example which has great examples of 8210 05:01:19,080 --> 05:01:21,080 using libraries and what they work with 8211 05:01:21,080 --> 05:01:22,760 libraries are similar to contracts but 8212 05:01:22,760 --> 05:01:24,280 you can't declare any state variables 8213 05:01:24,280 --> 05:01:26,320 and you can't send ether a library is 8214 05:01:26,320 --> 05:01:27,878 embedded into the contract if all 8215 05:01:27,878 --> 05:01:29,958 Library functions are internal otherwise 8216 05:01:29,958 --> 05:01:31,638 the library must be deployed and then 8217 05:01:31,638 --> 05:01:33,600 linked before the contract is deployed 8218 05:01:33,600 --> 05:01:34,798 that's a little bit confusing don't 8219 05:01:34,798 --> 05:01:36,280 worry too much about that right now 8220 05:01:36,280 --> 05:01:37,958 using libraries can actually add 8221 05:01:37,958 --> 05:01:40,000 functionality to different values and 8222 05:01:40,000 --> 05:01:42,280 what do I mean by that well I mean we 8223 05:01:42,280 --> 05:01:44,320 can have our get conversion rate 8224 05:01:44,320 --> 05:01:47,440 function be a function of any value of 8225 05:01:47,440 --> 05:01:49,878 type you 256 means we could take this 8226 05:01:49,878 --> 05:01:51,120 get conversion rate and do something 8227 05:01:51,120 --> 05:01:54,480 like message. value. getet conversion 8228 05:01:54,480 --> 05:01:56,480 rate so we can create our own custom 8229 05:01:56,480 --> 05:01:58,558 function with any type we could work 8230 05:01:58,558 --> 05:02:00,558 with get conversion rate as if message. 8231 05:02:00,558 --> 05:02:02,400 Val was a class or an object or a 8232 05:02:02,400 --> 05:02:04,400 contract that we actually created to do 8233 05:02:04,400 --> 05:02:06,320 this let's go back to our files create a 8234 05:02:06,320 --> 05:02:08,680 new one create a new one called price 8235 05:02:08,680 --> 05:02:10,280 converter 8236 05:02:10,280 --> 05:02:13,320 soul and this is going to be a library a 8237 05:02:13,320 --> 05:02:15,440 price converter Library so how do we 8238 05:02:15,440 --> 05:02:17,320 create a library and what is a library 8239 05:02:17,320 --> 05:02:18,718 well a library is going to be very 8240 05:02:18,718 --> 05:02:20,558 similar to a contract we're going to 8241 05:02:20,558 --> 05:02:22,440 start of course with spdx license 8242 05:02:22,440 --> 05:02:24,760 identifier we're going to do pragma 8243 05:02:24,760 --> 05:02:28,000 solidity and we'll give it a version of 8244 05:02:28,000 --> 05:02:30,760 0.818 the little carrot and instead of 8245 05:02:30,760 --> 05:02:32,400 typing contract we're actually going to 8246 05:02:32,400 --> 05:02:34,558 type library for the name of the library 8247 05:02:34,558 --> 05:02:35,760 and we're going to call this Library 8248 05:02:35,760 --> 05:02:39,120 price converter so libraries can't have 8249 05:02:39,120 --> 05:02:40,840 any state variabl and all the functions 8250 05:02:40,840 --> 05:02:42,638 have to be marked internal so what we're 8251 05:02:42,638 --> 05:02:44,000 going to do is we're going to go back to 8252 05:02:44,000 --> 05:02:46,480 fundme doso zoom out a little bit we're 8253 05:02:46,480 --> 05:02:48,320 going to grab get price get conversion 8254 05:02:48,320 --> 05:02:51,200 rate and get version delete them well I 8255 05:02:51,200 --> 05:02:53,000 hit copy first go back to price 8256 05:02:53,000 --> 05:02:55,120 converter paste them in here and work 8257 05:02:55,120 --> 05:02:57,040 with them in here of course we're going 8258 05:02:57,040 --> 05:02:59,040 to need the aggregator V3 interface so 8259 05:02:59,040 --> 05:03:00,840 we're going to go back to our funme 8260 05:03:00,840 --> 05:03:03,120 we're going to copy this named import 8261 05:03:03,120 --> 05:03:05,558 from aggregator V3 interface paste it in 8262 05:03:05,558 --> 05:03:07,638 at the top here hit command s and we're 8263 05:03:07,638 --> 05:03:09,240 going to go ahead and compile this 8264 05:03:09,240 --> 05:03:11,280 successfully fundme is no longer going 8265 05:03:11,280 --> 05:03:12,558 to compile but we're going to fix that 8266 05:03:12,558 --> 05:03:14,240 in a little bit now the first thing that 8267 05:03:14,240 --> 05:03:15,280 we're going to need to do in here is 8268 05:03:15,280 --> 05:03:16,558 make these all internal so we're going 8269 05:03:16,558 --> 05:03:19,120 to say internal like this we do internal 8270 05:03:19,120 --> 05:03:21,320 get conversion rate and internal get 8271 05:03:21,320 --> 05:03:23,080 version now that we have our price 8272 05:03:23,080 --> 05:03:25,000 converter Library we can actually import 8273 05:03:25,000 --> 05:03:27,600 it back in our fundme and attach it to a 8274 05:03:27,600 --> 05:03:29,840 un 256 and let's actually delete this 8275 05:03:29,840 --> 05:03:32,840 aggregator V3 interface line for now and 8276 05:03:32,840 --> 05:03:36,520 we'll do import price converter 8277 05:03:36,520 --> 05:03:40,480 fromprice converter do soul and now to 8278 05:03:40,480 --> 05:03:42,280 attach the functions in our price 8279 05:03:42,280 --> 05:03:45,360 converter library to All U 256s we'll 8280 05:03:45,360 --> 05:03:50,558 say using price converter or uint 8281 05:03:50,558 --> 05:03:53,000 256 of course if we compile our fundme 8282 05:03:53,000 --> 05:03:54,240 we're going to get an issue because it 8283 05:03:54,240 --> 05:03:55,520 doesn't really know what get conversion 8284 05:03:55,520 --> 05:03:57,240 rate is so for now let's actually just 8285 05:03:57,240 --> 05:03:58,878 comment out this line I'm going to 8286 05:03:58,878 --> 05:04:01,680 remove these comments up here as well so 8287 05:04:01,680 --> 05:04:03,000 what we can do now though is we can do 8288 05:04:03,000 --> 05:04:06,798 message. value. getet conversion rate 8289 05:04:06,798 --> 05:04:09,760 get conversion rate and in your library 8290 05:04:09,760 --> 05:04:11,400 whenever you're working with a library 8291 05:04:11,400 --> 05:04:13,558 the first input variable for a library 8292 05:04:13,558 --> 05:04:15,240 is going to be the type that you're 8293 05:04:15,240 --> 05:04:18,240 using with the library so message. value 8294 05:04:18,240 --> 05:04:21,040 is of type un 256 so this gets passed 8295 05:04:21,040 --> 05:04:23,000 inside of get conversion rate as the 8296 05:04:23,000 --> 05:04:26,440 first variable into U 256 e amount even 8297 05:04:26,440 --> 05:04:28,360 though we don't pass any variables 8298 05:04:28,360 --> 05:04:30,600 inside of these parentheses here for get 8299 05:04:30,600 --> 05:04:32,400 price and get version we don't really 8300 05:04:32,400 --> 05:04:34,718 care to have an input parameter at all 8301 05:04:34,718 --> 05:04:36,878 so it'll pass it in but not do anything 8302 05:04:36,878 --> 05:04:39,200 so now instead of require get conversion 8303 05:04:39,200 --> 05:04:42,160 rate of message value we can actually do 8304 05:04:42,160 --> 05:04:44,120 let's uncomment this line now and let's 8305 05:04:44,120 --> 05:04:47,160 delete this line we can actually do 8306 05:04:47,160 --> 05:04:51,680 message. value. getet conversion rate 8307 05:04:51,680 --> 05:04:54,520 conversion rate and now if we compile 8308 05:04:54,520 --> 05:04:55,878 this this is going to compile 8309 05:04:55,878 --> 05:04:57,798 successfully this works because we're 8310 05:04:57,798 --> 05:05:00,000 attaching the price converter library to 8311 05:05:00,000 --> 05:05:03,958 all un 256s so now all un 256s have 8312 05:05:03,958 --> 05:05:06,000 access to this get conversion rate 8313 05:05:06,000 --> 05:05:09,760 function and since message. Val is a un 8314 05:05:09,760 --> 05:05:12,680 six it can call. get conversion rate and 8315 05:05:12,680 --> 05:05:15,718 it'll pass itself so that message. value 8316 05:05:15,718 --> 05:05:17,718 as the first input parameter to the 8317 05:05:17,718 --> 05:05:19,480 function here if we wanted another 8318 05:05:19,480 --> 05:05:22,480 variable in here like U into 6 something 8319 05:05:22,480 --> 05:05:24,480 else that would be the first parameter 8320 05:05:24,480 --> 05:05:26,320 inside these parentheses so maybe like 1 8321 05:05:26,320 --> 05:05:28,440 2 3 or something right this one 2 3 8322 05:05:28,440 --> 05:05:31,120 would be the something else but message. 8323 05:05:31,120 --> 05:05:33,360 value would still be the initial 8324 05:05:33,360 --> 05:05:35,320 parameter which in this example would be 8325 05:05:35,320 --> 05:05:37,200 eth amount so let's go ahead and undo 8326 05:05:37,200 --> 05:05:39,840 that and undo that but all right great 8327 05:05:39,840 --> 05:05:41,400 we've moved a lot of the math into our 8328 05:05:41,400 --> 05:05:45,360 own Library congratulations nice 8329 05:05:46,680 --> 05:05:48,958 work one of the most common libraries 8330 05:05:48,958 --> 05:05:50,920 that was used for a long time was this 8331 05:05:50,920 --> 05:05:53,558 Library called safemath dossou and in 8332 05:05:53,558 --> 05:05:55,200 your solidity Journeys you'll probably 8333 05:05:55,200 --> 05:05:57,120 see it pop up from time to time now 8334 05:05:57,120 --> 05:05:58,200 we're going to go off on a little bit of 8335 05:05:58,200 --> 05:06:00,040 a tangent here about safe math and the 8336 05:06:00,040 --> 05:06:02,520 library safe math and this is an excerpt 8337 05:06:02,520 --> 05:06:04,320 from my course last year so you might 8338 05:06:04,320 --> 05:06:05,760 see stuff like rink B and some other 8339 05:06:05,760 --> 05:06:07,680 stuff but just focus on the safe math 8340 05:06:07,680 --> 05:06:09,638 stuff just know when we refer to the 8341 05:06:09,638 --> 05:06:10,878 JavaScript virtual machine that's 8342 05:06:10,878 --> 05:06:13,200 talking about the remix virtual 8343 05:06:13,200 --> 05:06:15,798 machine one of the most common libraries 8344 05:06:15,798 --> 05:06:18,200 that was used for the longest time was 8345 05:06:18,200 --> 05:06:21,280 this Library called safemath dossou and 8346 05:06:21,280 --> 05:06:22,638 you'll probably see it a lot of 8347 05:06:22,638 --> 05:06:24,240 different places we're going to go off 8348 05:06:24,240 --> 05:06:26,200 on a quick little tangent here and teach 8349 05:06:26,200 --> 05:06:28,040 you about safe math so let's close 8350 05:06:28,040 --> 05:06:30,240 fundme and close price converter and 8351 05:06:30,240 --> 05:06:34,480 let's create a new file called safe math 8352 05:06:34,480 --> 05:06:37,000 tester. soul and let's start with some 8353 05:06:37,000 --> 05:06:39,280 basic stuff in here safe math was all 8354 05:06:39,280 --> 05:06:41,958 over over the place before version 0.8 8355 05:06:41,958 --> 05:06:44,440 of solidity and now it's almost in no 8356 05:06:44,440 --> 05:06:46,600 contracts what happened why is safe 8357 05:06:46,600 --> 05:06:48,878 maath no longer used as much well let's 8358 05:06:48,878 --> 05:06:51,440 create a sample contract this is a 8359 05:06:51,440 --> 05:06:52,958 section that you don't have to follow 8360 05:06:52,958 --> 05:06:54,400 along if you don't want to code along 8361 05:06:54,400 --> 05:06:56,480 with me but if you want to you 8362 05:06:56,480 --> 05:06:58,240 absolutely still can this is going to be 8363 05:06:58,240 --> 05:07:00,120 a contract we are going to deploy on a 8364 05:07:00,120 --> 05:07:02,240 JavaScript virtual machine uh we can use 8365 05:07:02,240 --> 05:07:04,240 any version of solidity before version 8366 05:07:04,240 --> 05:07:07,360 0.8 of solidity so for example we'll use 8367 05:07:07,360 --> 05:07:11,440 pragma carot 0.6 6.0 and we'll create 8368 05:07:11,440 --> 05:07:16,558 contract safe math tester. Soul now if I 8369 05:07:16,558 --> 05:07:20,320 create a un 8 I set it to 8370 05:07:20,320 --> 05:07:23,718 public big number and I set this to 8371 05:07:23,718 --> 05:07:27,280 255 oops safe math tester let's go ahead 8372 05:07:27,280 --> 05:07:31,600 and compile safe math tester with 8373 05:07:31,600 --> 05:07:36,040 0.67 fragma solidity the maximum size of 8374 05:07:36,040 --> 05:07:39,360 a u 8 is going to be 255 this is going 8375 05:07:39,360 --> 05:07:41,600 to be the biggest number that we can fit 8376 05:07:41,600 --> 05:07:44,320 in an U 8 and if I were to deploy this 8377 05:07:44,320 --> 05:07:46,840 to a JavaScript VM or even a test 8378 05:07:46,840 --> 05:07:49,320 Network save math tester let's go ahead 8379 05:07:49,320 --> 05:07:50,320 and deploy 8380 05:07:50,320 --> 05:07:53,280 it if I hit big number we're going to 8381 05:07:53,280 --> 05:07:54,400 get 8382 05:07:54,400 --> 05:07:57,200 255 well what happens if I create a 8383 05:07:57,200 --> 05:08:01,958 function called add that sets big number 8384 05:08:01,958 --> 05:08:06,000 equal to big number + one let's save 8385 05:08:06,000 --> 05:08:09,558 that delete that old contract and deploy 8386 05:08:09,558 --> 05:08:12,280 right now big number is 255 what happens 8387 05:08:12,280 --> 05:08:16,240 when we add one to big number when 255 8388 05:08:16,240 --> 05:08:19,638 is the max size a uint 8 can be well 8389 05:08:19,638 --> 05:08:22,000 let's hit add now let's check what big 8390 05:08:22,000 --> 05:08:26,120 number is big number gets reset to zero 8391 05:08:26,120 --> 05:08:28,718 so what's going on well prior to version 8392 05:08:28,718 --> 05:08:31,440 0.8 of solidity unside integers and 8393 05:08:31,440 --> 05:08:34,120 integers ran on this concept of being 8394 05:08:34,120 --> 05:08:37,200 unchecked which means that if you passed 8395 05:08:37,200 --> 05:08:39,280 the upper limit of a number it would 8396 05:08:39,280 --> 05:08:41,360 just just wrap around and start back 8397 05:08:41,360 --> 05:08:43,200 from the lowest number it could be so if 8398 05:08:43,200 --> 05:08:45,520 I call add a whole bunch more times and 8399 05:08:45,520 --> 05:08:47,520 hit big number now it's eight if I were 8400 05:08:47,520 --> 05:08:49,878 to hit this add button a ton more times 8401 05:08:49,878 --> 05:08:52,600 and get it back to 255 it would then 8402 05:08:52,600 --> 05:08:55,080 continue to wrap over to zero so one of 8403 05:08:55,080 --> 05:08:57,200 the most popular libraries that was out 8404 05:08:57,200 --> 05:08:59,840 there was this safe math Library which 8405 05:08:59,840 --> 05:09:02,400 would basically check to make sure that 8406 05:09:02,400 --> 05:09:05,080 you weren't wrapping around a un 256 or 8407 05:09:05,080 --> 05:09:07,558 an in 256 basically it was a way to say 8408 05:09:07,558 --> 05:09:09,600 hey you've reached the max this number 8409 05:09:09,600 --> 05:09:11,480 can be and now your transaction is going 8410 05:09:11,480 --> 05:09:14,760 to fail if we switch this to 0.8 of 8411 05:09:14,760 --> 05:09:17,798 solidity delete the old contract go 8412 05:09:17,798 --> 05:09:19,718 switch this to 8413 05:09:19,718 --> 05:09:22,840 0.8 we'll go ahead and compile it and 8414 05:09:22,840 --> 05:09:25,200 now we deploy this to JavaScript 8415 05:09:25,200 --> 05:09:29,280 VM if I hit big number we get 255 but if 8416 05:09:29,280 --> 05:09:32,400 we hit add it actually fails and we 8417 05:09:32,400 --> 05:09:36,040 still get 255 in version 0.8 of solidity 8418 05:09:36,040 --> 05:09:37,680 they added this bit where it 8419 05:09:37,680 --> 05:09:39,400 automatically checks to make sure if 8420 05:09:39,400 --> 05:09:40,600 you're going to do what's called 8421 05:09:40,600 --> 05:09:43,200 overflow or underflow on a variable we 8422 05:09:43,200 --> 05:09:44,878 can actually revert back to the 8423 05:09:44,878 --> 05:09:47,718 unchecked version by using an unchecked 8424 05:09:47,718 --> 05:09:49,958 keyword so if we wrap this big number 8425 05:09:49,958 --> 05:09:52,240 equals big number + one in this 8426 05:09:52,240 --> 05:09:54,798 unchecked bracket let's delete our old 8427 05:09:54,798 --> 05:09:57,520 contract we'll compile we'll 8428 05:09:57,520 --> 05:10:00,920 redeploy we hit big numbers 255 now we 8429 05:10:00,920 --> 05:10:02,920 hit add we hit big number again it 8430 05:10:02,920 --> 05:10:06,040 reverted back to zero so that's a little 8431 05:10:06,040 --> 05:10:08,280 bit more about safe math checked and 8432 05:10:08,280 --> 05:10:12,320 unchecked so version 0.76 and below this 8433 05:10:12,320 --> 05:10:14,520 code that you see in front of you is 8434 05:10:14,520 --> 05:10:17,760 going to be the exact same as this code 8435 05:10:17,760 --> 05:10:20,240 in 0.8 and above with this unchecked 8436 05:10:20,240 --> 05:10:22,520 keyword now you might be thinking in 8437 05:10:22,520 --> 05:10:25,040 newer versions of solidity why would I 8438 05:10:25,040 --> 05:10:27,718 use this unchecked keyword well you'll 8439 05:10:27,718 --> 05:10:29,958 find out later that this unchecked 8440 05:10:29,958 --> 05:10:32,280 keyword makes your code a little bit 8441 05:10:32,280 --> 05:10:34,798 more gas effici so if you're absolutely 8442 05:10:34,798 --> 05:10:36,400 positive that your math is never going 8443 05:10:36,400 --> 05:10:38,400 to reach the top or bottom limits of a 8444 05:10:38,400 --> 05:10:40,440 number then might make sense for you to 8445 05:10:40,440 --> 05:10:42,360 use the unchecked keyword let's head 8446 05:10:42,360 --> 05:10:44,638 back over to our fundme contract where 8447 05:10:44,638 --> 05:10:46,638 we are now using the price converter 8448 05:10:46,638 --> 05:10:49,480 library that we just 8449 05:10:50,680 --> 05:10:52,520 created awesome we have a lot of the 8450 05:10:52,520 --> 05:10:53,878 basics of the math that we need in our 8451 05:10:53,878 --> 05:10:55,718 fundme contract it's all right so this 8452 05:10:55,718 --> 05:10:57,280 is great people can actually send us 8453 05:10:57,280 --> 05:10:58,600 money and we're going to keep track of 8454 05:10:58,600 --> 05:11:00,718 them as well which is fantastic so the 8455 05:11:00,718 --> 05:11:01,878 next thing obviously that we're going to 8456 05:11:01,878 --> 05:11:03,160 want to do is we're going to want to be 8457 05:11:03,160 --> 05:11:06,120 able to withdraw that money out so now 8458 05:11:06,120 --> 05:11:07,718 let's go ahead and Implement our 8459 05:11:07,718 --> 05:11:09,840 withdraw function when we withdraw all 8460 05:11:09,840 --> 05:11:10,958 the money we're probably going to want 8461 05:11:10,958 --> 05:11:13,440 to reset all the mappings back down to 8462 05:11:13,440 --> 05:11:15,360 zero to show that hey we've withdrawn 8463 05:11:15,360 --> 05:11:17,638 all the money and there's nobody left to 8464 05:11:17,638 --> 05:11:18,798 do this we're going to use something 8465 05:11:18,798 --> 05:11:21,798 called a for Loop a for Loop is a way to 8466 05:11:21,798 --> 05:11:23,878 Loop through a list of something or to 8467 05:11:23,878 --> 05:11:25,798 do something in a repeated amount of 8468 05:11:25,798 --> 05:11:27,680 time if you're familiar with other 8469 05:11:27,680 --> 05:11:29,320 programming languages it's the exact 8470 05:11:29,320 --> 05:11:31,360 same concept we wanted to get all the 8471 05:11:31,360 --> 05:11:33,558 elements in this list for example which 8472 05:11:33,558 --> 05:11:36,000 where one is at the zeroth index two is 8473 05:11:36,000 --> 05:11:37,920 at the first index three is at the 8474 05:11:37,920 --> 05:11:39,360 second index and four is at the the 8475 05:11:39,360 --> 05:11:41,200 third index which I know is a little bit 8476 05:11:41,200 --> 05:11:43,160 confusing these are the different these 8477 05:11:43,160 --> 05:11:46,760 are the indexes these are the elements 8478 05:11:46,760 --> 05:11:48,840 we would Loop 0 through three to get all 8479 05:11:48,840 --> 05:11:50,600 the elements out of this array to do 8480 05:11:50,600 --> 05:11:52,120 this loop we're going to use the four 8481 05:11:52,120 --> 05:11:54,638 keyword we're going to say four put some 8482 05:11:54,638 --> 05:11:57,080 parentheses and in a for Loop we can add 8483 05:11:57,080 --> 05:11:58,638 a couple things and by the way this is a 8484 05:11:58,638 --> 05:12:00,680 way to do comments inside of a line and 8485 05:12:00,680 --> 05:12:03,200 solidity you do a back slashstar star 8486 05:12:03,200 --> 05:12:04,680 back slash and now everything in here is 8487 05:12:04,680 --> 05:12:06,958 a common so in a for Loop you first need 8488 05:12:06,958 --> 05:12:08,920 to give it the starting index then you 8489 05:12:08,920 --> 05:12:11,160 give it the ending index and then you 8490 05:12:11,160 --> 05:12:13,638 can give it the step amount for example 8491 05:12:13,638 --> 05:12:15,280 let's say we want to start on the zeroth 8492 05:12:15,280 --> 05:12:17,040 index we want to go all the way up to 8493 05:12:17,040 --> 05:12:19,080 the 10th index and we want to go by up 8494 05:12:19,080 --> 05:12:23,400 each time we would do 0o 1 2 3 4 Etc 8495 05:12:23,400 --> 05:12:25,200 well let's say we want to start with the 8496 05:12:25,200 --> 05:12:27,520 third index we want to go to the 12th 8497 05:12:27,520 --> 05:12:29,600 index and we want to up by two every 8498 05:12:29,600 --> 05:12:32,480 single time well we would do three five 8499 05:12:32,480 --> 05:12:35,760 7 9 Etc so our starting index is going 8500 05:12:35,760 --> 05:12:39,280 to be a un 256 and we'll call it under 8501 05:12:39,280 --> 05:12:41,040 index and we're going to say we're going 8502 05:12:41,040 --> 05:12:43,040 to start with zero and we're going to 8503 05:12:43,040 --> 05:12:46,958 end once the funer index is less than 8504 05:12:46,958 --> 05:12:50,000 the funders length so I know I said up 8505 05:12:50,000 --> 05:12:52,240 here it's the ending index but instead 8506 05:12:52,240 --> 05:12:55,440 it's a Boolean once the funders index is 8507 05:12:55,440 --> 05:12:58,558 greater than fund. length which is how 8508 05:12:58,558 --> 05:13:00,798 you can get the length of an array then 8509 05:13:00,798 --> 05:13:02,798 we're going to end and then finally 8510 05:13:02,798 --> 05:13:04,760 we're going to say every single time we 8511 05:13:04,760 --> 05:13:06,920 do a loop we're going to say funders 8512 05:13:06,920 --> 05:13:10,440 index equals funders index + 1 now 8513 05:13:10,440 --> 05:13:12,878 there's a shortcut you can do to do some 8514 05:13:12,878 --> 05:13:15,400 variable equals itself + 1 and that's 8515 05:13:15,400 --> 05:13:18,520 just Plus+ this plus plus means every 8516 05:13:18,520 --> 05:13:21,120 time we go through the loop just add one 8517 05:13:21,120 --> 05:13:22,958 and we actually don't need that here and 8518 05:13:22,958 --> 05:13:24,878 then we put these curly braces to say 8519 05:13:24,878 --> 05:13:27,400 okay execute everything inside of this 8520 05:13:27,400 --> 05:13:29,520 Loop here for the duration that we 8521 05:13:29,520 --> 05:13:31,638 specified here and this final piece 8522 05:13:31,638 --> 05:13:33,360 means that every time we run through all 8523 05:13:33,360 --> 05:13:35,480 the code inside of these brackets we're 8524 05:13:35,480 --> 05:13:37,958 going to add one to this funders index 8525 05:13:37,958 --> 05:13:40,480 that's how we go from0 to 1 2 3 4 5 6 7 8526 05:13:40,480 --> 05:13:43,160 Etc to access the zero withth element of 8527 05:13:43,160 --> 05:13:44,840 our funders array we're going to say 8528 05:13:44,840 --> 05:13:48,360 funders of fun index and this is going 8529 05:13:48,360 --> 05:13:50,878 to return an address since it's an array 8530 05:13:50,878 --> 05:13:54,480 of addresses so we'll say address fun 8531 05:13:54,480 --> 05:13:57,320 equals funders of funer index and we 8532 05:13:57,320 --> 05:13:59,520 want to use this to reset our mapping 8533 05:13:59,520 --> 05:14:01,798 address to amount funded so we can say 8534 05:14:01,798 --> 05:14:04,798 address to amount funded at the funer 8535 05:14:04,798 --> 05:14:07,400 address is now equal to zero so we're 8536 05:14:07,400 --> 05:14:09,520 going to reset whatever we add added 8537 05:14:09,520 --> 05:14:11,718 when they funded us down to zero because 8538 05:14:11,718 --> 05:14:14,000 we're withdrawing all the money out and 8539 05:14:14,000 --> 05:14:15,240 additionally how there's a nice little 8540 05:14:15,240 --> 05:14:17,958 shorthand like plus plus down here up 8541 05:14:17,958 --> 05:14:19,638 here in the fund another nice little 8542 05:14:19,638 --> 05:14:22,040 shortcut whenever you want to add 8543 05:14:22,040 --> 05:14:24,718 something to whenever you want to add 8544 05:14:24,718 --> 05:14:26,718 something to something that already 8545 05:14:26,718 --> 05:14:29,360 exists instead of doing something equals 8546 05:14:29,360 --> 05:14:31,400 itself plus the new thing you can just 8547 05:14:31,400 --> 05:14:34,360 do plus equals this means that we're 8548 05:14:34,360 --> 05:14:36,200 going to set address to amount funded of 8549 05:14:36,200 --> 05:14:39,040 message. sender equal to itself Plus 8550 05:14:39,040 --> 05:14:41,160 plus message. Val so let's walk through 8551 05:14:41,160 --> 05:14:42,600 this for Loop a little bit we're going 8552 05:14:42,600 --> 05:14:44,760 to start with the zero withth index 8553 05:14:44,760 --> 05:14:47,160 we're going to get the fun at the zero 8554 05:14:47,160 --> 05:14:49,360 with index in our funer array we're 8555 05:14:49,360 --> 05:14:51,080 going to take that address stick it into 8556 05:14:51,080 --> 05:14:53,320 our mapping and reset the amount that 8557 05:14:53,320 --> 05:14:55,558 they've sent us to zero then we're going 8558 05:14:55,558 --> 05:14:57,798 to do funer Plus+ we're going to check 8559 05:14:57,798 --> 05:15:02,000 to see that funer plus funer index Plus+ 8560 05:15:02,000 --> 05:15:03,878 is less than funders do length obviously 8561 05:15:03,878 --> 05:15:06,638 fun 0 + 1 is going to be one so we're 8562 05:15:06,638 --> 05:15:08,360 going to check if one is less than the 8563 05:15:08,360 --> 05:15:10,000 total amount of fun fers and then we're 8564 05:15:10,000 --> 05:15:11,878 going to get the address of the fun at 8565 05:15:11,878 --> 05:15:14,240 the first index reset them to zero get 8566 05:15:14,240 --> 05:15:15,958 the address at the second index reset 8567 05:15:15,958 --> 05:15:19,160 them to zero third index etc etc until 8568 05:15:19,160 --> 05:15:22,958 we finally reach the index that is equal 8569 05:15:22,958 --> 05:15:25,160 to or greater than the length so if we 8570 05:15:25,160 --> 05:15:27,920 have 10 funders and we reach funer index 8571 05:15:27,920 --> 05:15:32,200 10 the for Loop will exit and be 8572 05:15:33,480 --> 05:15:35,920 done but we still haven't done two 8573 05:15:35,920 --> 05:15:38,440 things we need to reset the array still 8574 05:15:38,440 --> 05:15:39,798 and then we also need to withdraw the 8575 05:15:39,798 --> 05:15:42,120 funds since we've accumulated all this 8576 05:15:42,120 --> 05:15:44,558 message. Val in the fund function to 8577 05:15:44,558 --> 05:15:46,520 reset the funders array we could do the 8578 05:15:46,520 --> 05:15:47,958 same thing we did with the mapping and 8579 05:15:47,958 --> 05:15:50,680 reset each single address at each index 8580 05:15:50,680 --> 05:15:52,760 or we could just create a brand new 8581 05:15:52,760 --> 05:15:54,120 funders array which is what we're going 8582 05:15:54,120 --> 05:15:56,520 to do so to reset the array we're now 8583 05:15:56,520 --> 05:15:59,958 going to say funders equals new address 8584 05:15:59,958 --> 05:16:02,520 array and to start off at a length of 8585 05:16:02,520 --> 05:16:04,958 zero previously we used the new keyword 8586 05:16:04,958 --> 05:16:07,680 to deploy a different contract now we're 8587 05:16:07,680 --> 05:16:10,240 using the new keyword to reset the 8588 05:16:10,240 --> 05:16:13,200 funders array to a brand new blank 8589 05:16:13,200 --> 05:16:14,480 address array this part is a little 8590 05:16:14,480 --> 05:16:16,280 confusing don't let it hold you back and 8591 05:16:16,280 --> 05:16:17,760 lat later in the course why we make the 8592 05:16:17,760 --> 05:16:19,920 choices here that we do so great we've 8593 05:16:19,920 --> 05:16:22,638 gone ahead and reset the array so now 8594 05:16:22,638 --> 05:16:25,000 how do we actually withdraw the funds 8595 05:16:25,000 --> 05:16:26,400 for this section I'm going to go ahead 8596 05:16:26,400 --> 05:16:28,000 and again refer to a previous course 8597 05:16:28,000 --> 05:16:29,440 that it did because the content is 8598 05:16:29,440 --> 05:16:30,958 exactly the same just remember 8599 05:16:30,958 --> 05:16:35,280 JavaScript VM is remix VM 8600 05:16:41,718 --> 05:16:43,520 so great we've gone ahead and reset the 8601 05:16:43,520 --> 05:16:46,200 array but how do we actually now 8602 05:16:46,200 --> 05:16:49,320 withdraw funds from this contract how do 8603 05:16:49,320 --> 05:16:52,680 we send the funds back to whomever is 8604 05:16:52,680 --> 05:16:55,440 calling this now to actually send ether 8605 05:16:55,440 --> 05:16:58,040 or send native blockchain currency there 8606 05:16:58,040 --> 05:17:00,280 are actually three different ways to do 8607 05:17:00,280 --> 05:17:02,878 this we're going to look at all three 8608 05:17:02,878 --> 05:17:04,718 and say what the differences between the 8609 05:17:04,718 --> 05:17:06,120 three of them are the three different 8610 05:17:06,120 --> 05:17:07,840 ways are going to be 8611 05:17:07,840 --> 05:17:12,320 transfer send and call let's go ahead 8612 05:17:12,320 --> 05:17:14,680 and start with transfer since transfer 8613 05:17:14,680 --> 05:17:17,160 is the simplest and at surface level 8614 05:17:17,160 --> 05:17:19,280 makes the most sense to use so if we 8615 05:17:19,280 --> 05:17:22,000 want to transfer the funds to whomever 8616 05:17:22,000 --> 05:17:24,480 is calling this withdraw function we 8617 05:17:24,480 --> 05:17:27,680 would do we would say message. 8618 05:17:27,680 --> 05:17:29,440 sender. 8619 05:17:29,440 --> 05:17:32,080 transfer and then we'd get the balance 8620 05:17:32,080 --> 05:17:36,000 of our contract here by saying 8621 05:17:36,000 --> 05:17:39,120 address this the this keyword word 8622 05:17:39,120 --> 05:17:42,718 refers to this whole contract. balance 8623 05:17:42,718 --> 05:17:44,080 and we can get the native blockchain 8624 05:17:44,080 --> 05:17:45,760 currency or the ethereum currency 8625 05:17:45,760 --> 05:17:47,878 balance of this address like this and we 8626 05:17:47,878 --> 05:17:49,680 can just do that only thing that we need 8627 05:17:49,680 --> 05:17:52,798 to do is we need to cast we need to typ 8628 05:17:52,798 --> 05:17:55,920 cast message. sender from an address 8629 05:17:55,920 --> 05:17:57,798 type to 8630 05:17:57,798 --> 05:18:02,760 a payable address type so message. 8631 05:18:02,760 --> 05:18:06,120 sender is of type 8632 05:18:06,120 --> 05:18:09,760 address whereas payable 8633 05:18:09,760 --> 05:18:13,120 message. sender is of type payable 8634 05:18:13,120 --> 05:18:15,798 address and in solidity in order to send 8635 05:18:15,798 --> 05:18:17,200 the native blockchain token like 8636 05:18:17,200 --> 05:18:19,878 ethereum you can only work with payable 8637 05:18:19,878 --> 05:18:22,080 addresses to do that so we just wrap it 8638 05:18:22,080 --> 05:18:25,120 in this payable typ Caster so this is 8639 05:18:25,120 --> 05:18:27,240 the first way that we actually send 8640 05:18:27,240 --> 05:18:30,480 ethereum or send tokens from different 8641 05:18:30,480 --> 05:18:32,520 contracts to each other we wrap the 8642 05:18:32,520 --> 05:18:34,360 address that we want to send it in in 8643 05:18:34,360 --> 05:18:37,718 this payable keyword we do transfer and 8644 05:18:37,718 --> 05:18:40,120 then we say EX exactly how much we want 8645 05:18:40,120 --> 05:18:42,480 to transfer but there are some issues 8646 05:18:42,480 --> 05:18:45,400 with transfer here we are on solidity by 8647 05:18:45,400 --> 05:18:48,680 example for sending ether which again is 8648 05:18:48,680 --> 05:18:51,718 a fantastic resource to refer to if you 8649 05:18:51,718 --> 05:18:53,798 get lost the method that we just looked 8650 05:18:53,798 --> 05:18:57,798 at was this transfer method now we saw 8651 05:18:57,798 --> 05:19:01,120 way earlier in the course that if I sent 8652 05:19:01,120 --> 05:19:04,080 ethereum from one address to another it 8653 05:19:04,080 --> 05:19:08,920 cost about 2100 gas or 2,100 gas our 8654 05:19:08,920 --> 05:19:13,080 transfer function is capped at 2300 gas 8655 05:19:13,080 --> 05:19:15,400 and if more gas is used it throws an 8656 05:19:15,400 --> 05:19:18,000 error the next one that we're using is 8657 05:19:18,000 --> 05:19:20,718 going to be send which is also capped at 8658 05:19:20,718 --> 05:19:24,240 2300 gas and if it fails it'll return a 8659 05:19:24,240 --> 05:19:26,840 Boolean so with transfer if this line 8660 05:19:26,840 --> 05:19:28,958 fails it'll error and revert the 8661 05:19:28,958 --> 05:19:32,280 transaction with send it won't error 8662 05:19:32,280 --> 05:19:34,798 it'll return a Boolean of whether or not 8663 05:19:34,798 --> 05:19:38,320 it was successful so using send will do 8664 05:19:38,320 --> 05:19:39,160 pay 8665 05:19:39,160 --> 05:19:40,558 message. 8666 05:19:40,558 --> 05:19:43,040 sender. 8667 05:19:43,040 --> 05:19:45,080 send address 8668 05:19:45,080 --> 05:19:48,920 this balance but we don't want to finish 8669 05:19:48,920 --> 05:19:51,600 our call Here If This Were to fail the 8670 05:19:51,600 --> 05:19:54,120 contract wouldn't revert the transaction 8671 05:19:54,120 --> 05:19:56,200 and we just wouldn't get our money sent 8672 05:19:56,200 --> 05:20:00,040 so we want to do Boolean send 8673 05:20:00,040 --> 05:20:04,080 success equals this whole bit here and 8674 05:20:04,080 --> 05:20:08,120 then we want to require send success and 8675 05:20:08,120 --> 05:20:10,558 if this send fails we'll throw an error 8676 05:20:10,558 --> 05:20:13,240 saying send 8677 05:20:13,240 --> 05:20:17,000 failed this way if this fails we will 8678 05:20:17,000 --> 05:20:19,480 still revert by adding our require 8679 05:20:19,480 --> 05:20:21,680 statement here transfer automatically 8680 05:20:21,680 --> 05:20:25,280 reverts if the transfer fails send will 8681 05:20:25,280 --> 05:20:27,400 only revert the transaction if we add 8682 05:20:27,400 --> 05:20:29,760 this required statement here so great 8683 05:20:29,760 --> 05:20:31,798 what's the third way that we can 8684 05:20:31,798 --> 05:20:33,760 actually send ethereum or native 8685 05:20:33,760 --> 05:20:36,000 currency well it's with this call 8686 05:20:36,000 --> 05:20:38,080 command Now call is going to be one of 8687 05:20:38,080 --> 05:20:40,878 the first lower level commands that we 8688 05:20:40,878 --> 05:20:43,200 actually use in our solidity code 8689 05:20:43,200 --> 05:20:45,638 because this call function is actually 8690 05:20:45,638 --> 05:20:48,360 incredibly powerful and we can use it to 8691 05:20:48,360 --> 05:20:51,840 call virtually any function in all of 8692 05:20:51,840 --> 05:20:54,600 ethereum without even having to have the 8693 05:20:54,600 --> 05:20:57,000 ABI we'll learn the advanced ways to use 8694 05:20:57,000 --> 05:20:59,120 this call much later for now we're just 8695 05:20:59,120 --> 05:21:01,000 going to learn how to use it to send 8696 05:21:01,000 --> 05:21:02,878 ethereum or your native blockchain 8697 05:21:02,878 --> 05:21:05,240 currency call is going to look very 8698 05:21:05,240 --> 05:21:07,760 similar to send we're going to do 8699 05:21:07,760 --> 05:21:09,680 payable 8700 05:21:09,680 --> 05:21:11,160 message. 8701 05:21:11,160 --> 05:21:14,840 sender. call and this is where we'll put 8702 05:21:14,840 --> 05:21:17,040 any function information or any 8703 05:21:17,040 --> 05:21:18,760 information about the function we want 8704 05:21:18,760 --> 05:21:20,718 to call on some other contract we 8705 05:21:20,718 --> 05:21:22,600 actually don't want to call a function 8706 05:21:22,600 --> 05:21:24,680 so we're going to leave this blank we 8707 05:21:24,680 --> 05:21:26,320 can show that we're leaving it blank by 8708 05:21:26,320 --> 05:21:28,320 just putting in these two quotes here we 8709 05:21:28,320 --> 05:21:30,878 instead want to use this like a 8710 05:21:30,878 --> 05:21:32,958 transaction and as we saw in our 8711 05:21:32,958 --> 05:21:35,040 deployment there's always this message. 8712 05:21:35,040 --> 05:21:37,240 value bit so we're going to use this 8713 05:21:37,240 --> 05:21:39,480 call function as if it's a regular 8714 05:21:39,480 --> 05:21:41,600 transaction and we can add stuff like 8715 05:21:41,600 --> 05:21:44,718 message. Val so in here we're going to 8716 05:21:44,718 --> 05:21:47,638 add these squiggly brackets and we're 8717 05:21:47,638 --> 05:21:50,080 going to say 8718 05:21:50,080 --> 05:21:51,958 value 8719 05:21:51,958 --> 05:21:53,600 address 8720 05:21:53,600 --> 05:21:55,240 this 8721 05:21:55,240 --> 05:21:58,320 balance this call function returns 8722 05:21:58,320 --> 05:22:00,200 actually two variables and when a 8723 05:22:00,200 --> 05:22:02,718 function returns two variables we can 8724 05:22:02,718 --> 05:22:04,600 show that by placing them into 8725 05:22:04,600 --> 05:22:06,558 parentheses on the left hand side the 8726 05:22:06,558 --> 05:22:08,840 two variables it returns are going to be 8727 05:22:08,840 --> 05:22:12,240 a Boolean that we're going to call call 8728 05:22:12,240 --> 05:22:16,200 success and also a byes object called 8729 05:22:16,200 --> 05:22:19,400 Data returned since call allows us to 8730 05:22:19,400 --> 05:22:21,600 actually call different functions if 8731 05:22:21,600 --> 05:22:24,240 that function returns some data or 8732 05:22:24,240 --> 05:22:26,638 Returns value we're going to save that 8733 05:22:26,638 --> 05:22:29,798 in the data returned variable it also 8734 05:22:29,798 --> 05:22:32,360 returns call success where if the 8735 05:22:32,360 --> 05:22:34,520 function was successfully called this 8736 05:22:34,520 --> 05:22:38,520 will be true if not this will be false 8737 05:22:38,520 --> 05:22:41,878 and since bytes objects are arrays data 8738 05:22:41,878 --> 05:22:44,958 returns needs to be in memory now for 8739 05:22:44,958 --> 05:22:47,280 our code here we're actually not calling 8740 05:22:47,280 --> 05:22:49,360 a function so we don't really care about 8741 05:22:49,360 --> 05:22:52,000 data returned so similar to what we saw 8742 05:22:52,000 --> 05:22:54,320 with the price contract we can just go 8743 05:22:54,320 --> 05:22:56,480 ahead and delete that and leave the 8744 05:22:56,480 --> 05:22:58,920 comma to tell solidity yeah we know this 8745 05:22:58,920 --> 05:23:00,840 function returns two variables but we 8746 05:23:00,840 --> 05:23:03,600 only care about one and then similar to 8747 05:23:03,600 --> 05:23:05,760 the send piece above we're going to do 8748 05:23:05,760 --> 05:23:10,000 require call success call failed meaning 8749 05:23:10,000 --> 05:23:11,920 that we're requiring call success is 8750 05:23:11,920 --> 05:23:14,120 true otherwise we'll revert with an 8751 05:23:14,120 --> 05:23:16,480 error that says call failed now if 8752 05:23:16,480 --> 05:23:17,920 learning the difference between these 8753 05:23:17,920 --> 05:23:19,760 three is a little complicated for you 8754 05:23:19,760 --> 05:23:22,360 right now don't let that slow you down 8755 05:23:22,360 --> 05:23:24,120 feel free to come back to this after 8756 05:23:24,120 --> 05:23:25,878 you've learn more about how some of 8757 05:23:25,878 --> 05:23:27,718 these lower level functions work and a 8758 05:23:27,718 --> 05:23:29,520 little bit more about how Gas Works 8759 05:23:29,520 --> 05:23:32,120 solidity by example does a fantastic job 8760 05:23:32,120 --> 05:23:34,240 though of saying what the differences 8761 05:23:34,240 --> 05:23:36,160 between all three are transfer has a 8762 05:23:36,160 --> 05:23:38,958 maximum of 2300 gas and throws an error 8763 05:23:38,958 --> 05:23:42,160 if it fails send has a maximum of 2300 8764 05:23:42,160 --> 05:23:45,320 gas returns a Boolean if it fails call 8765 05:23:45,320 --> 05:23:48,000 forwards all gas so doesn't have a 8766 05:23:48,000 --> 05:23:51,440 capped gas and similar to send returns a 8767 05:23:51,440 --> 05:23:54,520 Boolean if it is successful or if it 8768 05:23:54,520 --> 05:23:58,080 fails as of recording right now using 8769 05:23:58,080 --> 05:24:01,240 call is the recommended way to actually 8770 05:24:01,240 --> 05:24:04,120 send and receive ethereum or your 8771 05:24:04,120 --> 05:24:06,360 blockchain native token for now if this 8772 05:24:06,360 --> 05:24:08,040 part's a little bit confusing for you 8773 05:24:08,040 --> 05:24:10,280 for now now just look at this and see Ah 8774 05:24:10,280 --> 05:24:13,240 that's how we send and transfer ethereum 8775 05:24:13,240 --> 05:24:15,638 or native blockchain currency tokens and 8776 05:24:15,638 --> 05:24:18,280 I'm going to delete this part for the 8777 05:24:18,280 --> 05:24:20,120 video but but I'll keep those comments 8778 05:24:20,120 --> 05:24:22,240 in the code repository associated with 8779 05:24:22,240 --> 05:24:24,440 this 8780 05:24:25,600 --> 05:24:28,000 course all right great and actually the 8781 05:24:28,000 --> 05:24:29,920 exact same code from that video we're 8782 05:24:29,920 --> 05:24:31,400 going to use for this as well so we're 8783 05:24:31,400 --> 05:24:33,920 going to use this call call success to 8784 05:24:33,920 --> 05:24:36,558 work with sending a balance however 8785 05:24:36,558 --> 05:24:38,638 there's a bit of an issue here right now 8786 05:24:38,638 --> 05:24:41,040 anybody can call this withdraw function 8787 05:24:41,040 --> 05:24:42,680 and take all the money out of this 8788 05:24:42,680 --> 05:24:45,080 contract we don't want that we want 8789 05:24:45,080 --> 05:24:46,920 anyone to be able to fund the contract 8790 05:24:46,920 --> 05:24:48,718 but we don't want anyone to be able to 8791 05:24:48,718 --> 05:24:50,480 withdraw money from the contract we only 8792 05:24:50,480 --> 05:24:52,040 want the owner of the contract to be 8793 05:24:52,040 --> 05:24:54,200 able to withdraw so how do we set this 8794 05:24:54,200 --> 05:24:55,638 contract up so that the withdrawal 8795 05:24:55,638 --> 05:24:57,878 function can only be called by the owner 8796 05:24:57,878 --> 05:24:59,878 of this contract well we want to set 8797 05:24:59,878 --> 05:25:01,558 this contract up so that whenever we 8798 05:25:01,558 --> 05:25:03,200 deploy it whenever we create this 8799 05:25:03,200 --> 05:25:05,798 contract an owner gets assigned to this 8800 05:25:05,798 --> 05:25:07,480 contract we assign some address to being 8801 05:25:07,480 --> 05:25:09,200 the owner and then then we add some 8802 05:25:09,200 --> 05:25:11,040 parameters so that withdraw can only be 8803 05:25:11,040 --> 05:25:13,040 called by that address so what we could 8804 05:25:13,040 --> 05:25:15,200 do is we could set up some function 8805 05:25:15,200 --> 05:25:17,320 called call me WR away and when we 8806 05:25:17,320 --> 05:25:18,920 deploy this contract we would just 8807 05:25:18,920 --> 05:25:20,638 immediately call this call me RightWay 8808 05:25:20,638 --> 05:25:23,000 function which will set us up as the 8809 05:25:23,000 --> 05:25:24,878 owner however that would take two 8810 05:25:24,878 --> 05:25:26,400 transactions and remember we're 8811 05:25:26,400 --> 05:25:27,920 Engineers we want to work incredibly 8812 05:25:27,920 --> 05:25:30,440 hard to be incredibly lazy so instead 8813 05:25:30,440 --> 05:25:31,920 solidity has something called a 8814 05:25:31,920 --> 05:25:33,878 Constructor and if you're familiar with 8815 05:25:33,878 --> 05:25:35,400 other programming languages a 8816 05:25:35,400 --> 05:25:37,920 Constructor is the exact same as really 8817 05:25:37,920 --> 05:25:39,958 every other programming language and the 8818 05:25:39,958 --> 05:25:42,200 Constructor is a keyword and a special 8819 05:25:42,200 --> 05:25:44,638 function in solidity so we can create a 8820 05:25:44,638 --> 05:25:46,280 Constructor function without the 8821 05:25:46,280 --> 05:25:48,280 function keyword we just call it 8822 05:25:48,280 --> 05:25:50,718 structor and we also don't even need the 8823 05:25:50,718 --> 05:25:52,878 public keyword you'll see remix even 8824 05:25:52,878 --> 05:25:55,280 highlights it pink this is going to be 8825 05:25:55,280 --> 05:25:56,520 that function it's going to be a 8826 05:25:56,520 --> 05:25:58,320 function that is immediately called 8827 05:25:58,320 --> 05:26:00,320 whenever you deploy your contract this 8828 05:26:00,320 --> 05:26:01,958 function will be called in the exact 8829 05:26:01,958 --> 05:26:05,280 same transaction that is used to deploy 8830 05:26:05,280 --> 05:26:07,280 your contract for example if I were to 8831 05:26:07,280 --> 05:26:09,520 take this minimum USD added in our 8832 05:26:09,520 --> 05:26:12,760 Constructor and say minimum USD equals 2 8833 05:26:12,760 --> 05:26:14,798 this minimum USD would immediately get 8834 05:26:14,798 --> 05:26:17,160 updated to two right after this contract 8835 05:26:17,160 --> 05:26:18,558 is deployed in that exact same 8836 05:26:18,558 --> 05:26:20,240 transaction since we want this 8837 05:26:20,240 --> 05:26:22,160 withdrawal function to only to be able 8838 05:26:22,160 --> 05:26:23,920 to be called by the owner of this 8839 05:26:23,920 --> 05:26:26,520 contract in our Constructor we can set 8840 05:26:26,520 --> 05:26:28,878 up an address right away to be the owner 8841 05:26:28,878 --> 05:26:31,000 of this contract so let's create a 8842 05:26:31,000 --> 05:26:33,920 global variable called address public 8843 05:26:33,920 --> 05:26:36,280 owner and then right in our Constructor 8844 05:26:36,280 --> 05:26:40,200 we'll say owner equals message. sender 8845 05:26:40,200 --> 05:26:42,160 message. sender of course being the 8846 05:26:42,160 --> 05:26:44,000 sender of the caller which in this 8847 05:26:44,000 --> 05:26:46,280 example is going to be the deployer of 8848 05:26:46,280 --> 05:26:47,958 the contract don't worry we're going to 8849 05:26:47,958 --> 05:26:49,878 demo all of this very soon to show you 8850 05:26:49,878 --> 05:26:51,360 everything that's going on if you want 8851 05:26:51,360 --> 05:26:53,480 to test all this right now absolutely go 8852 05:26:53,480 --> 05:26:55,080 for it just remember it's going to take 8853 05:26:55,080 --> 05:26:56,760 you a little bit longer on a test net 8854 05:26:56,760 --> 05:26:58,080 and I'm going to show you how it all 8855 05:26:58,080 --> 05:27:00,240 works anyways now that we have our owner 8856 05:27:00,240 --> 05:27:01,840 set up we can actually modify our 8857 05:27:01,840 --> 05:27:03,920 withdraw function so that only the owner 8858 05:27:03,920 --> 05:27:06,120 can call this function easily enough 8859 05:27:06,120 --> 05:27:07,760 we're already familiar with the require 8860 05:27:07,760 --> 05:27:10,320 keyword we could add a require the 8861 05:27:10,320 --> 05:27:12,600 message. sender of whoever calls this 8862 05:27:12,600 --> 05:27:15,360 withdrawal function must be equal to and 8863 05:27:15,360 --> 05:27:16,958 this is how you do equals in solidity 8864 05:27:16,958 --> 05:27:18,958 with this double equal sign a single 8865 05:27:18,958 --> 05:27:21,360 equal is set a double equals means 8866 05:27:21,360 --> 05:27:24,600 equals so message. sender must equal the 8867 05:27:24,600 --> 05:27:26,680 owner and if it's not the owner we could 8868 05:27:26,680 --> 05:27:29,760 revert with something like must be owner 8869 05:27:29,760 --> 05:27:31,280 awesome so now we have a quick way to 8870 05:27:31,280 --> 05:27:33,440 require that whoever calls the 8871 05:27:33,440 --> 05:27:35,760 withdrawal function is indeed the owner 8872 05:27:35,760 --> 05:27:38,760 awesome 8873 05:27:40,160 --> 05:27:42,000 but let's say we have a lot of admin 8874 05:27:42,000 --> 05:27:44,480 functions or only owner functions or 8875 05:27:44,480 --> 05:27:46,200 functions that should only be called by 8876 05:27:46,200 --> 05:27:48,360 the owner would we have to put this line 8877 05:27:48,360 --> 05:27:51,440 on every single function remember we 8878 05:27:51,440 --> 05:27:53,120 want to work incredibly hard to be 8879 05:27:53,120 --> 05:27:55,200 incredibly lazy we don't want to have to 8880 05:27:55,200 --> 05:27:56,958 copy paste this line to every one of 8881 05:27:56,958 --> 05:27:58,558 these functions and this is where 8882 05:27:58,558 --> 05:28:00,400 something called modifiers come into 8883 05:28:00,400 --> 05:28:02,320 play so we're going to go ahead and 8884 05:28:02,320 --> 05:28:04,480 actually delete this line and at the 8885 05:28:04,480 --> 05:28:06,440 bottom we're going to create our first 8886 05:28:06,440 --> 05:28:09,000 modifier a modifier is going to allow us 8887 05:28:09,000 --> 05:28:11,120 to create a keyword that we can put 8888 05:28:11,120 --> 05:28:13,680 right in the function declaration to add 8889 05:28:13,680 --> 05:28:15,480 some functionality very quickly and 8890 05:28:15,480 --> 05:28:17,878 easily to any function to create a 8891 05:28:17,878 --> 05:28:21,200 modifier you use the modifier keyword 8892 05:28:21,200 --> 05:28:23,000 and then you set it up very similarly to 8893 05:28:23,000 --> 05:28:24,798 a function so our modifier is going to 8894 05:28:24,798 --> 05:28:27,558 be called only owner we don't give it a 8895 05:28:27,558 --> 05:28:30,000 visibility like functions and in here we 8896 05:28:30,000 --> 05:28:32,280 can put our code so again we'll say 8897 05:28:32,280 --> 05:28:36,600 require the message. sender is equal to 8898 05:28:36,600 --> 05:28:40,320 not set to is equal to the owner and if 8899 05:28:40,320 --> 05:28:41,680 it's not the owner we're going to say 8900 05:28:41,680 --> 05:28:45,440 sender is not owner like this and then 8901 05:28:45,440 --> 05:28:47,200 underneath we're going to put this 8902 05:28:47,200 --> 05:28:50,160 little underscore with a semicolon what 8903 05:28:50,160 --> 05:28:52,160 we can do is we can take this only owner 8904 05:28:52,160 --> 05:28:54,638 keyword and stick it in the function 8905 05:28:54,638 --> 05:28:57,040 Declaration of our withdraw and what's 8906 05:28:57,040 --> 05:28:59,558 going to happen now is it's going to 8907 05:28:59,558 --> 05:29:02,520 execute what's in this modifier first 8908 05:29:02,520 --> 05:29:05,200 it's going to execute this require and 8909 05:29:05,200 --> 05:29:07,200 then this little underscore says and 8910 05:29:07,200 --> 05:29:09,040 then add whatever ever else you want to 8911 05:29:09,040 --> 05:29:10,760 do in the function so we're going to 8912 05:29:10,760 --> 05:29:13,520 execute this require then whatever else 8913 05:29:13,520 --> 05:29:15,480 is in the function and for our withdraw 8914 05:29:15,480 --> 05:29:16,718 a function it's going to be everything 8915 05:29:16,718 --> 05:29:20,040 else in here in our modifier if we had 8916 05:29:20,040 --> 05:29:22,718 the underscore above the require this 8917 05:29:22,718 --> 05:29:24,878 means that we would execute the code 8918 05:29:24,878 --> 05:29:27,000 inside the function first and then the 8919 05:29:27,000 --> 05:29:29,718 require so the order of your underscore 8920 05:29:29,718 --> 05:29:32,200 matters so now with this modifier 8921 05:29:32,200 --> 05:29:33,798 keyword in the withdraw function 8922 05:29:33,798 --> 05:29:35,958 whenever you call the withdraw function 8923 05:29:35,958 --> 05:29:38,240 we first go up there's a modifier I got 8924 05:29:38,240 --> 05:29:41,160 a drop down here we'll execute this oh 8925 05:29:41,160 --> 05:29:42,920 here's an underscore time to go back to 8926 05:29:42,920 --> 05:29:44,680 the function let's do what else is in 8927 05:29:44,680 --> 05:29:46,958 the rest of the code and then it'll come 8928 05:29:46,958 --> 05:29:48,718 back down to the only owner modifier and 8929 05:29:48,718 --> 05:29:50,798 say oh is there anything else to do oh 8930 05:29:50,798 --> 05:29:54,160 there's nothing else so I guess we're 8931 05:29:55,280 --> 05:29:57,718 good so let's see this all go through 8932 05:29:57,718 --> 05:29:59,600 end to end and remember you don't 8933 05:29:59,600 --> 05:30:01,680 actually have to deploy this to a test 8934 05:30:01,680 --> 05:30:03,480 net if you don't want to but if you want 8935 05:30:03,480 --> 05:30:05,160 to follow along feel free to do so of 8936 05:30:05,160 --> 05:30:07,360 course as well get started let's of 8937 05:30:07,360 --> 05:30:09,760 course compile file fundme Doo looks 8938 05:30:09,760 --> 05:30:12,638 good let's delete any contracts deployed 8939 05:30:12,638 --> 05:30:14,400 previously let's make sure we're on 8940 05:30:14,400 --> 05:30:16,840 injected provider menam mask and let's 8941 05:30:16,840 --> 05:30:19,000 make sure that we are on a test net we 8942 05:30:19,000 --> 05:30:21,360 are indeed let's make sure we have a 8943 05:30:21,360 --> 05:30:23,638 little bit of test net eth in our wallet 8944 05:30:23,638 --> 05:30:25,878 and we sure do and let's go down to the 8945 05:30:25,878 --> 05:30:27,520 contract and make sure we're on the 8946 05:30:27,520 --> 05:30:29,840 right contract if you try to deploy some 8947 05:30:29,840 --> 05:30:31,798 like an interface you'll get an alert 8948 05:30:31,798 --> 05:30:33,360 like this this contract might be 8949 05:30:33,360 --> 05:30:35,520 abstract blah blah blah so we're not 8950 05:30:35,520 --> 05:30:36,920 going to do the interface we're going to 8951 05:30:36,920 --> 05:30:39,520 do the fundme contract of course we'll 8952 05:30:39,520 --> 05:30:42,520 hit deploy metamask will pop up we'll go 8953 05:30:42,520 --> 05:30:45,200 ahead and hit confirm on the metamask 8954 05:30:45,200 --> 05:30:46,558 and then we're going to have to wait a 8955 05:30:46,558 --> 05:30:48,600 little bit for the contract to actually 8956 05:30:48,600 --> 05:30:50,200 finish deploying if we pull up the 8957 05:30:50,200 --> 05:30:51,760 terminal we can see the contract go 8958 05:30:51,760 --> 05:30:54,400 through and we can also see it in remix 8959 05:30:54,400 --> 05:30:56,920 here now we've got a number of buttons 8960 05:30:56,920 --> 05:31:00,000 in here we've got our red fund button of 8961 05:31:00,000 --> 05:31:02,240 course which is because we have our fund 8962 05:31:02,240 --> 05:31:04,320 function which is payable and this 8963 05:31:04,320 --> 05:31:07,600 allows us to send eth with this function 8964 05:31:07,600 --> 05:31:09,400 we have our withdrawal function which is 8965 05:31:09,400 --> 05:31:11,520 just orange because it is not payable 8966 05:31:11,520 --> 05:31:14,400 although it is going to be withdrawing 8967 05:31:14,400 --> 05:31:16,360 money out of the contract and then we 8968 05:31:16,360 --> 05:31:19,000 have our typical blue View and pure 8969 05:31:19,000 --> 05:31:20,798 functions the owner of course is going 8970 05:31:20,798 --> 05:31:23,760 to be our metamask since we are the ones 8971 05:31:23,760 --> 05:31:26,200 who deployed this contract minimum USD 8972 05:31:26,200 --> 05:31:28,878 is going to be five and these are of 8973 05:31:28,878 --> 05:31:31,400 course going to be empty we can call our 8974 05:31:31,400 --> 05:31:34,440 fund function only if we send some value 8975 05:31:34,440 --> 05:31:36,638 with it if we try to call fund without 8976 05:31:36,638 --> 05:31:38,680 any value we're going to get this gas 8977 05:31:38,680 --> 05:31:40,878 estimation error failed and we'll even 8978 05:31:40,878 --> 05:31:43,878 see didn't send enough eth in the ER log 8979 05:31:43,878 --> 05:31:45,680 so let's go ahead and cancel this again 8980 05:31:45,680 --> 05:31:47,040 we could send this but that would be a 8981 05:31:47,040 --> 05:31:50,200 huge waste of gas so we'll cancel it and 8982 05:31:50,200 --> 05:31:51,680 let's get a value that's going to be 8983 05:31:51,680 --> 05:31:55,558 enough so I believe 0.01 eth should be 8984 05:31:55,558 --> 05:31:58,040 enough let's say 0.01 eth it looks like 8985 05:31:58,040 --> 05:32:01,440 that's about $18 so back in remix let's 8986 05:32:01,440 --> 05:32:04,920 do 0.01 e in terms of wayy which is this 8987 05:32:04,920 --> 05:32:09,080 value here paste that in 8988 05:32:09,080 --> 05:32:10,878 and we'll scroll down now if we call 8989 05:32:10,878 --> 05:32:14,040 fund it does indeed go through and we 8990 05:32:14,040 --> 05:32:16,000 can go ahead and hit confirm on this as 8991 05:32:16,000 --> 05:32:18,638 well and we see that transaction pop up 8992 05:32:18,638 --> 05:32:20,760 on ether scan and we might have to wait 8993 05:32:20,760 --> 05:32:22,240 a little bit for this transaction to 8994 05:32:22,240 --> 05:32:24,558 finish finish going through finish 8995 05:32:24,558 --> 05:32:26,760 indexing Etc so let's give it a couple 8996 05:32:26,760 --> 05:32:29,040 minutes oh looks like it's gone through 8997 05:32:29,040 --> 05:32:31,480 fantastic we can even see in the fundme 8998 05:32:31,480 --> 05:32:34,600 contract the balance has gone up to 0.01 8999 05:32:34,600 --> 05:32:36,878 and we can see if we look at funders at 9000 05:32:36,878 --> 05:32:40,000 index zero we can see our address and if 9001 05:32:40,000 --> 05:32:42,680 we copy our address and paste it into 9002 05:32:42,680 --> 05:32:44,480 the mapping address to amount funded we 9003 05:32:44,480 --> 05:32:46,718 do indeed see an amount in here with 9004 05:32:46,718 --> 05:32:48,360 this transaction fund being called of 9005 05:32:48,360 --> 05:32:51,080 course on The testnet Ether scan we can 9006 05:32:51,080 --> 05:32:52,558 see all the data and information 9007 05:32:52,558 --> 05:32:54,120 associated with this and we can even 9008 05:32:54,120 --> 05:32:55,760 scroll down and see the input data we 9009 05:32:55,760 --> 05:32:58,040 can see that this was calling the fund 9010 05:32:58,040 --> 05:32:59,798 function we'll learn more about the 9011 05:32:59,798 --> 05:33:02,400 input data later so now we could do is 9012 05:33:02,400 --> 05:33:04,040 we could do the reverse we could go 9013 05:33:04,040 --> 05:33:06,680 ahead and withdraw and that should reset 9014 05:33:06,680 --> 05:33:09,120 the mapping and the array back down to 9015 05:33:09,120 --> 05:33:11,878 zero for our modifier to work we have to 9016 05:33:11,878 --> 05:33:14,160 use withdraw on this account if we 9017 05:33:14,160 --> 05:33:16,558 switch to an account that isn't the 9018 05:33:16,558 --> 05:33:18,280 owner of this contract and we go ahead 9019 05:33:18,280 --> 05:33:20,958 and reconnect and we scroll down we make 9020 05:33:20,958 --> 05:33:22,878 sure value is zero and we scroll down 9021 05:33:22,878 --> 05:33:25,360 and try to hit withdraw we'll see we get 9022 05:33:25,360 --> 05:33:27,520 gas estimation failed and we'll even say 9023 05:33:27,520 --> 05:33:29,798 sender is not the owner so we'll go 9024 05:33:29,798 --> 05:33:32,280 ahead and cancel that we'll switch back 9025 05:33:32,280 --> 05:33:34,160 to account one we'll make sure we're 9026 05:33:34,160 --> 05:33:36,400 working with account one now we'll call 9027 05:33:36,400 --> 05:33:38,798 withdraw we'll see ass does indeed pop 9028 05:33:38,798 --> 05:33:41,680 up and we can go ahead and confirm and 9029 05:33:41,680 --> 05:33:43,680 in just a minute we'll see the balance 9030 05:33:43,680 --> 05:33:46,280 reset and if we call our funders and 9031 05:33:46,280 --> 05:33:48,798 mapping they should also have been reset 9032 05:33:48,798 --> 05:33:50,878 so let's wait a little bit now if I try 9033 05:33:50,878 --> 05:33:52,558 to call address to amount funded with 9034 05:33:52,558 --> 05:33:55,160 that same address we now get zero and 9035 05:33:55,160 --> 05:33:57,440 now if I look at funders at index zero 9036 05:33:57,440 --> 05:34:01,120 it actually airs and this isn't 9037 05:34:02,400 --> 05:34:04,680 correct following our more advanced Lo 9038 05:34:04,680 --> 05:34:06,000 Concepts if you don't understand them 9039 05:34:06,000 --> 05:34:07,718 the first time don't let them stop you 9040 05:34:07,718 --> 05:34:09,718 they're not required to know to continue 9041 05:34:09,718 --> 05:34:11,440 the following is an excerpt from a 9042 05:34:11,440 --> 05:34:13,320 slightly older edition of this course 9043 05:34:13,320 --> 05:34:14,600 you'll see that I don't use named 9044 05:34:14,600 --> 05:34:17,120 Imports like a noob and a few other 9045 05:34:17,120 --> 05:34:18,280 pieces of the code look slightly 9046 05:34:18,280 --> 05:34:19,878 different but this next section we're 9047 05:34:19,878 --> 05:34:21,320 going to go over a lot of really 9048 05:34:21,320 --> 05:34:23,080 Advanced solidity pieces here that are 9049 05:34:23,080 --> 05:34:24,878 going to really Advanced solidity 9050 05:34:24,878 --> 05:34:26,320 fundamentals these are going to be 9051 05:34:26,320 --> 05:34:28,320 fantastic for saving gas making your 9052 05:34:28,320 --> 05:34:30,160 code look a lot cleaner and just better 9053 05:34:30,160 --> 05:34:32,120 coding practices overall for those of 9054 05:34:32,120 --> 05:34:33,718 you who are looking to go super far with 9055 05:34:33,718 --> 05:34:35,200 this definitely be sure to pay attention 9056 05:34:35,200 --> 05:34:36,920 to this section because this will make 9057 05:34:36,920 --> 05:34:38,480 you look like a bad as when you code 9058 05:34:38,480 --> 05:34:40,120 later on just remember when we say 9059 05:34:40,120 --> 05:34:42,558 JavaScript VM we just mean remix VM 9060 05:34:42,558 --> 05:34:44,000 additionally whenever we deploy to the 9061 05:34:44,000 --> 05:34:45,718 rink B test net just know that you 9062 05:34:45,718 --> 05:34:47,718 should be deploying to theoa test net or 9063 05:34:47,718 --> 05:34:49,638 whatever the most upto-date test net is 9064 05:34:49,638 --> 05:34:51,558 or just don't deploy to the test net and 9065 05:34:51,558 --> 05:34:53,840 just follow 9066 05:34:53,840 --> 05:34:55,798 along we're going to modify this 9067 05:34:55,798 --> 05:34:57,558 contract to make it a little bit more 9068 05:34:57,558 --> 05:34:59,120 professional it's not going to be end to 9069 05:34:59,120 --> 05:35:00,798 end amazing but it's going to be a 9070 05:35:00,798 --> 05:35:02,120 little bit better and you'll see why in 9071 05:35:02,120 --> 05:35:03,558 a minute so the first thing that we're 9072 05:35:03,558 --> 05:35:04,958 going to do is we're looking we're going 9073 05:35:04,958 --> 05:35:07,000 to look at some of these variables here 9074 05:35:07,000 --> 05:35:10,480 in particular owner and minimum USD 9075 05:35:10,480 --> 05:35:13,440 owner gets set one time in our contract 9076 05:35:13,440 --> 05:35:15,798 here and then it never changes again 9077 05:35:15,798 --> 05:35:19,920 minimum USD gets set one time even 9078 05:35:19,920 --> 05:35:22,320 outside of the Constructor if we have 9079 05:35:22,320 --> 05:35:25,240 variables that only get set one time we 9080 05:35:25,240 --> 05:35:28,000 can actually use some tools and solidity 9081 05:35:28,000 --> 05:35:30,240 to make them more gas efficient for now 9082 05:35:30,240 --> 05:35:32,240 let's compile our fundme contract and 9083 05:35:32,240 --> 05:35:34,160 then deploy it to a jscript virtual 9084 05:35:34,160 --> 05:35:36,000 machine remember we can go ahead and 9085 05:35:36,000 --> 05:35:38,760 deploy it right now however ever funding 9086 05:35:38,760 --> 05:35:40,400 and withdrawing and doing any of the 9087 05:35:40,400 --> 05:35:42,600 money stuff isn't going to work because 9088 05:35:42,600 --> 05:35:45,040 again we don't have a chain Lake Network 9089 05:35:45,040 --> 05:35:47,480 on our JavaScript VM so those aren't 9090 05:35:47,480 --> 05:35:48,878 going to work so well but for what we're 9091 05:35:48,878 --> 05:35:50,440 going to do right now we don't really 9092 05:35:50,440 --> 05:35:52,240 care so much here's what we do care 9093 05:35:52,240 --> 05:35:55,240 about we do care about how much gas this 9094 05:35:55,240 --> 05:35:57,718 costs to actually send we do care about 9095 05:35:57,718 --> 05:36:00,200 how much gas this costs to create right 9096 05:36:00,200 --> 05:36:04,878 now creating this contract costs about 9097 05:36:04,878 --> 05:36:07,638 $859,000 gas and we're going to add a 9098 05:36:07,638 --> 05:36:09,798 couple of Tricks right now to bring this 9099 05:36:09,798 --> 05:36:11,360 number down we're going to add some 9100 05:36:11,360 --> 05:36:12,920 stuff back in in a bit which will bring 9101 05:36:12,920 --> 05:36:15,120 it back up but for now we're going to 9102 05:36:15,120 --> 05:36:16,360 learn some tricks to bring this number 9103 05:36:16,360 --> 05:36:17,840 down the two tricks that we're going to 9104 05:36:17,840 --> 05:36:20,840 learn are the constant keyword and the 9105 05:36:20,840 --> 05:36:23,000 immutable keyword in their solidity 9106 05:36:23,000 --> 05:36:25,558 there are two keywords that make it so 9107 05:36:25,558 --> 05:36:27,840 that your variables can't be changed and 9108 05:36:27,840 --> 05:36:29,240 those keywords are constant and 9109 05:36:29,240 --> 05:36:31,480 immutable you can learn more about them 9110 05:36:31,480 --> 05:36:33,320 in the solidity documentation if you 9111 05:36:33,320 --> 05:36:35,600 assign a variable once outside of a 9112 05:36:35,600 --> 05:36:38,000 function and then never change it so if 9113 05:36:38,000 --> 05:36:40,558 if it's assigned at compile time you can 9114 05:36:40,558 --> 05:36:43,840 go ahead and add this constant keyword 9115 05:36:43,840 --> 05:36:45,798 we'll learn later about storage but when 9116 05:36:45,798 --> 05:36:47,920 you add a constant keyword this minimum 9117 05:36:47,920 --> 05:36:50,798 USD no longer takes up a storage spot 9118 05:36:50,798 --> 05:36:53,840 and is much easier to read to so now we 9119 05:36:53,840 --> 05:36:56,000 recompile this and we deploy this new 9120 05:36:56,000 --> 05:36:58,600 contract let's see if we saved any 9121 05:36:58,600 --> 05:37:02,160 gas we look in the transaction logs now 9122 05:37:02,160 --> 05:37:04,840 we can grab the transaction cost of how 9123 05:37:04,840 --> 05:37:06,878 much this cost to deploy and let's 9124 05:37:06,878 --> 05:37:09,200 compare it to how how much it was before 9125 05:37:09,200 --> 05:37:11,878 wow we saved almost 19,000 gas that's 9126 05:37:11,878 --> 05:37:13,920 almost as much gas as it cost to send 9127 05:37:13,920 --> 05:37:16,040 ethereum typically constant variables 9128 05:37:16,040 --> 05:37:18,440 have a different naming convention 9129 05:37:18,440 --> 05:37:19,798 typically you'll want to do them all 9130 05:37:19,798 --> 05:37:24,840 caps like Min eum underscore USD so all 9131 05:37:24,840 --> 05:37:27,040 caps with underscores so now let's just 9132 05:37:27,040 --> 05:37:29,440 find minimum USD and replace that with 9133 05:37:29,440 --> 05:37:32,000 all caps as well with this interaction 9134 05:37:32,000 --> 05:37:34,120 we know that this variable is a constant 9135 05:37:34,120 --> 05:37:35,920 variable and it's much cheaper to read 9136 05:37:35,920 --> 05:37:39,400 from now if we go ahead compile this and 9137 05:37:39,400 --> 05:37:42,360 redeploy in our fund Rec contract even 9138 05:37:42,360 --> 05:37:44,840 though this is a view function remember 9139 05:37:44,840 --> 05:37:47,878 view functions do have gas costs when 9140 05:37:47,878 --> 05:37:50,160 when called by a contract as a constant 9141 05:37:50,160 --> 05:37:52,680 variable we can see the execution cost 9142 05:37:52,680 --> 05:37:54,280 of this variable 9143 05:37:54,280 --> 05:37:57,600 21,45 gas so let's put a little note 9144 05:37:57,600 --> 05:38:00,558 right underneath it if we remove the 9145 05:38:00,558 --> 05:38:03,160 constant variable we delete this 9146 05:38:03,160 --> 05:38:07,200 contract we redeploy collect fundme and 9147 05:38:07,200 --> 05:38:10,000 we hit minimum USD again we can now see 9148 05:38:10,000 --> 05:38:11,958 how much gas this was cost if it wasn't 9149 05:38:11,958 --> 05:38:14,400 a constant variable we can see the gas 9150 05:38:14,400 --> 05:38:16,680 cost did indeed go up now on chains that 9151 05:38:16,680 --> 05:38:18,638 are much cheaper this gas difference 9152 05:38:18,638 --> 05:38:19,878 probably won't make that much of a 9153 05:38:19,878 --> 05:38:21,718 difference but on more expensive chains 9154 05:38:21,718 --> 05:38:23,320 like ethereum this is going to make a 9155 05:38:23,320 --> 05:38:26,360 big difference for example on ethereum 9156 05:38:26,360 --> 05:38:29,080 we can actually see current gas prices 9157 05:38:29,080 --> 05:38:31,000 on ethereum here we can see the current 9158 05:38:31,000 --> 05:38:34,958 gas price of ethereum is about 141 gay 9159 05:38:34,958 --> 05:38:37,558 so we'll go to our converter way to way 9160 05:38:37,558 --> 05:38:40,440 we'll copy the way price times this 9161 05:38:40,440 --> 05:38:43,000 we'll get the gas price of calling our 9162 05:38:43,000 --> 05:38:45,878 minimum USD which is this number here 9163 05:38:45,878 --> 05:38:48,680 which if we put back in our ethereum 9164 05:38:48,680 --> 05:38:51,760 unit converter we can see cost this much 9165 05:38:51,760 --> 05:38:54,638 gas and if we times that by the 9166 05:38:54,638 --> 05:38:56,840 approximate current price of ethereum 9167 05:38:56,840 --> 05:38:57,958 which is around 9168 05:38:57,958 --> 05:39:01,600 $3,000 calling minimum USD as a constant 9169 05:39:01,600 --> 05:39:04,680 is going to cost $9 calling this that at 9170 05:39:04,680 --> 05:39:07,638 a non-constant is going to cost almost 9171 05:39:07,638 --> 05:39:10,240 an entire dollar more you you can see 9172 05:39:10,240 --> 05:39:11,920 how all these little gas optimization 9173 05:39:11,920 --> 05:39:13,478 tricks are going to make your life a lot 9174 05:39:13,478 --> 05:39:15,160 better so let's keep this constant 9175 05:39:15,160 --> 05:39:17,520 keyword in here we'll learn more about 9176 05:39:17,520 --> 05:39:19,718 constant and storage in later sections 9177 05:39:19,718 --> 05:39:21,478 of this course now as you're just 9178 05:39:21,478 --> 05:39:23,120 getting started with this course and 9179 05:39:23,120 --> 05:39:26,478 with solidity do not struggle and do not 9180 05:39:26,478 --> 05:39:29,320 worry about making your contracts as gas 9181 05:39:29,320 --> 05:39:31,958 efficient as possible in the beginning 9182 05:39:31,958 --> 05:39:34,040 and especially right now just write your 9183 05:39:34,040 --> 05:39:36,440 contracts as best as you can once you 9184 05:39:36,440 --> 05:39:38,920 get really good at gas and once you get 9185 05:39:38,920 --> 05:39:41,320 much later on in the course and much 9186 05:39:41,320 --> 05:39:43,520 more advanced with solidity then you can 9187 05:39:43,520 --> 05:39:45,360 start going back and working on gas 9188 05:39:45,360 --> 05:39:47,798 optimizations but do not let gas 9189 05:39:47,798 --> 05:39:50,040 optimizations hold you back or if you 9190 05:39:50,040 --> 05:39:52,760 start stressing over it just let it go 9191 05:39:52,760 --> 05:39:54,798 don't worry about it and just write your 9192 05:39:54,798 --> 05:39:57,600 code as best you can so long story short 9193 05:39:57,600 --> 05:39:59,520 do not stress about gas optimizations 9194 05:39:59,520 --> 05:40:01,440 right now now another variable we only 9195 05:40:01,440 --> 05:40:03,478 set one time is going to be our owner 9196 05:40:03,478 --> 05:40:06,920 variable owner equals message. sender we 9197 05:40:06,920 --> 05:40:08,320 set this this one time in the 9198 05:40:08,320 --> 05:40:10,760 Constructor variables that we set one 9199 05:40:10,760 --> 05:40:13,040 time but outside of the same line that 9200 05:40:13,040 --> 05:40:14,958 they're declared and we set them for 9201 05:40:14,958 --> 05:40:17,240 example in the Constructor we can Mark 9202 05:40:17,240 --> 05:40:19,478 as a mutable typically a good convention 9203 05:40:19,478 --> 05:40:21,200 for marking immutable variables is going 9204 05:40:21,200 --> 05:40:24,240 to be doing I underscore so that we know 9205 05:40:24,240 --> 05:40:26,360 that these are immutable variables they 9206 05:40:26,360 --> 05:40:28,400 have very similar gas savings to the 9207 05:40:28,400 --> 05:40:30,558 constant keyword owner of course is a 9208 05:40:30,558 --> 05:40:32,600 variable that we can't set on the line 9209 05:40:32,600 --> 05:40:35,280 here because inside the global scope 9210 05:40:35,280 --> 05:40:37,558 there's no function going on how over 9211 05:40:37,558 --> 05:40:39,840 inside functions because inside the 9212 05:40:39,840 --> 05:40:41,400 global scope there's going to be no 9213 05:40:41,400 --> 05:40:43,400 message. sender there's only going to be 9214 05:40:43,400 --> 05:40:45,680 a message. sender when we're inside of a 9215 05:40:45,680 --> 05:40:48,160 function so inside here we might say I 9216 05:40:48,160 --> 05:40:50,680 owner equals mesh. sender and then of 9217 05:40:50,680 --> 05:40:52,958 course we'll scroll down and we'll 9218 05:40:52,958 --> 05:40:55,718 change this require only owner now 9219 05:40:55,718 --> 05:40:58,798 equals I owner now if we compile that 9220 05:40:58,798 --> 05:41:03,240 and deploy it we can see how much gas we 9221 05:41:03,240 --> 05:41:05,520 can see how much gas calling I owner is 9222 05:41:05,520 --> 05:41:08,440 going to be by with the IM muteness we 9223 05:41:08,440 --> 05:41:09,638 get 9224 05:41:09,638 --> 05:41:12,120 2158 which we'll go ahead and copy for 9225 05:41:12,120 --> 05:41:16,798 now and we'll put right here we'll say 9226 05:41:16,798 --> 05:41:19,280 immutable now if we remove the immutable 9227 05:41:19,280 --> 05:41:22,120 keyword let's close this 9228 05:41:22,120 --> 05:41:24,160 redeploy now if we scroll down to I 9229 05:41:24,160 --> 05:41:26,558 owner scroll up the logs we go down to 9230 05:41:26,558 --> 05:41:28,958 the call scroll down we see the 9231 05:41:28,958 --> 05:41:32,040 execution cost was much more so we'll do 9232 05:41:32,040 --> 05:41:36,718 double backslash paste that in here gas 9233 05:41:36,718 --> 05:41:39,680 we not on immutable so you want to keep 9234 05:41:39,680 --> 05:41:41,280 some of these tricks in mind when it 9235 05:41:41,280 --> 05:41:43,958 comes to storing variables the reason 9236 05:41:43,958 --> 05:41:45,920 that these two save gas is because 9237 05:41:45,920 --> 05:41:48,320 instead of storing these variables 9238 05:41:48,320 --> 05:41:50,160 inside of a storage slot we actually 9239 05:41:50,160 --> 05:41:52,120 store them directly into the bite code 9240 05:41:52,120 --> 05:41:53,878 of the contract and like I said don't 9241 05:41:53,878 --> 05:41:55,878 worry too much about that for now later 9242 05:41:55,878 --> 05:41:58,000 on in the course we'll teach you more 9243 05:41:58,000 --> 05:41:59,680 about storage and a lot of this 9244 05:41:59,680 --> 05:42:01,280 low-level stuff that comes with these 9245 05:42:01,280 --> 05:42:03,240 contracts but for now just know that 9246 05:42:03,240 --> 05:42:06,080 these exist and they're nice gas Savers 9247 05:42:06,080 --> 05:42:09,520 if you're only setting your VAR Ables 9248 05:42:09,558 --> 05:42:12,000 once all right great so we've just made 9249 05:42:12,000 --> 05:42:13,680 our contract a little bit more gas 9250 05:42:13,680 --> 05:42:15,760 efficient little gas efficiency 9251 05:42:15,760 --> 05:42:17,400 improvements are going to be Concepts I 9252 05:42:17,400 --> 05:42:19,280 sprinkle throughout this course and when 9253 05:42:19,280 --> 05:42:20,760 we get to the more advanced section I'm 9254 05:42:20,760 --> 05:42:23,080 going to break down exactly what's going 9255 05:42:23,080 --> 05:42:25,160 on and why all these gas efficiencies 9256 05:42:25,160 --> 05:42:26,600 exist and what's going on behind the 9257 05:42:26,600 --> 05:42:28,718 scenes for these gas efficiencies to 9258 05:42:28,718 --> 05:42:30,798 occur it's a little bit in the weeds 9259 05:42:30,798 --> 05:42:32,360 which is why I'm going to gloss over it 9260 05:42:32,360 --> 05:42:34,280 right now so if it's confusing don't 9261 05:42:34,280 --> 05:42:35,840 worry I wouldn't let these gas 9262 05:42:35,840 --> 05:42:37,360 efficiencies be the thing that's slow 9263 05:42:37,360 --> 05:42:39,320 you down awesome so we have these two 9264 05:42:39,320 --> 05:42:41,878 gas optimizations how else can we make 9265 05:42:41,878 --> 05:42:43,558 this contract a little bit more gas 9266 05:42:43,558 --> 05:42:45,440 efficient well one of the ways we can 9267 05:42:45,440 --> 05:42:47,400 make this more gas efficient is by 9268 05:42:47,400 --> 05:42:50,000 updating our requires right now with our 9269 05:42:50,000 --> 05:42:51,878 requir statement we actually have to 9270 05:42:51,878 --> 05:42:55,160 store this sender is not an owner as a 9271 05:42:55,160 --> 05:42:57,080 string array every single one of these 9272 05:42:57,080 --> 05:42:59,320 characters in this error log needs to 9273 05:42:59,320 --> 05:43:01,718 get stored individually this the string 9274 05:43:01,718 --> 05:43:03,638 may not seem very big but it's a lot 9275 05:43:03,638 --> 05:43:05,120 bigger than the alternative with what we 9276 05:43:05,120 --> 05:43:08,638 can do as of 0.8.4 solidity you can now 9277 05:43:08,638 --> 05:43:11,840 actually do custom errors for our 9278 05:43:11,840 --> 05:43:14,520 reverts we declare them at the top and 9279 05:43:14,520 --> 05:43:17,558 then use ifs instead of require and then 9280 05:43:17,558 --> 05:43:20,240 just add our revert statements this ends 9281 05:43:20,240 --> 05:43:22,000 up saving a lot of gas since we just 9282 05:43:22,000 --> 05:43:24,558 call the error code as opposed to 9283 05:43:24,558 --> 05:43:26,680 calling the entire string associated 9284 05:43:26,680 --> 05:43:29,240 with the error so for example with our 9285 05:43:29,240 --> 05:43:31,558 require down here and with actually with 9286 05:43:31,558 --> 05:43:34,280 all of our requires what we could do is 9287 05:43:34,280 --> 05:43:36,120 instead of having this require we could 9288 05:43:36,120 --> 05:43:39,840 create custom error so at the top what 9289 05:43:39,840 --> 05:43:42,638 we could do is we could say 9290 05:43:42,638 --> 05:43:45,920 error not 9291 05:43:45,920 --> 05:43:48,240 owner and you'll notice that this is 9292 05:43:48,240 --> 05:43:50,718 actually outside of the contract here 9293 05:43:50,718 --> 05:43:52,360 now what we can do is we can take this 9294 05:43:52,360 --> 05:43:54,680 eror not owner scroll down into our only 9295 05:43:54,680 --> 05:43:56,958 owner instead of doing a require we'll 9296 05:43:56,958 --> 05:44:00,638 do an if statement we'll say if message. 9297 05:44:00,638 --> 05:44:04,000 sender is not I 9298 05:44:04,000 --> 05:44:06,680 owner then we're going to go ahead and 9299 05:44:06,680 --> 05:44:09,040 reverse 9300 05:44:09,798 --> 05:44:13,160 with a not owner error this ends up 9301 05:44:13,160 --> 05:44:15,160 saving us a lot of gas since we don't 9302 05:44:15,160 --> 05:44:17,878 have to store and emit this long string 9303 05:44:17,878 --> 05:44:19,840 here now in a lot of code today you'll 9304 05:44:19,840 --> 05:44:21,878 still see require a lot of places 9305 05:44:21,878 --> 05:44:23,680 because these these custom errors are 9306 05:44:23,680 --> 05:44:25,760 pretty new in solidity so you'll want to 9307 05:44:25,760 --> 05:44:27,320 get used to writing it both ways I 9308 05:44:27,320 --> 05:44:29,240 wouldn't be surprised if in the future 9309 05:44:29,240 --> 05:44:31,360 the Syntax for some of these errors 9310 05:44:31,360 --> 05:44:33,000 looks like this so that it's more 9311 05:44:33,000 --> 05:44:35,000 readable but for now if you want to do a 9312 05:44:35,000 --> 05:44:36,840 more gas efficient way than requires you 9313 05:44:36,840 --> 05:44:38,760 can can use something like this we could 9314 05:44:38,760 --> 05:44:40,520 update all of our requires here for 9315 05:44:40,520 --> 05:44:42,320 these custom errors but for now I'm 9316 05:44:42,320 --> 05:44:43,638 going to leave both in just to show you 9317 05:44:43,638 --> 05:44:45,718 the differences this revert keyword does 9318 05:44:45,718 --> 05:44:48,280 the exact same thing that required does 9319 05:44:48,280 --> 05:44:50,120 without the conditional beforehand so 9320 05:44:50,120 --> 05:44:52,120 you can actually go ahead and and revert 9321 05:44:52,120 --> 05:44:54,280 any transaction or any function call in 9322 05:44:54,280 --> 05:44:57,080 the middle of the function 9323 05:44:57,280 --> 05:45:00,160 call now let's look at one more way to 9324 05:45:00,160 --> 05:45:02,000 improve this contract sometimes people 9325 05:45:02,000 --> 05:45:03,440 will try to interact with a contract 9326 05:45:03,440 --> 05:45:04,840 that takes ethereum or the native 9327 05:45:04,840 --> 05:45:07,000 blockchain token without actually going 9328 05:45:07,000 --> 05:45:08,600 going through the required function 9329 05:45:08,600 --> 05:45:10,718 calls that that are needed for example 9330 05:45:10,718 --> 05:45:13,280 on a JavaScript evm here I could 9331 05:45:13,280 --> 05:45:15,958 actually try to send this contract money 9332 05:45:15,958 --> 05:45:18,360 without calling the fund function 9333 05:45:18,360 --> 05:45:20,400 however if I were to do that what would 9334 05:45:20,400 --> 05:45:21,958 happen would our fund function get 9335 05:45:21,958 --> 05:45:24,240 triggered no it wouldn't get triggered 9336 05:45:24,240 --> 05:45:26,280 we wouldn't keep track of that fun we 9337 05:45:26,280 --> 05:45:28,440 wouldn't have that person's information 9338 05:45:28,440 --> 05:45:30,680 updated in this contract so if later on 9339 05:45:30,680 --> 05:45:32,520 we want to give rewards or something we 9340 05:45:32,520 --> 05:45:35,040 wouldn't know about those funders and 9341 05:45:35,040 --> 05:45:36,320 this wouldn't be great cuz people would 9342 05:45:36,320 --> 05:45:38,400 send our contract money without us ever 9343 05:45:38,400 --> 05:45:40,000 knowing and we wouldn't be able to give 9344 05:45:40,000 --> 05:45:42,920 them any credit or anything additionally 9345 05:45:42,920 --> 05:45:45,240 maybe they called the wrong function by 9346 05:45:45,240 --> 05:45:46,680 accident and they they weren't using 9347 05:45:46,680 --> 05:45:48,638 metamask and they weren't using a tool 9348 05:45:48,638 --> 05:45:50,120 to tell them hey this transaction is 9349 05:45:50,120 --> 05:45:52,040 likely going to fail so what can we do 9350 05:45:52,040 --> 05:45:55,798 in this case what happens if someone 9351 05:45:55,798 --> 05:45:57,638 sends this 9352 05:45:57,638 --> 05:46:01,798 contract eth without calling the fund 9353 05:46:01,798 --> 05:46:04,000 function right now if we were to send 9354 05:46:04,000 --> 05:46:06,320 this fundme contract eth it would just 9355 05:46:06,320 --> 05:46:07,718 go to the contract contract right and 9356 05:46:07,718 --> 05:46:09,320 this contract just wouldn't keep track 9357 05:46:09,320 --> 05:46:11,000 of those people but there's actually a 9358 05:46:11,000 --> 05:46:12,958 way for when people send money to this 9359 05:46:12,958 --> 05:46:15,040 contract or people call a function that 9360 05:46:15,040 --> 05:46:17,080 doesn't exist for us to still trigger 9361 05:46:17,080 --> 05:46:19,520 some code and now there are two special 9362 05:46:19,520 --> 05:46:23,280 functions in solidity one is called 9363 05:46:23,280 --> 05:46:26,200 receive and one is called the 9364 05:46:26,200 --> 05:46:28,440 fallback now in solidity there are 9365 05:46:28,440 --> 05:46:30,478 actually a number of special functions 9366 05:46:30,478 --> 05:46:32,080 and two of these special functions are 9367 05:46:32,080 --> 05:46:34,638 the receive special function and the 9368 05:46:34,638 --> 05:46:37,040 fallback special function a contract can 9369 05:46:37,040 --> 05:46:38,760 have at most one receive function 9370 05:46:38,760 --> 05:46:40,798 declared using the receive external 9371 05:46:40,798 --> 05:46:43,878 payable without the function keyword 9372 05:46:43,878 --> 05:46:45,280 this function cannot have arguments 9373 05:46:45,280 --> 05:46:46,680 cannot return anything and must have 9374 05:46:46,680 --> 05:46:49,200 external visibility and a payable State 9375 05:46:49,200 --> 05:46:51,478 mutability what does that actually mean 9376 05:46:51,478 --> 05:46:53,718 and or look like well let's create a 9377 05:46:53,718 --> 05:46:55,478 separate contract to go ahead and play 9378 05:46:55,478 --> 05:46:57,000 with this so in here we're going to 9379 05:46:57,000 --> 05:47:00,040 create a new file called fallback 9380 05:47:00,040 --> 05:47:02,680 example. soul and in here we're going to 9381 05:47:02,680 --> 05:47:05,080 add our basic pieces SPX license 9382 05:47:05,080 --> 05:47:08,600 identifier MIT pragma 9383 05:47:08,600 --> 05:47:11,520 solidity 9384 05:47:11,520 --> 05:47:15,798 0.8.7 and we'll do contract fallback 9385 05:47:15,798 --> 05:47:18,558 example like so feel free to pause the 9386 05:47:18,558 --> 05:47:20,600 video to catch up to this point once we 9387 05:47:20,600 --> 05:47:22,558 create our fallback contract let's 9388 05:47:22,558 --> 05:47:24,638 create a variable to go ahead and try to 9389 05:47:24,638 --> 05:47:28,160 test this function we'll create a un 256 9390 05:47:28,160 --> 05:47:31,080 public result variable and let's create 9391 05:47:31,080 --> 05:47:33,558 this receive function so we'll say 9392 05:47:33,558 --> 05:47:35,558 receive it's going to be an external 9393 05:47:35,558 --> 05:47:38,120 payable 9394 05:47:38,120 --> 05:47:40,718 function we don't add the function 9395 05:47:40,718 --> 05:47:43,840 keyword for receive since solidity knows 9396 05:47:43,840 --> 05:47:46,280 that receive is a special function 9397 05:47:46,280 --> 05:47:48,958 whenever we send ethereum or make a 9398 05:47:48,958 --> 05:47:52,080 transaction to this contract now as long 9399 05:47:52,080 --> 05:47:54,240 as there's no data associated with the 9400 05:47:54,240 --> 05:47:56,478 transaction this receive function will 9401 05:47:56,478 --> 05:47:58,840 get triggered what we can do in here now 9402 05:47:58,840 --> 05:48:03,080 is we can say result equals 1 so let's 9403 05:48:03,080 --> 05:48:04,878 go ahead and test this out on the 9404 05:48:04,878 --> 05:48:07,080 JavaScript virtual machine we compile 9405 05:48:07,080 --> 05:48:08,478 this so we're going to go ahead and 9406 05:48:08,478 --> 05:48:10,878 compile this we'll go deploy it on the 9407 05:48:10,878 --> 05:48:12,478 JavaScript virtual machine we're going 9408 05:48:12,478 --> 05:48:15,680 to deploy our fallback example and we're 9409 05:48:15,680 --> 05:48:17,718 going to see what result is initialized 9410 05:48:17,718 --> 05:48:19,840 to since we haven't set anything for 9411 05:48:19,840 --> 05:48:22,600 result result of course is initialized 9412 05:48:22,600 --> 05:48:25,878 to zero but what if we were to send this 9413 05:48:25,878 --> 05:48:28,558 contract some ethereum well receive 9414 05:48:28,558 --> 05:48:30,440 would go ahead and be triggered here we 9415 05:48:30,440 --> 05:48:32,040 can actually send this contract some 9416 05:48:32,040 --> 05:48:33,840 ethereum directly by working with this 9417 05:48:33,840 --> 05:48:35,718 low-level interactions bit here don't 9418 05:48:35,718 --> 05:48:38,120 worry about what call data means for now 9419 05:48:38,120 --> 05:48:40,440 just know that this area down here is a 9420 05:48:40,440 --> 05:48:42,558 way we can send and work with different 9421 05:48:42,558 --> 05:48:44,760 functions and we can add parameters to 9422 05:48:44,760 --> 05:48:47,120 this transaction by going up here and 9423 05:48:47,120 --> 05:48:49,200 adjusting the variables up here if we 9424 05:48:49,200 --> 05:48:52,000 keep call data blank it'll be the same 9425 05:48:52,000 --> 05:48:53,680 as if we were in metamask and just 9426 05:48:53,680 --> 05:48:55,558 hitting send and then choosing this 9427 05:48:55,558 --> 05:48:57,600 contract address again we can't actually 9428 05:48:57,600 --> 05:48:59,600 use metamask since this is a virtual 9429 05:48:59,600 --> 05:49:01,840 machine and not one of the networks that 9430 05:49:01,840 --> 05:49:03,600 we're working with so if I do for 9431 05:49:03,600 --> 05:49:07,160 example I change this value to one way 9432 05:49:07,160 --> 05:49:09,798 and I keep everything blank and I go 9433 05:49:09,798 --> 05:49:11,600 ahead and hit this transaction button 9434 05:49:11,600 --> 05:49:13,558 which again is going to be the same as 9435 05:49:13,558 --> 05:49:15,478 hitting this send button but only 9436 05:49:15,478 --> 05:49:17,718 sending one way what do you think will 9437 05:49:17,718 --> 05:49:20,920 happen well let's try it we can see in 9438 05:49:20,920 --> 05:49:23,520 the log area that we did indeed send a 9439 05:49:23,520 --> 05:49:26,400 transaction and if you look at the 9440 05:49:26,400 --> 05:49:28,000 description here you can even see it 9441 05:49:28,000 --> 05:49:32,160 says from so and so to fallback example. 9442 05:49:32,160 --> 05:49:34,558 receive it looks like it called our 9443 05:49:34,558 --> 05:49:36,718 receive function which should have 9444 05:49:36,718 --> 05:49:39,280 updated our result to one so if we hit 9445 05:49:39,280 --> 05:49:42,360 result now we can indeed see that result 9446 05:49:42,360 --> 05:49:44,958 has been updated to the value of one 9447 05:49:44,958 --> 05:49:46,798 well let's go ahead and delete this 9448 05:49:46,798 --> 05:49:49,200 let's deploy this contract again and 9449 05:49:49,200 --> 05:49:52,080 this time let's have value be zero does 9450 05:49:52,080 --> 05:49:54,400 receive get trigger this time so let's 9451 05:49:54,400 --> 05:49:57,080 pull this down let's hit transact let's 9452 05:49:57,080 --> 05:49:59,240 leave the call data blank we'll leave 9453 05:49:59,240 --> 05:50:02,200 value at zero so this will be the same 9454 05:50:02,200 --> 05:50:05,920 as if we had sent zero ethereum to this 9455 05:50:05,920 --> 05:50:07,840 contract let's hit 9456 05:50:07,840 --> 05:50:10,558 transact looks like that went through do 9457 05:50:10,558 --> 05:50:12,798 you think result is going to be one or 9458 05:50:12,798 --> 05:50:15,320 zero you thought one you were correct a 9459 05:50:15,320 --> 05:50:17,240 receive function gets triggered anytime 9460 05:50:17,240 --> 05:50:19,280 we send a transaction to this contract 9461 05:50:19,280 --> 05:50:22,478 now and we don't specify a function and 9462 05:50:22,478 --> 05:50:24,798 we keep the call data blank when working 9463 05:50:24,798 --> 05:50:26,958 with any other contract like fundme for 9464 05:50:26,958 --> 05:50:28,878 example when we call one of these 9465 05:50:28,878 --> 05:50:31,080 functions we're actually just Po in this 9466 05:50:31,080 --> 05:50:33,040 call data bit with certain data that 9467 05:50:33,040 --> 05:50:35,600 points to one of these functions up here 9468 05:50:35,600 --> 05:50:38,040 if we send a transaction and we add data 9469 05:50:38,040 --> 05:50:40,120 to it we could actually call one of 9470 05:50:40,120 --> 05:50:41,840 these functions now let's try this again 9471 05:50:41,840 --> 05:50:43,520 let's delete the contract again we'll 9472 05:50:43,520 --> 05:50:45,878 redeploy open this up result is 9473 05:50:45,878 --> 05:50:48,558 currently zero receive like I said only 9474 05:50:48,558 --> 05:50:51,200 is triggered if our call data to it is 9475 05:50:51,200 --> 05:50:53,878 blank now this time if I add some call 9476 05:50:53,878 --> 05:50:56,080 data to this transaction you think 9477 05:50:56,080 --> 05:50:57,840 receive will be triggered this time if 9478 05:50:57,840 --> 05:50:59,798 we hit transact and remix we actually 9479 05:50:59,798 --> 05:51:02,160 get a popup saying fallback function is 9480 05:51:02,160 --> 05:51:04,440 not defined this is because whenever 9481 05:51:04,440 --> 05:51:07,718 data is sent with a transaction solidity 9482 05:51:07,718 --> 05:51:10,360 says oh well since you're sending data 9483 05:51:10,360 --> 05:51:12,200 you're not looking for receive you're 9484 05:51:12,200 --> 05:51:14,120 looking for some function so let me look 9485 05:51:14,120 --> 05:51:16,798 for that function for you hm I don't see 9486 05:51:16,798 --> 05:51:19,878 any function that matches the 0x0 0 so 9487 05:51:19,878 --> 05:51:21,798 I'm going to look for your fallback 9488 05:51:21,798 --> 05:51:23,920 Function Remix is smart enough to know 9489 05:51:23,920 --> 05:51:26,320 that we don't have a fallback function 9490 05:51:26,320 --> 05:51:28,120 the second special function in solidity 9491 05:51:28,120 --> 05:51:30,360 is called the fallback function this is 9492 05:51:30,360 --> 05:51:33,040 very similar to the receive function 9493 05:51:33,040 --> 05:51:34,798 except for the fact that it can work 9494 05:51:34,798 --> 05:51:36,798 even when data is sent along with 9495 05:51:36,798 --> 05:51:38,478 transaction so our fallback will look 9496 05:51:38,478 --> 05:51:40,840 something like this 9497 05:51:40,840 --> 05:51:43,360 fallback 9498 05:51:43,360 --> 05:51:46,040 external 9499 05:51:46,040 --> 05:51:50,160 payable result equals 2 fallback is 9500 05:51:50,160 --> 05:51:51,478 another one of these functions where 9501 05:51:51,478 --> 05:51:52,920 we're not going to put the function 9502 05:51:52,920 --> 05:51:55,120 selector because solidity is expecting 9503 05:51:55,120 --> 05:51:57,080 this actually you're already familiar 9504 05:51:57,080 --> 05:51:59,760 with one other special function if we go 9505 05:51:59,760 --> 05:52:02,840 back to our funme our Constructor for 9506 05:52:02,840 --> 05:52:05,080 example is another type of special 9507 05:52:05,080 --> 05:52:07,160 function there's no function key keyword 9508 05:52:07,160 --> 05:52:09,440 solidity knows that this Constructor is 9509 05:52:09,440 --> 05:52:11,320 immediately called when we deploy this 9510 05:52:11,320 --> 05:52:13,400 contract so now we have our fallback 9511 05:52:13,400 --> 05:52:16,160 function let's go ahead and compile this 9512 05:52:16,160 --> 05:52:17,638 let's delete our old 9513 05:52:17,638 --> 05:52:19,920 contract let's go ahead and deploy this 9514 05:52:19,920 --> 05:52:23,440 new contract let's click here we hit 9515 05:52:23,440 --> 05:52:27,080 result we do indeed see it's set to zero 9516 05:52:27,080 --> 05:52:31,240 now if I add this 0x00 0 and I send this 9517 05:52:31,240 --> 05:52:33,840 and I hit transact this is equivalent to 9518 05:52:33,840 --> 05:52:35,840 calling our contract here without a 9519 05:52:35,840 --> 05:52:38,080 valid function so our contract goes hm I 9520 05:52:38,080 --> 05:52:39,280 don't recognize what you're trying to 9521 05:52:39,280 --> 05:52:41,120 tell me here I'm going to refer you to 9522 05:52:41,120 --> 05:52:44,320 our fallback now if we hit result we see 9523 05:52:44,320 --> 05:52:46,638 that it's been updated to two if we take 9524 05:52:46,638 --> 05:52:49,638 this away solidity will go hm it looks 9525 05:52:49,638 --> 05:52:51,080 like you're trying to send some ethereum 9526 05:52:51,080 --> 05:52:53,000 or call this contract without specifying 9527 05:52:53,000 --> 05:52:54,680 what you want to do well I have a 9528 05:52:54,680 --> 05:52:56,440 receive function so I'm just going to go 9529 05:52:56,440 --> 05:52:58,200 ahead and forward you to that so if we 9530 05:52:58,200 --> 05:53:01,040 call transact we hit result we see it 9531 05:53:01,040 --> 05:53:03,840 updates back to one add some data hit 9532 05:53:03,840 --> 05:53:06,878 transact we see it updates to two no 9533 05:53:06,878 --> 05:53:09,478 data updates to one solidity by 9534 05:53:09,478 --> 05:53:12,320 example.org has a wonderful little chart 9535 05:53:12,320 --> 05:53:14,558 that we can use to figure out whether 9536 05:53:14,558 --> 05:53:16,400 not receive is going to get triggered or 9537 05:53:16,400 --> 05:53:18,240 fallback is going to get triggered if it 9538 05:53:18,240 --> 05:53:20,360 is empty and there's a receive function 9539 05:53:20,360 --> 05:53:23,200 it'll call the receive function if it is 9540 05:53:23,200 --> 05:53:25,360 data and there's no receive function 9541 05:53:25,360 --> 05:53:27,680 it'll just go to the fallback function 9542 05:53:27,680 --> 05:53:29,360 and if there's no fallback function it 9543 05:53:29,360 --> 05:53:31,718 might just it might error out so this is 9544 05:53:31,718 --> 05:53:33,280 a lot of really fantastic information 9545 05:53:33,280 --> 05:53:36,600 here how can we apply this to our fundme 9546 05:53:36,600 --> 05:53:39,160 contract here well what we can do now in 9547 05:53:39,160 --> 05:53:41,878 our fundme is we can add these fallback 9548 05:53:41,878 --> 05:53:44,080 and receive functions just in case 9549 05:53:44,080 --> 05:53:45,798 somebody actually sends this contract 9550 05:53:45,798 --> 05:53:47,360 money instead of calling the fund 9551 05:53:47,360 --> 05:53:49,718 function correctly so what we can do is 9552 05:53:49,718 --> 05:53:51,840 let's add a receive function so if 9553 05:53:51,840 --> 05:53:53,798 somebody accidentally sends it money we 9554 05:53:53,798 --> 05:53:55,558 can still process the transaction we'll 9555 05:53:55,558 --> 05:53:59,958 say receive is going to be external 9556 05:53:59,958 --> 05:54:02,400 payable and we'll just have the receive 9557 05:54:02,400 --> 05:54:05,478 function call fund and we'll do the same 9558 05:54:05,478 --> 05:54:07,400 thing with our fall 9559 05:54:07,400 --> 05:54:12,440 function we'll have fallback external 9560 05:54:12,798 --> 05:54:14,920 payable we'll just have it automatically 9561 05:54:14,920 --> 05:54:18,400 call fund now if somebody accidentally 9562 05:54:18,400 --> 05:54:20,120 sends this money without calling our 9563 05:54:20,120 --> 05:54:23,120 fund function it'll still automatically 9564 05:54:23,120 --> 05:54:25,520 route them over to the fund function 9565 05:54:25,520 --> 05:54:27,520 this means too that if somebody doesn't 9566 05:54:27,520 --> 05:54:30,120 send us enough funding it'll that 9567 05:54:30,120 --> 05:54:32,240 transaction will still get reverted so 9568 05:54:32,240 --> 05:54:34,000 let's go ahead now and let's switch to 9569 05:54:34,000 --> 05:54:36,558 rink B to test this on a real test net 9570 05:54:36,558 --> 05:54:39,120 I'm on rink be and my metamask let's 9571 05:54:39,120 --> 05:54:42,240 switch over to injected web 3 and we'll 9572 05:54:42,240 --> 05:54:44,600 scroll down we'll choose our fundme 9573 05:54:44,600 --> 05:54:47,280 contract and we'll go ahead and deploy 9574 05:54:47,280 --> 05:54:50,160 this menam mask pops up I'm going to go 9575 05:54:50,160 --> 05:54:52,080 ahead and confirm the transaction and we 9576 05:54:52,080 --> 05:54:54,320 see our fundme contract here right now 9577 05:54:54,320 --> 05:54:56,040 we can see the own we can see I'm the 9578 05:54:56,040 --> 05:54:58,920 owner we can see minimum USD and we can 9579 05:54:58,920 --> 05:55:01,200 see of course that it's a blank contract 9580 05:55:01,200 --> 05:55:03,160 and there's nothing funded in here if we 9581 05:55:03,160 --> 05:55:05,200 copy the address and then go to Rinky 9582 05:55:05,200 --> 05:55:07,520 ether scan 9583 05:55:07,520 --> 05:55:10,718 paste the address in we can see that 9584 05:55:10,718 --> 05:55:12,600 there's no ether in here and the only 9585 05:55:12,600 --> 05:55:14,320 transaction associated with this has 9586 05:55:14,320 --> 05:55:16,040 been the contract creation we saw what 9587 05:55:16,040 --> 05:55:17,478 happened before when we hit the fund 9588 05:55:17,478 --> 05:55:21,080 function our contract was updated with a 9589 05:55:21,080 --> 05:55:23,280 new balance and that funer was added to 9590 05:55:23,280 --> 05:55:25,680 our array let's see what happens now if 9591 05:55:25,680 --> 05:55:28,160 we just directly send this contract 9592 05:55:28,160 --> 05:55:30,958 money without calling the fund function 9593 05:55:30,958 --> 05:55:34,120 here if we did this right our receive 9594 05:55:34,120 --> 05:55:36,958 function should pick it up and kick the 9595 05:55:36,958 --> 05:55:40,160 transaction over to fund so let's copy 9596 05:55:40,160 --> 05:55:42,400 this address we'll go to our 9597 05:55:42,400 --> 05:55:45,520 metamask we'll hit send paste the 9598 05:55:45,520 --> 05:55:49,120 address in here we'll do 0.02 eth again 9599 05:55:49,120 --> 05:55:51,400 because this should be more than the 9600 05:55:51,400 --> 05:55:55,000 minimum amount in USD we'll hit next 9601 05:55:55,000 --> 05:55:57,718 I'll go ahead and confirm this and after 9602 05:55:57,718 --> 05:56:00,840 a slight delay if we did this right well 9603 05:56:00,840 --> 05:56:03,120 we should see this transaction having 9604 05:56:03,120 --> 05:56:05,200 called the fund function here now that 9605 05:56:05,200 --> 05:56:07,320 our transaction has gone through and 9606 05:56:07,320 --> 05:56:08,760 after a brief delay and waiting for 9607 05:56:08,760 --> 05:56:11,478 ether scan to update we do indeed see 9608 05:56:11,478 --> 05:56:13,400 that our balance has updated to 9609 05:56:13,400 --> 05:56:16,200 0.02 which of course this makes sense 9610 05:56:16,200 --> 05:56:19,040 and we see in the transactions list here 9611 05:56:19,040 --> 05:56:20,400 we see that this actually went through 9612 05:56:20,400 --> 05:56:22,600 as a as a transfer instead of what's 9613 05:56:22,600 --> 05:56:24,680 calling the fund function let's go ahead 9614 05:56:24,680 --> 05:56:27,878 and remix and see if our funders was 9615 05:56:27,878 --> 05:56:30,840 updated it looks like it was at the 9616 05:56:30,840 --> 05:56:33,000 zeroth position of funders we have our 9617 05:56:33,000 --> 05:56:35,280 address and if we take our address and 9618 05:56:35,280 --> 05:56:37,680 pop it into address to amount funded we 9619 05:56:37,680 --> 05:56:40,360 can see exactly how much we had funded 9620 05:56:40,360 --> 05:56:41,718 this means that since we added this 9621 05:56:41,718 --> 05:56:43,520 receive function in here we 9622 05:56:43,520 --> 05:56:45,920 automatically had to call our fund 9623 05:56:45,920 --> 05:56:48,000 function up here so awesome work we were 9624 05:56:48,000 --> 05:56:50,680 able to add a receive function to help 9625 05:56:50,680 --> 05:56:53,000 people who accidentally call the wrong 9626 05:56:53,000 --> 05:56:55,120 function or accidentally send this 9627 05:56:55,120 --> 05:56:57,160 contract money instead of correctly 9628 05:56:57,160 --> 05:56:59,478 calling the fund function now if they 9629 05:56:59,478 --> 05:57:01,520 had directly called the fund function it 9630 05:57:01,520 --> 05:57:02,958 would have cost them a little bit less 9631 05:57:02,958 --> 05:57:04,760 gas but at least this time they're going 9632 05:57:04,760 --> 05:57:06,360 to get credit and added to to our 9633 05:57:06,360 --> 05:57:08,120 funders array for having sent our 9634 05:57:08,120 --> 05:57:10,878 funding contract 9635 05:57:11,040 --> 05:57:13,680 money we've even learned some Advanced 9636 05:57:13,680 --> 05:57:15,558 sections of solidity and this is going 9637 05:57:15,558 --> 05:57:17,080 to be the last time that we start our 9638 05:57:17,080 --> 05:57:19,200 projects in remix we're going to be 9639 05:57:19,200 --> 05:57:22,080 moving over to a code editor now where 9640 05:57:22,080 --> 05:57:23,638 we can get even more advanced with our 9641 05:57:23,638 --> 05:57:26,360 solidity and our setups for the most 9642 05:57:26,360 --> 05:57:28,280 part you've gone over the vast majority 9643 05:57:28,280 --> 05:57:30,360 of solidity Basics there are a number of 9644 05:57:30,360 --> 05:57:32,160 things that we still haven't learned yet 9645 05:57:32,160 --> 05:57:34,000 and the reason we haven't gone into them 9646 05:57:34,000 --> 05:57:35,760 is because they get more advanced and 9647 05:57:35,760 --> 05:57:37,400 understanding the real use doesn't 9648 05:57:37,400 --> 05:57:38,760 really make too much sense until a 9649 05:57:38,760 --> 05:57:40,280 little bit later some of the things that 9650 05:57:40,280 --> 05:57:42,920 we're going to go over are enims events 9651 05:57:42,920 --> 05:57:45,558 try catch function selectors ABI 9652 05:57:45,558 --> 05:57:47,798 encoding hashing and then U slash and 9653 05:57:47,798 --> 05:57:49,878 then u/ assembly however if you've 9654 05:57:49,878 --> 05:57:51,920 gotten this far you probably can read 9655 05:57:51,920 --> 05:57:54,080 most solidity code and understand what's 9656 05:57:54,080 --> 05:57:56,798 going on which is absolutely fantastic 9657 05:57:56,798 --> 05:57:58,478 so you should give yourself a huge round 9658 05:57:58,478 --> 05:58:00,440 of applause for getting this far in 9659 05:58:00,440 --> 05:58:02,400 doing this let's do a quick summary of 9660 05:58:02,400 --> 05:58:04,400 this more advanced section and make sure 9661 05:58:04,400 --> 05:58:06,360 we understand what we learned in Sol 9662 05:58:06,360 --> 05:58:08,080 there are a couple special functions 9663 05:58:08,080 --> 05:58:11,440 some of them are receive fallback and 9664 05:58:11,440 --> 05:58:13,638 Constructor these functions don't need 9665 05:58:13,638 --> 05:58:16,360 to have the function keyword and instead 9666 05:58:16,360 --> 05:58:19,080 can just be called like so receive and 9667 05:58:19,080 --> 05:58:21,360 fallback are two very special functions 9668 05:58:21,360 --> 05:58:24,040 if data is sent with a transaction and 9669 05:58:24,040 --> 05:58:26,160 no function was specified the 9670 05:58:26,160 --> 05:58:27,878 transaction will default to the fallback 9671 05:58:27,878 --> 05:58:29,718 function if that fallback function 9672 05:58:29,718 --> 05:58:32,320 exists if data is empty and there's a 9673 05:58:32,320 --> 05:58:34,840 receive function it'll call the receive 9674 05:58:34,840 --> 05:58:37,120 function there are a couple of keywords 9675 05:58:37,120 --> 05:58:39,440 that can help us save gas in the long 9676 05:58:39,440 --> 05:58:40,920 run some of those keywords are going to 9677 05:58:40,920 --> 05:58:43,320 be constant and immutable constant and 9678 05:58:43,320 --> 05:58:45,080 immutable are for variables that can 9679 05:58:45,080 --> 05:58:47,718 only be declared and updated once once 9680 05:58:47,718 --> 05:58:51,958 we say minimum USD is 50 * 1 E18 this 9681 05:58:51,958 --> 05:58:54,760 minimum USD can never be changed again 9682 05:58:54,760 --> 05:58:57,120 and this helps us save gas IM mutable 9683 05:58:57,120 --> 05:58:59,798 can also save gas similar to constant 9684 05:58:59,798 --> 05:59:01,400 however immutable variables can be 9685 05:59:01,400 --> 05:59:03,840 declared one time in the Constructor 9686 05:59:03,840 --> 05:59:06,718 once an immutable variable is declared 9687 05:59:06,718 --> 05:59:09,000 it can't be changed later on in fact if 9688 05:59:09,000 --> 05:59:11,240 we even tried to update an immutable 9689 05:59:11,240 --> 05:59:13,798 variable or a constant variable and we 9690 05:59:13,798 --> 05:59:15,878 compiled a compiler would give us an 9691 05:59:15,878 --> 05:59:18,600 error saying can't write to immutable 9692 05:59:18,600 --> 05:59:21,718 here or if we tried to change a constant 9693 05:59:21,718 --> 05:59:24,520 variable our compiler would say hey you 9694 05:59:24,520 --> 05:59:26,200 can't assign to a constant variable 9695 05:59:26,200 --> 05:59:28,558 sorry in remix if we want to send ether 9696 05:59:28,558 --> 05:59:30,120 to a contract that's on the JavaScript 9697 05:59:30,120 --> 05:59:32,280 virtual machine we can deploy that 9698 05:59:32,280 --> 05:59:34,520 contract and then in the contract we can 9699 05:59:34,520 --> 05:59:36,638 just hit the transact button without any 9700 05:59:36,638 --> 05:59:39,000 call data and update the value that we 9701 05:59:39,000 --> 05:59:40,840 send with the transaction if call data 9702 05:59:40,840 --> 05:59:43,360 is blank it'll trigger a receive 9703 05:59:43,360 --> 05:59:45,840 function if it exists but if there's 9704 05:59:45,840 --> 05:59:47,840 data that doesn't specify any of the 9705 05:59:47,840 --> 05:59:49,600 other functions it'll trigger the 9706 05:59:49,600 --> 05:59:53,080 fallback function 9707 06:00:18,040 --> 06:00:20,080 all right my code's done time to ship it 9708 06:00:20,080 --> 06:00:23,040 free box to you dog water zero earn zpr 9709 06:00:23,040 --> 06:00:24,558 in the age of AI debugging and getting 9710 06:00:24,558 --> 06:00:25,840 into software engineering has never been 9711 06:00:25,840 --> 06:00:27,600 easier here the exact six steps you need 9712 06:00:27,600 --> 06:00:29,080 to take to unblock yourself from any 9713 06:00:29,080 --> 06:00:30,520 software engineering area you'll ever 9714 06:00:30,520 --> 06:00:32,320 get number one Tinker try to pinpoint 9715 06:00:32,320 --> 06:00:33,958 your air you can usually use an AI buddy 9716 06:00:33,958 --> 06:00:35,360 to help you out here pinpointing your 9717 06:00:35,360 --> 06:00:36,840 air will potentially solve your problem 9718 06:00:36,840 --> 06:00:38,558 before even going to an AI and allow you 9719 06:00:38,558 --> 06:00:40,200 to craft a better question to an AI once 9720 06:00:40,200 --> 06:00:41,718 You' pinpointed the issue you can move 9721 06:00:41,718 --> 06:00:43,760 to step two which is ask your AI you can 9722 06:00:43,760 --> 06:00:46,520 use chat gbt find Bing's AI or if you 9723 06:00:46,520 --> 06:00:47,760 want to get wrong answers Google's 9724 06:00:47,760 --> 06:00:49,478 barred there's six principles to prompt 9725 06:00:49,478 --> 06:00:50,680 engineering so that you can get the best 9726 06:00:50,680 --> 06:00:52,798 out of your AI write clear and Specific 9727 06:00:52,798 --> 06:00:54,878 Instructions give as much context as 9728 06:00:54,878 --> 06:00:56,798 possible use delimiters to clearly 9729 06:00:56,798 --> 06:00:58,920 indicate distinct parts of the input and 9730 06:00:58,920 --> 06:01:00,478 especially look out for something called 9731 06:01:00,478 --> 06:01:02,360 hallucinations hallucinations are when 9732 06:01:02,360 --> 06:01:03,840 your AI gives you an output that it 9733 06:01:03,840 --> 06:01:05,080 thinks is right but it's completely 9734 06:01:05,080 --> 06:01:06,558 wrong for example if I write about 9735 06:01:06,558 --> 06:01:08,000 writing solidity and variant tests in 9736 06:01:08,000 --> 06:01:10,000 Foundry disgraces Us by saying we have 9737 06:01:10,000 --> 06:01:11,878 to mpm install it from open Zeppelin 9738 06:01:11,878 --> 06:01:13,120 these can be tough to spot but once you 9739 06:01:13,120 --> 06:01:14,600 try it out you'll see it doesn't work 9740 06:01:14,600 --> 06:01:16,040 and finally you want to understand the 9741 06:01:16,040 --> 06:01:17,478 limitations of the AI you're working 9742 06:01:17,478 --> 06:01:19,600 with and iterate constantly large 9743 06:01:19,600 --> 06:01:21,080 learning language models are trained on 9744 06:01:21,080 --> 06:01:22,958 human conversations so you can interact 9745 06:01:22,958 --> 06:01:23,920 with them as if you're having a 9746 06:01:23,920 --> 06:01:25,440 conversation but it's important to know 9747 06:01:25,440 --> 06:01:27,878 the limitations of these AIS as most AIS 9748 06:01:27,878 --> 06:01:29,718 have a limit on how many tokens or words 9749 06:01:29,718 --> 06:01:31,760 they can keep in context at one time AI 9750 06:01:31,760 --> 06:01:33,080 is trained off human language so if 9751 06:01:33,080 --> 06:01:34,240 you're good at asking other humans 9752 06:01:34,240 --> 06:01:35,280 questions you'll probably be good at 9753 06:01:35,280 --> 06:01:37,080 asking robots questions too asking 9754 06:01:37,080 --> 06:01:38,958 questions is a skill so keep practicing 9755 06:01:38,958 --> 06:01:40,280 I've got a link in the description to 9756 06:01:40,280 --> 06:01:42,520 learn. deeplearning.ai which is a free 9757 06:01:42,520 --> 06:01:44,040 course to help software Engineers be 9758 06:01:44,040 --> 06:01:46,320 better prompt Engineers now when the AIS 9759 06:01:46,320 --> 06:01:47,680 can't help you you'll have to go back to 9760 06:01:47,680 --> 06:01:49,478 the old standbys actually doing work 9761 06:01:49,478 --> 06:01:51,040 yourself and one of the first pieces of 9762 06:01:51,040 --> 06:01:52,760 work is reading the documentation you 9763 06:01:52,760 --> 06:01:54,000 probably should have done this already 9764 06:01:54,000 --> 06:01:56,040 however we can still use chat gbt cuz a 9765 06:01:56,040 --> 06:01:57,798 strategy that I constantly use is I'll 9766 06:01:57,798 --> 06:02:00,000 copy paste sections of the documentation 9767 06:02:00,000 --> 06:02:03,000 at chpts context and say some like the 9768 06:02:03,000 --> 06:02:04,760 above are the docs for Tool X based on 9769 06:02:04,760 --> 06:02:06,798 those docs how do I do why so Google 9770 06:02:06,798 --> 06:02:08,280 might be crying because chat PT is 9771 06:02:08,280 --> 06:02:09,878 eating its lunch but Google still has 9772 06:02:09,878 --> 06:02:12,120 what AI doesn't have the entire internet 9773 06:02:12,120 --> 06:02:14,160 previously anytime I ran into an issue I 9774 06:02:14,160 --> 06:02:15,400 prayed someone else to run into it 9775 06:02:15,400 --> 06:02:16,638 before I made a post on it so I could 9776 06:02:16,638 --> 06:02:18,400 Google search that exact issue there's a 9777 06:02:18,400 --> 06:02:19,878 new tool called fine that combines web 9778 06:02:19,878 --> 06:02:22,120 search with AI as it does a web search 9779 06:02:22,120 --> 06:02:23,718 and it crawls through all the data of 9780 06:02:23,718 --> 06:02:25,478 the sites reads them all and then gives 9781 06:02:25,478 --> 06:02:27,760 you an answer based off of what it reads 9782 06:02:27,760 --> 06:02:29,400 five asking a forum sometimes the 9783 06:02:29,400 --> 06:02:30,760 information just isn't out there and we 9784 06:02:30,760 --> 06:02:33,280 need to ask human beings we always want 9785 06:02:33,280 --> 06:02:35,120 to ask our question on a webbed index 9786 06:02:35,120 --> 06:02:37,760 Forum like stack exchange stack Overflow 9787 06:02:37,760 --> 06:02:39,798 pirana or Reddit this way webcrawlers 9788 06:02:39,798 --> 06:02:41,958 and more likely AIS can scrape the data 9789 06:02:41,958 --> 06:02:44,200 from these sites and learn from us that 9790 06:02:44,200 --> 06:02:45,558 way the next time we have this question 9791 06:02:45,558 --> 06:02:47,400 we can get our answers quickly asking on 9792 06:02:47,400 --> 06:02:48,840 Discord and Twitter are because your 9793 06:02:48,840 --> 06:02:49,920 knowledge will get lost to the 9794 06:02:49,920 --> 06:02:52,000 unsearchable hellhole of conversations 9795 06:02:52,000 --> 06:02:53,760 that Discord is and web crawlers don't 9796 06:02:53,760 --> 06:02:56,120 index them the super secret alpha is to 9797 06:02:56,120 --> 06:02:57,840 ask a question on stack exchange and 9798 06:02:57,840 --> 06:02:59,520 then post your stack exchange link to 9799 06:02:59,520 --> 06:03:01,680 Discord you should 100% always ask your 9800 06:03:01,680 --> 06:03:03,638 questions and format them with markdown 9801 06:03:03,638 --> 06:03:04,600 and if you're not sure how to do 9802 06:03:04,600 --> 06:03:06,920 markdown you can ask chat to to help you 9803 06:03:06,920 --> 06:03:08,638 format your questions and markdown ask 9804 06:03:08,638 --> 06:03:10,280 on the support GitHub or forum is the 9805 06:03:10,280 --> 06:03:11,638 tool you're working on open source 9806 06:03:11,638 --> 06:03:13,240 awesome ask a well formatted question on 9807 06:03:13,240 --> 06:03:15,280 their git page not open source never use 9808 06:03:15,280 --> 06:03:16,760 that tool again this is how we improve 9809 06:03:16,760 --> 06:03:18,440 our tools by creating issues engaging 9810 06:03:18,440 --> 06:03:19,718 with each other and even taking on 9811 06:03:19,718 --> 06:03:21,000 issues and contributing to the open 9812 06:03:21,000 --> 06:03:22,958 source code and then finally iterate do 9813 06:03:22,958 --> 06:03:24,760 all these same steps over again and as 9814 06:03:24,760 --> 06:03:26,878 always keep hopping through the code and 9815 06:03:26,878 --> 06:03:29,000 until next time stay riveting my fellow 9816 06:03:29,000 --> 06:03:31,630 blockchain ear 9817 06:03:31,630 --> 06:03:37,599 [Music] 9818 06:03:38,878 --> 06:03:40,600 all right fantastic so now we know a 9819 06:03:40,600 --> 06:03:42,638 little bit more about the different 9820 06:03:42,638 --> 06:03:44,760 tools and techniques we can use when we 9821 06:03:44,760 --> 06:03:47,040 do in fact get stuck we can use 9822 06:03:47,040 --> 06:03:50,080 something like chat TBT forums to ask 9823 06:03:50,080 --> 06:03:51,400 questions we obviously want to Google 9824 06:03:51,400 --> 06:03:54,280 search and especially for this course 9825 06:03:54,280 --> 06:03:56,000 you definitely want to make sure you use 9826 06:03:56,000 --> 06:03:57,638 the discussions Channel but I wanted to 9827 06:03:57,638 --> 06:04:00,040 give you some very specific tips about 9828 06:04:00,040 --> 06:04:02,798 working with this course number one 9829 06:04:02,798 --> 06:04:05,280 limit your self triaging to 15 or 20 9830 06:04:05,280 --> 06:04:07,558 minutes for example if we're trying to 9831 06:04:07,558 --> 06:04:09,840 compile our price converter doou and 9832 06:04:09,840 --> 06:04:11,680 maybe we forgot to add the address in 9833 06:04:11,680 --> 06:04:13,360 here right and we're going ahead and 9834 06:04:13,360 --> 06:04:15,000 compile and we're getting this error 9835 06:04:15,000 --> 06:04:17,638 this is exactly one argument expected 9836 06:04:17,638 --> 06:04:19,920 for explicit type conversion now this 9837 06:04:19,920 --> 06:04:21,280 should be pretty obvious what the error 9838 06:04:21,280 --> 06:04:23,478 is hey it's expecting one argument and 9839 06:04:23,478 --> 06:04:25,478 we obviously just removed that argument 9840 06:04:25,478 --> 06:04:27,120 but maybe you're having a really hard 9841 06:04:27,120 --> 06:04:28,680 time and you're trying all this 9842 06:04:28,680 --> 06:04:29,878 different stuff and you can't seem to 9843 06:04:29,878 --> 06:04:32,878 figure it out limit yourself to 15 or 20 9844 06:04:32,878 --> 06:04:35,718 minutes we do not want to be messing 9845 06:04:35,718 --> 06:04:38,320 around for so long that we can't figure 9846 06:04:38,320 --> 06:04:39,638 something out right something like this 9847 06:04:39,638 --> 06:04:42,920 would be very easy for us to compile 9848 06:04:42,920 --> 06:04:45,760 copy this error go to chat gbt and say 9849 06:04:45,760 --> 06:04:49,840 something like hey I'm getting an error 9850 06:04:49,840 --> 06:04:54,320 compiling my solidity here is the error 9851 06:04:54,320 --> 06:04:56,200 do three back ticks paste it in here 9852 06:04:56,200 --> 06:04:58,920 like that three back ticks is markdown 9853 06:04:58,920 --> 06:05:00,280 and like we said in the video we want to 9854 06:05:00,280 --> 06:05:03,558 use delimiters to clearly identify what 9855 06:05:03,558 --> 06:05:06,120 is Code versus what is not oops and I 9856 06:05:06,120 --> 06:05:08,120 hit and I hit enter whoops the daisy 9857 06:05:08,120 --> 06:05:09,240 we're actually going toit stop 9858 06:05:09,240 --> 06:05:11,840 generating and we're going to copy paste 9859 06:05:11,840 --> 06:05:13,680 the question again now we're going to 9860 06:05:13,680 --> 06:05:18,718 say here is my solidity it's wrong then 9861 06:05:18,718 --> 06:05:20,360 we'll copy the solidity 9862 06:05:20,360 --> 06:05:23,320 line once again three back ticks we'll 9863 06:05:23,320 --> 06:05:25,558 say solidity here we'll paste it in 9864 06:05:25,558 --> 06:05:27,718 three back ticks to end it hit enter and 9865 06:05:27,718 --> 06:05:29,680 it'll probably give us the answer here 9866 06:05:29,680 --> 06:05:30,798 and sure enough the error message 9867 06:05:30,798 --> 06:05:32,120 suggests that you need to provide an 9868 06:05:32,120 --> 06:05:33,840 address when using explicit type 9869 06:05:33,840 --> 06:05:36,080 conversion so we go ah okay whoops we 9870 06:05:36,080 --> 06:05:38,000 need to actually add an address in here 9871 06:05:38,000 --> 06:05:39,920 it gives us an example and we can go 9872 06:05:39,920 --> 06:05:41,440 back to our code and you know paste that 9873 06:05:41,440 --> 06:05:43,600 address in here and be good to go so 9874 06:05:43,600 --> 06:05:46,600 limit self triage to 15 20 minutes 9875 06:05:46,600 --> 06:05:48,400 that's going to be the first tip number 9876 06:05:48,400 --> 06:05:53,958 two don't be afraid to ask AI but don't 9877 06:05:53,958 --> 06:05:56,840 skip learning the purpose of this course 9878 06:05:56,840 --> 06:05:59,000 is for you to be able to learn 9879 06:05:59,000 --> 06:06:01,360 everything here AI is going to get 9880 06:06:01,360 --> 06:06:03,520 things wrong and it's only the people 9881 06:06:03,520 --> 06:06:05,760 who actually have learned what's going 9882 06:06:05,760 --> 06:06:07,160 on under the hood who are going to be 9883 06:06:07,160 --> 06:06:09,200 able to call out when AI gets something 9884 06:06:09,200 --> 06:06:11,520 wrong when AI gets something wrong it 9885 06:06:11,520 --> 06:06:13,558 does something called hallucinate and we 9886 06:06:13,558 --> 06:06:15,000 talked a little bit about that in that 9887 06:06:15,000 --> 06:06:17,320 AI video we just watched so 9888 06:06:17,320 --> 06:06:19,320 hallucinations are when the AI makes 9889 06:06:19,320 --> 06:06:21,200 something up that it thinks is right but 9890 06:06:21,200 --> 06:06:22,558 it's completely wrong and that's 9891 06:06:22,558 --> 06:06:24,440 something we absolutely need to watch 9892 06:06:24,440 --> 06:06:25,798 out for when we're coding and when we're 9893 06:06:25,798 --> 06:06:28,080 learning a perfect example of this is 9894 06:06:28,080 --> 06:06:30,000 with Foundry which is a tool we're about 9895 06:06:30,000 --> 06:06:32,000 to learn very soon in order for us to 9896 06:06:32,000 --> 06:06:34,600 install Foundry we actually need to run 9897 06:06:34,600 --> 06:06:37,080 this Command right getf founder. sh it's 9898 06:06:37,080 --> 06:06:39,840 the first thing that it tells us to do 9899 06:06:39,840 --> 06:06:42,798 at the time of recording chat gbt has 9900 06:06:42,798 --> 06:06:46,000 not been trained on The Foundry tool so 9901 06:06:46,000 --> 06:06:48,798 if I ask it a question like I'd like to 9902 06:06:48,798 --> 06:06:51,600 initialize a Foundry project with 9903 06:06:51,600 --> 06:06:56,798 solidity can you show me how to do that 9904 06:06:56,798 --> 06:06:58,760 and we'll let enter so the first 9905 06:06:58,760 --> 06:07:00,798 sentence out the gate is wrong it's not 9906 06:07:00,798 --> 06:07:03,120 aware of Foundry so it tried to guess 9907 06:07:03,120 --> 06:07:04,958 what Foundry was and it got it wrong it 9908 06:07:04,958 --> 06:07:06,718 is not a CR space framework for building 9909 06:07:06,718 --> 06:07:09,200 blockchains at all and it is directly 9910 06:07:09,200 --> 06:07:11,200 related to solidity so it's really 9911 06:07:11,200 --> 06:07:13,558 important that we use AI to augment our 9912 06:07:13,558 --> 06:07:16,200 learning but we don't skip over the 9913 06:07:16,200 --> 06:07:18,400 learning with AI it's really good to 9914 06:07:18,400 --> 06:07:20,798 bounce questions good ideas off of but 9915 06:07:20,798 --> 06:07:22,878 in order for us to be even able to 9916 06:07:22,878 --> 06:07:25,600 recognize when Foundry is hallucinating 9917 06:07:25,600 --> 06:07:27,400 and making stuff up we need to have that 9918 06:07:27,400 --> 06:07:29,478 knowledge ourself step three of course 9919 06:07:29,478 --> 06:07:32,520 use the forms web3 education. deev will 9920 06:07:32,520 --> 06:07:34,680 have a place for you to ask questions 9921 06:07:34,680 --> 06:07:36,120 but in the meantime definitely be sure 9922 06:07:36,120 --> 06:07:37,718 to use The Foundry full course 9923 06:07:37,718 --> 06:07:40,718 discussions use this to your advantage 9924 06:07:40,718 --> 06:07:42,760 and use this to help other people out 9925 06:07:42,760 --> 06:07:44,600 who have questions this is a community 9926 06:07:44,600 --> 06:07:45,600 project we're all going to be helping 9927 06:07:45,600 --> 06:07:47,440 each other out learning number three 9928 06:07:47,440 --> 06:07:50,558 Google the exact error if AI doesn't 9929 06:07:50,558 --> 06:07:53,120 know the forms aren't know Google the 9930 06:07:53,120 --> 06:07:54,958 exact error maybe somebody else has come 9931 06:07:54,958 --> 06:07:57,400 across this error previously asked the 9932 06:07:57,400 --> 06:07:59,638 question online and you can just Google 9933 06:07:59,638 --> 06:08:01,840 it and then of course post your question 9934 06:08:01,840 --> 06:08:03,920 in stack exchange or piranha and like we 9935 06:08:03,920 --> 06:08:06,160 said in that AI video you want to use 9936 06:08:06,160 --> 06:08:07,840 markdown and format your questions as 9937 06:08:07,840 --> 06:08:09,958 best as possible so if you're unfamiliar 9938 06:08:09,958 --> 06:08:11,160 with how to use markdown if you're 9939 06:08:11,160 --> 06:08:13,000 unfamiliar with how to format your 9940 06:08:13,000 --> 06:08:15,440 questions again please be sure to ask 9941 06:08:15,440 --> 06:08:18,440 chat GPT or some other AI how to best 9942 06:08:18,440 --> 06:08:20,080 format your question you can even simply 9943 06:08:20,080 --> 06:08:22,280 say ask chat GPT could you give me an 9944 06:08:22,280 --> 06:08:23,558 example of a well formatted stack 9945 06:08:23,558 --> 06:08:26,638 Overflow question with Cod or code and 9946 06:08:26,638 --> 06:08:28,718 it'll actually give us a really good 9947 06:08:28,718 --> 06:08:30,680 formatted question so it gives us the 9948 06:08:30,680 --> 06:08:33,520 question it formats the code for us it's 9949 06:08:33,520 --> 06:08:35,080 using this with the three back ticks 9950 06:08:35,080 --> 06:08:36,760 that I showed you in order to get this 9951 06:08:36,760 --> 06:08:38,040 code block here it's using three 9952 06:08:38,040 --> 06:08:41,400 backticks and it's being very verbose in 9953 06:08:41,400 --> 06:08:43,600 giving all the details of the question 9954 06:08:43,600 --> 06:08:46,160 so be sure to ask questions like chbt 9955 06:08:46,160 --> 06:08:48,798 awesome again let's say we're in here 9956 06:08:48,798 --> 06:08:51,320 compile get this error exactly when 9957 06:08:51,320 --> 06:08:52,840 argument expected for explicit type 9958 06:08:52,840 --> 06:08:55,680 conversion if we copy this error go to 9959 06:08:55,680 --> 06:08:58,600 Google we paste just the error in we'll 9960 06:08:58,600 --> 06:09:01,280 remove this our specific code looks like 9961 06:09:01,280 --> 06:09:03,000 the first thing we get in Google is 9962 06:09:03,000 --> 06:09:05,000 actually contract inheritance and we can 9963 06:09:05,000 --> 06:09:06,520 see that this is actually exactly the 9964 06:09:06,520 --> 06:09:08,360 error that we're getting it looks like 9965 06:09:08,360 --> 06:09:09,878 this does actually explain the answer 9966 06:09:09,878 --> 06:09:11,600 but it's a little bit confusing to 9967 06:09:11,600 --> 06:09:13,638 understand here so maybe you would copy 9968 06:09:13,638 --> 06:09:15,440 paste this into chat gpts context right 9969 06:09:15,440 --> 06:09:17,798 there's a lot of creative ways you can 9970 06:09:17,798 --> 06:09:19,958 approach debugging some of your issues 9971 06:09:19,958 --> 06:09:21,160 obviously when you're out in the wild 9972 06:09:21,160 --> 06:09:22,200 and you're actually building things 9973 06:09:22,200 --> 06:09:24,520 yourself obviously the education site 9974 06:09:24,520 --> 06:09:26,280 and the discussions channel of the giup 9975 06:09:26,280 --> 06:09:28,360 repo the people in these aren't going to 9976 06:09:28,360 --> 06:09:30,478 have context for the new creative thing 9977 06:09:30,478 --> 06:09:32,120 that you're working on so I want you to 9978 06:09:32,120 --> 06:09:33,958 get used to doing that methodology that 9979 06:09:33,958 --> 06:09:35,760 we're teaching here right asking your AI 9980 06:09:35,760 --> 06:09:37,958 buddy if your AI buddy doesn't know 9981 06:09:37,958 --> 06:09:40,080 Googling asking questions on stack 9982 06:09:40,080 --> 06:09:42,478 exchange ethereum asking questions on 9983 06:09:42,478 --> 06:09:44,440 piranha piran is arguably better because 9984 06:09:44,440 --> 06:09:46,360 you're asking your questions in a 9985 06:09:46,360 --> 06:09:48,240 decentralized location as opposed to a 9986 06:09:48,240 --> 06:09:50,718 centralized server but I definitely want 9987 06:09:50,718 --> 06:09:53,600 you to practice asking questions and go 9988 06:09:53,600 --> 06:09:56,240 to piran go to stack exchange make 9989 06:09:56,240 --> 06:09:58,478 accounts for these so that when you do 9990 06:09:58,478 --> 06:10:00,840 run into an issue because you will 9991 06:10:00,840 --> 06:10:02,440 you'll know where to post them high 9992 06:10:02,440 --> 06:10:03,840 encourage you to pause and post a 9993 06:10:03,840 --> 06:10:05,360 question on one of these forms right now 9994 06:10:05,360 --> 06:10:07,320 now just so that you get used to it just 9995 06:10:07,320 --> 06:10:09,440 so that you get out of your shell and 9996 06:10:09,440 --> 06:10:10,958 you're going to suck at asking questions 9997 06:10:10,958 --> 06:10:12,638 in the beginning and that's okay you 9998 06:10:12,638 --> 06:10:14,440 will get better at asking questions as 9999 06:10:14,440 --> 06:10:16,558 you continue with this course asking 10000 06:10:16,558 --> 06:10:20,160 good questions is a skill in itself and 10001 06:10:20,160 --> 06:10:23,040 if you learn how to ask very good 10002 06:10:23,040 --> 06:10:25,360 questions that's the secret sauce to 10003 06:10:25,360 --> 06:10:28,040 being amazing at AI prompting as well 10004 06:10:28,040 --> 06:10:29,878 now the final step in all of this is 10005 06:10:29,878 --> 06:10:32,280 actually going to be posting an issue on 10006 06:10:32,280 --> 06:10:35,638 GitHub SLG a surprisingly incred 10007 06:10:35,638 --> 06:10:37,958 important part of being a software 10008 06:10:37,958 --> 06:10:40,558 engineer and being a developer in web 3 10009 06:10:40,558 --> 06:10:42,600 is interacting with the community the 10010 06:10:42,600 --> 06:10:43,840 vast majority of these tools that we're 10011 06:10:43,840 --> 06:10:45,718 working with are going to be something 10012 06:10:45,718 --> 06:10:48,040 called open source meaning that the code 10013 06:10:48,040 --> 06:10:49,600 associated with them is actually 10014 06:10:49,600 --> 06:10:51,920 available for anybody to view this tool 10015 06:10:51,920 --> 06:10:53,080 Foundry that we're going to be working 10016 06:10:53,080 --> 06:10:56,000 with is one such example and if you see 10017 06:10:56,000 --> 06:10:57,958 it has this issues tab where there's 10018 06:10:57,958 --> 06:11:01,160 just a ton of issues people are posting 10019 06:11:01,160 --> 06:11:03,920 while using this tool this is how code 10020 06:11:03,920 --> 06:11:06,280 is able to be improved and move forward 10021 06:11:06,280 --> 06:11:07,958 all this code is public for people to 10022 06:11:07,958 --> 06:11:10,040 use and work with and if there's a 10023 06:11:10,040 --> 06:11:11,680 question that isn't answered you can 10024 06:11:11,680 --> 06:11:13,798 post here and tell the developers of 10025 06:11:13,798 --> 06:11:15,760 this tool hey I'm running into an issue 10026 06:11:15,760 --> 06:11:17,080 maybe we should make a project 10027 06:11:17,080 --> 06:11:18,798 Improvement I would say be very 10028 06:11:18,798 --> 06:11:20,240 respectful with the way that you make 10029 06:11:20,240 --> 06:11:22,040 issues you definitely want to do some 10030 06:11:22,040 --> 06:11:23,920 searching on issues to make sure that 10031 06:11:23,920 --> 06:11:25,798 nobody else has asked the question that 10032 06:11:25,798 --> 06:11:27,760 you're working with and be to sure to 10033 06:11:27,760 --> 06:11:29,680 use these other resources first like 10034 06:11:29,680 --> 06:11:31,760 panha like stack exchange but in the 10035 06:11:31,760 --> 06:11:33,080 future once you leave this court it's 10036 06:11:33,080 --> 06:11:34,680 going to be incredibly important for you 10037 06:11:34,680 --> 06:11:36,200 to participate in the ecosystem by 10038 06:11:36,200 --> 06:11:38,520 making issues by making poll requests 10039 06:11:38,520 --> 06:11:40,040 and actually improving some of the tools 10040 06:11:40,040 --> 06:11:40,958 that we're going to be working with 10041 06:11:40,958 --> 06:11:43,760 yourself even ethereum has a GitHub and 10042 06:11:43,760 --> 06:11:45,680 if there's any improvements that you 10043 06:11:45,680 --> 06:11:47,798 want to make you can add an EIP to 10044 06:11:47,798 --> 06:11:49,718 actually improve ethereum we'll talk 10045 06:11:49,718 --> 06:11:51,760 about EIP some more later you can 10046 06:11:51,760 --> 06:11:53,160 improve some of the clients that 10047 06:11:53,160 --> 06:11:55,040 ethereum runs so interacting with each 10048 06:11:55,040 --> 06:11:57,120 other is incredibly important and in 10049 06:11:57,120 --> 06:11:59,558 fact if you don't have a GitHub we are 10050 06:11:59,558 --> 06:12:02,000 going to get you set up with GitHub 10051 06:12:02,000 --> 06:12:04,638 right now because GitHub is the platform 10052 06:12:04,638 --> 06:12:07,440 that most developers use to share code 10053 06:12:07,440 --> 06:12:09,360 and write code and interact with code in 10054 06:12:09,360 --> 06:12:11,120 between each other so if you don't have 10055 06:12:11,120 --> 06:12:13,280 a GitHub let's sign up right now and 10056 06:12:13,280 --> 06:12:15,280 we're going to use the GitHub to create 10057 06:12:15,280 --> 06:12:17,600 our own portfolios of all the different 10058 06:12:17,600 --> 06:12:19,638 cool coding projects that we've created 10059 06:12:19,638 --> 06:12:21,878 this way when you go to apply for a job 10060 06:12:21,878 --> 06:12:23,360 you can say hey go look at my GitHub 10061 06:12:23,360 --> 06:12:25,320 I've got all these really cool projects 10062 06:12:25,320 --> 06:12:26,798 so we're going to make you a GitHub 10063 06:12:26,798 --> 06:12:28,240 right now if you don't have an email 10064 06:12:28,240 --> 06:12:29,558 you're going to need an email I made a 10065 06:12:29,558 --> 06:12:31,638 burner account just for this video and 10066 06:12:31,638 --> 06:12:32,760 I'm also going to walk you through 10067 06:12:32,760 --> 06:12:34,558 formatting a question and I know I'm 10068 06:12:34,558 --> 06:12:36,718 belaboring the point here but I really 10069 06:12:36,718 --> 06:12:38,760 really want to stress the importance of 10070 06:12:38,760 --> 06:12:41,280 formatting these questions really well 10071 06:12:41,280 --> 06:12:42,680 so we're actually going to show a clip 10072 06:12:42,680 --> 06:12:44,440 from my past video so we're going to be 10073 06:12:44,440 --> 06:12:46,320 using the full blockchain cility course 10074 06:12:46,320 --> 06:12:48,680 JS but again for this video just be sure 10075 06:12:48,680 --> 06:12:50,320 to use the GitHub repo associated with 10076 06:12:50,320 --> 06:12:52,478 this course and not that other old 10077 06:12:52,478 --> 06:12:57,320 GitHub repo all right let's watch this 10078 06:13:02,558 --> 06:13:04,638 video in fact if you haven't already 10079 06:13:04,638 --> 06:13:06,478 let's sign up for for GitHub right now 10080 06:13:06,478 --> 06:13:08,360 and let me walk you through formatting 10081 06:13:08,360 --> 06:13:09,760 one of these questions because the 10082 06:13:09,760 --> 06:13:11,680 better you format your questions the 10083 06:13:11,680 --> 06:13:13,080 better chance you have of actually 10084 06:13:13,080 --> 06:13:14,680 getting the answer and remember when 10085 06:13:14,680 --> 06:13:16,240 asking questions on these forums when 10086 06:13:16,240 --> 06:13:18,760 asking questions in these discussion 10087 06:13:18,760 --> 06:13:20,478 communities people answer these 10088 06:13:20,478 --> 06:13:21,760 questions out of the goodness of their 10089 06:13:21,760 --> 06:13:23,240 heart right so if you don't get a 10090 06:13:23,240 --> 06:13:25,280 response there's a chance that maybe 10091 06:13:25,280 --> 06:13:27,478 nobody knows maybe it's your question 10092 06:13:27,478 --> 06:13:30,120 isn't formatted very well and Etc so 10093 06:13:30,120 --> 06:13:31,680 we're going to learn how to ask really 10094 06:13:31,680 --> 06:13:33,240 good questions here and if you're new to 10095 06:13:33,240 --> 06:13:35,718 blockchain do not skip this section okay 10096 06:13:35,718 --> 06:13:36,840 this is going to be that piece that's 10097 06:13:36,840 --> 06:13:38,200 going to give you the superpower to 10098 06:13:38,200 --> 06:13:40,478 unblock yourself from any coding issue 10099 06:13:40,478 --> 06:13:42,878 you run into so don't skip this part be 10100 06:13:42,878 --> 06:13:44,638 sure to follow along okay so if you 10101 06:13:44,638 --> 06:13:46,200 don't have a GitHub already you do need 10102 06:13:46,200 --> 06:13:48,240 an email to get started so I'm going to 10103 06:13:48,240 --> 06:13:50,360 go ahead and sign in I made a burner 10104 06:13:50,360 --> 06:13:52,120 account just for this video so what 10105 06:13:52,120 --> 06:13:52,958 we're going to do we're going to go 10106 06:13:52,958 --> 06:13:57,240 ahead and sign up GitHub enter your 10107 06:14:02,958 --> 06:14:05,360 email and we hit create account they're 10108 06:14:05,360 --> 06:14:06,798 going to send us an email so we're going 10109 06:14:06,798 --> 06:14:08,440 to come back to our email going to get 10110 06:14:08,440 --> 06:14:11,520 our launch code here paste it 10111 06:14:11,520 --> 06:14:15,360 in answer a little bit of 10112 06:14:15,680 --> 06:14:17,920 information we're going to choose the 10113 06:14:17,920 --> 06:14:18,798 free 10114 06:14:18,798 --> 06:14:21,280 version and fantastic we've now created 10115 06:14:21,280 --> 06:14:23,878 a GitHub 10116 06:14:25,200 --> 06:14:27,478 profile awesome so now we've created a 10117 06:14:27,478 --> 06:14:29,760 GitHub so I'm actually using a GitHub 10118 06:14:29,760 --> 06:14:31,718 that I used in my last course so that's 10119 06:14:31,718 --> 06:14:33,200 why I have all these repositories over 10120 06:14:33,200 --> 06:14:34,718 here now in order to create a new 10121 06:14:34,718 --> 06:14:36,240 discussion disc Over The Foundry full 10122 06:14:36,240 --> 06:14:38,200 course f23 let's go over to the 10123 06:14:38,200 --> 06:14:40,520 discussions tab we'll hit new discussion 10124 06:14:40,520 --> 06:14:42,440 and we'll hit General and I'll say 10125 06:14:42,440 --> 06:14:45,080 something like test discussion be like 10126 06:14:45,080 --> 06:14:48,680 feel free to say hello here start 10127 06:14:48,680 --> 06:14:51,160 discussion now I'm going to show you a 10128 06:14:51,160 --> 06:14:53,400 question that's formatted poorly and I 10129 06:14:53,400 --> 06:14:55,040 want you to never ever ever ask a 10130 06:14:55,040 --> 06:14:56,760 question like this and if you see 10131 06:14:56,760 --> 06:14:58,280 somebody ask a question like this please 10132 06:14:58,280 --> 06:14:59,600 help them format their question 10133 06:14:59,600 --> 06:15:03,680 correctly hey why my code not be good 10134 06:15:03,680 --> 06:15:06,160 and then let's just have it be issue 10135 06:15:06,160 --> 06:15:08,440 like this right what's wrong wrong with 10136 06:15:08,440 --> 06:15:11,920 this okay well why my code not be good 10137 06:15:11,920 --> 06:15:14,120 obviously isn't clear what's going on 10138 06:15:14,120 --> 06:15:16,718 the code isn't formatted well and even 10139 06:15:16,718 --> 06:15:18,400 an AI would have a hard time answering 10140 06:15:18,400 --> 06:15:20,320 this so let's fix this to be a little 10141 06:15:20,320 --> 06:15:22,680 bit better as we know we want to copy 10142 06:15:22,680 --> 06:15:24,680 the exact error we're getting so we'll 10143 06:15:24,680 --> 06:15:27,040 say We'll copy the error we'll go back 10144 06:15:27,040 --> 06:15:30,558 we'll say I am receiving this error 10145 06:15:30,558 --> 06:15:32,520 we'll do the three little back ticks 10146 06:15:32,520 --> 06:15:35,520 paste our error right in here like that 10147 06:15:35,520 --> 06:15:37,120 actually let's be even more exposit I'm 10148 06:15:37,120 --> 06:15:40,000 receiving this error while compiling 10149 06:15:40,000 --> 06:15:42,440 here's my code re betic we'll put 10150 06:15:42,440 --> 06:15:45,600 solidity here copy the whole line that 10151 06:15:45,600 --> 06:15:49,000 is erroring paste it in here and someone 10152 06:15:49,000 --> 06:15:52,520 help me figure out what the issue is 10153 06:15:52,520 --> 06:15:54,200 right and you see how this is much much 10154 06:15:54,200 --> 06:15:56,920 better right we have these two blocks 10155 06:15:56,920 --> 06:15:58,320 that pop up because we did the back 10156 06:15:58,320 --> 06:16:01,440 ticks and the secret is that this is 10157 06:16:01,440 --> 06:16:03,000 going to get you a much better answer 10158 06:16:03,000 --> 06:16:06,798 from an AI as well right if we edit this 10159 06:16:06,798 --> 06:16:09,120 we can copy the whole thing in markdown 10160 06:16:09,120 --> 06:16:12,240 go over to chat jbt paste it in zoom out 10161 06:16:12,240 --> 06:16:14,160 a little bit and we're going to get it 10162 06:16:14,160 --> 06:16:15,680 actually an answer hey you're receiving 10163 06:16:15,680 --> 06:16:16,878 this air because you're trying to create 10164 06:16:16,878 --> 06:16:18,878 an instance of aggregator V in phas 10165 06:16:18,878 --> 06:16:20,878 without providing the necessary argument 10166 06:16:20,878 --> 06:16:22,920 blah blah blah oh and it actually gives 10167 06:16:22,920 --> 06:16:24,638 an updated version of that but it helps 10168 06:16:24,638 --> 06:16:27,000 us out here so ask format your questions 10169 06:16:27,000 --> 06:16:29,320 correctly you will get better answers 10170 06:16:29,320 --> 06:16:31,558 from both AIS and humans and I know I'm 10171 06:16:31,558 --> 06:16:32,878 spending a long time on this but I 10172 06:16:32,878 --> 06:16:34,160 really really need you to understand 10173 06:16:34,160 --> 06:16:36,520 that the secret to prompt engineering is 10174 06:16:36,520 --> 06:16:39,000 actually just being able to ask better 10175 06:16:39,000 --> 06:16:41,680 formatted questions with human beings 10176 06:16:41,680 --> 06:16:43,520 and it's better for interacting with 10177 06:16:43,520 --> 06:16:45,520 human beings as well now the other thing 10178 06:16:45,520 --> 06:16:47,760 that I did really well here was I only 10179 06:16:47,760 --> 06:16:49,958 posted the relevant code to the error 10180 06:16:49,958 --> 06:16:51,718 that I was getting what we see a lot of 10181 06:16:51,718 --> 06:16:53,440 people do is they just copy paste their 10182 06:16:53,440 --> 06:16:55,920 entire code base into here this is not 10183 06:16:55,920 --> 06:16:57,280 very helpful as it's going to make 10184 06:16:57,280 --> 06:16:59,000 somebody who wants to help you their job 10185 06:16:59,000 --> 06:17:01,798 a lot harder if they have to read your 10186 06:17:01,798 --> 06:17:04,958 entire code base right we reply here 10187 06:17:04,958 --> 06:17:06,400 this is so much more reading for them to 10188 06:17:06,400 --> 06:17:08,000 do it's going to take them a lot longer 10189 06:17:08,000 --> 06:17:10,200 and they might not actually read it and 10190 06:17:10,200 --> 06:17:11,478 we didn't actually highlight this with 10191 06:17:11,478 --> 06:17:13,520 the back ticks and it goes the same 10192 06:17:13,520 --> 06:17:15,840 thing with AI if you give your AI too 10193 06:17:15,840 --> 06:17:19,160 much text it can't read all of the text 10194 06:17:19,160 --> 06:17:21,400 because again some of these AIS have 10195 06:17:21,400 --> 06:17:23,280 limitations in how much text they can 10196 06:17:23,280 --> 06:17:24,680 read so it's the exact same thing with 10197 06:17:24,680 --> 06:17:26,760 working with human beings so feel free 10198 06:17:26,760 --> 06:17:29,040 to take some time to either in chat BT 10199 06:17:29,040 --> 06:17:31,440 or whatever AI you're using or in this 10200 06:17:31,440 --> 06:17:34,240 test discussion forum to post some well 10201 06:17:34,240 --> 06:17:35,718 formatted question questions and 10202 06:17:35,718 --> 06:17:38,440 remember you can use AI to help you get 10203 06:17:38,440 --> 06:17:40,638 those formatted questions in markdown be 10204 06:17:40,638 --> 06:17:42,840 sure to ask chat WT to give you the 10205 06:17:42,840 --> 06:17:45,360 output in markdown so if you haven't 10206 06:17:45,360 --> 06:17:47,360 worked with markdown before that's okay 10207 06:17:47,360 --> 06:17:49,600 you'll learn as you go along but one of 10208 06:17:49,600 --> 06:17:51,878 the biggest differences especially when 10209 06:17:51,878 --> 06:17:53,040 working with markdown that's going to 10210 06:17:53,040 --> 06:17:55,160 make your code so much more readable and 10211 06:17:55,160 --> 06:17:57,440 I 100% need you to always do this 10212 06:17:57,440 --> 06:17:59,440 whenever you ask questions is you see 10213 06:17:59,440 --> 06:18:01,798 how this got like some syntax 10214 06:18:01,798 --> 06:18:04,160 highlighting in this above question well 10215 06:18:04,160 --> 06:18:06,040 if we go click edit again we can 10216 06:18:06,040 --> 06:18:08,200 actually see why up here we did those 10217 06:18:08,200 --> 06:18:09,878 three back ticks and then we typed the 10218 06:18:09,878 --> 06:18:11,760 word solidity when you do these three 10219 06:18:11,760 --> 06:18:14,360 back ticks in your questions if you type 10220 06:18:14,360 --> 06:18:16,600 the word or you type the language next 10221 06:18:16,600 --> 06:18:18,400 to the first three back ticks it'll 10222 06:18:18,400 --> 06:18:20,558 actually add some formatting to make it 10223 06:18:20,558 --> 06:18:22,360 more readable so if we scroll down to 10224 06:18:22,360 --> 06:18:24,400 this poorly formatted question you can 10225 06:18:24,400 --> 06:18:26,360 see that this is just all white and like 10226 06:18:26,360 --> 06:18:28,920 impossible to read it would be at least 10227 06:18:28,920 --> 06:18:31,478 slightly better if we hit edit and next 10228 06:18:31,478 --> 06:18:33,280 to these three back ticks we wrote 10229 06:18:33,280 --> 06:18:35,958 solidity if this like Java code or 10230 06:18:35,958 --> 06:18:38,400 python code we could write python or 10231 06:18:38,400 --> 06:18:40,080 Java or whatever but since this is 10232 06:18:40,080 --> 06:18:42,080 solidity we'll write 10233 06:18:42,080 --> 06:18:44,240 solidity I'll hit 10234 06:18:44,240 --> 06:18:46,878 update and you can see that it is 10235 06:18:46,878 --> 06:18:49,360 substantially nicer and it is much more 10236 06:18:49,360 --> 06:18:51,280 readable now so even though this is 10237 06:18:51,280 --> 06:18:52,840 still a bad question obviously because 10238 06:18:52,840 --> 06:18:55,440 we just copy pasted all of our code it's 10239 06:18:55,440 --> 06:18:57,280 at least much more readable so anytime 10240 06:18:57,280 --> 06:18:59,440 you do a code block like this of any of 10241 06:18:59,440 --> 06:19:03,478 your code absolutely 100% be sure to do 10242 06:19:03,478 --> 06:19:05,120 the three back ticks and then the 10243 06:19:05,120 --> 06:19:07,760 language of the block of code so just 10244 06:19:07,760 --> 06:19:09,878 remember this there are no bad questions 10245 06:19:09,878 --> 06:19:12,680 but there are poorly formatted questions 10246 06:19:12,680 --> 06:19:15,160 make your questions well formatted for 10247 06:19:15,160 --> 06:19:17,680 both human beings and for AI and then 10248 06:19:17,680 --> 06:19:19,440 most importantly be sure to join these 10249 06:19:19,440 --> 06:19:21,280 forums and like I've said 100 times 10250 06:19:21,280 --> 06:19:23,520 interact with these people interact and 10251 06:19:23,520 --> 06:19:25,400 help and give back the more people that 10252 06:19:25,400 --> 06:19:27,320 use and are good at the tool that you're 10253 06:19:27,320 --> 06:19:28,840 working with the more likely that 10254 06:19:28,840 --> 06:19:29,958 they're going to help you sometime in 10255 06:19:29,958 --> 06:19:32,200 the future and this is how I've met so 10256 06:19:32,200 --> 06:19:33,840 many people in the industry is just 10257 06:19:33,840 --> 06:19:35,400 giving back in interacting with other 10258 06:19:35,400 --> 06:19:38,200 people so whenever you ask a question 10259 06:19:38,200 --> 06:19:39,440 especially in the beginning cuz in the 10260 06:19:39,440 --> 06:19:40,320 beginning you're going to have more 10261 06:19:40,320 --> 06:19:42,200 questions than not be sure to at least 10262 06:19:42,200 --> 06:19:44,400 try to go back and answer a question 10263 06:19:44,400 --> 06:19:46,520 think of it as question and answer debt 10264 06:19:46,520 --> 06:19:48,760 every time you answer a question make a 10265 06:19:48,760 --> 06:19:50,798 little mental note and say ah in the 10266 06:19:50,798 --> 06:19:52,920 future I need to at least try to answer 10267 06:19:52,920 --> 06:19:54,840 one of somebody else's questions this is 10268 06:19:54,840 --> 06:19:59,120 how we grow and move so much 10269 06:20:01,760 --> 06:20:03,878 faster now this next piece that I'm 10270 06:20:03,878 --> 06:20:05,760 going to show you is outside of this 10271 06:20:05,760 --> 06:20:07,558 course but it's a resource that I wanted 10272 06:20:07,558 --> 06:20:09,520 to show you in case after this course is 10273 06:20:09,520 --> 06:20:11,840 done you want more resources to learn 10274 06:20:11,840 --> 06:20:14,080 about ethereum and learn about the EVN 10275 06:20:14,080 --> 06:20:15,600 it's with my good friend Austin who's 10276 06:20:15,600 --> 06:20:17,520 going to show you speedrun ethereum and 10277 06:20:17,520 --> 06:20:18,520 definitely something you might want to 10278 06:20:18,520 --> 06:20:20,320 check out after taking this course 10279 06:20:20,320 --> 06:20:22,160 what's up I'm Austin Griffith happy bow 10280 06:20:22,160 --> 06:20:23,840 tie Friday I want to show you the best 10281 06:20:23,840 --> 06:20:26,840 way to get started building on ethereum 10282 06:20:26,840 --> 06:20:30,300 is speedrun ethereum.org 10283 06:20:30,300 --> 06:20:33,390 [Music] 10284 06:20:34,958 --> 06:20:36,840 you'll build a decentralized staking app 10285 06:20:36,840 --> 06:20:38,520 you'll learn that the superpower of 10286 06:20:38,520 --> 06:20:40,280 ethereum is allowing you the Builder to 10287 06:20:40,280 --> 06:20:42,600 create a simple set of rules where an 10288 06:20:42,600 --> 06:20:44,360 adversarial group of people can 10289 06:20:44,360 --> 06:20:46,680 coordinate financially you'll build a 10290 06:20:46,680 --> 06:20:48,760 token vendor you'll build a dice game 10291 06:20:48,760 --> 06:20:50,280 and you'll learn about Randomness on 10292 06:20:50,280 --> 06:20:52,718 chain and where it works and where it 10293 06:20:52,718 --> 06:20:55,040 doesn't and what you can do about that 10294 06:20:55,040 --> 06:20:56,920 you learn about a DEX and what a hyper 10295 06:20:56,920 --> 06:20:59,400 structure is and how people can use 10296 06:20:59,400 --> 06:21:01,240 liquidity to swap you'll learn about 10297 06:21:01,240 --> 06:21:03,520 State Channel and scalability and sign 10298 06:21:03,520 --> 06:21:05,920 messages and multisig wallets and 10299 06:21:05,920 --> 06:21:09,638 account abstraction and SVG nfts lots of 10300 06:21:09,638 --> 06:21:12,160 fun stuff along the way like I said not 10301 06:21:12,160 --> 06:21:14,400 just the how but the why go to speedrun 10302 06:21:14,400 --> 06:21:17,080 ethereum.org and get started today uh 10303 06:21:17,080 --> 06:21:19,040 it'll have you do a quick video uh and 10304 06:21:19,040 --> 06:21:20,638 then it says to use scaffold eth to 10305 06:21:20,638 --> 06:21:22,040 start tinkering I want to show you how 10306 06:21:22,040 --> 06:21:23,558 to do that first of all all this stuff 10307 06:21:23,558 --> 06:21:26,520 is open source uh it's all ungated and 10308 06:21:26,520 --> 06:21:28,798 open source just get in and get get in 10309 06:21:28,798 --> 06:21:31,240 get learning okay but this scaffold e 10310 06:21:31,240 --> 06:21:33,520 thing uh scaffold e is a great way to 10311 06:21:33,520 --> 06:21:36,600 Tinker with solidity and kind of get 10312 06:21:36,600 --> 06:21:39,240 your your your bearings right so let me 10313 06:21:39,240 --> 06:21:41,718 show scaffold 2 just for a second if we 10314 06:21:41,718 --> 06:21:44,320 zoom in uh I've already kind of uh gone 10315 06:21:44,320 --> 06:21:46,000 through the whole readme and installed 10316 06:21:46,000 --> 06:21:47,478 everything I want to show this right 10317 06:21:47,478 --> 06:21:50,840 here here's a smart contract and I have 10318 06:21:50,840 --> 06:21:53,718 my front end that's uh Auto adapting to 10319 06:21:53,718 --> 06:21:56,958 the smart contract and so uh when in 10320 06:21:56,958 --> 06:21:58,920 speedrun ethereum it tells you to Tinker 10321 06:21:58,920 --> 06:22:01,400 with each one of these Concepts let's 10322 06:22:01,400 --> 06:22:03,240 just go look at mappings or strs or 10323 06:22:03,240 --> 06:22:04,718 modifiers let's just go look at get a 10324 06:22:04,718 --> 06:22:07,200 mapping and let's grab a mapping right 10325 06:22:07,200 --> 06:22:08,878 and let's copy and paste it right into 10326 06:22:08,878 --> 06:22:11,240 our smart contract so something called 10327 06:22:11,240 --> 06:22:13,080 my map I don't even know what it is 10328 06:22:13,080 --> 06:22:15,520 right and then we yarn deploy and we'll 10329 06:22:15,520 --> 06:22:18,478 see that my map show up over here and 10330 06:22:18,478 --> 06:22:20,478 this is kind of the feedback loop I want 10331 06:22:20,478 --> 06:22:23,558 you to get into where you can grab some 10332 06:22:23,558 --> 06:22:26,798 stuff from solidity by example paste it 10333 06:22:26,798 --> 06:22:29,120 into your smart contract deploy it 10334 06:22:29,120 --> 06:22:31,160 locally and then Tinker with it there's 10335 06:22:31,160 --> 06:22:33,638 my my map let's see what vitalic bance 10336 06:22:33,638 --> 06:22:35,440 is in my map 10337 06:22:35,440 --> 06:22:39,478 it's zero oh okay so check out speedrun 10338 06:22:39,478 --> 06:22:42,520 ethereum check out scaffold e get 10339 06:22:42,520 --> 06:22:44,798 started building cool things on ethereum 10340 06:22:44,798 --> 06:22:47,280 today happy bowai Friday hearts hearts 10341 06:22:47,280 --> 06:22:51,200 hearts see you 10342 06:23:09,760 --> 06:23:11,520 now the reason I especially wanted to 10343 06:23:11,520 --> 06:23:13,680 show you all of these debugging things 10344 06:23:13,680 --> 06:23:15,638 right now is because we are about to 10345 06:23:15,638 --> 06:23:18,638 move off of remix remix has been this 10346 06:23:18,638 --> 06:23:20,840 phenomenal IDE or this phenomenal 10347 06:23:20,840 --> 06:23:22,760 integrated development environment that 10348 06:23:22,760 --> 06:23:24,680 allows us to quickly try things and 10349 06:23:24,680 --> 06:23:26,400 quickly deploy things but we're actually 10350 06:23:26,400 --> 06:23:28,600 going to move off of remix to a more 10351 06:23:28,600 --> 06:23:30,360 professional setup and we're going to be 10352 06:23:30,360 --> 06:23:32,878 using a modern set of tools that most of 10353 06:23:32,878 --> 06:23:34,638 the rest of the development community 10354 06:23:34,638 --> 06:23:36,280 also works with and I'm going to tell 10355 06:23:36,280 --> 06:23:39,280 you this right now often installing 10356 06:23:39,280 --> 06:23:41,440 these new tools and often just getting 10357 06:23:41,440 --> 06:23:43,520 your local development environment set 10358 06:23:43,520 --> 06:23:45,878 up not using remix or not using what's 10359 06:23:45,878 --> 06:23:49,200 called a cloud IDE can often be the 10360 06:23:49,200 --> 06:23:52,240 actually most difficult step in this 10361 06:23:52,240 --> 06:23:54,200 whole process so I want you to be 10362 06:23:54,200 --> 06:23:57,240 absolutely Vigilant in using all of the 10363 06:23:57,240 --> 06:23:59,360 resources that I just showed you using 10364 06:23:59,360 --> 06:24:02,798 the chat using chat GPT using piranha 10365 06:24:02,798 --> 06:24:05,160 using stack Exchange eth using web3 10366 06:24:05,160 --> 06:24:07,638 education. once we get this up and live 10367 06:24:07,638 --> 06:24:11,080 be sure to use these tools and don't let 10368 06:24:11,080 --> 06:24:12,760 installing these slow you down because 10369 06:24:12,760 --> 06:24:15,798 in my mind installing these can be the 10370 06:24:15,798 --> 06:24:18,040 hardest part of this whole course and 10371 06:24:18,040 --> 06:24:19,920 it's okay things might not work the 10372 06:24:19,920 --> 06:24:22,280 first time and that's okay just be sure 10373 06:24:22,280 --> 06:24:24,680 to ask questions and be very specific 10374 06:24:24,680 --> 06:24:26,878 with the errors that you're seeing and 10375 06:24:26,878 --> 06:24:28,080 installing these things that's what 10376 06:24:28,080 --> 06:24:30,120 we're going to learn how to do right now 10377 06:24:30,120 --> 06:24:31,920 so remix is a phenomenal tool but now 10378 06:24:31,920 --> 06:24:33,240 we're going to move over to this more 10379 06:24:33,240 --> 06:24:35,478 professional setup called called Foundry 10380 06:24:35,478 --> 06:24:37,638 Foundry is one of the most popular smart 10381 06:24:37,638 --> 06:24:39,600 contract development Frameworks similar 10382 06:24:39,600 --> 06:24:41,080 to hardhead or brownie if you're 10383 06:24:41,080 --> 06:24:43,000 familiar with those and it's known 10384 06:24:43,000 --> 06:24:45,558 specifically for its speed Foundry is 10385 06:24:45,558 --> 06:24:47,680 easily the fastest to work with smart 10386 06:24:47,680 --> 06:24:49,440 contract development framework one of 10387 06:24:49,440 --> 06:24:52,160 the unique aspects about Foundry is that 10388 06:24:52,160 --> 06:24:54,000 whereas hard hat is Javascript based 10389 06:24:54,000 --> 06:24:56,280 brownie is python based Foundry is 10390 06:24:56,280 --> 06:24:58,680 completely solidity based so we don't 10391 06:24:58,680 --> 06:25:00,360 have to learn any other programming 10392 06:25:00,360 --> 06:25:02,120 languages other than solidity to work 10393 06:25:02,120 --> 06:25:04,080 with Foundry and similar to everything 10394 06:25:04,080 --> 06:25:05,680 that we we've been doing so far all of 10395 06:25:05,680 --> 06:25:07,240 the code for all of our Foundry products 10396 06:25:07,240 --> 06:25:08,920 are going to be in the GitHub repo 10397 06:25:08,920 --> 06:25:10,920 associated with this course however the 10398 06:25:10,920 --> 06:25:13,160 documentation for Foundry I think is 10399 06:25:13,160 --> 06:25:15,878 also phenomenal so be sure to use this 10400 06:25:15,878 --> 06:25:18,400 as you code along and something very 10401 06:25:18,400 --> 06:25:20,280 interesting that I really love to do 10402 06:25:20,280 --> 06:25:22,840 most of these pages are pretty small so 10403 06:25:22,840 --> 06:25:25,200 even if your AI isn't trained off of 10404 06:25:25,200 --> 06:25:27,680 Foundry which as a recording it's not 10405 06:25:27,680 --> 06:25:28,878 what we can do is something called 10406 06:25:28,878 --> 06:25:31,400 context injection when we have issues so 10407 06:25:31,400 --> 06:25:34,360 we can copy the entire page of Doc 10408 06:25:34,360 --> 06:25:38,120 mentation we can say I'd like to start 10409 06:25:38,120 --> 06:25:42,400 I'd like to install Foundry here are the 10410 06:25:42,400 --> 06:25:45,760 documentations for installation how can 10411 06:25:45,760 --> 06:25:48,120 I do it do the three back ticks paste 10412 06:25:48,120 --> 06:25:50,440 the whole thing in there and by giving 10413 06:25:50,440 --> 06:25:53,000 our AIS the documentation for working 10414 06:25:53,000 --> 06:25:55,478 with Foundry it's actually going to give 10415 06:25:55,478 --> 06:25:58,840 us outputs to install Foundry so this is 10416 06:25:58,840 --> 06:26:00,320 a methodology you'll see me use from 10417 06:26:00,320 --> 06:26:03,080 time to time this context injection you 10418 06:26:03,080 --> 06:26:04,878 can find more 10419 06:26:04,878 --> 06:26:06,600 in the GitHub repo once again associated 10420 06:26:06,600 --> 06:26:08,600 with this course on installation and 10421 06:26:08,600 --> 06:26:10,920 setup Mac OS and this should be Linux 10422 06:26:10,920 --> 06:26:12,280 and then we have some Windows setup 10423 06:26:12,280 --> 06:26:14,040 stuff down here we're going to go over 10424 06:26:14,040 --> 06:26:15,558 how to set up all the important things 10425 06:26:15,558 --> 06:26:17,478 for this course so be sure to use this 10426 06:26:17,478 --> 06:26:19,280 as a reference now a great question you 10427 06:26:19,280 --> 06:26:20,798 might be asking is well what's even the 10428 06:26:20,798 --> 06:26:22,798 purpose of Foundry why do we need to use 10429 06:26:22,798 --> 06:26:25,240 this other tool remix is working great 10430 06:26:25,240 --> 06:26:27,400 well in remix you notice that we did a 10431 06:26:27,400 --> 06:26:29,200 lot of stuff manually like I came in 10432 06:26:29,200 --> 06:26:31,680 here I had to go to compile maybe I 10433 06:26:31,680 --> 06:26:33,160 wanted to test something out I would go 10434 06:26:33,160 --> 06:26:35,760 deploy it uh I got a put a price feed in 10435 06:26:35,760 --> 06:26:39,200 here a price feed in here deploy okay 10436 06:26:39,200 --> 06:26:41,360 does the get version work Uh something's 10437 06:26:41,360 --> 06:26:43,558 wrong with my get version okay my o i 10438 06:26:43,558 --> 06:26:46,400 owner works okay minimum USD works oh 10439 06:26:46,400 --> 06:26:48,320 crap I got to go make some little change 10440 06:26:48,320 --> 06:26:50,638 here you know maybe I want get version 10441 06:26:50,638 --> 06:26:54,360 to actually return you know 7 + 2 or 7 + 10442 06:26:54,360 --> 06:26:57,040 1 now I got to go you know delete this I 10443 06:26:57,040 --> 06:26:59,360 got to go redeploy I got to go click 10444 06:26:59,360 --> 06:27:01,798 this I got to go down I got to click and 10445 06:27:01,798 --> 06:27:03,280 then if I have a hundred things that I 10446 06:27:03,280 --> 06:27:05,520 change testing all of this is going to 10447 06:27:05,520 --> 06:27:08,680 take a really long time and anytime you 10448 06:27:08,680 --> 06:27:10,878 do something anytime us as human beings 10449 06:27:10,878 --> 06:27:12,478 changes our code in some way there's a 10450 06:27:12,478 --> 06:27:14,240 chance that we break something and 10451 06:27:14,240 --> 06:27:15,320 remember these smart contracts are 10452 06:27:15,320 --> 06:27:16,798 immutable so if we break something if we 10453 06:27:16,798 --> 06:27:18,478 mess something up that's really bad 10454 06:27:18,478 --> 06:27:19,920 because that mess up will be permanent 10455 06:27:19,920 --> 06:27:22,040 on the blockchain so we want a framework 10456 06:27:22,040 --> 06:27:24,200 that helps us deploy our smart contracts 10457 06:27:24,200 --> 06:27:26,440 test our smart contracts and interact 10458 06:27:26,440 --> 06:27:28,638 with them in a much more programmatic 10459 06:27:28,638 --> 06:27:30,440 way rather than we having to manually 10460 06:27:30,440 --> 06:27:32,680 click around right if I changed 10 10461 06:27:32,680 --> 06:27:34,600 functions and I wanted to test the work 10462 06:27:34,600 --> 06:27:36,280 I would have to go click 10 buttons 10463 06:27:36,280 --> 06:27:38,478 that's ridiculous in Foundry we can do 10464 06:27:38,478 --> 06:27:41,320 all of that in one command or one button 10465 06:27:41,320 --> 06:27:42,840 so that's why we're going to be using 10466 06:27:42,840 --> 06:27:44,680 Foundry here and I'm so excited for you 10467 06:27:44,680 --> 06:27:46,200 to be using this Foundry tool because 10468 06:27:46,200 --> 06:27:48,120 like I said it's the fastest smart 10469 06:27:48,120 --> 06:27:50,040 contract development framework out there 10470 06:27:50,040 --> 06:27:53,080 right now but additionally it's also the 10471 06:27:53,080 --> 06:27:55,200 framework of choice for smart contract 10472 06:27:55,200 --> 06:27:57,680 security engineers and Auditors and I 10473 06:27:57,680 --> 06:27:59,360 expect more and more projects in the 10474 06:27:59,360 --> 06:28:01,400 future to be built in Foundry so 10475 06:28:01,400 --> 06:28:02,920 incredibly excited for you here now for 10476 06:28:02,920 --> 06:28:04,120 the rest of the course I'm going to be 10477 06:28:04,120 --> 06:28:06,520 we're using a code editor called Visual 10478 06:28:06,520 --> 06:28:08,878 Studio code this is one of the most 10479 06:28:08,878 --> 06:28:10,878 powerful code editors on the planet and 10480 06:28:10,878 --> 06:28:12,360 if you've already got it set up feel 10481 06:28:12,360 --> 06:28:14,040 free to go ahead and skip this part 10482 06:28:14,040 --> 06:28:15,878 you'll often hear people refer to this 10483 06:28:15,878 --> 06:28:18,680 as VSS code or Visual Studio code or 10484 06:28:18,680 --> 06:28:20,558 just Visual Studio however it's 10485 06:28:20,558 --> 06:28:23,520 important to not that Visual Studio code 10486 06:28:23,520 --> 06:28:26,280 this is different than Visual Studio 10487 06:28:26,280 --> 06:28:28,760 which you might see look like this so 10488 06:28:28,760 --> 06:28:31,440 visual studio code is what you want not 10489 06:28:31,440 --> 06:28:33,798 Visual Studio Visual Studio is a 10490 06:28:33,798 --> 06:28:35,718 different application make sure you're 10491 06:28:35,718 --> 06:28:38,400 on Visual Studio code now if you choose 10492 06:28:38,400 --> 06:28:40,520 so and you're a total Hardo you can 10493 06:28:40,520 --> 06:28:42,920 absolutely work just with your terminal 10494 06:28:42,920 --> 06:28:45,280 or just with Powershell or just with 10495 06:28:45,280 --> 06:28:47,080 whatever coding environment that you 10496 06:28:47,080 --> 06:28:50,478 want like atom or Sublime however for us 10497 06:28:50,478 --> 06:28:51,958 we're going to be working with Visual 10498 06:28:51,958 --> 06:28:54,000 Studio code and I'm going to be going 10499 06:28:54,000 --> 06:28:56,040 through setting up visual studio code 10500 06:28:56,040 --> 06:28:58,080 the way that I like to set it up you can 10501 06:28:58,080 --> 06:29:00,160 absolutely set it up whatever way that 10502 06:29:00,160 --> 06:29:01,798 you feel comfortable now we're going to 10503 06:29:01,798 --> 06:29:03,478 go through three different installation 10504 06:29:03,478 --> 06:29:05,360 processes and pick the one that's most 10505 06:29:05,360 --> 06:29:07,478 appropriate for you the first one is 10506 06:29:07,478 --> 06:29:10,520 going to be for mac and Linux users the 10507 06:29:10,520 --> 06:29:12,160 second one is going to be for Windows 10508 06:29:12,160 --> 06:29:14,320 users and then our third one is going to 10509 06:29:14,320 --> 06:29:17,080 be a last ditch effort if for whatever 10510 06:29:17,080 --> 06:29:19,440 reason you can't get Windows or Linux or 10511 06:29:19,440 --> 06:29:21,440 the Mac instructions to work we're going 10512 06:29:21,440 --> 06:29:24,120 to use a git pod installation now I 10513 06:29:24,120 --> 06:29:26,400 highly highly recommend that you try to 10514 06:29:26,400 --> 06:29:28,200 get everything working locally without 10515 06:29:28,200 --> 06:29:31,240 using git pod however if for whatever 10516 06:29:31,240 --> 06:29:33,558 reason you can't get those installation 10517 06:29:33,558 --> 06:29:35,638 pieces to work we will have git pod 10518 06:29:35,638 --> 06:29:38,320 instructions for all of the repos that 10519 06:29:38,320 --> 06:29:40,000 we work with here but to get started 10520 06:29:40,000 --> 06:29:42,000 we'll start with the mac and Linux 10521 06:29:42,000 --> 06:29:44,638 installation 10522 06:29:53,478 --> 06:29:55,120 instructions the first thing you're 10523 06:29:55,120 --> 06:29:57,440 going to want to do is download the Mac 10524 06:29:57,440 --> 06:29:59,478 or if you're working with Linux download 10525 06:29:59,478 --> 06:30:02,200 the Linux installation of Visual Studio 10526 06:30:02,200 --> 06:30:04,280 code once you have it installed it'll 10527 06:30:04,280 --> 06:30:06,718 look a little something like this and if 10528 06:30:06,718 --> 06:30:09,080 it's a fresh installation it'll even 10529 06:30:09,080 --> 06:30:11,320 give you some tips and tools to actually 10530 06:30:11,320 --> 06:30:12,680 get started if you've never worked with 10531 06:30:12,680 --> 06:30:14,760 Visual Studio code before I highly 10532 06:30:14,760 --> 06:30:16,878 recommend going through any get started 10533 06:30:16,878 --> 06:30:19,558 or getting instructions tips that come 10534 06:30:19,558 --> 06:30:21,600 with opening Visual Studio code 10535 06:30:21,600 --> 06:30:23,200 additionally we have a visual studio 10536 06:30:23,200 --> 06:30:26,160 code crash course in the GitHub repo 10537 06:30:26,160 --> 06:30:28,080 associated with this course now one of 10538 06:30:28,080 --> 06:30:30,080 the awesome things about Visual Studio 10539 06:30:30,080 --> 06:30:31,680 code is it has this thing called 10540 06:30:31,680 --> 06:30:34,200 terminals which are commandline promps 10541 06:30:34,200 --> 06:30:36,558 that allow us to run scripts basically 10542 06:30:36,558 --> 06:30:37,760 it's where we're going to be running all 10543 06:30:37,760 --> 06:30:39,638 of our code the way we can open up the 10544 06:30:39,638 --> 06:30:41,080 terminal is we can go ahead and hit 10545 06:30:41,080 --> 06:30:43,520 terminal and select new terminal and 10546 06:30:43,520 --> 06:30:45,760 you'll get something like this now you 10547 06:30:45,760 --> 06:30:48,558 might have bash or zch or some other 10548 06:30:48,558 --> 06:30:50,320 type of shell the type that you have 10549 06:30:50,320 --> 06:30:52,120 doesn't really matter because on Mac and 10550 06:30:52,120 --> 06:30:55,120 Linux it's going to be Linux based and 10551 06:30:55,120 --> 06:30:56,638 like I said sometimes installing this 10552 06:30:56,638 --> 06:30:58,360 can be the hardest part of this entire 10553 06:30:58,360 --> 06:31:00,718 course so so don't get discouraged and 10554 06:31:00,718 --> 06:31:02,478 please use stack overflow stack exchange 10555 06:31:02,478 --> 06:31:04,280 ethereum and the GitHub repo to to move 10556 06:31:04,280 --> 06:31:06,080 past any issues you run into now if 10557 06:31:06,080 --> 06:31:08,360 you're on Mac or Linux you can actually 10558 06:31:08,360 --> 06:31:11,360 hit control back tick to actually toggle 10559 06:31:11,360 --> 06:31:13,120 your terminal mode this will pull the 10560 06:31:13,120 --> 06:31:15,200 terminal up and down for you getting 10561 06:31:15,200 --> 06:31:16,958 familiar with keyboard shortcuts will 10562 06:31:16,958 --> 06:31:18,718 actually make your life a lot easier cuz 10563 06:31:18,718 --> 06:31:20,520 you'll be able to move around Visual 10564 06:31:20,520 --> 06:31:22,638 Studio code much more effectively we 10565 06:31:22,638 --> 06:31:24,558 have a link to a list of keyboard 10566 06:31:24,558 --> 06:31:26,760 shortcuts additionally in the GitHub 10567 06:31:26,760 --> 06:31:28,718 repository associated with this section 10568 06:31:28,718 --> 06:31:30,360 as we move along I'll give tip on 10569 06:31:30,360 --> 06:31:32,000 different keyboard shortcuts that you 10570 06:31:32,000 --> 06:31:34,320 can optionally use otherwise you just go 10571 06:31:34,320 --> 06:31:36,000 ahead and click as well you can click 10572 06:31:36,000 --> 06:31:38,040 the trash can to delete the terminal go 10573 06:31:38,040 --> 06:31:40,280 back up terminal new terminal to pop it 10574 06:31:40,280 --> 06:31:41,478 back up now the next thing that we're 10575 06:31:41,478 --> 06:31:42,920 going to need a little bit later we're 10576 06:31:42,920 --> 06:31:44,280 not going to need it for this section 10577 06:31:44,280 --> 06:31:46,200 but it's good to install it now is going 10578 06:31:46,200 --> 06:31:48,000 to be git we will have links to the 10579 06:31:48,000 --> 06:31:50,080 installation instructions in the GitHub 10580 06:31:50,080 --> 06:31:52,320 repository installing git on Linux 10581 06:31:52,320 --> 06:31:53,478 you're going to use one of these two 10582 06:31:53,478 --> 06:31:56,000 commands and on Mac OS if you just type 10583 06:31:56,000 --> 06:31:57,958 git on the command line it should go 10584 06:31:57,958 --> 06:31:59,760 ahead and prompt you to install it so if 10585 06:31:59,760 --> 06:32:01,040 we're back in our command line and we 10586 06:32:01,040 --> 06:32:02,798 just type get it should prompt you to go 10587 06:32:02,798 --> 06:32:05,360 ahead and install it and if you do g-- 10588 06:32:05,360 --> 06:32:07,398 version you should get something that 10589 06:32:07,398 --> 06:32:09,320 looks like this you can also use a Mac 10590 06:32:09,320 --> 06:32:11,280 OS git installer by clicking this link 10591 06:32:11,280 --> 06:32:12,360 here and running through the 10592 06:32:12,360 --> 06:32:14,160 installation process all right now that 10593 06:32:14,160 --> 06:32:16,040 you have git and visual studio code 10594 06:32:16,040 --> 06:32:18,600 installed we can continue on to the next 10595 06:32:18,600 --> 06:32:20,878 section awesome if you're not planning 10596 06:32:20,878 --> 06:32:23,840 on using Windows or git pod feel free to 10597 06:32:23,840 --> 06:32:26,760 skip the next two 10598 06:32:28,000 --> 06:32:30,398 sections and for this Windows setup 10599 06:32:30,398 --> 06:32:31,680 we're going to be learning about a tool 10600 06:32:31,680 --> 06:32:34,440 called WSL and to introduce that to us 10601 06:32:34,440 --> 06:32:36,840 we have my friend basili who has done 10602 06:32:36,840 --> 06:32:38,638 amazing work helping me on some of my 10603 06:32:38,638 --> 06:32:40,200 past courses and he's going to be 10604 06:32:40,200 --> 06:32:42,520 helping us here today so take it away 10605 06:32:42,520 --> 06:32:44,398 this tutorial is going to be useful for 10606 06:32:44,398 --> 06:32:47,120 any Windows version from Windows 10 and 10607 06:32:47,120 --> 06:32:50,000 above let's get started by installing or 10608 06:32:50,000 --> 06:32:52,360 code editor in this case Visual Studio 10609 06:32:52,360 --> 06:32:54,398 code so let's type BS code on the 10610 06:32:54,398 --> 06:32:55,958 browser and hit 10611 06:32:55,958 --> 06:32:59,520 enter s or version for Windows select 10612 06:32:59,520 --> 06:33:01,638 the destination and click save and the 10613 06:33:01,638 --> 06:33:03,280 installation process is going to be the 10614 06:33:03,280 --> 06:33:05,520 same as any other program so let's 10615 06:33:05,520 --> 06:33:07,240 select an accept the agreement click 10616 06:33:07,240 --> 06:33:10,600 next add code to the pat create a 10617 06:33:10,600 --> 06:33:13,840 desktop icon next and 10618 06:33:13,840 --> 06:33:17,478 install this shouldn't take a lot and 10619 06:33:17,478 --> 06:33:19,600 this is how the editor is going to look 10620 06:33:19,600 --> 06:33:22,160 like the first time we install it we can 10621 06:33:22,160 --> 06:33:25,718 customize the theme create shortcuts and 10622 06:33:25,718 --> 06:33:27,240 sync with another 10623 06:33:27,240 --> 06:33:30,160 devices and if you want to go deep into 10624 06:33:30,160 --> 06:33:32,558 Visual Studio code well I suggest you to 10625 06:33:32,558 --> 06:33:35,240 pause the video for a moment and go 10626 06:33:35,240 --> 06:33:38,600 through all these steps one by one now 10627 06:33:38,600 --> 06:33:41,320 we could 100% go forward and install the 10628 06:33:41,320 --> 06:33:43,160 rest of our Tools in a Windows 10629 06:33:43,160 --> 06:33:45,878 environment but basili is actually going 10630 06:33:45,878 --> 06:33:47,440 to explain to us that the windows 10631 06:33:47,440 --> 06:33:49,558 environment isn't really actually the 10632 06:33:49,558 --> 06:33:51,840 best way and the best place to do our 10633 06:33:51,840 --> 06:33:53,840 installations Microsoft has definitely 10634 06:33:53,840 --> 06:33:55,638 increased their support for developers 10635 06:33:55,638 --> 06:33:57,478 in the recent years but when it comes to 10636 06:33:57,478 --> 06:33:59,120 Smart contct development there is a 10637 06:33:59,120 --> 06:34:02,320 better option to consider using WSL the 10638 06:34:02,320 --> 06:34:04,600 windows subsystem for Linux trust me is 10639 06:34:04,600 --> 06:34:06,760 a game changer you see a smart contract 10640 06:34:06,760 --> 06:34:08,840 development often involves working with 10641 06:34:08,840 --> 06:34:11,040 tools and utilities that are commonly 10642 06:34:11,040 --> 06:34:13,320 found on Unix based environments while 10643 06:34:13,320 --> 06:34:14,958 Windows has come a long way in 10644 06:34:14,958 --> 06:34:17,600 accommodating developers there can still 10645 06:34:17,600 --> 06:34:19,440 be some challenges when it comes to 10646 06:34:19,440 --> 06:34:21,920 ruining certain command line tools and 10647 06:34:21,920 --> 06:34:23,600 setting up the right development 10648 06:34:23,600 --> 06:34:26,478 environment not mentioning that if you 10649 06:34:26,478 --> 06:34:29,638 want your code to run on any machine 10650 06:34:29,638 --> 06:34:34,200 using a units based system Mac and Linux 10651 06:34:34,200 --> 06:34:36,638 is better for your developer needs here 10652 06:34:36,638 --> 06:34:39,718 is where WSL shines by installing a 10653 06:34:39,718 --> 06:34:42,558 Linux distribution through WSL you can 10654 06:34:42,558 --> 06:34:44,638 access to a full-fledged Unix light 10655 06:34:44,638 --> 06:34:46,760 console right on your Windows machine 10656 06:34:46,760 --> 06:34:48,958 and don't worry you don't need to be a 10657 06:34:48,958 --> 06:34:52,080 hacker or wear a hoodie to make it 10658 06:34:52,080 --> 06:34:55,280 happen is actually quite simple so let's 10659 06:34:55,280 --> 06:34:57,958 do it for that let's open the windows 10660 06:34:57,958 --> 06:34:59,718 terminal this is a pre-installed 10661 06:34:59,718 --> 06:35:02,320 application on Windows 10662 06:35:02,320 --> 06:35:05,000 11 and so something you can easily 10663 06:35:05,000 --> 06:35:07,600 install through the Microsoft store on 10664 06:35:07,600 --> 06:35:10,638 Windows 10 just type terminal and here 10665 06:35:10,638 --> 06:35:12,600 you are going to have the windows 10666 06:35:12,600 --> 06:35:17,320 one so let's install WSL by typing WL 10667 06:35:17,320 --> 06:35:20,440 minus minus install hit enter is going 10668 06:35:20,440 --> 06:35:24,120 to trigger us a admin operation and 10669 06:35:24,120 --> 06:35:26,398 installation is going to start and here 10670 06:35:26,398 --> 06:35:28,040 we just have to wait until the process 10671 06:35:28,040 --> 06:35:30,958 finishes once the process is done this 10672 06:35:30,958 --> 06:35:33,080 will require you to reboot your 10673 06:35:33,080 --> 06:35:35,280 operating system system so I'll see you 10674 06:35:35,280 --> 06:35:38,080 on a second once rebooted this is going 10675 06:35:38,080 --> 06:35:41,440 to automatically open this terminal and 10676 06:35:41,440 --> 06:35:44,520 the installation process is going to 10677 06:35:44,520 --> 06:35:47,360 proceed now you have to input a new Unix 10678 06:35:47,360 --> 06:35:49,798 username for me is going to be chare and 10679 06:35:49,798 --> 06:35:51,398 then you have to set up your password 10680 06:35:51,398 --> 06:35:54,120 don't worry the password is always 10681 06:35:54,120 --> 06:35:57,040 hidden on Linux operating systems and as 10682 06:35:57,040 --> 06:35:59,040 this as that we already have a operating 10683 06:35:59,040 --> 06:36:02,440 Linux terminal inside our Windows 10684 06:36:02,440 --> 06:36:05,680 machine so we can now close this now if 10685 06:36:05,680 --> 06:36:07,440 we open a new instance on the Windows 10686 06:36:07,440 --> 06:36:10,240 terminal we click here on this drop- 10687 06:36:10,240 --> 06:36:13,398 down arrow we can have now this obuntu 10688 06:36:13,398 --> 06:36:15,798 shell on which we are going to inst all 10689 06:36:15,798 --> 06:36:17,398 the development requirements we are 10690 06:36:17,398 --> 06:36:19,638 going to use during the course so the 10691 06:36:19,638 --> 06:36:21,958 next step is to make Visual Studio code 10692 06:36:21,958 --> 06:36:25,680 compatible with WSL so let's do 10693 06:36:25,680 --> 06:36:28,760 that let's go to the extension stab 10694 06:36:28,760 --> 06:36:32,638 let's search for remote development and 10695 06:36:32,638 --> 06:36:35,760 install all these extensions this is 10696 06:36:35,760 --> 06:36:37,840 going to automatically install the 10697 06:36:37,840 --> 06:36:39,958 compatibility to connect or Visual 10698 06:36:39,958 --> 06:36:43,240 Studio code with WSL and as you can see 10699 06:36:43,240 --> 06:36:46,440 over here I have a new econ called open 10700 06:36:46,440 --> 06:36:49,320 a remote window if I click here I can 10701 06:36:49,320 --> 06:36:52,558 directly connect to WSL however there is 10702 06:36:52,558 --> 06:36:55,600 an easy way to do this let's close Vis 10703 06:36:55,600 --> 06:36:58,958 Studio code and on the Linux terminal 10704 06:36:58,958 --> 06:37:00,920 let's just create a new folder for 10705 06:37:00,920 --> 06:37:04,398 example Mader solidity course let's move 10706 06:37:04,398 --> 06:37:07,958 to that folder and now let's open Visual 10707 06:37:07,958 --> 06:37:10,320 Studio code inside this folder just type 10708 06:37:10,320 --> 06:37:13,200 code dot hit enter this is going to 10709 06:37:13,200 --> 06:37:16,760 install the latest server for w cell on 10710 06:37:16,760 --> 06:37:19,240 Visual Studio code and once this is done 10711 06:37:19,240 --> 06:37:22,638 we are going to have a new instance of 10712 06:37:22,638 --> 06:37:26,120 Visual Studio code but using WSL let's 10713 06:37:26,120 --> 06:37:28,520 just trust the outdors and as you can 10714 06:37:28,520 --> 06:37:32,080 see here I'm getting this WSL Ubuntu 10715 06:37:32,080 --> 06:37:34,320 Banner over here and and is because I 10716 06:37:34,320 --> 06:37:36,520 already connected this with the Linux 10717 06:37:36,520 --> 06:37:39,840 instance so you have two options from 10718 06:37:39,840 --> 06:37:42,718 now on you can start using just the 10719 06:37:42,718 --> 06:37:45,200 windows terminal to execute all the 10720 06:37:45,200 --> 06:37:47,240 things we are going to need or you can 10721 06:37:47,240 --> 06:37:49,958 use the integrated terminal which comes 10722 06:37:49,958 --> 06:37:52,558 with Visual Studio code just go to 10723 06:37:52,558 --> 06:37:55,718 terminal new terminal and now we are 10724 06:37:55,718 --> 06:37:58,280 going to have a terminal using the exact 10725 06:37:58,280 --> 06:38:01,718 same W cell instance so we can start 10726 06:38:01,718 --> 06:38:03,920 using PSE sudo commands for example to 10727 06:38:03,920 --> 06:38:07,558 the AP update and this is going to work 10728 06:38:07,558 --> 06:38:09,760 properly now just take something in 10729 06:38:09,760 --> 06:38:11,280 consideration maybe you are going to 10730 06:38:11,280 --> 06:38:14,120 develop all your projects on a folder 10731 06:38:14,120 --> 06:38:16,798 called development inside your documents 10732 06:38:16,798 --> 06:38:20,280 on Windows and you can do so however if 10733 06:38:20,280 --> 06:38:23,478 you take a look to the Linux terminal 10734 06:38:23,478 --> 06:38:25,958 with ls command as you can see here you 10735 06:38:25,958 --> 06:38:28,200 are going to have just access to the 10736 06:38:28,200 --> 06:38:31,478 local files and folders inside of the 10737 06:38:31,478 --> 06:38:34,440 WSL instance and I highly recommend you 10738 06:38:34,440 --> 06:38:36,798 to do that because of course you can do 10739 06:38:36,798 --> 06:38:39,398 something like typing the address of 10740 06:38:39,398 --> 06:38:43,200 your local development folders and use 10741 06:38:43,200 --> 06:38:45,478 the projects from here but the 10742 06:38:45,478 --> 06:38:48,558 communication from the WL console and 10743 06:38:48,558 --> 06:38:51,760 the local Windows files are actually 10744 06:38:51,760 --> 06:38:55,200 quite slow so I prefer just to keep 10745 06:38:55,200 --> 06:38:58,878 Simple and use all the folders inside W 10746 06:38:58,878 --> 06:39:01,478 cell remember that you have to just 10747 06:39:01,478 --> 06:39:04,040 manage simple commands such as LS to 10748 06:39:04,040 --> 06:39:07,638 know all the folders on the current 10749 06:39:07,638 --> 06:39:10,000 directory and CD to navigate through 10750 06:39:10,000 --> 06:39:12,200 them now if you go back to your vs code 10751 06:39:12,200 --> 06:39:13,920 and you hit terminal new terminal and 10752 06:39:13,920 --> 06:39:15,478 open up a terminal we're going to want 10753 06:39:15,478 --> 06:39:17,360 to then install git we're not going to 10754 06:39:17,360 --> 06:39:19,718 use git for this lesson however we will 10755 06:39:19,718 --> 06:39:21,840 definitely be using it in the future see 10756 06:39:21,840 --> 06:39:24,920 if git is installed type g-- version 10757 06:39:24,920 --> 06:39:26,478 sometimes Linux will automatically come 10758 06:39:26,478 --> 06:39:27,920 with get installed and you'll see 10759 06:39:27,920 --> 06:39:30,120 something output like this however if 10760 06:39:30,120 --> 06:39:32,360 you are the ones who decided to keep 10761 06:39:32,360 --> 06:39:34,040 using po sh 10762 06:39:34,040 --> 06:39:37,760 and just Windows instead of WSL don't 10763 06:39:37,760 --> 06:39:40,798 forget to go to the official git page 10764 06:39:40,798 --> 06:39:44,000 and install it for Windows the process 10765 06:39:44,000 --> 06:39:46,638 is as same as we did before pretty 10766 06:39:46,638 --> 06:39:49,478 standard just the common sequence of 10767 06:39:49,478 --> 06:39:51,558 clicking next and of course please to 10768 06:39:51,558 --> 06:39:54,200 read the license agreement and now if 10769 06:39:54,200 --> 06:39:55,638 you've made it this far you should be 10770 06:39:55,638 --> 06:39:57,280 able to follow along with the mac and 10771 06:39:57,280 --> 06:39:59,280 Linux constructions as if you're running 10772 06:39:59,280 --> 06:40:00,958 on a Mac and a Linux even though you're 10773 06:40:00,958 --> 06:40:03,520 running on a Windows just be sure that 10774 06:40:03,520 --> 06:40:05,200 whenever you're in your vs code you take 10775 06:40:05,200 --> 06:40:06,718 a look at the bottom left and make sure 10776 06:40:06,718 --> 06:40:09,878 you're on WSL yuntu like I said before 10777 06:40:09,878 --> 06:40:11,718 if you want to run in Powershell or in a 10778 06:40:11,718 --> 06:40:13,120 Windows environment you're more than 10779 06:40:13,120 --> 06:40:15,200 free to do so but like I said if you've 10780 06:40:15,200 --> 06:40:17,558 made it this far huge congratulations 10781 06:40:17,558 --> 06:40:19,958 awesome 10782 06:40:28,320 --> 06:40:31,160 work and then finally our last setup is 10783 06:40:31,160 --> 06:40:33,558 going to be using a tool called gitpod 10784 06:40:33,558 --> 06:40:35,200 starting from lesson five the lesson 10785 06:40:35,200 --> 06:40:36,920 that we're on right now ether's JS 10786 06:40:36,920 --> 06:40:39,160 simple storage all of our code repos are 10787 06:40:39,160 --> 06:40:42,200 going to come with a button in the repo 10788 06:40:42,200 --> 06:40:44,558 scroll down they'll come with this open 10789 06:40:44,558 --> 06:40:47,760 in git pod button now git pod is a cloud 10790 06:40:47,760 --> 06:40:50,080 development environment where you can 10791 06:40:50,080 --> 06:40:53,478 actually run your code on a remote 10792 06:40:53,478 --> 06:40:55,958 server it's kind of similar to remix IDE 10793 06:40:55,958 --> 06:40:58,280 but it allows you to run Visual Studio 10794 06:40:58,280 --> 06:41:01,520 code in the browser or connected to 10795 06:41:01,520 --> 06:41:03,478 another server this is good because then 10796 06:41:03,478 --> 06:41:05,520 you don't have to do any installation on 10797 06:41:05,520 --> 06:41:07,878 anything since all the tools that you 10798 06:41:07,878 --> 06:41:09,360 want to use are just going to be running 10799 06:41:09,360 --> 06:41:11,958 on this remote server this has its 10800 06:41:11,958 --> 06:41:14,320 downsides though obviously since you'll 10801 06:41:14,320 --> 06:41:16,920 only be able to code if git pod is up 10802 06:41:16,920 --> 06:41:19,120 and working for you additionally when it 10803 06:41:19,120 --> 06:41:21,280 comes to private Keys you absolutely do 10804 06:41:21,280 --> 06:41:24,080 not want to run any code with a private 10805 06:41:24,080 --> 06:41:26,558 key that has real money in it on gitpod 10806 06:41:26,558 --> 06:41:28,798 why well once again since you're running 10807 06:41:28,798 --> 06:41:31,840 your scripts on a remote server those 10808 06:41:31,840 --> 06:41:34,878 servers have access to your private keys 10809 06:41:34,878 --> 06:41:37,440 but since you've pinky promised that for 10810 06:41:37,440 --> 06:41:39,360 this course you're not going to be using 10811 06:41:39,360 --> 06:41:41,320 a metamask or a private key with actual 10812 06:41:41,320 --> 06:41:43,638 money in it it should be fine the other 10813 06:41:43,638 --> 06:41:45,840 downside is that these often cost money 10814 06:41:45,840 --> 06:41:48,558 to use and git pod isn't free but it's 10815 06:41:48,558 --> 06:41:51,360 an option if you absolutely cannot get 10816 06:41:51,360 --> 06:41:53,200 any of the installation working so if 10817 06:41:53,200 --> 06:41:54,718 you go ahead and you hit this opening 10818 06:41:54,718 --> 06:41:56,878 git pod button you'll get a welcome to 10819 06:41:56,878 --> 06:41:58,680 git pod showing up uh we're going to go 10820 06:41:58,680 --> 06:42:00,878 ahead and continue with GitHub since 10821 06:42:00,878 --> 06:42:02,680 you've signed up for GitHub here you 10822 06:42:02,680 --> 06:42:05,718 want to go head and authorize git 10823 06:42:05,718 --> 06:42:08,200 pod and it'll go ahead and start 10824 06:42:08,200 --> 06:42:10,638 creating this workspace for you and 10825 06:42:10,638 --> 06:42:13,000 you'll notice it looks exactly like 10826 06:42:13,000 --> 06:42:15,600 Visual Studio code since I opened the 10827 06:42:15,600 --> 06:42:18,798 repo up in gitpod it came with all the 10828 06:42:18,798 --> 06:42:21,600 code and you can even open this 10829 06:42:21,600 --> 06:42:24,958 workspace up in vs code desktop so this 10830 06:42:24,958 --> 06:42:27,240 is might be a little bit confusing but 10831 06:42:27,240 --> 06:42:29,760 basically you can run off of git pod 10832 06:42:29,760 --> 06:42:32,558 using your local Visual Studio code and 10833 06:42:32,558 --> 06:42:34,520 if you see G pod here that's how you 10834 06:42:34,520 --> 06:42:36,638 know that you're running off of git pod 10835 06:42:36,638 --> 06:42:38,638 if you see this popup do you want to 10836 06:42:38,638 --> 06:42:41,320 open this workspace in vs code desktop 10837 06:42:41,320 --> 06:42:43,398 you can hit open and it'll ask you if 10838 06:42:43,398 --> 06:42:45,680 you want to open up visual studio code 10839 06:42:45,680 --> 06:42:47,718 which I'm going to go ahead and hit yes 10840 06:42:47,718 --> 06:42:49,000 and you'll get something that looks like 10841 06:42:49,000 --> 06:42:51,638 this on your Visual Studio code it'll 10842 06:42:51,638 --> 06:42:53,120 tell you that it wants to install the 10843 06:42:53,120 --> 06:42:56,240 git pod extension and then open that git 10844 06:42:56,240 --> 06:42:58,718 pod URL so you can go ahead and install 10845 06:42:58,718 --> 06:43:01,478 it reload window and 10846 06:43:01,478 --> 06:43:03,520 open and it's going to go ahead and 10847 06:43:03,520 --> 06:43:05,798 start connecting to our the git pod 10848 06:43:05,798 --> 06:43:08,080 workspace and this is going to be the 10849 06:43:08,080 --> 06:43:11,320 same as running git pod in the browser 10850 06:43:11,320 --> 06:43:13,680 here or you can also do it manually by 10851 06:43:13,680 --> 06:43:16,760 hitting the git pod in the bottom left 10852 06:43:16,760 --> 06:43:20,638 and then type in open in vs 10853 06:43:20,638 --> 06:43:22,760 code and then you should be able to run 10854 06:43:22,760 --> 06:43:24,680 it in your Visual Studio code for now 10855 06:43:24,680 --> 06:43:26,080 I'm going to recommend that if you're 10856 06:43:26,080 --> 06:43:28,478 using git pod just stay in the browser 10857 06:43:28,478 --> 06:43:30,920 just so that you know okay I am running 10858 06:43:30,920 --> 06:43:33,478 this on a remote server and just as a 10859 06:43:33,478 --> 06:43:35,478 reminder for you that you're not 10860 06:43:35,478 --> 06:43:37,680 actually locally developing and 10861 06:43:37,680 --> 06:43:39,160 hopefully this will be a trigger to not 10862 06:43:39,160 --> 06:43:41,718 actually put any special private keys or 10863 06:43:41,718 --> 06:43:43,360 anything like that but you can make 10864 06:43:43,360 --> 06:43:45,320 workspaces you can make new folders and 10865 06:43:45,320 --> 06:43:47,320 you should be able to run all the 10866 06:43:47,320 --> 06:43:49,200 commands on here as if you were running 10867 06:43:49,200 --> 06:43:51,638 locally with Visual Studio code to open 10868 06:43:51,638 --> 06:43:53,680 up the terminal you hit this little bar 10869 06:43:53,680 --> 06:43:57,000 in the top left go to terminal new 10870 06:43:57,000 --> 06:44:01,160 terminal or use control Tilda exact same 10871 06:44:01,160 --> 06:44:03,840 as Mac OS and Linux keyboard shortcuts 10872 06:44:03,840 --> 06:44:05,840 to create a new folder we can change 10873 06:44:05,840 --> 06:44:08,878 directory CD do dot 10874 06:44:08,878 --> 06:44:12,638 mkdir new folder mkd makes make 10875 06:44:12,638 --> 06:44:14,878 directory called new folder and then 10876 06:44:14,878 --> 06:44:17,280 we're going to change our directory into 10877 06:44:17,280 --> 06:44:19,638 new folder and hit enter and now we're 10878 06:44:19,638 --> 06:44:22,240 in that new folder for each section you 10879 06:44:22,240 --> 06:44:24,000 can either open up the entire source 10880 06:44:24,000 --> 06:44:26,920 code right into gitpod or you can create 10881 06:44:26,920 --> 06:44:29,718 a new folder for each section yourself 10882 06:44:29,718 --> 06:44:31,558 and start from blank and then you would 10883 06:44:31,558 --> 06:44:34,160 just type code period 10884 06:44:34,160 --> 06:44:37,958 and you'd be in a brand new 10885 06:44:39,558 --> 06:44:41,878 folder and if you're using Windows this 10886 06:44:41,878 --> 06:44:45,798 should say WSL or yuntu or something 10887 06:44:45,798 --> 06:44:47,558 like that and if you have all that that 10888 06:44:47,558 --> 06:44:50,478 means we're ready to go now a quick note 10889 06:44:50,478 --> 06:44:52,040 something that you'll see me do a lot 10890 06:44:52,040 --> 06:44:54,718 and you can do this as well often times 10891 06:44:54,718 --> 06:44:56,600 when my terminal gets really really big 10892 06:44:56,600 --> 06:44:58,360 or there's a ton of commands in here 10893 06:44:58,360 --> 06:45:00,280 gets a little bit overwhelming for me so 10894 06:45:00,280 --> 06:45:02,080 one thing that you can do is you can 10895 06:45:02,080 --> 06:45:05,200 type clear and hit enter to clear it or 10896 06:45:05,200 --> 06:45:08,398 what you can do is you can hit command K 10897 06:45:08,398 --> 06:45:11,360 if you're on a Mac or control K if 10898 06:45:11,360 --> 06:45:13,558 you're on a Linux or a Windows and it's 10899 06:45:13,558 --> 06:45:15,080 one of my favorite keyboard shortcuts 10900 06:45:15,080 --> 06:45:17,600 that I use all the time Additionally the 10901 06:45:17,600 --> 06:45:20,240 trash can and the X here are very 10902 06:45:20,240 --> 06:45:23,120 different if I go do a couple of enters 10903 06:45:23,120 --> 06:45:25,478 here and we're down here if I hit the X 10904 06:45:25,478 --> 06:45:27,840 here and then pull my terminal back up 10905 06:45:27,840 --> 06:45:30,160 by doing the toggle or by doing terminal 10906 06:45:30,160 --> 06:45:32,680 new terminal you'll see all those lines 10907 06:45:32,680 --> 06:45:34,718 are still here but if I hit the trash 10908 06:45:34,718 --> 06:45:37,638 can and then pull the terminal back up 10909 06:45:37,638 --> 06:45:39,680 you you'll see it actually refreshes M 10910 06:45:39,680 --> 06:45:41,878 has a special command that prints stuff 10911 06:45:41,878 --> 06:45:44,440 out trashing your terminal is basically 10912 06:45:44,440 --> 06:45:46,360 deleting whatever is running in it and 10913 06:45:46,360 --> 06:45:49,558 the x is just hiding it and it's hitting 10914 06:45:49,558 --> 06:45:51,958 control Tilda or toggling our terminal 10915 06:45:51,958 --> 06:45:53,440 or whatever command it is on your 10916 06:45:53,440 --> 06:45:55,638 environment that's equivalent to hitting 10917 06:45:55,638 --> 06:45:58,360 the hide not the trash so if we want to 10918 06:45:58,360 --> 06:46:00,200 remove and start a terminal over we hit 10919 06:46:00,200 --> 06:46:02,600 the trash can and then we pull it back 10920 06:46:02,600 --> 06:46:04,920 up 10921 06:46:06,680 --> 06:46:08,320 so after we have that set up the next 10922 06:46:08,320 --> 06:46:09,398 thing that we're going to want to 10923 06:46:09,398 --> 06:46:12,280 install is actually Foundry itself in 10924 06:46:12,280 --> 06:46:13,840 The Foundry book you can find this in 10925 06:46:13,840 --> 06:46:16,440 the installation tab or you can go to 10926 06:46:16,440 --> 06:46:19,440 get found. sh and it'll have this 10927 06:46:19,440 --> 06:46:20,680 command that you can actually just go 10928 06:46:20,680 --> 06:46:22,638 ahead and copy Windows users we're going 10929 06:46:22,638 --> 06:46:24,120 to teach you how to do it the Linux or 10930 06:46:24,120 --> 06:46:26,320 Mac OS way so just stay tuned so we're 10931 06:46:26,320 --> 06:46:27,718 going to go ahead and copy this and run 10932 06:46:27,718 --> 06:46:30,240 this command again we can go terminal 10933 06:46:30,240 --> 06:46:31,638 new terminal and there are also some 10934 06:46:31,638 --> 06:46:33,440 shortcuts to do this I'm just going to 10935 06:46:33,440 --> 06:46:35,160 go ahead and paste this in here and hit 10936 06:46:35,160 --> 06:46:37,798 enter you will need internet access for 10937 06:46:37,798 --> 06:46:39,000 this to work because it's actually 10938 06:46:39,000 --> 06:46:42,280 downloading Foundry from this website 10939 06:46:42,280 --> 06:46:44,320 let me just move this up zoom in a 10940 06:46:44,320 --> 06:46:45,878 little bit here and you'll see me do 10941 06:46:45,878 --> 06:46:47,920 this a lot in the terminal I'll type 10942 06:46:47,920 --> 06:46:50,878 clear a lot to remove anything that's 10943 06:46:50,878 --> 06:46:53,200 been coded or output in our terminal 10944 06:46:53,200 --> 06:46:56,600 here or you'll also see me do command K 10945 06:46:56,600 --> 06:46:59,000 like that which clears the screen when 10946 06:46:59,000 --> 06:47:00,440 I'm typing in the terminal you'll see me 10947 06:47:00,440 --> 06:47:02,320 hit control w a lot which actually 10948 06:47:02,320 --> 06:47:03,440 removes 10949 06:47:03,440 --> 06:47:04,878 the most recent block of code you've 10950 06:47:04,878 --> 06:47:07,320 written you'll also see me do control U 10951 06:47:07,320 --> 06:47:09,360 which deletes the entire line so I'm 10952 06:47:09,360 --> 06:47:12,240 going to use command C for copy and 10953 06:47:12,240 --> 06:47:15,398 command V for paste a lot for those of 10954 06:47:15,398 --> 06:47:18,120 you on Windows and Linux it might be 10955 06:47:18,120 --> 06:47:20,798 control C and control V and if you're 10956 06:47:20,798 --> 06:47:22,398 unfamiliar you can Google the keyboard 10957 06:47:22,398 --> 06:47:25,240 shortcuts for for copying and pasting 10958 06:47:25,240 --> 06:47:26,878 for Windows or Linux if you're on a 10959 06:47:26,878 --> 06:47:28,280 Windows these keyboard shortcuts might 10960 06:47:28,280 --> 06:47:29,878 be a little bit different we've got a 10961 06:47:29,878 --> 06:47:32,000 list of keyboard shortcuts in the git 10962 06:47:32,000 --> 06:47:33,680 repo associated with with this course 10963 06:47:33,680 --> 06:47:35,120 but if you just run that curl command 10964 06:47:35,120 --> 06:47:36,798 you'll see an output at the bottom down 10965 06:47:36,798 --> 06:47:38,200 here that says something like detected 10966 06:47:38,200 --> 06:47:40,280 your preferred shell is whatever your 10967 06:47:40,280 --> 06:47:42,478 shell is here and added Foundry up to 10968 06:47:42,478 --> 06:47:44,878 path run Source or simply start a new 10969 06:47:44,878 --> 06:47:47,080 terminal session to use Foundry up and 10970 06:47:47,080 --> 06:47:48,160 once you run that we can go ahead and 10971 06:47:48,160 --> 06:47:50,360 run Foundry up and this will actually 10972 06:47:50,360 --> 06:47:52,520 install an update Foundry to the latest 10973 06:47:52,520 --> 06:47:54,878 version now whenever we want to install 10974 06:47:54,878 --> 06:47:56,600 an update Foundry we can just run 10975 06:47:56,600 --> 06:47:58,958 Foundry up like this it'll automatically 10976 06:47:58,958 --> 06:48:00,958 install everything and Foundry comes 10977 06:48:00,958 --> 06:48:05,680 with four components Forge cast Anvil 10978 06:48:05,680 --> 06:48:07,760 and chisel we'll know we've installed 10979 06:48:07,760 --> 06:48:10,798 these right if we run Forge D- version 10980 06:48:10,798 --> 06:48:11,840 and we'll see an output that looks 10981 06:48:11,840 --> 06:48:13,478 something like this now something 10982 06:48:13,478 --> 06:48:15,718 important to note if you hit this trash 10983 06:48:15,718 --> 06:48:18,638 can in the top right this actually kills 10984 06:48:18,638 --> 06:48:21,718 the terminal it's different from the X 10985 06:48:21,718 --> 06:48:23,920 which is just close the panel we close 10986 06:48:23,920 --> 06:48:26,280 the panel and then we reopen our 10987 06:48:26,280 --> 06:48:28,920 terminal by hitting terminal new 10988 06:48:28,920 --> 06:48:31,200 terminal like this this actually creates 10989 06:48:31,200 --> 06:48:33,280 a new terminal which we can kill 10990 06:48:33,280 --> 06:48:35,840 like this but our old terminal is still 10991 06:48:35,840 --> 06:48:37,878 up in order to actually delete this 10992 06:48:37,878 --> 06:48:39,878 terminal we have to hit the trash can 10993 06:48:39,878 --> 06:48:41,638 now you want to try this out now delete 10994 06:48:41,638 --> 06:48:44,000 your terminal like we just did open up a 10995 06:48:44,000 --> 06:48:46,878 new terminal and run Foundry up if this 10996 06:48:46,878 --> 06:48:49,160 doesn't run we might have an issue with 10997 06:48:49,160 --> 06:48:51,200 your path and you might need to add 10998 06:48:51,200 --> 06:48:53,638 Foundry to your path if this is an issue 10999 06:48:53,638 --> 06:48:55,638 that you have please make a discussion 11000 06:48:55,638 --> 06:48:57,200 on the GitHub repo assed with this 11001 06:48:57,200 --> 06:49:01,320 course or check please first check this 11002 06:49:01,320 --> 06:49:03,958 lesson six of the GitHub repo associated 11003 06:49:03,958 --> 06:49:06,080 with this course and we'll add some 11004 06:49:06,080 --> 06:49:07,760 debugging tips to make sure that that 11005 06:49:07,760 --> 06:49:10,040 does indeed happen or if there is no 11006 06:49:10,040 --> 06:49:12,200 debugging tips here make a discussion on 11007 06:49:12,200 --> 06:49:15,360 the course but first be sure to check to 11008 06:49:15,360 --> 06:49:18,000 see if that discussion already exists 11009 06:49:18,000 --> 06:49:20,000 and you should be able to do Forge D- 11010 06:49:20,000 --> 06:49:22,760 version however what can happen is if 11011 06:49:22,760 --> 06:49:25,878 you trash can the terminal and open up a 11012 06:49:25,878 --> 06:49:29,398 new terminal if you run Forge D- version 11013 06:49:29,398 --> 06:49:33,360 now it might say Forge command not found 11014 06:49:33,360 --> 06:49:35,280 this means that you have to rerun this 11015 06:49:35,280 --> 06:49:37,958 command this Source command that Foundry 11016 06:49:37,958 --> 06:49:39,920 told us to do if you're working with 11017 06:49:39,920 --> 06:49:43,120 bash most of the time this bash RC file 11018 06:49:43,120 --> 06:49:45,320 automatically gets loaded but sometimes 11019 06:49:45,320 --> 06:49:46,840 it actually won't depending on what your 11020 06:49:46,840 --> 06:49:49,558 setup is if this happens for you another 11021 06:49:49,558 --> 06:49:52,680 thing that you can do is you can type CD 11022 06:49:52,680 --> 06:49:55,040 and go to your home directory and type 11023 06:49:55,040 --> 06:49:58,760 this line Echo source and then whatever 11024 06:49:58,760 --> 06:50:02,200 Foundry up told you to do double carrot. 11025 06:50:02,200 --> 06:50:05,160 Bash profile and hit enter for example 11026 06:50:05,160 --> 06:50:07,120 when we just ran Foundry up right here 11027 06:50:07,120 --> 06:50:09,000 it gave us this command here this Source 11028 06:50:09,000 --> 06:50:11,638 users patrick. bashrc that's what we 11029 06:50:11,638 --> 06:50:14,080 would want to Echo however this will 11030 06:50:14,080 --> 06:50:16,440 change depending on your terminal setup 11031 06:50:16,440 --> 06:50:19,760 so look to the GitHub repository for the 11032 06:50:19,760 --> 06:50:21,280 command that you should be using for 11033 06:50:21,280 --> 06:50:23,320 your setup please make a discussions 11034 06:50:23,320 --> 06:50:25,520 thread if one does not already exist 11035 06:50:25,520 --> 06:50:27,440 what this will do is it'll add this 11036 06:50:27,440 --> 06:50:30,160 command to the end of your bash profile 11037 06:50:30,160 --> 06:50:32,638 make sure you do double like this 11038 06:50:32,638 --> 06:50:34,280 otherwise you could override whatever is 11039 06:50:34,280 --> 06:50:35,680 currently in your bash profile now I'm 11040 06:50:35,680 --> 06:50:37,958 going to give you a command that if you 11041 06:50:37,958 --> 06:50:39,840 screw up you could accidentally override 11042 06:50:39,840 --> 06:50:41,920 some stuff if you've never used bash 11043 06:50:41,920 --> 06:50:43,440 profile before you kind of don't have to 11044 06:50:43,440 --> 06:50:45,360 worry about it though the other command 11045 06:50:45,360 --> 06:50:47,558 you can run is something like this if 11046 06:50:47,558 --> 06:50:49,240 you do get an issue we can just ask an 11047 06:50:49,240 --> 06:50:51,320 AI something like how do I get my do 11048 06:50:51,320 --> 06:50:53,878 bash RC to load by default and there's a 11049 06:50:53,878 --> 06:50:55,160 couple of different ways for this 11050 06:50:55,160 --> 06:50:58,160 depending on what system using and what 11051 06:50:58,160 --> 06:51:00,200 you're working with all I'm going to say 11052 06:51:00,200 --> 06:51:02,718 though is if this happens to you if you 11053 06:51:02,718 --> 06:51:05,240 run Forge D- version and instead of 11054 06:51:05,240 --> 06:51:06,638 getting an output you get something like 11055 06:51:06,638 --> 06:51:10,638 command not found ask an AI or come into 11056 06:51:10,638 --> 06:51:13,160 the discussions of the channel and as 11057 06:51:13,160 --> 06:51:15,478 people run into this we'll build and 11058 06:51:15,478 --> 06:51:17,478 start a discussion and if enough people 11059 06:51:17,478 --> 06:51:19,240 have issues we'll create a new file here 11060 06:51:19,240 --> 06:51:22,478 to help people debug that issue so what 11061 06:51:22,478 --> 06:51:24,878 it looks like chat gbt does give a 11062 06:51:24,878 --> 06:51:27,718 pretty good output of what we can do we 11063 06:51:27,718 --> 06:51:30,240 can edit our bash RC our bash profile 11064 06:51:30,240 --> 06:51:33,120 our profile Etc and work with it like 11065 06:51:33,120 --> 06:51:34,958 that so if you run into that issue 11066 06:51:34,958 --> 06:51:36,280 there's plenty of things we can do to 11067 06:51:36,280 --> 06:51:38,320 fix it don't worry but if you're a 11068 06:51:38,320 --> 06:51:40,040 little nervous feel free to use the 11069 06:51:40,040 --> 06:51:42,760 discussions channel of the course got it 11070 06:51:42,760 --> 06:51:44,680 okay great if you see an output like 11071 06:51:44,680 --> 06:51:46,360 this you've done it right if you see an 11072 06:51:46,360 --> 06:51:47,958 output like we don't know what you're 11073 06:51:47,958 --> 06:51:49,760 doing you've done it wrong all right 11074 06:51:49,760 --> 06:51:52,320 great and again installing these can be 11075 06:51:52,320 --> 06:51:53,920 some of the hardest parts of this course 11076 06:51:53,920 --> 06:51:55,638 so don't get discouraged if this doesn't 11077 06:51:55,638 --> 06:51:57,718 work right away if it worked right away 11078 06:51:57,718 --> 06:52:01,878 for you that's actually amazing 11079 06:52:03,200 --> 06:52:06,040 now also the control back tick shortcut 11080 06:52:06,040 --> 06:52:08,080 toggles the terminal visibility between 11081 06:52:08,080 --> 06:52:12,040 up and down I also have command J as a 11082 06:52:12,040 --> 06:52:15,398 toggle for panel visibility as well this 11083 06:52:15,398 --> 06:52:16,920 is a key binding that you'll see me use 11084 06:52:16,920 --> 06:52:18,920 pretty often because we often will flip 11085 06:52:18,920 --> 06:52:20,760 back and forth between the terminal and 11086 06:52:20,760 --> 06:52:23,080 our code which is going to be up here in 11087 06:52:23,080 --> 06:52:25,360 fact if we click this explore button on 11088 06:52:25,360 --> 06:52:28,360 the left we can select this area select 11089 06:52:28,360 --> 06:52:30,840 new file do something like 11090 06:52:30,840 --> 06:52:34,240 hello.txt or better yet hello. Soul 11091 06:52:34,240 --> 06:52:35,878 we're going to add some code in here 11092 06:52:35,878 --> 06:52:37,520 what's important to know is if you see 11093 06:52:37,520 --> 06:52:39,878 this white dot in the top section here 11094 06:52:39,878 --> 06:52:42,680 this means that this file isn't saved 11095 06:52:42,680 --> 06:52:45,360 command s or controls depending on if 11096 06:52:45,360 --> 06:52:47,878 you're on a Windows or Mac or Linux will 11097 06:52:47,878 --> 06:52:50,040 save it and make that white dot go away 11098 06:52:50,040 --> 06:52:53,878 unsaved saved unsaved saved it's 11099 06:52:53,878 --> 06:52:55,958 important to recognize if a file is 11100 06:52:55,958 --> 06:52:58,120 saved or not because if it's not saved 11101 06:52:58,120 --> 06:52:59,878 it might not do what you think it should 11102 06:52:59,878 --> 06:53:02,798 do so I kind of by default will always 11103 06:53:02,798 --> 06:53:04,958 automatically save by hitting command s 11104 06:53:04,958 --> 06:53:06,520 and it's a good practice to get into 11105 06:53:06,520 --> 06:53:09,320 just always autosave everything you do 11106 06:53:09,320 --> 06:53:10,638 we can also delete this file we just 11107 06:53:10,638 --> 06:53:12,320 created by right clicking it and 11108 06:53:12,320 --> 06:53:14,920 selecting delete move to trash final 11109 06:53:14,920 --> 06:53:16,478 thing that we want to install and we'll 11110 06:53:16,478 --> 06:53:18,958 install a lot of these as we go along is 11111 06:53:18,958 --> 06:53:22,120 actually an AI extension something in vs 11112 06:53:22,120 --> 06:53:25,240 code to help us actually have ai inside 11113 06:53:25,240 --> 06:53:27,680 of our Visual Studio code if you select 11114 06:53:27,680 --> 06:53:30,600 this little box looking thing that says 11115 06:53:30,600 --> 06:53:32,840 extensions you get a search box box 11116 06:53:32,840 --> 06:53:34,520 which allows you to search for 11117 06:53:34,520 --> 06:53:37,000 extensions the AI that I work with the 11118 06:53:37,000 --> 06:53:40,600 most is GitHub co-pilot but you can use 11119 06:53:40,600 --> 06:53:42,600 whatever AI you want or you could just 11120 06:53:42,600 --> 06:53:45,320 not even use an AI get a co-pilot does 11121 06:53:45,320 --> 06:53:48,638 cost money to use so feel free to also 11122 06:53:48,638 --> 06:53:51,080 not use it there's some other free vs 11123 06:53:51,080 --> 06:53:53,478 code extensions that use AI so feel free 11124 06:53:53,478 --> 06:53:54,840 to browse around and choose which one 11125 06:53:54,840 --> 06:53:56,760 you like for me I'm going to go ahead 11126 06:53:56,760 --> 06:53:58,958 and install GitHub co-pilot you'll get a 11127 06:53:58,958 --> 06:54:00,878 little guy in the bottom right for your 11128 06:54:00,878 --> 06:54:02,558 vs code that will let you know that 11129 06:54:02,558 --> 06:54:03,878 you've done it correctly you'll need to 11130 06:54:03,878 --> 06:54:06,160 sign into GitHub which is something that 11131 06:54:06,160 --> 06:54:08,280 we've recently made in order for it to 11132 06:54:08,280 --> 06:54:10,478 work now you'll see me using GitHub 11133 06:54:10,478 --> 06:54:12,398 co-pilot pretty often when I write my 11134 06:54:12,398 --> 06:54:15,040 code because I have this little doad on 11135 06:54:15,040 --> 06:54:16,878 down here I can start writing some code 11136 06:54:16,878 --> 06:54:18,760 and GI up co-pilot will start giving me 11137 06:54:18,760 --> 06:54:21,320 suggestions as to what I should write 11138 06:54:21,320 --> 06:54:23,718 for example if I were to add 11139 06:54:23,718 --> 06:54:28,280 spdx by since identifier get up copilot 11140 06:54:28,280 --> 06:54:30,240 actually automatically starts to gray 11141 06:54:30,240 --> 06:54:33,360 out and give me a suggestion if I tab I 11142 06:54:33,360 --> 06:54:35,680 can autocomplete my code with GitHub 11143 06:54:35,680 --> 06:54:38,240 copilot suggestion alternatively what I 11144 06:54:38,240 --> 06:54:40,320 could do then for example I could keep 11145 06:54:40,320 --> 06:54:43,200 coding and I can see it's already giving 11146 06:54:43,200 --> 06:54:47,000 me a suggestion here and if I hit upkey 11147 06:54:47,000 --> 06:54:49,958 enter I'll actually open up this bit on 11148 06:54:49,958 --> 06:54:51,200 the 11149 06:54:51,200 --> 06:54:53,478 side where get up co-pilot will give me 11150 06:54:53,478 --> 06:54:55,360 a ton of different solutions on what it 11151 06:54:55,360 --> 06:54:57,040 thinks I'm trying to write and I can 11152 06:54:57,040 --> 06:54:59,600 just pick one of these Solutions 11153 06:54:59,600 --> 06:55:01,360 obviously some of these aren't doing 11154 06:55:01,360 --> 06:55:02,638 anything we'll learn about about the 11155 06:55:02,638 --> 06:55:04,718 command pallet soon and we can also use 11156 06:55:04,718 --> 06:55:06,638 any of the GitHub co-pilot commands that 11157 06:55:06,638 --> 06:55:08,600 come with the command pallet an 11158 06:55:08,600 --> 06:55:10,760 alternate to vs code is a tool called 11159 06:55:10,760 --> 06:55:13,478 VSS codium so VSS code is a tool that's 11160 06:55:13,478 --> 06:55:15,478 owned by Microsoft and it sends up 11161 06:55:15,478 --> 06:55:17,878 Telemetry data up to Microsoft so 11162 06:55:17,878 --> 06:55:20,280 basically it can send data about ways to 11163 06:55:20,280 --> 06:55:22,718 make your experience better with vs code 11164 06:55:22,718 --> 06:55:24,240 for people who have a more security 11165 06:55:24,240 --> 06:55:26,798 mindset this is an open- sourced version 11166 06:55:26,798 --> 06:55:28,840 of vs code that I highly recommend you 11167 06:55:28,840 --> 06:55:30,958 check it out another extension that you 11168 06:55:30,958 --> 06:55:32,958 might want to add is GitHub co-pilot 11169 06:55:32,958 --> 06:55:35,760 Labs get up co-pilot Labs has AI 11170 06:55:35,760 --> 06:55:37,760 features that are experimental so it 11171 06:55:37,760 --> 06:55:39,320 might be worth installing as well all 11172 06:55:39,320 --> 06:55:41,080 right fantastic at this point you should 11173 06:55:41,080 --> 06:55:44,000 be 100% set up with Visual Studio code 11174 06:55:44,000 --> 06:55:46,320 and git if you're using git pod that's 11175 06:55:46,320 --> 06:55:47,798 great as well and if you're using 11176 06:55:47,798 --> 06:55:50,680 Windows you should be 100% using WSL 11177 06:55:50,680 --> 06:55:51,958 because the rest of the commands are 11178 06:55:51,958 --> 06:55:54,638 only going to work if you're using WSL 11179 06:55:54,638 --> 06:55:55,878 and we're only going to be working with 11180 06:55:55,878 --> 06:55:58,558 Linux bash or zsh commands moving 11181 06:55:58,558 --> 06:56:00,638 forward if you want to be a Hardo like I 11182 06:56:00,638 --> 06:56:01,878 was saying do everything in Powershell 11183 06:56:01,878 --> 06:56:03,920 that's great too moving forward what I 11184 06:56:03,920 --> 06:56:05,718 want you guys all to do is open up your 11185 06:56:05,718 --> 06:56:07,920 terminal the different ways I showed you 11186 06:56:07,920 --> 06:56:10,760 and create a folder by typing in mkd 11187 06:56:10,760 --> 06:56:15,280 foundary hyphen f23 and then you do CD 11188 06:56:15,280 --> 06:56:17,718 foundary f23 you'll notice something 11189 06:56:17,718 --> 06:56:19,478 else I do a lot is I'll type the first 11190 06:56:19,478 --> 06:56:21,280 couple letters of the folder I want to 11191 06:56:21,280 --> 06:56:24,200 go into and then I'll hit tab which will 11192 06:56:24,200 --> 06:56:27,080 autocomplete a lot of stuff for you in 11193 06:56:27,080 --> 06:56:28,638 the terminal sometimes it doesn't work 11194 06:56:28,638 --> 06:56:29,798 you'll get better at figuring out what 11195 06:56:29,798 --> 06:56:31,558 Auto completes and what doesn't I hit 11196 06:56:31,558 --> 06:56:34,840 enter this means I'm now inside of my 11197 06:56:34,840 --> 06:56:35,878 Foundry 11198 06:56:35,878 --> 06:56:38,878 f23 folder and I can run commands inside 11199 06:56:38,878 --> 06:56:40,798 of this folder moving forward I want you 11200 06:56:40,798 --> 06:56:43,320 to put all of your repositories inside 11201 06:56:43,320 --> 06:56:45,398 this folder this way moving forward in 11202 06:56:45,398 --> 06:56:46,718 the future when you start actually 11203 06:56:46,718 --> 06:56:48,440 working on projects in real life you can 11204 06:56:48,440 --> 06:56:50,760 refer back to this folder and refer back 11205 06:56:50,760 --> 06:56:52,958 to code that you wrote and refer back to 11206 06:56:52,958 --> 06:56:55,160 your notes to make sure that you 11207 06:56:55,160 --> 06:56:56,878 understand stuff moving forward we've 11208 06:56:56,878 --> 06:57:00,920 got git D- version Forge D- verion we 11209 06:57:00,920 --> 06:57:04,798 have cast d D version which cast came 11210 06:57:04,798 --> 06:57:08,240 with Forge and Foundry we have Anvil -- 11211 06:57:08,240 --> 06:57:11,240 version and we also have chisle D- 11212 06:57:11,240 --> 06:57:13,360 version I'm going to type clear or hit 11213 06:57:13,360 --> 06:57:17,600 command K to clear everything in the 11214 06:57:18,920 --> 06:57:21,000 terminal and all right now that we have 11215 06:57:21,000 --> 06:57:22,520 everything set up let's go ahead and 11216 06:57:22,520 --> 06:57:25,000 start creating our simple storage 11217 06:57:25,000 --> 06:57:27,320 project in a professional environment 11218 06:57:27,320 --> 06:57:29,080 this is going to be the exact same 11219 06:57:29,080 --> 06:57:31,680 environment that the big protocols use 11220 06:57:31,680 --> 06:57:33,680 these are the environments that Unis 11221 06:57:33,680 --> 06:57:37,120 swap a curve Etc these billion dooll 11222 06:57:37,120 --> 06:57:39,160 groups use you are learning the exact 11223 06:57:39,160 --> 06:57:41,680 same tools as them additionally for 11224 06:57:41,680 --> 06:57:43,040 those of you who are interested in 11225 06:57:43,040 --> 06:57:45,398 security and auditing Foundry is the 11226 06:57:45,398 --> 06:57:48,160 most popular tool amongst Auditors so 11227 06:57:48,160 --> 06:57:49,280 for those of you who want to become 11228 06:57:49,280 --> 06:57:50,680 security researchers you're going to 11229 06:57:50,680 --> 06:57:53,160 learn the exact same tools that the best 11230 06:57:53,160 --> 06:57:57,840 of the best use you ready I sure am so 11231 06:57:57,840 --> 06:58:00,320 let's go ahead and create a new folder 11232 06:58:00,320 --> 06:58:02,600 inside of this folder here to do this 11233 06:58:02,600 --> 06:58:04,080 we're going to type 11234 06:58:04,080 --> 06:58:09,680 mkdir foundary simple storage f23 and 11235 06:58:09,680 --> 06:58:12,080 then we're going to CD into Foundry 11236 06:58:12,080 --> 06:58:14,878 simple storage f23 and you'll notice I 11237 06:58:14,878 --> 06:58:17,360 hit tab there to autocomplete again now 11238 06:58:17,360 --> 06:58:19,000 everyone's terminals are going to look a 11239 06:58:19,000 --> 06:58:21,680 little bit differently mine tells me the 11240 06:58:21,680 --> 06:58:24,320 exact path of the folder that I'm in but 11241 06:58:24,320 --> 06:58:27,000 I have a Alias called video shell which 11242 06:58:27,000 --> 06:58:28,600 just shows me the current folder that 11243 06:58:28,600 --> 06:58:30,798 I'm in and I'm going to use that for the 11244 06:58:30,798 --> 06:58:33,120 rest of the video so if you see my 11245 06:58:33,120 --> 06:58:35,240 terminal look like this it means I'm at 11246 06:58:35,240 --> 06:58:37,478 this location now if you're inside of 11247 06:58:37,478 --> 06:58:39,718 this folder you can actually type in 11248 06:58:39,718 --> 06:58:42,080 code and then hit a period and then you 11249 06:58:42,080 --> 06:58:45,000 should get a new Visual Studio code 11250 06:58:45,000 --> 06:58:47,840 which is now defaulted to that folder if 11251 06:58:47,840 --> 06:58:50,600 you don't you can also hit file open 11252 06:58:50,600 --> 06:58:52,638 folder and select the folder that you 11253 06:58:52,638 --> 06:58:55,200 want to open which will also open up a 11254 06:58:55,200 --> 06:58:57,558 new Visual Studio code inside of that 11255 06:58:57,558 --> 06:59:00,120 folder if you open up your terminal now 11256 06:59:00,120 --> 06:59:02,440 you'll see that we are indeed in in the 11257 06:59:02,440 --> 06:59:04,920 folder for this project and now on the 11258 06:59:04,920 --> 06:59:07,080 left hand side over here this Explorer 11259 06:59:07,080 --> 06:59:09,638 piece we create a file you'll see it pop 11260 06:59:09,638 --> 06:59:12,440 up in the left hand side of our Explorer 11261 06:59:12,440 --> 06:59:16,160 touch is a command to create or touch a 11262 06:59:16,160 --> 06:59:19,080 file and we go ahead and click it and 11263 06:59:19,080 --> 06:59:21,878 type stuff in this file now all these CD 11264 06:59:21,878 --> 06:59:25,040 and mkd and all these commands are known 11265 06:59:25,040 --> 06:59:28,160 as bash or zsh or like Linux terminal 11266 06:59:28,160 --> 06:59:29,600 commands and we're going to be using 11267 06:59:29,600 --> 06:59:31,600 them a lot throughout this course if you 11268 06:59:31,600 --> 06:59:33,478 want it's a great lesson on working with 11269 06:59:33,478 --> 06:59:35,360 bash and CCH and Linux commands on the 11270 06:59:35,360 --> 06:59:37,440 free Cod Camp YouTube but at the same 11271 06:59:37,440 --> 06:59:40,440 time most of the time chat gbt and most 11272 06:59:40,440 --> 06:59:43,440 AIS are actually very well-versed in 11273 06:59:43,440 --> 06:59:45,760 bash and Linux commands so anytime you 11274 06:59:45,760 --> 06:59:47,280 have a problem doing something you can 11275 06:59:47,280 --> 06:59:49,160 often just ask one of these AIS and it 11276 06:59:49,160 --> 06:59:50,798 can help you out as of recording this 11277 06:59:50,798 --> 06:59:53,000 one just came out a couple weeks ago so 11278 06:59:53,000 --> 06:59:54,638 it's incredibly up to date so if you 11279 06:59:54,638 --> 06:59:56,160 want to get the basics down it's only 11280 06:59:56,160 --> 06:59:57,958 about 45 minutes long I definitely 11281 06:59:57,958 --> 06:59:59,520 recommend watching this so you can at 11282 06:59:59,520 --> 07:00:01,280 least be familiar with some of the power 11283 07:00:01,280 --> 07:00:03,558 that Bash has you can absolutely 11284 07:00:03,558 --> 07:00:06,040 continue on with the course as is and 11285 07:00:06,040 --> 07:00:08,360 just use AI to augment you but for those 11286 07:00:08,360 --> 07:00:09,638 of you who want to get more knowledge 11287 07:00:09,638 --> 07:00:11,240 definitely check that out and again the 11288 07:00:11,240 --> 07:00:14,080 reason I have this- f23 is to let 11289 07:00:14,080 --> 07:00:15,520 everyone know that this is associated 11290 07:00:15,520 --> 07:00:17,000 with The Foundry 11291 07:00:17,000 --> 07:00:19,878 2023 course but awesome we can actually 11292 07:00:19,878 --> 07:00:21,680 begin getting set up with our own local 11293 07:00:21,680 --> 07:00:23,798 environments similar to that remix VM 11294 07:00:23,798 --> 07:00:25,240 that we saw when we were working with 11295 07:00:25,240 --> 07:00:27,558 remix we can work with our own local 11296 07:00:27,558 --> 07:00:30,000 blockchain and do a bunch of stuff 11297 07:00:30,000 --> 07:00:32,240 locally as you can tell by the name of 11298 07:00:32,240 --> 07:00:33,840 this project and from what I was saying 11299 07:00:33,840 --> 07:00:35,760 earlier this is going to be our simple 11300 07:00:35,760 --> 07:00:38,360 storage project but coded with Foundry 11301 07:00:38,360 --> 07:00:40,240 which again is a smart contract 11302 07:00:40,240 --> 07:00:41,558 development framework that's going to 11303 07:00:41,558 --> 07:00:43,398 make our deployments and interactions 11304 07:00:43,398 --> 07:00:45,478 with our code much more professional to 11305 07:00:45,478 --> 07:00:47,200 get started with Foundry what we can do 11306 07:00:47,200 --> 07:00:48,840 is we can open up our Explorer to see 11307 07:00:48,840 --> 07:00:50,760 what's in here let's go ahead and delete 11308 07:00:50,760 --> 07:00:53,840 high. txt move to trash I'm going to do 11309 07:00:53,840 --> 07:00:56,000 my video shell command here which won't 11310 07:00:56,000 --> 07:00:57,478 work for you but it works for me what 11311 07:00:57,478 --> 07:00:58,478 we're going to do is we're going to run 11312 07:00:58,478 --> 07:01:01,360 a command to create a new Foundry basic 11313 07:01:01,360 --> 07:01:03,638 project for for us and if you go through 11314 07:01:03,638 --> 07:01:05,360 The Foundry documentation this is going 11315 07:01:05,360 --> 07:01:07,600 to be basically this creating a new 11316 07:01:07,600 --> 07:01:09,760 project section of the documentation and 11317 07:01:09,760 --> 07:01:10,878 if you want to follow along with the 11318 07:01:10,878 --> 07:01:12,958 documentation you can do that as well 11319 07:01:12,958 --> 07:01:14,200 but to do this we're just going to run 11320 07:01:14,200 --> 07:01:17,958 Forge in knit like this and we'll see it 11321 07:01:17,958 --> 07:01:20,398 created a ton of folders over on the 11322 07:01:20,398 --> 07:01:22,240 left hand side for us and if you run 11323 07:01:22,240 --> 07:01:23,520 into an error because you accidentally 11324 07:01:23,520 --> 07:01:25,000 have some files in here for example if I 11325 07:01:25,000 --> 07:01:26,478 run Forge init right now it's going to 11326 07:01:26,478 --> 07:01:28,878 say oh it's not an empty directory what 11327 07:01:28,878 --> 07:01:32,200 we can do is type Forge init D- Force 11328 07:01:32,200 --> 07:01:34,160 period to say let's do it in this 11329 07:01:34,160 --> 07:01:36,160 directory hit enter and it's actually 11330 07:01:36,160 --> 07:01:37,320 going to give us an error because it's 11331 07:01:37,320 --> 07:01:38,600 going to go hey it already has 11332 07:01:38,600 --> 07:01:40,200 everything that I was going to do so it 11333 07:01:40,200 --> 07:01:42,360 just it's just not going to do anything 11334 07:01:42,360 --> 07:01:44,280 but if you have files in here already 11335 07:01:44,280 --> 07:01:46,958 you just add this-- Force piece now if 11336 07:01:46,958 --> 07:01:49,360 you get a different error about git 11337 07:01:49,360 --> 07:01:51,160 Basel is actually going to help us 11338 07:01:51,160 --> 07:01:53,360 triage that so take it away and we are 11339 07:01:53,360 --> 07:01:54,958 getting this error and this is pretty 11340 07:01:54,958 --> 07:01:57,080 common don't worry reason is because 11341 07:01:57,080 --> 07:01:59,478 even though git comes pre-install it on 11342 07:01:59,478 --> 07:02:02,760 our WSL install we still have to 11343 07:02:02,760 --> 07:02:06,240 configure our username and our email so 11344 07:02:06,240 --> 07:02:08,638 we can just use this commands change 11345 07:02:08,638 --> 07:02:11,840 this one my actual email and now let's 11346 07:02:11,840 --> 07:02:15,280 also configure the username after we 11347 07:02:15,280 --> 07:02:17,600 have these configurations we can run 11348 07:02:17,600 --> 07:02:21,240 that command again P init hello fundry 11349 07:02:21,240 --> 07:02:23,920 and if we check this out we have our 11350 07:02:23,920 --> 07:02:26,920 first fundry project ready to be used 11351 07:02:26,920 --> 07:02:28,878 with all the things we are going to need 11352 07:02:28,878 --> 07:02:30,680 and let's walk through what we have over 11353 07:02:30,680 --> 07:02:32,520 on the left hand side here so we have 11354 07:02:32,520 --> 07:02:35,240 this GitHub slork flows file which we're 11355 07:02:35,240 --> 07:02:36,718 going to ignore for now but we'll 11356 07:02:36,718 --> 07:02:39,000 explain this later we have lib which 11357 07:02:39,000 --> 07:02:40,440 we're also going to ignore for now but 11358 07:02:40,440 --> 07:02:43,040 we'll explain later we have script with 11359 07:02:43,040 --> 07:02:45,600 a file in here which for now we're going 11360 07:02:45,600 --> 07:02:47,320 to go ahead and 11361 07:02:47,320 --> 07:02:50,320 delete we have SRC which is where we're 11362 07:02:50,320 --> 07:02:51,920 going to put all of our smart contracts 11363 07:02:51,920 --> 07:02:53,920 that we want to deploy right now it 11364 07:02:53,920 --> 07:02:56,680 comes packed with this counter. Soul 11365 07:02:56,680 --> 07:02:59,280 which we're also going to delete move to 11366 07:02:59,280 --> 07:03:01,958 trash and then we also have test which 11367 07:03:01,958 --> 07:03:03,798 we haven't learned about yet but we will 11368 07:03:03,798 --> 07:03:05,240 and for now once again you guessed it 11369 07:03:05,240 --> 07:03:06,320 we're going to go ahead and right click 11370 07:03:06,320 --> 07:03:08,440 and delete source is going to be the 11371 07:03:08,440 --> 07:03:09,600 main section that we're going to be 11372 07:03:09,600 --> 07:03:12,680 working with SRC stands for source and 11373 07:03:12,680 --> 07:03:14,240 you'll see in a lot of projects this is 11374 07:03:14,240 --> 07:03:16,000 where they put all of their main 11375 07:03:16,000 --> 07:03:18,080 contracts test is where we're going to 11376 07:03:18,080 --> 07:03:20,920 put code to test what's in SRC and 11377 07:03:20,920 --> 07:03:22,398 script is where we're going to put code 11378 07:03:22,398 --> 07:03:24,200 to interact with our contracts that are 11379 07:03:24,200 --> 07:03:27,080 in SRC get ignore is going to be files 11380 07:03:27,080 --> 07:03:29,360 that we're not going to push up to 11381 07:03:29,360 --> 07:03:31,840 GitHub if we push our code to GitHub 11382 07:03:31,840 --> 07:03:33,478 which is going to be really important 11383 07:03:33,478 --> 07:03:35,878 get modules we get ignore for Now teach 11384 07:03:35,878 --> 07:03:39,160 about that later and founder. toml is a 11385 07:03:39,160 --> 07:03:41,920 file that is going to give us 11386 07:03:41,920 --> 07:03:43,878 configuration parameters about working 11387 07:03:43,878 --> 07:03:45,920 with Foundry and as we go along in this 11388 07:03:45,920 --> 07:03:47,478 course we're going to update this folder 11389 07:03:47,478 --> 07:03:49,240 because we're going to update how we're 11390 07:03:49,240 --> 07:03:50,878 going to work with Foundry now for us to 11391 07:03:50,878 --> 07:03:52,360 get started here we're going to add our 11392 07:03:52,360 --> 07:03:54,760 simple storage code into the SRC or 11393 07:03:54,760 --> 07:03:56,958 Source folder if you close your remix we 11394 07:03:56,958 --> 07:03:59,160 can just come on back to the repo 11395 07:03:59,160 --> 07:04:01,160 associated with this course we'll scroll 11396 07:04:01,160 --> 07:04:04,320 down to to the remix simple storage 11397 07:04:04,320 --> 07:04:06,798 select the code base and we'll go here 11398 07:04:06,798 --> 07:04:09,798 and just copy all the code in here come 11399 07:04:09,798 --> 07:04:12,200 back over to vs code in an SRC we'll 11400 07:04:12,200 --> 07:04:15,600 right click new folder simple 11401 07:04:15,600 --> 07:04:19,878 storage. paste it in here and hit 11402 07:04:21,000 --> 07:04:23,000 save now one of the first things that 11403 07:04:23,000 --> 07:04:25,520 you'll notice is this is formatted 11404 07:04:25,520 --> 07:04:28,798 horribly it's just all white text this 11405 07:04:28,798 --> 07:04:30,558 cute little eth logo comes up which is 11406 07:04:30,558 --> 07:04:32,240 really nice but we want to way to 11407 07:04:32,240 --> 07:04:34,600 actually format this code correctly so 11408 07:04:34,600 --> 07:04:35,958 there are a lot of different vs code 11409 07:04:35,958 --> 07:04:37,680 extensions that actually will format our 11410 07:04:37,680 --> 07:04:40,160 solidity code for us one of them is the 11411 07:04:40,160 --> 07:04:42,638 solidity if we if we simply type 11412 07:04:42,638 --> 07:04:44,520 solidity in the extensions bar we'll get 11413 07:04:44,520 --> 07:04:46,958 a whole bunch of options that we can use 11414 07:04:46,958 --> 07:04:49,760 I'm a big fan of the hard hat solidity 11415 07:04:49,760 --> 07:04:51,478 extension even though hard hat is 11416 07:04:51,478 --> 07:04:54,200 another framework it also can format our 11417 07:04:54,200 --> 07:04:56,958 code in Foundry another one that a lot 11418 07:04:56,958 --> 07:04:59,478 of people like is the solidity visual 11419 07:04:59,478 --> 07:05:01,000 developer so that's another option if 11420 07:05:01,000 --> 07:05:02,320 you want to use that one 11421 07:05:02,320 --> 07:05:04,320 and this one by Juan Blanco is probably 11422 07:05:04,320 --> 07:05:06,200 the most used on the planet but we're 11423 07:05:06,200 --> 07:05:08,280 going to go ahead and hit install to 11424 07:05:08,280 --> 07:05:10,958 install this nomic Foundation solidity 11425 07:05:10,958 --> 07:05:13,478 vs code extension and if we go back to 11426 07:05:13,478 --> 07:05:15,240 our simple storage. soou you'll see it 11427 07:05:15,240 --> 07:05:17,160 is now formatted with syntax 11428 07:05:17,160 --> 07:05:19,600 highlighting similar to what we saw in 11429 07:05:19,600 --> 07:05:21,760 remix if it doesn't automatically 11430 07:05:21,760 --> 07:05:24,440 highlight for you here what we can do is 11431 07:05:24,440 --> 07:05:28,320 hit command shift p or control shift p 11432 07:05:28,320 --> 07:05:30,680 which opens up our Command bar here and 11433 07:05:30,680 --> 07:05:33,000 we can type in settings and we want to 11434 07:05:33,000 --> 07:05:35,718 open our user settings in Json you can 11435 07:05:35,718 --> 07:05:37,920 also hit code and then settings as well 11436 07:05:37,920 --> 07:05:40,878 in here and a lot of you might have 11437 07:05:40,878 --> 07:05:43,878 nothing in here so what you can do is 11438 07:05:43,878 --> 07:05:46,280 you create these little brackets to say 11439 07:05:46,280 --> 07:05:47,718 hey whatever is in here is going to be 11440 07:05:47,718 --> 07:05:50,240 our new settings and we want to type 11441 07:05:50,240 --> 07:05:52,600 these little quotes little brackets and 11442 07:05:52,600 --> 07:05:56,040 say solidity like this little set little 11443 07:05:56,040 --> 07:05:59,040 colon here some more brackets and since 11444 07:05:59,040 --> 07:06:01,638 I'm using GI up co-pilot it's even 11445 07:06:01,638 --> 07:06:03,600 starting to give me suggestions which 11446 07:06:03,600 --> 07:06:05,798 I'll explain much later but we could do 11447 07:06:05,798 --> 07:06:09,080 editor dot but you could paste in this 11448 07:06:09,080 --> 07:06:11,000 editor. default formatter NCH 11449 07:06:11,000 --> 07:06:13,760 foundation. hardhead solidity I'll have 11450 07:06:13,760 --> 07:06:15,798 this code in the repo associated with 11451 07:06:15,798 --> 07:06:17,320 this course so you can just copy paste 11452 07:06:17,320 --> 07:06:19,000 this if you want to I've got a whole 11453 07:06:19,000 --> 07:06:20,080 bunch of other stuff in here so I'm 11454 07:06:20,080 --> 07:06:21,718 going to go ahead and delete this though 11455 07:06:21,718 --> 07:06:23,798 but that way your solidity code will 11456 07:06:23,798 --> 07:06:25,840 default format using that hardhead 11457 07:06:25,840 --> 07:06:28,478 extension that we just installed great 11458 07:06:28,478 --> 07:06:31,638 additionally this 11459 07:06:31,638 --> 07:06:33,840 also isn't formatted very well so we'll 11460 07:06:33,840 --> 07:06:36,680 go to extensions we'll type in toml and 11461 07:06:36,680 --> 07:06:38,798 we'll install this better toml here 11462 07:06:38,798 --> 07:06:42,000 close this now if we go to Foundry doomo 11463 07:06:42,000 --> 07:06:44,760 we'll see this is now highlighted very 11464 07:06:44,760 --> 07:06:47,160 nicely too great now just remember 11465 07:06:47,160 --> 07:06:48,718 whenever you see this little dot here 11466 07:06:48,718 --> 07:06:50,638 this means that it's not saved so hit 11467 07:06:50,638 --> 07:06:54,240 command s or file save and do that a lot 11468 07:06:54,240 --> 07:06:55,760 the other thing that's really good about 11469 07:06:55,760 --> 07:06:58,760 us adding that default formatter is in 11470 07:06:58,760 --> 07:07:00,478 our code here you know maybe this isn't 11471 07:07:00,478 --> 07:07:02,520 formatted very nicely right maybe we 11472 07:07:02,520 --> 07:07:04,520 we've got this over here and and this 11473 07:07:04,520 --> 07:07:07,080 over here and it's kind of not looking 11474 07:07:07,080 --> 07:07:10,080 very nice here if I go ahead and save 11475 07:07:10,080 --> 07:07:12,840 without formatting it'll save it here 11476 07:07:12,840 --> 07:07:15,240 but what we can do is if we add that 11477 07:07:15,240 --> 07:07:18,200 auto formatter now if we do command 11478 07:07:18,200 --> 07:07:20,840 shift p again that brings this up this 11479 07:07:20,840 --> 07:07:23,440 command pallet up you can also get it by 11480 07:07:23,440 --> 07:07:26,320 hitting view command pallet and we type 11481 07:07:26,320 --> 07:07:29,638 format document it'll format our code 11482 07:07:29,638 --> 07:07:31,638 automatically depending on what 11483 07:07:31,638 --> 07:07:33,840 formatter we're defaulting to since we 11484 07:07:33,840 --> 07:07:35,840 opened our Json and we defaulted to the 11485 07:07:35,840 --> 07:07:37,718 solidity hard hat it'll automatically 11486 07:07:37,718 --> 07:07:40,360 format with that if your code isn't 11487 07:07:40,360 --> 07:07:42,440 autof formatting that's okay don't worry 11488 07:07:42,440 --> 07:07:45,080 about this too much be sure to use AI a 11489 07:07:45,080 --> 07:07:46,760 web search and the forums to get your 11490 07:07:46,760 --> 07:07:48,558 formatting good the other thing that I 11491 07:07:48,558 --> 07:07:51,000 like to do is we'll go over to settings 11492 07:07:51,000 --> 07:07:52,798 again we're not going to go to the Json 11493 07:07:52,798 --> 07:07:55,000 we're going to open the user settings 11494 07:07:55,000 --> 07:07:57,240 and we're going to type in format on 11495 07:07:57,240 --> 07:08:01,000 Save and we'll check this box on this 11496 07:08:01,000 --> 07:08:03,000 way every time we save it'll 11497 07:08:03,000 --> 07:08:05,160 automatically format so if I have this 11498 07:08:05,160 --> 07:08:06,718 and I hit save it'll automatically 11499 07:08:06,718 --> 07:08:09,000 format my solidity code for me if I 11500 07:08:09,000 --> 07:08:11,120 don't want it to format again we open 11501 07:08:11,120 --> 07:08:13,000 the command pallet with command shift p 11502 07:08:13,000 --> 07:08:16,160 or view command pallet and we can say 11503 07:08:16,160 --> 07:08:18,120 save without formatting and it'll save 11504 07:08:18,120 --> 07:08:20,160 it see the white dot is gone and it will 11505 07:08:20,160 --> 07:08:23,120 not be formatted but I'm going to save 11506 07:08:23,120 --> 07:08:24,520 and reformat it because I like it 11507 07:08:24,520 --> 07:08:26,600 formatted and just to note we pretty 11508 07:08:26,600 --> 07:08:28,200 much never want to open these default 11509 07:08:28,200 --> 07:08:33,000 settings Jason so avoid that one 11510 07:08:34,160 --> 07:08:36,320 all right great and just with this 11511 07:08:36,320 --> 07:08:38,280 little pieces of code and Foundry 11512 07:08:38,280 --> 07:08:41,080 installed we can go ahead and compile 11513 07:08:41,080 --> 07:08:43,600 our simple storage. Soul right in our 11514 07:08:43,600 --> 07:08:45,680 terminal so what we can do is we pull up 11515 07:08:45,680 --> 07:08:49,320 our terminal and we can type in Forge 11516 07:08:49,320 --> 07:08:52,760 build or Forge compile and this will 11517 07:08:52,760 --> 07:08:56,000 compile our code like so once we compile 11518 07:08:56,000 --> 07:08:58,280 we see a couple new folders show up one 11519 07:08:58,280 --> 07:09:01,680 of them is out and this file in out has 11520 07:09:01,680 --> 07:09:03,240 all the different information that the 11521 07:09:03,240 --> 07:09:05,878 remix compiler would have for example it 11522 07:09:05,878 --> 07:09:09,200 has the ABI we go back to remix we go to 11523 07:09:09,200 --> 07:09:11,200 the compiler tab we go to one of our 11524 07:09:11,200 --> 07:09:13,478 contracts we scroll down we can see we 11525 07:09:13,478 --> 07:09:16,320 have the ABI section or it's also in the 11526 07:09:16,320 --> 07:09:18,718 compilation details in vs code we can 11527 07:09:18,718 --> 07:09:20,600 even click this little drop down thing 11528 07:09:20,600 --> 07:09:23,600 next to it and it'll minimize the ABI 11529 07:09:23,600 --> 07:09:25,440 and we can see the rest of this stuff 11530 07:09:25,440 --> 07:09:28,280 like B code method identifiers and all 11531 07:09:28,280 --> 07:09:30,120 this other stuff which we'll learn about 11532 07:09:30,120 --> 07:09:33,520 later we also get this cache folder this 11533 07:09:33,520 --> 07:09:35,200 is a folder that you could basically 11534 07:09:35,200 --> 07:09:37,798 ignore now anytime in our terminal we 11535 07:09:37,798 --> 07:09:40,200 hit up we can actually cycle through 11536 07:09:40,200 --> 07:09:42,240 commands that we've recently run so if I 11537 07:09:42,240 --> 07:09:43,878 run some crazy long command like this 11538 07:09:43,878 --> 07:09:45,798 Echo here which is a bash command don't 11539 07:09:45,798 --> 07:09:47,360 worry about it and I want to run it 11540 07:09:47,360 --> 07:09:50,398 again I can just hit 11541 07:09:51,360 --> 07:09:54,120 up all right great so one of the things 11542 07:09:54,120 --> 07:09:57,080 that we did in remix quite a lot was we 11543 07:09:57,080 --> 07:09:59,558 deployed our code to a remix VM or a 11544 07:09:59,558 --> 07:10:01,680 JavaScript virtual environment we want 11545 07:10:01,680 --> 07:10:04,080 to be able to do the exact same thing in 11546 07:10:04,080 --> 07:10:06,320 Foundry in order to test and interact 11547 07:10:06,320 --> 07:10:08,320 with our contracts Foundry actually 11548 07:10:08,320 --> 07:10:10,878 comes built in with a virtual 11549 07:10:10,878 --> 07:10:12,798 environment in the shell and if you run 11550 07:10:12,798 --> 07:10:15,680 Anvil you'll get an output that looks 11551 07:10:15,680 --> 07:10:17,798 and we pull this to the top you'll get 11552 07:10:17,798 --> 07:10:20,280 an output that looks something like this 11553 07:10:20,280 --> 07:10:23,160 Anvil and we get some fake available 11554 07:10:23,160 --> 07:10:26,120 accounts with some fake private Keys 11555 07:10:26,120 --> 07:10:28,878 you'll also get a wallet pneumonic the 11556 07:10:28,878 --> 07:10:31,320 derivation path which you can ignore 11557 07:10:31,320 --> 07:10:33,680 some details about the blockchain and 11558 07:10:33,680 --> 07:10:36,718 then this endpoint or RPC URL which 11559 07:10:36,718 --> 07:10:38,680 we're going to learn about soon for now 11560 07:10:38,680 --> 07:10:41,280 if you want to close this hit contrl C 11561 07:10:41,280 --> 07:10:43,558 or just delete your terminal to end 11562 07:10:43,558 --> 07:10:46,520 running the Anvil blockchain now moving 11563 07:10:46,520 --> 07:10:48,638 forward we're going to work with Anvil 11564 07:10:48,638 --> 07:10:49,600 but I do want to give you an 11565 07:10:49,600 --> 07:10:51,878 intermediary step that's going to be 11566 07:10:51,878 --> 07:10:54,600 with the ganach eth chain and we'll have 11567 07:10:54,600 --> 07:10:56,680 a link to this in the GitHub repo 11568 07:10:56,680 --> 07:10:59,360 associated with this lesson ginach is a 11569 07:10:59,360 --> 07:11:03,240 oneclick blockchain and gives us a user 11570 07:11:03,240 --> 07:11:06,040 interface or an app for us to look at 11571 07:11:06,040 --> 07:11:09,120 our transactions in an easier way so if 11572 07:11:09,120 --> 07:11:10,680 you go ahead and download it for your 11573 07:11:10,680 --> 07:11:13,320 system we can get started there now a 11574 07:11:13,320 --> 07:11:15,760 note for Windows users if you're using 11575 07:11:15,760 --> 07:11:19,280 WSL the setup here is a little funky we 11576 07:11:19,280 --> 07:11:20,878 ran into some issues with it in our 11577 07:11:20,878 --> 07:11:23,000 previous course and we'll have some 11578 07:11:23,000 --> 07:11:24,440 troubleshooting tips for those of you 11579 07:11:24,440 --> 07:11:26,638 who are using Windows and WSL if you 11580 07:11:26,638 --> 07:11:28,798 want to work with ganach everything that 11581 07:11:28,798 --> 07:11:30,160 we're going to be doing moving forward 11582 07:11:30,160 --> 07:11:33,040 though does work work with Anvil ganach 11583 07:11:33,040 --> 07:11:35,398 just allows us to see transactions a 11584 07:11:35,398 --> 07:11:37,160 little bit better than viewing all this 11585 07:11:37,160 --> 07:11:38,958 stuff in the terminal so if you're 11586 07:11:38,958 --> 07:11:41,160 having a hard time with ganache don't 11587 07:11:41,160 --> 07:11:42,680 worry we can do everything that we're 11588 07:11:42,680 --> 07:11:44,558 doing with Anvil which should work for 11589 07:11:44,558 --> 07:11:46,360 you no problem once you have ganach 11590 07:11:46,360 --> 07:11:48,600 installed when you open it up it'll look 11591 07:11:48,600 --> 07:11:50,638 something like this and if we hit quick 11592 07:11:50,638 --> 07:11:53,120 start for ethereum we'll actually create 11593 07:11:53,120 --> 07:11:57,160 a brand new locally running blockchain 11594 07:11:57,160 --> 07:11:59,718 with a nice little UI to view things 11595 07:11:59,718 --> 07:12:01,798 same as Anvil and same as REM we get 11596 07:12:01,798 --> 07:12:04,000 some addresses we get each of them has 11597 07:12:04,000 --> 07:12:05,878 balances they come with some dummy 11598 07:12:05,878 --> 07:12:08,398 private keys and dummy addresses and the 11599 07:12:08,398 --> 07:12:10,718 likes what's nice about this is that we 11600 07:12:10,718 --> 07:12:12,920 can see the blocks we can see different 11601 07:12:12,920 --> 07:12:14,638 transactions and if we're working with 11602 07:12:14,638 --> 07:12:16,200 truffle we can see contracts we're not 11603 07:12:16,200 --> 07:12:17,920 going to work with truffle though but 11604 07:12:17,920 --> 07:12:19,520 these are going to be very helpful for 11605 07:12:19,520 --> 07:12:21,718 us to view stuff additionally we're not 11606 07:12:21,718 --> 07:12:23,718 going to use ganache again in the future 11607 07:12:23,718 --> 07:12:25,760 so if you have trouble setting up with 11608 07:12:25,760 --> 07:12:28,398 it don't worry just use Anvil I'm going 11609 07:12:28,398 --> 07:12:30,638 to use it to show you what's going on 11610 07:12:30,638 --> 07:12:31,718 remember though 11611 07:12:31,718 --> 07:12:33,360 don't use these private keys on a public 11612 07:12:33,360 --> 07:12:35,040 blockchain it's for development purposes 11613 07:12:35,040 --> 07:12:36,478 only because everyone knows these 11614 07:12:36,478 --> 07:12:38,040 private Keys cuz they're dummy private 11615 07:12:38,040 --> 07:12:40,398 Keys now in order for us to learn how to 11616 07:12:40,398 --> 07:12:42,760 actually deploy to this blockchain or 11617 07:12:42,760 --> 07:12:44,600 how to deploy to Anvil if we're working 11618 07:12:44,600 --> 07:12:47,280 with Anvil we need to understand how 11619 07:12:47,280 --> 07:12:49,478 even remix was able to deploy to a 11620 07:12:49,478 --> 07:12:51,520 public blockchain when in remix when we 11621 07:12:51,520 --> 07:12:53,520 switch to injected provider of metamask 11622 07:12:53,520 --> 07:12:55,638 we know that metamask popped up it asked 11623 07:12:55,638 --> 07:12:57,760 us to add our password and we went ahead 11624 07:12:57,760 --> 07:12:59,360 and got connected and if we looked in 11625 07:12:59,360 --> 07:13:01,520 metamask we saw our account is indeed 11626 07:13:01,520 --> 07:13:04,520 connected to saoo when we hit deploy our 11627 07:13:04,520 --> 07:13:07,120 Rass popped up again and it was able to 11628 07:13:07,120 --> 07:13:10,398 deploy our contract to a real test 11629 07:13:10,398 --> 07:13:12,958 Network well how did it know where to 11630 07:13:12,958 --> 07:13:14,600 send our transaction how did it know 11631 07:13:14,600 --> 07:13:17,360 where to send our contract well let's go 11632 07:13:17,360 --> 07:13:20,000 ahead and open up our metamask here if 11633 07:13:20,000 --> 07:13:21,638 we click the three little dots and hit 11634 07:13:21,638 --> 07:13:23,920 expand view we hit the little button now 11635 07:13:23,920 --> 07:13:26,320 and we go to settings and we go to 11636 07:13:26,320 --> 07:13:29,160 networks you'll actually see in here 11637 07:13:29,160 --> 07:13:31,760 that each one of these Networks ethereum 11638 07:13:31,760 --> 07:13:34,120 mainnet Gil sapoia Linea or whatever you 11639 07:13:34,120 --> 07:13:36,120 have comes with a whole bunch of 11640 07:13:36,120 --> 07:13:38,000 information let's go to eth mainnet and 11641 07:13:38,000 --> 07:13:39,638 check that out for a second it has a 11642 07:13:39,638 --> 07:13:43,840 name an RPC URL a chain ID currency 11643 07:13:43,840 --> 07:13:46,680 symbol and block Explorer this RPC URL 11644 07:13:46,680 --> 07:13:49,200 is the actual https endpoint that we 11645 07:13:49,200 --> 07:13:51,760 actually send API calls to when we're 11646 07:13:51,760 --> 07:13:54,320 sending transactions so whenever you 11647 07:13:54,320 --> 07:13:57,240 interact with metamask and you send a 11648 07:13:57,240 --> 07:13:59,320 transaction or you deploy a contract 11649 07:13:59,320 --> 07:14:01,240 you're actually making an API call to 11650 07:14:01,240 --> 07:14:03,558 whatever is in here you'll see this is 11651 07:14:03,558 --> 07:14:06,080 an infura endpoint and infura is known 11652 07:14:06,080 --> 07:14:08,920 as a node as a service project that 11653 07:14:08,920 --> 07:14:11,600 allows you to send transactions to a 11654 07:14:11,600 --> 07:14:13,120 blockchain node without having to run 11655 07:14:13,120 --> 07:14:15,440 one yourself if you wanted to send 11656 07:14:15,440 --> 07:14:17,398 transactions to your own blockchain node 11657 07:14:17,398 --> 07:14:19,398 you would just Swap this out with your 11658 07:14:19,398 --> 07:14:21,958 own blockchain node address we can't 11659 07:14:21,958 --> 07:14:23,840 actually change the ones that come built 11660 07:14:23,840 --> 07:14:26,360 into mamass but we can add new networks 11661 07:14:26,360 --> 07:14:28,160 which is what we're going to do now in 11662 07:14:28,160 --> 07:14:29,478 here if we scroll to the bottom we can 11663 07:14:29,478 --> 07:14:32,200 hit add Network manually and we can add 11664 07:14:32,200 --> 07:14:34,958 information about our own custom Network 11665 07:14:34,958 --> 07:14:36,958 so for us we're going to make this new 11666 07:14:36,958 --> 07:14:40,360 network called local host or local chain 11667 07:14:40,360 --> 07:14:42,798 or whatever you want to call it for RPC 11668 07:14:42,798 --> 07:14:45,280 URL if you're working with ganach it's 11669 07:14:45,280 --> 07:14:48,040 going to be this RPC server right here 11670 07:14:48,040 --> 07:14:50,320 if you're working with Anvil at the 11671 07:14:50,320 --> 07:14:53,000 bottom we have this listening here so 11672 07:14:53,000 --> 07:14:55,240 what we would do is we would copy this 11673 07:14:55,240 --> 07:14:57,920 or we would copy this from ganache and 11674 07:14:57,920 --> 07:15:00,280 paste it in here just note that you 11675 07:15:00,280 --> 07:15:04,798 always need the HTTP or https col slash 11676 07:15:04,798 --> 07:15:06,478 most of our local applications aren't 11677 07:15:06,478 --> 07:15:08,520 going to be https they're just going to 11678 07:15:08,520 --> 07:15:11,280 be HTTP so if you're working with ganach 11679 07:15:11,280 --> 07:15:12,718 let's go ahead and copy the ganach 11680 07:15:12,718 --> 07:15:15,558 endpoint paste it in here like so every 11681 07:15:15,558 --> 07:15:17,320 single blockchain gets their own chain 11682 07:15:17,320 --> 07:15:19,680 ID it's an easy way for us to know which 11683 07:15:19,680 --> 07:15:21,638 blockchain that we're interacting with 11684 07:15:21,638 --> 07:15:24,878 gach has 1337 and Anvil doesn't say it 11685 07:15:24,878 --> 07:15:29,000 but it's 31 337 so Anvil is 11686 07:15:29,000 --> 07:15:31,760 31337 since I'm using the endpoint here 11687 07:15:31,760 --> 07:15:34,040 I'm going to typee in 1337 if you're 11688 07:15:34,040 --> 07:15:36,520 using Anvil it would be 11689 07:15:36,520 --> 07:15:38,840 31337 but what's kind of nice is 11690 07:15:38,840 --> 07:15:40,478 metamask can actually identify what 11691 07:15:40,478 --> 07:15:42,440 you're using and identify the chain ID 11692 07:15:42,440 --> 07:15:44,520 and basically tell you what chain ID to 11693 07:15:44,520 --> 07:15:46,280 use just a note it looks like the newer 11694 07:15:46,280 --> 07:15:48,080 versions of ganos are using a different 11695 07:15:48,080 --> 07:15:50,958 RPC server and a different network ID 11696 07:15:50,958 --> 07:15:52,798 and make sure you're on this hard for 11697 07:15:52,798 --> 07:15:55,320 the merge here as well although in 11698 07:15:55,320 --> 07:15:56,920 practice I've found that even when you 11699 07:15:56,920 --> 07:15:57,878 have 11700 07:15:57,878 --> 07:16:01,878 5777 it still is expecting 137 7 so be 11701 07:16:01,878 --> 07:16:03,878 sure to use the correct chain ID when 11702 07:16:03,878 --> 07:16:05,558 you're working with this currency symbol 11703 07:16:05,558 --> 07:16:07,798 we're going to do eth and since this is 11704 07:16:07,798 --> 07:16:10,120 a local blockchain we don't actually 11705 07:16:10,120 --> 07:16:13,240 have a block Explorer ether scan has no 11706 07:16:13,240 --> 07:16:14,798 way to connect to our own local 11707 07:16:14,798 --> 07:16:16,878 blockchain so we don't get a block 11708 07:16:16,878 --> 07:16:18,840 explore for this one but if I go ahead 11709 07:16:18,840 --> 07:16:22,000 and hit save now it says Network added 11710 07:16:22,000 --> 07:16:23,398 successfully and I can go ahead and 11711 07:16:23,398 --> 07:16:26,320 switch to my local host chain boom and 11712 07:16:26,320 --> 07:16:28,958 now we can see it in my list of networks 11713 07:16:28,958 --> 07:16:32,280 of Local Host I've got no asset no nfts 11714 07:16:32,280 --> 07:16:34,798 and no activity now if your local Anvil 11715 07:16:34,798 --> 07:16:37,240 or ganache chain isn't running after 11716 07:16:37,240 --> 07:16:38,958 you've put it in your metamask if you 11717 07:16:38,958 --> 07:16:42,040 actually try to swap to your Anvil or to 11718 07:16:42,040 --> 07:16:43,798 your local host or to your ganache 11719 07:16:43,798 --> 07:16:45,280 you'll just get this spinning wheel of 11720 07:16:45,280 --> 07:16:46,760 death here right and eventually you'll 11721 07:16:46,760 --> 07:16:48,760 get this little a that'll show up and 11722 07:16:48,760 --> 07:16:50,080 you'll have to switch to a different 11723 07:16:50,080 --> 07:16:51,638 network so if you ever want to switch to 11724 07:16:51,638 --> 07:16:53,398 one of these that isn't running it won't 11725 07:16:53,398 --> 07:16:55,280 work you'll have to either run it or you 11726 07:16:55,280 --> 07:16:58,398 can hit X here and then in your metamask 11727 07:16:58,398 --> 07:17:00,120 you could just delete one of these right 11728 07:17:00,120 --> 07:17:01,798 here while while we're not running our 11729 07:17:01,798 --> 07:17:03,600 ganache or our Anvil we're just not 11730 07:17:03,600 --> 07:17:05,600 going to have one of these selected 11731 07:17:05,600 --> 07:17:08,080 great and so this is where on both Anvil 11732 07:17:08,080 --> 07:17:09,718 and ganache they have these available 11733 07:17:09,718 --> 07:17:11,840 accounts in these private keys since I'm 11734 07:17:11,840 --> 07:17:13,840 using ganache what I can do is I can 11735 07:17:13,840 --> 07:17:16,600 select this show Keys copy this private 11736 07:17:16,600 --> 07:17:19,760 key and import it into my metamask so I 11737 07:17:19,760 --> 07:17:21,718 can go up hit this little button I can 11738 07:17:21,718 --> 07:17:24,280 hit import account paste my private key 11739 07:17:24,280 --> 07:17:27,120 in here and hit import now you'll see in 11740 07:17:27,120 --> 07:17:28,398 my menas I have a couple different 11741 07:17:28,398 --> 07:17:30,840 accounts account three the one I just 11742 07:17:30,840 --> 07:17:33,680 imported has 100 eth why does it have 11743 07:17:33,680 --> 07:17:36,280 100 eth well because I'm using one of 11744 07:17:36,280 --> 07:17:38,600 these dumm accounts from ganach and 11745 07:17:38,600 --> 07:17:41,360 again if you're using Anvil they have 11746 07:17:41,360 --> 07:17:44,600 they start with a th000 11747 07:17:45,958 --> 07:17:50,280 eth this process that we just did to add 11748 07:17:50,280 --> 07:17:52,760 our new ganache local chain is also how 11749 07:17:52,760 --> 07:17:55,160 we're going to add any evm compatible 11750 07:17:55,160 --> 07:17:57,040 chain on the planet we'll just hit add 11751 07:17:57,040 --> 07:17:59,600 Network and metamask actually comes 11752 07:17:59,600 --> 07:18:01,398 built in with a lot of these and for 11753 07:18:01,398 --> 07:18:02,718 example if we wanted to work with 11754 07:18:02,718 --> 07:18:05,680 arbitrum 1 we could just hit add and it 11755 07:18:05,680 --> 07:18:08,320 would add all this information in for us 11756 07:18:08,320 --> 07:18:11,120 approve Network added successfully but 11757 07:18:11,120 --> 07:18:12,878 if metamask doesn't have those built in 11758 07:18:12,878 --> 07:18:15,080 that's the process now if we go back to 11759 07:18:15,080 --> 07:18:17,840 settings network Local Host this 11760 07:18:17,840 --> 07:18:19,638 endpoint is the most important thing you 11761 07:18:19,638 --> 07:18:21,478 need to send a transaction to a 11762 07:18:21,478 --> 07:18:24,040 blockchain you need a connection to a 11763 07:18:24,040 --> 07:18:26,398 node in order to send transactions to if 11764 07:18:26,398 --> 07:18:28,000 you wanted to send transactions to your 11765 07:18:28,000 --> 07:18:30,798 own node you would run something like G 11766 07:18:30,798 --> 07:18:32,600 which is an execution client and then 11767 07:18:32,600 --> 07:18:34,600 something maybe like teu a prism which 11768 07:18:34,600 --> 07:18:36,240 is a consensus client and send 11769 07:18:36,240 --> 07:18:38,040 transactions there I'm not going to go 11770 07:18:38,040 --> 07:18:39,878 over this right now but I highly 11771 07:18:39,878 --> 07:18:41,240 recommend that those of you who are 11772 07:18:41,240 --> 07:18:43,558 curious maybe you take some time and you 11773 07:18:43,558 --> 07:18:46,120 try to run your own ethereum node I run 11774 07:18:46,120 --> 07:18:47,920 many ethereum nodes and it's a lot of 11775 07:18:47,920 --> 07:18:49,638 fun that's kind of a weird thing to say 11776 07:18:49,638 --> 07:18:52,000 it's fun to run nodes whatever it is fun 11777 07:18:52,000 --> 07:18:53,478 to run nodes each one of these 11778 07:18:53,478 --> 07:18:55,320 blockchains has different methods you 11779 07:18:55,320 --> 07:18:57,240 could send to them to do things if 11780 07:18:57,240 --> 07:18:59,360 you're familiar with apis and HTTP 11781 07:18:59,360 --> 07:19:01,000 endpoints and you go to this ether eum 11782 07:19:01,000 --> 07:19:02,320 jsonrpc 11783 07:19:02,320 --> 07:19:04,638 specification site you can actually see 11784 07:19:04,638 --> 07:19:07,080 all the different methods that ethereum 11785 07:19:07,080 --> 07:19:09,320 blockchain nodes can make and most evm 11786 07:19:09,320 --> 07:19:11,200 blockchain nodes can make and when we 11787 07:19:11,200 --> 07:19:13,520 actually sign and send transactions it's 11788 07:19:13,520 --> 07:19:15,398 these calls that we're actually making 11789 07:19:15,398 --> 07:19:18,120 like e sign sign transaction send 11790 07:19:18,120 --> 07:19:20,600 transaction send raw transaction Etc 11791 07:19:20,600 --> 07:19:21,600 we're actually not going to be going 11792 07:19:21,600 --> 07:19:23,120 over interacting with these because 11793 07:19:23,120 --> 07:19:25,200 Forge actually handles a lot of sending 11794 07:19:25,200 --> 07:19:27,200 these transactions itself if you want to 11795 07:19:27,200 --> 07:19:29,478 learn how to send a raw transaction 11796 07:19:29,478 --> 07:19:31,680 making raw API calls to your own 11797 07:19:31,680 --> 07:19:33,680 ethereum node or an ethereum node as a 11798 07:19:33,680 --> 07:19:36,440 service like infura or Alchemy you would 11799 07:19:36,440 --> 07:19:37,718 do that in a different programming 11800 07:19:37,718 --> 07:19:41,638 language like bash python or 11801 07:19:43,040 --> 07:19:45,080 JavaScript all right awesome now that we 11802 07:19:45,080 --> 07:19:47,360 have our endpoint and our private key we 11803 07:19:47,360 --> 07:19:48,680 pretty much have everything that we need 11804 07:19:48,680 --> 07:19:50,920 to deploy to our own local blockchain be 11805 07:19:50,920 --> 07:19:53,080 it ganach or Anvil same as working with 11806 07:19:53,080 --> 07:19:54,798 a real blockchain we need an actual 11807 07:19:54,798 --> 07:19:57,760 balance to spend gas to deploy our 11808 07:19:57,760 --> 07:20:00,398 contract now there's actually two ways 11809 07:20:00,398 --> 07:20:02,718 that we're going to learn to deploy 11810 07:20:02,718 --> 07:20:04,840 contracts and the first way is actually 11811 07:20:04,840 --> 07:20:07,440 with just working with the command line 11812 07:20:07,440 --> 07:20:09,160 if we're in our command line if we're in 11813 07:20:09,160 --> 07:20:12,718 our terminal here and we do Forge d-el 11814 07:20:12,718 --> 07:20:14,160 we can actually see all the different 11815 07:20:14,160 --> 07:20:16,520 commands that Forge comes built in with 11816 07:20:16,520 --> 07:20:17,680 the one we're going to be working with 11817 07:20:17,680 --> 07:20:19,920 right now is this create command and if 11818 07:20:19,920 --> 07:20:21,920 you read it it says it deploys a smart 11819 07:20:21,920 --> 07:20:24,080 contract which is perfect that's exactly 11820 07:20:24,080 --> 07:20:26,120 what we want to do and if we're in our 11821 07:20:26,120 --> 07:20:27,600 Command here let's hit clear and we do 11822 07:20:27,600 --> 07:20:31,440 Forge create d-el we can you see a ton 11823 07:20:31,440 --> 07:20:33,798 of different options for deploying our 11824 07:20:33,798 --> 07:20:36,360 contract click show Keys copy the 11825 07:20:36,360 --> 07:20:38,798 private key again if you're using Anvil 11826 07:20:38,798 --> 07:20:40,440 use the private keys there if we do 11827 07:20:40,440 --> 07:20:43,558 Forge create simple storage which is the 11828 07:20:43,558 --> 07:20:45,840 name of our contract it'll compile and 11829 07:20:45,840 --> 07:20:48,320 then it'll throw an error actually or it 11830 07:20:48,320 --> 07:20:50,080 might actually work but because I'm 11831 07:20:50,080 --> 07:20:52,760 working with this RPC server but this 11832 07:20:52,760 --> 07:20:55,520 RPC server is different from the one 11833 07:20:55,520 --> 07:20:58,080 that Forge actually defaults to so 11834 07:20:58,080 --> 07:21:01,398 instead what I can do is Forge create 11835 07:21:01,398 --> 07:21:03,200 simple 11836 07:21:03,200 --> 07:21:08,558 storage-- RPC URL copy this paste it in 11837 07:21:08,558 --> 07:21:10,478 here it might be upset with the 11838 07:21:10,478 --> 07:21:11,718 uppercase so let's just make that 11839 07:21:11,718 --> 07:21:13,638 lowercase and I'll hit enter and this 11840 07:21:13,638 --> 07:21:15,920 won't work either well of course we 11841 07:21:15,920 --> 07:21:18,600 forgot to add a private key so if I hit 11842 07:21:18,600 --> 07:21:21,160 up I can hit-- 11843 07:21:21,160 --> 07:21:24,080 interactive as well and now it'll prompt 11844 07:21:24,080 --> 07:21:26,920 me for a private key now and a really 11845 07:21:26,920 --> 07:21:29,120 important note that I want to tell you 11846 07:21:29,120 --> 07:21:31,600 never use a real private key in your vs 11847 07:21:31,600 --> 07:21:34,760 code if you're using an application that 11848 07:21:34,760 --> 07:21:36,958 potentially will send your information a 11849 07:21:36,958 --> 07:21:38,320 much better option is to use your own 11850 07:21:38,320 --> 07:21:40,360 terminal as opposed to something like vs 11851 07:21:40,360 --> 07:21:43,520 code which might send data or get pod 11852 07:21:43,520 --> 07:21:45,280 since we are just developing and we're 11853 07:21:45,280 --> 07:21:47,240 just practicing it's fine to paste our 11854 07:21:47,240 --> 07:21:49,440 private Keys here because this is a 11855 07:21:49,440 --> 07:21:51,040 private key that's not going to have any 11856 07:21:51,040 --> 07:21:53,840 real money right it's a fake private key 11857 07:21:53,840 --> 07:21:56,000 so for now we can go ahead we can go 11858 07:21:56,000 --> 07:21:58,120 back to our ganache or back to our envil 11859 07:21:58,120 --> 07:22:01,280 hit show Keys copy this private key key 11860 07:22:01,280 --> 07:22:04,040 paste it in here it won't show up if you 11861 07:22:04,040 --> 07:22:06,558 hit paste but I'll hit enter and we'll 11862 07:22:06,558 --> 07:22:09,398 go ahead and see information about our 11863 07:22:09,398 --> 07:22:11,200 transaction now if you're working with 11864 07:22:11,200 --> 07:22:13,718 ganach we can now hit done here we go to 11865 07:22:13,718 --> 07:22:16,718 blocks we see we created a new block we 11866 07:22:16,718 --> 07:22:18,798 go to transactions we can see that we 11867 07:22:18,798 --> 07:22:21,120 sent a transaction and we created a 11868 07:22:21,120 --> 07:22:23,840 contract and then you can see logs about 11869 07:22:23,840 --> 07:22:26,878 working with this as well fantastic if 11870 07:22:26,878 --> 07:22:28,440 you're working with Anvil and you send a 11871 07:22:28,440 --> 07:22:29,798 transaction you're not going to see any 11872 07:22:29,798 --> 07:22:31,478 of those details for those of you who 11873 07:22:31,478 --> 07:22:34,160 want to continue to see these blocks and 11874 07:22:34,160 --> 07:22:35,478 these transactions and want to keep 11875 07:22:35,478 --> 07:22:38,000 working with ganach feel free to do so 11876 07:22:38,000 --> 07:22:39,398 moving forward we're going to work with 11877 07:22:39,398 --> 07:22:40,958 Anvil so I'm actually going to close 11878 07:22:40,958 --> 07:22:43,200 ganache now I'm going to hit clear in 11879 07:22:43,200 --> 07:22:45,760 the terminal and I'm going to run Anvil 11880 07:22:45,760 --> 07:22:47,798 here and what I'm going to do is I'm 11881 07:22:47,798 --> 07:22:50,000 going to create a new terminal by 11882 07:22:50,000 --> 07:22:51,840 hitting the plus button here and we're 11883 07:22:51,840 --> 07:22:53,360 going to run that command again but 11884 07:22:53,360 --> 07:22:55,200 we're going to run it with a private key 11885 07:22:55,200 --> 07:22:57,638 from Anvil so if we go to here we do 11886 07:22:57,638 --> 07:23:00,760 Forge create this time we don't have to 11887 07:23:00,760 --> 07:23:04,120 put an RPC because Forge defaults to the 11888 07:23:04,120 --> 07:23:08,120 Anvil one but I can say simple storage 11889 07:23:08,120 --> 07:23:10,680 inter active it'll do enter the private 11890 07:23:10,680 --> 07:23:12,878 key I will paste it and we'll go ahead 11891 07:23:12,878 --> 07:23:15,000 and deploy go to Anvil we don't get any 11892 07:23:15,000 --> 07:23:17,360 logs like this but we can see we went 11893 07:23:17,360 --> 07:23:19,200 ahead and actually deployed it to our 11894 07:23:19,200 --> 07:23:21,478 Anvil blockchain awesome work another 11895 07:23:21,478 --> 07:23:23,080 way we can do this Forge create is by 11896 07:23:23,080 --> 07:23:27,000 running Forge create simple storage if 11897 07:23:27,000 --> 07:23:29,280 we wanted to be incredibly explicit we 11898 07:23:29,280 --> 07:23:34,280 would do D- RPC C- URL copy this 11899 07:23:34,280 --> 07:23:39,520 HTTP col paste it in there-- private key 11900 07:23:39,520 --> 07:23:42,558 and back in Anvil copy the private key 11901 07:23:42,558 --> 07:23:44,280 paste it in like this and we will get 11902 07:23:44,280 --> 07:23:46,638 the same 11903 07:23:47,958 --> 07:23:50,120 thing now here's what I'm going to tell 11904 07:23:50,120 --> 07:23:52,120 you and this is incredibly important 11905 07:23:52,120 --> 07:23:54,638 pasting in your private key like this is 11906 07:23:54,638 --> 07:23:57,760 no bueno very bad we pretty much never 11907 07:23:57,760 --> 07:23:59,920 want to have our private key in plain 11908 07:23:59,920 --> 07:24:01,080 text 11909 07:24:01,080 --> 07:24:03,558 especially our production or our private 11910 07:24:03,558 --> 07:24:05,240 keys with actual money putting this 11911 07:24:05,240 --> 07:24:07,080 private key in PL Tex is not a big deal 11912 07:24:07,080 --> 07:24:09,040 because this is a fake dummy one it's 11913 07:24:09,040 --> 07:24:11,160 also bad to have our private keys in our 11914 07:24:11,160 --> 07:24:14,920 shell or bash history if I hit up once 11915 07:24:14,920 --> 07:24:17,760 on my terminal I can see the private key 11916 07:24:17,760 --> 07:24:20,120 in here which is why the interactive is 11917 07:24:20,120 --> 07:24:21,878 a little bit better because it at least 11918 07:24:21,878 --> 07:24:24,958 offis skates the private key to remove 11919 07:24:24,958 --> 07:24:26,760 your private key from your history in 11920 07:24:26,760 --> 07:24:30,160 bash you can do history- c now if I hit 11921 07:24:30,160 --> 07:24:32,920 up I can't see any commands and if I do 11922 07:24:32,920 --> 07:24:35,120 history I can see my entire history 11923 07:24:35,120 --> 07:24:37,160 which is just the history keyword now if 11924 07:24:37,160 --> 07:24:39,798 I type clear I'll do history now I see 11925 07:24:39,798 --> 07:24:42,318 history clear history great and we don't 11926 07:24:42,318 --> 07:24:44,040 have the private key in our Command 11927 07:24:44,040 --> 07:24:46,638 history anymore we will learn more about 11928 07:24:46,638 --> 07:24:49,398 proper private Key Safety in the future 11929 07:24:49,398 --> 07:24:52,080 but I want you to do something for me 11930 07:24:52,080 --> 07:24:54,360 right now in a new file I want you to 11931 07:24:54,360 --> 07:24:58,360 rightclick and I want you to write 11932 07:24:58,360 --> 07:25:01,000 promise. MD we're going to hide the 11933 07:25:01,000 --> 07:25:04,080 terminal and in here we're going to say 11934 07:25:04,080 --> 07:25:09,638 I promise to never use my private key 11935 07:25:09,638 --> 07:25:13,638 associated with real money in plain text 11936 07:25:13,638 --> 07:25:16,360 in fact take this and tweet this I 11937 07:25:16,360 --> 07:25:18,240 promise to never use my private key 11938 07:25:18,240 --> 07:25:20,520 associated with real money in plain text 11939 07:25:20,520 --> 07:25:22,840 and I can't spell and that's fine and 11940 07:25:22,840 --> 07:25:24,840 then if you want to add me or you want 11941 07:25:24,840 --> 07:25:28,200 to add cyron audits or whatever go ahead 11942 07:25:28,200 --> 07:25:30,718 and send that we are going to have more 11943 07:25:30,718 --> 07:25:32,200 of these promises that you're going to 11944 07:25:32,200 --> 07:25:35,080 do but this is the first one that I need 11945 07:25:35,080 --> 07:25:37,520 you to understand right now it's cool 11946 07:25:37,520 --> 07:25:39,160 because these are dummy keys but in the 11947 07:25:39,160 --> 07:25:42,080 future it will definitely not be cool 11948 07:25:42,080 --> 07:25:44,000 and I'm stressing this because I've seen 11949 07:25:44,000 --> 07:25:46,240 a lot of multi-million dollar companies 11950 07:25:46,240 --> 07:25:48,160 not follow this and get their private 11951 07:25:48,160 --> 07:25:51,240 Keys hacked great now of course though 11952 07:25:51,240 --> 07:25:53,318 the basic way to deploy to any 11953 07:25:53,318 --> 07:25:55,958 blockchain would be Forge create the 11954 07:25:55,958 --> 07:25:59,200 name of your contract add the RPC URL 11955 07:25:59,200 --> 07:26:00,840 and then add your private key we're 11956 07:26:00,840 --> 07:26:03,920 going to learn how to get RP crls for 11957 07:26:03,920 --> 07:26:06,680 free using Alchemy for any blockchain 11958 07:26:06,680 --> 07:26:09,160 that we want and like I said more safe 11959 07:26:09,160 --> 07:26:11,280 private key methodologies in the future 11960 07:26:11,280 --> 07:26:12,638 but now you've just learned how to 11961 07:26:12,638 --> 07:26:14,718 deploy your contracts to any chain from 11962 07:26:14,718 --> 07:26:17,840 the command line this is 11963 07:26:18,840 --> 07:26:20,958 great all right great so now we've 11964 07:26:20,958 --> 07:26:23,360 learned how to actually deploy a 11965 07:26:23,360 --> 07:26:25,638 contract to any blockchain that we want 11966 07:26:25,638 --> 07:26:27,478 using the command line now I'm going to 11967 07:26:27,478 --> 07:26:28,840 teach you the second way we're going to 11968 07:26:28,840 --> 07:26:30,600 deploy our contracts and and this is the 11969 07:26:30,600 --> 07:26:31,680 way we're actually going to do it for 11970 07:26:31,680 --> 07:26:33,558 the rest of the course when we're 11971 07:26:33,558 --> 07:26:35,240 deploying our code we want to make sure 11972 07:26:35,240 --> 07:26:37,840 we have a continuous reproducible way to 11973 07:26:37,840 --> 07:26:39,840 deploy our smart contracts and when we 11974 07:26:39,840 --> 07:26:41,958 test our code in the future we want the 11975 07:26:41,958 --> 07:26:45,120 tests to test the deployment processes 11976 07:26:45,120 --> 07:26:47,680 as well as the code so instead of just 11977 07:26:47,680 --> 07:26:49,120 doing the command line we're actually 11978 07:26:49,120 --> 07:26:52,240 going to write a script for us to deploy 11979 07:26:52,240 --> 07:26:54,840 our code and because Foundry has 11980 07:26:54,840 --> 07:26:57,200 everything written in solidity this 11981 07:26:57,200 --> 07:26:58,520 script that we're going to write to 11982 07:26:58,520 --> 07:27:00,718 deploy our code is also going to be 11983 07:27:00,718 --> 07:27:03,878 written in solidity and this is where 11984 07:27:03,878 --> 07:27:06,040 solidity as a contract language versus 11985 07:27:06,040 --> 07:27:07,878 solidity as a scripting language is a 11986 07:27:07,878 --> 07:27:09,718 little bit different Foundry has a whole 11987 07:27:09,718 --> 07:27:12,120 bunch of built-in stuff to give our 11988 07:27:12,120 --> 07:27:14,440 solidity even more functionality outside 11989 07:27:14,440 --> 07:27:16,840 of just smart contracts and you'll learn 11990 07:27:16,840 --> 07:27:19,040 about how later in the course but for 11991 07:27:19,040 --> 07:27:21,160 now we're going to learn how to create a 11992 07:27:21,160 --> 07:27:23,718 script to deploy our simple storage 11993 07:27:23,718 --> 07:27:25,718 contract and the way we create a script 11994 07:27:25,718 --> 07:27:28,040 to do it is first we come to our script 11995 07:27:28,040 --> 07:27:30,520 folder we'll rightclick new file we'll 11996 07:27:30,520 --> 07:27:34,398 create deploy simple storage. 11997 07:27:34,398 --> 07:27:37,920 s.o this S.L is just a Foundry 11998 07:27:37,920 --> 07:27:40,600 convention most of the time scripts have 11999 07:27:40,600 --> 07:27:44,160 a s doou instead of just being doou and 12000 07:27:44,160 --> 07:27:46,080 in here we're actually going to write a 12001 07:27:46,080 --> 07:27:49,718 contract in solidity to deploy our smart 12002 07:27:49,718 --> 07:27:51,878 contract which sounds a little bit weird 12003 07:27:51,878 --> 07:27:53,798 but don't worry too much about that this 12004 07:27:53,798 --> 07:27:55,760 deploy script is going to be written in 12005 07:27:55,760 --> 07:27:57,440 solidity but it it shouldn't be 12006 07:27:57,440 --> 07:27:59,080 considered a contract that we actually 12007 07:27:59,080 --> 07:28:01,638 ever want to deploy it's just for 12008 07:28:01,638 --> 07:28:03,840 deploying our code but it is written in 12009 07:28:03,840 --> 07:28:05,240 solidity so since it's written in 12010 07:28:05,240 --> 07:28:06,638 solidity we'll do the same thing as 12011 07:28:06,638 --> 07:28:10,440 usual spdx license identifier MIT and if 12012 07:28:10,440 --> 07:28:12,558 you're using GitHub co-pilot it might 12013 07:28:12,558 --> 07:28:15,280 even Auto suggest like this and I'm just 12014 07:28:15,280 --> 07:28:17,600 going to go ahead and hit tab I'll do 12015 07:28:17,600 --> 07:28:20,840 pragma solidity 12016 07:28:20,840 --> 07:28:23,558 0.818 and then I'll create contract 12017 07:28:23,558 --> 07:28:27,120 deploy simple storage like so and I'll 12018 07:28:27,120 --> 07:28:29,160 hit save if you go to The Foundry docs 12019 07:28:29,160 --> 07:28:31,638 we can actually scroll down to this 12020 07:28:31,638 --> 07:28:33,318 solidity scripting section in the 12021 07:28:33,318 --> 07:28:35,798 tutorials and you can learn how to 12022 07:28:35,798 --> 07:28:37,240 actually write scripts and work with 12023 07:28:37,240 --> 07:28:39,080 scripts the first thing that we need to 12024 07:28:39,080 --> 07:28:41,280 do in order to tell that Foundry that 12025 07:28:41,280 --> 07:28:43,318 this is a script is we need to actually 12026 07:28:43,318 --> 07:28:45,478 import some additional code now one of 12027 07:28:45,478 --> 07:28:47,000 the things that we saw in here was this 12028 07:28:47,000 --> 07:28:49,280 lib folder and this lib folder actually 12029 07:28:49,280 --> 07:28:51,280 starts with another folder called Forge 12030 07:28:51,280 --> 07:28:54,558 STD this Forge STD stands for Forge 12031 07:28:54,558 --> 07:28:57,718 standard library in here there's a ton 12032 07:28:57,718 --> 07:29:01,000 of helpful tools and Scripts for working 12033 07:29:01,000 --> 07:29:03,558 with Foundry and to tell Foundry that 12034 07:29:03,558 --> 07:29:05,600 this contract deploy simple storage is 12035 07:29:05,600 --> 07:29:07,398 actually a script we need to import from 12036 07:29:07,398 --> 07:29:10,280 Forge STD so we're going to do import 12037 07:29:10,280 --> 07:29:12,200 Forge 12038 07:29:12,200 --> 07:29:16,200 dstd script. soul and we'll have our 12039 07:29:16,200 --> 07:29:18,638 contract deploy simple storage inherit 12040 07:29:18,638 --> 07:29:20,760 all the functionality of this script by 12041 07:29:20,760 --> 07:29:23,398 saying is script and I know we learned 12042 07:29:23,398 --> 07:29:25,080 about inheritance before so you should 12043 07:29:25,080 --> 07:29:28,080 know what that means is script and then 12044 07:29:28,080 --> 07:29:29,840 additionally our deploy simple storage 12045 07:29:29,840 --> 07:29:31,680 is is going to need to know about our 12046 07:29:31,680 --> 07:29:33,878 simple storage contract so we'll go 12047 07:29:33,878 --> 07:29:36,160 ahead and import that import we'll go 12048 07:29:36,160 --> 07:29:38,000 down a directory since we're in the 12049 07:29:38,000 --> 07:29:39,718 script folder and we need to go to the 12050 07:29:39,718 --> 07:29:42,280 SRC folder these two dots is how you go 12051 07:29:42,280 --> 07:29:46,160 down a directory we'll do slash SRC vs 12052 07:29:46,160 --> 07:29:48,600 code even might help prompt you here 12053 07:29:48,600 --> 07:29:51,280 Dash and it again Auto prompted for me 12054 07:29:51,280 --> 07:29:53,638 and I hit Tab and now we've imported 12055 07:29:53,638 --> 07:29:55,920 simple storage now since we know that 12056 07:29:55,920 --> 07:29:58,600 this is the noob way to do Imports we're 12057 07:29:58,600 --> 07:30:01,240 going to do the cool way by using named 12058 07:30:01,240 --> 07:30:04,160 Imports instead of nameless Imports okay 12059 07:30:04,160 --> 07:30:07,120 great now inside every deploy or script 12060 07:30:07,120 --> 07:30:09,558 contract we need our main function which 12061 07:30:09,558 --> 07:30:11,440 is going to be called run and this is 12062 07:30:11,440 --> 07:30:14,200 going to be the command that gets called 12063 07:30:14,200 --> 07:30:16,398 when we go to deploy our contract so 12064 07:30:16,398 --> 07:30:18,958 we'll create a function called run we'll 12065 07:30:18,958 --> 07:30:21,160 make it external and we can have a 12066 07:30:21,160 --> 07:30:24,200 return a simple storage contract and in 12067 07:30:24,200 --> 07:30:27,000 here we're going to use a new keyword 12068 07:30:27,000 --> 07:30:28,798 that we haven't used before we're going 12069 07:30:28,798 --> 07:30:33,160 to say VM start broadcast VM is a 12070 07:30:33,160 --> 07:30:35,760 special keyword in the Forge standard 12071 07:30:35,760 --> 07:30:38,160 Library the VM keyword is a special 12072 07:30:38,160 --> 07:30:40,398 keyword that we can only use in Foundry 12073 07:30:40,398 --> 07:30:41,958 it's related to something called cheat 12074 07:30:41,958 --> 07:30:44,240 codes we're not going to go over that 12075 07:30:44,240 --> 07:30:46,558 too deep right now you can see a whole 12076 07:30:46,558 --> 07:30:49,840 list of Foundry cheat codes in the 12077 07:30:49,840 --> 07:30:52,478 documentation and Forge standard Library 12078 07:30:52,478 --> 07:30:54,398 references which have even more cheat 12079 07:30:54,398 --> 07:30:56,878 codes as well this VM stuff is only 12080 07:30:56,878 --> 07:30:59,160 going to work in Foundry if you actually 12081 07:30:59,160 --> 07:31:01,200 were to try to deploy this in remix or 12082 07:31:01,200 --> 07:31:03,718 some other framework it wouldn't work 12083 07:31:03,718 --> 07:31:06,160 these VM cheat codes only work in 12084 07:31:06,160 --> 07:31:08,318 Foundry it's not valid in regular 12085 07:31:08,318 --> 07:31:11,040 solidity but if we're inheriting Forge 12086 07:31:11,040 --> 07:31:14,000 STD code this VM keyword exists if 12087 07:31:14,000 --> 07:31:16,240 you're using the hard hat solidity 12088 07:31:16,240 --> 07:31:18,200 extension we can actually control or 12089 07:31:18,200 --> 07:31:21,000 command click into VM and we can 12090 07:31:21,000 --> 07:31:24,000 actually see where it's defined but if 12091 07:31:24,000 --> 07:31:26,040 that's confusing ignore that for now 12092 07:31:26,040 --> 07:31:29,040 this vm. start broadcast says hey 12093 07:31:29,040 --> 07:31:31,160 everything after after this line inside 12094 07:31:31,160 --> 07:31:33,318 of this function you should actually 12095 07:31:33,318 --> 07:31:36,440 send to the RPC and then when we're done 12096 07:31:36,440 --> 07:31:39,798 broadcasting we're going to do vm. stop 12097 07:31:39,798 --> 07:31:42,878 broadcast so everything inside of these 12098 07:31:42,878 --> 07:31:45,638 is what we actually want to send and 12099 07:31:45,638 --> 07:31:47,718 deploy the reason we have this is 12100 07:31:47,718 --> 07:31:50,398 because maybe we have some stuff like we 12101 07:31:50,398 --> 07:31:52,478 want to set some boilerplate code before 12102 07:31:52,478 --> 07:31:54,318 we actually send transactions and we 12103 07:31:54,318 --> 07:31:56,080 don't want to spend any gas to like set 12104 07:31:56,080 --> 07:31:59,280 starting value to one right so any 12105 07:31:59,280 --> 07:32:01,318 transaction that we want to actually 12106 07:32:01,318 --> 07:32:04,200 send we need to put in between these vm. 12107 07:32:04,200 --> 07:32:07,120 start broadcast and vm. stop broadcast 12108 07:32:07,120 --> 07:32:09,040 and for us to deploy our simple storage 12109 07:32:09,040 --> 07:32:12,840 contract we just do simple storage 12110 07:32:12,840 --> 07:32:15,478 lowercase simple storage right these are 12111 07:32:15,478 --> 07:32:17,600 different simple storage the variable 12112 07:32:17,600 --> 07:32:21,600 simple storage the contract equals new 12113 07:32:21,600 --> 07:32:24,280 simple storage like this and remember 12114 07:32:24,280 --> 07:32:26,280 what does this new keyword do well the 12115 07:32:26,280 --> 07:32:28,840 new keyword creates a new contract in 12116 07:32:28,840 --> 07:32:31,360 solidity it's also going to create a new 12117 07:32:31,360 --> 07:32:34,318 contract in between our VM dostar 12118 07:32:34,318 --> 07:32:37,200 broadcast this being in between these VM 12119 07:32:37,200 --> 07:32:38,920 dostar broadcast is going to send a 12120 07:32:38,920 --> 07:32:41,120 transaction to create a new simple 12121 07:32:41,120 --> 07:32:43,318 storage contract if this is a little bit 12122 07:32:43,318 --> 07:32:45,558 confusing for you right now that's okay 12123 07:32:45,558 --> 07:32:47,440 it's going to make more sense as we go 12124 07:32:47,440 --> 07:32:50,160 on later in the course but for now just 12125 07:32:50,160 --> 07:32:52,558 do this and follow along with me and 12126 07:32:52,558 --> 07:32:56,120 then of course we can say turn simple 12127 07:32:56,120 --> 07:32:59,080 storage okay great now if we pull our 12128 07:32:59,080 --> 07:33:00,280 terminal back up 12129 07:33:00,280 --> 07:33:01,920 we can see we have Anvil running right 12130 07:33:01,920 --> 07:33:04,040 now we can actually kill it with contrl 12131 07:33:04,040 --> 07:33:07,000 C we'll clear to the top and what we can 12132 07:33:07,000 --> 07:33:12,200 do now is run Forge script script deploy 12133 07:33:12,200 --> 07:33:15,878 simple storage. s.o hit enter and look 12134 07:33:15,878 --> 07:33:17,600 oops looks like I got some different 12135 07:33:17,600 --> 07:33:21,160 solidity versions let's change this to a 12136 07:33:21,160 --> 07:33:24,120 carrot in here let's change this to a 12137 07:33:24,120 --> 07:33:27,440 carrot in here this being an 18 so that 12138 07:33:27,440 --> 07:33:29,840 they're both on the same version let's 12139 07:33:29,840 --> 07:33:32,398 type clear close these or minimize these 12140 07:33:32,398 --> 07:33:35,360 out we'll hit up twice and we'll run 12141 07:33:35,360 --> 07:33:37,398 this again and now what you'll see is 12142 07:33:37,398 --> 07:33:40,878 it's compiling it compiles both the 12143 07:33:40,878 --> 07:33:44,160 script to deploy and our simple storage 12144 07:33:44,160 --> 07:33:47,280 contract using 0.8.9 because we did the 12145 07:33:47,280 --> 07:33:49,398 car compiler successful script 12146 07:33:49,398 --> 07:33:51,478 successful tells us the gas and then we 12147 07:33:51,478 --> 07:33:53,080 went ahead we returned our simple 12148 07:33:53,080 --> 07:33:55,200 storage contract which was deployed here 12149 07:33:55,200 --> 07:33:56,718 now you might be asking wait wait wait 12150 07:33:56,718 --> 07:33:58,520 wait Patrick we we don't have Anvil 12151 07:33:58,520 --> 07:34:00,080 running we don't have a local blockchain 12152 07:34:00,080 --> 07:34:02,318 running where did this deploy to well in 12153 07:34:02,318 --> 07:34:05,718 Foundry if you don't specify an RPC URL 12154 07:34:05,718 --> 07:34:07,958 it'll just automatically deploy your 12155 07:34:07,958 --> 07:34:11,040 contract or run your script on a 12156 07:34:11,040 --> 07:34:13,958 temporary Anvil chain so once I ran 12157 07:34:13,958 --> 07:34:16,920 Forge script it saw there was no RPC URL 12158 07:34:16,920 --> 07:34:19,798 so it spun up a temporary Anvil 12159 07:34:19,798 --> 07:34:22,478 blockchain deployed our simple storage 12160 07:34:22,478 --> 07:34:24,840 and then tore it back down at the end 12161 07:34:24,840 --> 07:34:26,280 you can see at the bottom if you wish to 12162 07:34:26,280 --> 07:34:28,958 simulate on Trin transaction pass an RPC 12163 07:34:28,958 --> 07:34:32,718 URL so if we do clear we run Anvil and 12164 07:34:32,718 --> 07:34:35,760 then create a new terminal we could run 12165 07:34:35,760 --> 07:34:39,760 Forge script script deploy simple 12166 07:34:39,760 --> 07:34:42,200 storage at s.o and I'm hitting tab to 12167 07:34:42,200 --> 07:34:46,520 autocomplete that-- RPC URL go back to 12168 07:34:46,520 --> 07:34:51,240 Anvil copy this go back to bash 12169 07:34:51,240 --> 07:34:55,000 HTTP slash we actually almost deployed 12170 07:34:55,000 --> 07:34:57,240 this to the blockchain we actually did a 12171 07:34:57,240 --> 07:35:00,280 simulation of deploying to our chain 12172 07:35:00,280 --> 07:35:02,000 here it gives us one more piece of 12173 07:35:02,000 --> 07:35:03,600 information to broadcast these 12174 07:35:03,600 --> 07:35:07,440 transactions add-- broadcast and wallet 12175 07:35:07,440 --> 07:35:09,840 configurations to the previous command 12176 07:35:09,840 --> 07:35:13,280 and now we get a new folder which gives 12177 07:35:13,280 --> 07:35:15,200 us information about our previous 12178 07:35:15,200 --> 07:35:17,760 deployments in case we forget for 12179 07:35:17,760 --> 07:35:19,398 example if we deploy a contract we can 12180 07:35:19,398 --> 07:35:20,958 flip back here and see where we actually 12181 07:35:20,958 --> 07:35:23,000 deployed code so let's pull up our 12182 07:35:23,000 --> 07:35:25,558 terminal once more and actually deploy 12183 07:35:25,558 --> 07:35:27,760 this to the blockchain so we'll hit 12184 07:35:27,760 --> 07:35:32,120 clear I'll hit up we have our RPC URL so 12185 07:35:32,120 --> 07:35:36,840 now let's do D- broadcast and we'll do 12186 07:35:36,840 --> 07:35:40,478 D- private key and we'll grab a private 12187 07:35:40,478 --> 07:35:43,440 key from Anvil and paste that in here 12188 07:35:43,440 --> 07:35:45,878 and hit enter boom and we see at the 12189 07:35:45,878 --> 07:35:48,798 bottom onchain execution complete and 12190 07:35:48,798 --> 07:35:50,718 successful we see we get some 12191 07:35:50,718 --> 07:35:53,040 transactions here we waited for receipts 12192 07:35:53,040 --> 07:35:55,558 Etc so fantastic so we learned how to 12193 07:35:55,558 --> 07:35:58,798 actually deploy our smart contracts 12194 07:35:58,798 --> 07:36:00,798 through these script in command now 12195 07:36:00,798 --> 07:36:03,240 awesome 12196 07:36:04,318 --> 07:36:06,680 job now let's learn a little bit more 12197 07:36:06,680 --> 07:36:09,360 about what actually just happened right 12198 07:36:09,360 --> 07:36:11,120 because right now sending transactions 12199 07:36:11,120 --> 07:36:13,280 is still kind of this magic thing right 12200 07:36:13,280 --> 07:36:15,040 so let's hide our terminal and let's go 12201 07:36:15,040 --> 07:36:17,600 up to our Explorer let's pull this out a 12202 07:36:17,600 --> 07:36:20,440 little bit and let's go into here now 12203 07:36:20,440 --> 07:36:21,760 what's important to note is that there's 12204 07:36:21,760 --> 07:36:23,318 actually a couple different folders in 12205 07:36:23,318 --> 07:36:25,878 here dry run is the folder whenever we 12206 07:36:25,878 --> 07:36:27,718 don't have a blockchain running 12207 07:36:27,718 --> 07:36:30,080 otherwise this gets separated by 12208 07:36:30,080 --> 07:36:31,520 chain ID and we'll talk about this a 12209 07:36:31,520 --> 07:36:33,040 little bit later but if we go into one 12210 07:36:33,040 --> 07:36:35,000 of these either dry run or or even just 12211 07:36:35,000 --> 07:36:37,200 run latest we'll see details about the 12212 07:36:37,200 --> 07:36:39,840 transaction we'll see a hash transaction 12213 07:36:39,840 --> 07:36:41,718 type contract name address blah blah 12214 07:36:41,718 --> 07:36:44,200 blah this right here this transaction 12215 07:36:44,200 --> 07:36:47,200 section is actually what is getting sent 12216 07:36:47,200 --> 07:36:49,958 on the Chain when we do Forge script or 12217 07:36:49,958 --> 07:36:52,920 Forge create this is the transaction 12218 07:36:52,920 --> 07:36:55,318 that we send to that RPC URL right this 12219 07:36:55,318 --> 07:36:57,360 is the API data if you're familiar with 12220 07:36:57,360 --> 07:36:59,120 https post this is the data that we 12221 07:36:59,120 --> 07:37:01,080 actually sent send we send the type 12222 07:37:01,080 --> 07:37:03,280 which for now just everything is type 12223 07:37:03,280 --> 07:37:05,160 two because we're in the merge don't 12224 07:37:05,160 --> 07:37:06,958 worry about type one for now we have a 12225 07:37:06,958 --> 07:37:09,478 from which is of course the from address 12226 07:37:09,478 --> 07:37:13,000 that we want to have we have a gas here 12227 07:37:13,000 --> 07:37:15,638 and this is the hex value of gas now if 12228 07:37:15,638 --> 07:37:17,160 we pull our terminal back up we'll clear 12229 07:37:17,160 --> 07:37:18,878 this out I'm about to show you an 12230 07:37:18,878 --> 07:37:20,280 amazing trick that's going to make your 12231 07:37:20,280 --> 07:37:22,520 life a lot easier Down the Line cast 12232 07:37:22,520 --> 07:37:24,520 actually can convert between hex and 12233 07:37:24,520 --> 07:37:26,638 numbers really easily and cast comes 12234 07:37:26,638 --> 07:37:30,040 built in with Foundry we do cast D- to 12235 07:37:30,040 --> 07:37:34,398 base paste our hex in here and write DEC 12236 07:37:34,398 --> 07:37:38,160 for decimal it'll convert this hex value 12237 07:37:38,160 --> 07:37:43,000 to its decimal value 0x 714 C2 whatever 12238 07:37:43,000 --> 07:37:45,680 is just this number and I use this cast 12239 07:37:45,680 --> 07:37:48,120 to base all the time you can put some 12240 07:37:48,120 --> 07:37:49,600 value in here and then what you want to 12241 07:37:49,600 --> 07:37:51,638 convert it to and it's a very easy way 12242 07:37:51,638 --> 07:37:53,760 to see what some value is there's some 12243 07:37:53,760 --> 07:37:56,558 other stuff in cast as well if you do 12244 07:37:56,558 --> 07:38:00,878 cast d-el there's some other ways to 12245 07:38:00,878 --> 07:38:03,080 convert different units to each other 12246 07:38:03,080 --> 07:38:05,878 like from way spites 32 and some other 12247 07:38:05,878 --> 07:38:07,958 stuff but two base is going to be one 12248 07:38:07,958 --> 07:38:09,718 that we're going to use a lot so we have 12249 07:38:09,718 --> 07:38:11,920 the gas we have the value with the 12250 07:38:11,920 --> 07:38:15,240 transaction yes since deploying a 12251 07:38:15,240 --> 07:38:17,440 contract is just a transaction we can 12252 07:38:17,440 --> 07:38:19,398 add a value to it if we want in our 12253 07:38:19,398 --> 07:38:21,398 deploy script right in here we would 12254 07:38:21,398 --> 07:38:22,958 just do some brackets we would say like 12255 07:38:22,958 --> 07:38:26,120 value and like one ether if we wanted to 12256 07:38:26,120 --> 07:38:29,040 deploy this with one ether we can't send 12257 07:38:29,040 --> 07:38:31,160 a value here because in solidity you 12258 07:38:31,160 --> 07:38:32,760 can't set the option value if the 12259 07:38:32,760 --> 07:38:34,318 Constructor is not payable we'd have to 12260 07:38:34,318 --> 07:38:35,878 make the Constructor payable but we 12261 07:38:35,878 --> 07:38:37,798 could send value just like any other 12262 07:38:37,798 --> 07:38:40,638 transaction there's this huge data piece 12263 07:38:40,638 --> 07:38:42,240 here this is actually the contract 12264 07:38:42,240 --> 07:38:44,398 deployment code and the contract code in 12265 07:38:44,398 --> 07:38:46,398 here we have the nuns which is going to 12266 07:38:46,398 --> 07:38:49,240 be that number that's only used once and 12267 07:38:49,240 --> 07:38:50,798 then don't worry about access list for 12268 07:38:50,798 --> 07:38:52,878 now but this is all the transaction 12269 07:38:52,878 --> 07:38:54,520 information and then of course we have 12270 07:38:54,520 --> 07:38:56,878 our RPC now what's not stored in here is 12271 07:38:56,878 --> 07:38:58,360 is a couple other pieces of the 12272 07:38:58,360 --> 07:39:00,360 transaction and additionally there are 12273 07:39:00,360 --> 07:39:03,318 these v r and s values that count for 12274 07:39:03,318 --> 07:39:05,360 the transaction signature it's not 12275 07:39:05,360 --> 07:39:06,478 getting saved here because it's 12276 07:39:06,478 --> 07:39:08,120 technically part of this from anyways 12277 07:39:08,120 --> 07:39:10,840 they're public values and these RS andv 12278 07:39:10,840 --> 07:39:13,040 allow our private key to sign the 12279 07:39:13,040 --> 07:39:15,638 transaction so what's really happening 12280 07:39:15,638 --> 07:39:17,760 when we send this the reason we need our 12281 07:39:17,760 --> 07:39:19,478 private key is we need the private key 12282 07:39:19,478 --> 07:39:22,040 to actually sign the transaction that we 12283 07:39:22,040 --> 07:39:23,878 built and that's happening a little bit 12284 07:39:23,878 --> 07:39:25,760 under the hood so whenever we send a 12285 07:39:25,760 --> 07:39:27,958 transaction there is a signature 12286 07:39:27,958 --> 07:39:30,760 happening we are signing a transaction 12287 07:39:30,760 --> 07:39:32,280 and then we are sending it and that's 12288 07:39:32,280 --> 07:39:33,920 important for later in the course they 12289 07:39:33,920 --> 07:39:35,878 don't save it here but signing the 12290 07:39:35,878 --> 07:39:38,760 transaction does happen when you sign a 12291 07:39:38,760 --> 07:39:40,398 transaction it's very similar to doing 12292 07:39:40,398 --> 07:39:42,360 that hex thing we showed you way way at 12293 07:39:42,360 --> 07:39:43,398 the beginning of the course with the 12294 07:39:43,398 --> 07:39:45,680 blockchain only the private key can sign 12295 07:39:45,680 --> 07:39:48,000 the transaction this is how when we send 12296 07:39:48,000 --> 07:39:50,798 our data to a node it knows that it's 12297 07:39:50,798 --> 07:39:52,718 able to execute it because it's signed 12298 07:39:52,718 --> 07:39:54,360 by our private key I'm not going to go 12299 07:39:54,360 --> 07:39:56,520 too deep into that right now this nuts 12300 07:39:56,520 --> 07:39:58,760 piece is a little bit important every 12301 07:39:58,760 --> 07:39:59,920 single wallet 12302 07:39:59,920 --> 07:40:02,318 has a counter of transactions which is 12303 07:40:02,318 --> 07:40:04,040 basically the nuns whenever you send a 12304 07:40:04,040 --> 07:40:06,398 transaction you give it a nuns or this 12305 07:40:06,398 --> 07:40:08,240 value this number only used once to 12306 07:40:08,240 --> 07:40:10,878 basically count your transactions this 12307 07:40:10,878 --> 07:40:12,520 is really good because if you want to 12308 07:40:12,520 --> 07:40:15,040 replay transactions you would just send 12309 07:40:15,040 --> 07:40:16,798 the same transaction data with the same 12310 07:40:16,798 --> 07:40:18,878 nuns for example if we have a 12311 07:40:18,878 --> 07:40:20,478 transaction that didn't go through 12312 07:40:20,478 --> 07:40:22,680 you'll see that this is in this run 12313 07:40:22,680 --> 07:40:25,680 latest with the dry if we run this again 12314 07:40:25,680 --> 07:40:27,638 if we hit up you'll see that if we run 12315 07:40:27,638 --> 07:40:29,760 our transaction again with our Anvil 12316 07:40:29,760 --> 07:40:31,558 deployed here we'll actually deploy 12317 07:40:31,558 --> 07:40:33,840 another transaction if we go back to our 12318 07:40:33,840 --> 07:40:35,398 broadcast folder we see there's actually 12319 07:40:35,398 --> 07:40:37,718 two runs and a new run latest if we go 12320 07:40:37,718 --> 07:40:40,360 to our run latest now you'll see that 12321 07:40:40,360 --> 07:40:43,760 the most the latest run now has 0x1 so 12322 07:40:43,760 --> 07:40:45,478 this increments every single time we 12323 07:40:45,478 --> 07:40:47,680 send a transaction your nuns increments 12324 07:40:47,680 --> 07:40:50,160 every time you send a transaction and 12325 07:40:50,160 --> 07:40:52,000 again contract deployments are 12326 07:40:52,000 --> 07:40:54,120 transactions now we went over a lot of 12327 07:40:54,120 --> 07:40:55,440 stuff in here but the most important 12328 07:40:55,440 --> 07:40:57,120 takeaway I want you to have from this is 12329 07:40:57,120 --> 07:40:58,318 anytime you change State on the 12330 07:40:58,318 --> 07:41:01,160 blockchain it does it in a transaction 12331 07:41:01,160 --> 07:41:02,878 and the differentiator is going to be 12332 07:41:02,878 --> 07:41:05,200 what's ever in this data field this data 12333 07:41:05,200 --> 07:41:07,200 field contains the op codes to tell the 12334 07:41:07,200 --> 07:41:09,520 blockchain hey I'd like to create a new 12335 07:41:09,520 --> 07:41:11,520 contract we're not really going to go 12336 07:41:11,520 --> 07:41:13,878 too deep into what these op codes are or 12337 07:41:13,878 --> 07:41:16,200 this evm bite code we'll briefly talk 12338 07:41:16,200 --> 07:41:18,040 about op codes later in this course but 12339 07:41:18,040 --> 07:41:20,318 if you want to really learn about op 12340 07:41:20,318 --> 07:41:21,760 codes and assembly we have another 12341 07:41:21,760 --> 07:41:23,200 course on security coming out that we'll 12342 07:41:23,200 --> 07:41:25,040 go over that but this is the most 12343 07:41:25,040 --> 07:41:27,360 important thing to take away when we're 12344 07:41:27,360 --> 07:41:28,920 in remix and we're sending transactions 12345 07:41:28,920 --> 07:41:31,360 with these buttons we're doing the exact 12346 07:41:31,360 --> 07:41:32,920 same thing we're populating the data 12347 07:41:32,920 --> 07:41:35,160 field of a transaction but instead of 12348 07:41:35,160 --> 07:41:37,040 the data being associated with creating 12349 07:41:37,040 --> 07:41:39,280 a contract the data is associated with 12350 07:41:39,280 --> 07:41:41,878 sending a 12351 07:41:50,080 --> 07:41:52,520 transaction right great now that we've 12352 07:41:52,520 --> 07:41:53,798 actually deployed our contracts though 12353 07:41:53,798 --> 07:41:55,080 we should learn how to interact with 12354 07:41:55,080 --> 07:41:56,680 them in the same way that remix allows 12355 07:41:56,680 --> 07:41:57,840 us to interact with them with our 12356 07:41:57,840 --> 07:41:59,638 buttons here now there's two ways to 12357 07:41:59,638 --> 07:42:01,440 actually interact with our contracts one 12358 07:42:01,440 --> 07:42:03,160 is going to be doing what we did before 12359 07:42:03,160 --> 07:42:05,000 with scripts but the other way is 12360 07:42:05,000 --> 07:42:06,478 actually going to be doing directly from 12361 07:42:06,478 --> 07:42:08,000 the command line so we're actually going 12362 07:42:08,000 --> 07:42:10,080 to learn the command line Parts in this 12363 07:42:10,080 --> 07:42:11,040 project and then we're going to learn 12364 07:42:11,040 --> 07:42:13,240 how to do scripts in a later project so 12365 07:42:13,240 --> 07:42:15,600 let's pull up our terminal here and just 12366 07:42:15,600 --> 07:42:17,680 to make sure that we have this deployed 12367 07:42:17,680 --> 07:42:20,120 let's hit up a couple times and we'll 12368 07:42:20,120 --> 07:42:22,718 rerun this deploy script now in just a 12369 07:42:22,718 --> 07:42:24,000 second we're going to learn how to 12370 07:42:24,000 --> 07:42:26,000 actually interact with our contracts 12371 07:42:26,000 --> 07:42:27,600 from the command line as well similar to 12372 07:42:27,600 --> 07:42:29,520 how remix has all these but buttons that 12373 07:42:29,520 --> 07:42:32,120 we can press however first we're going 12374 07:42:32,120 --> 07:42:34,040 to make this a little bit better and 12375 07:42:34,040 --> 07:42:35,398 we're going to take a couple of 12376 07:42:35,398 --> 07:42:38,080 different approaches to not having this 12377 07:42:38,080 --> 07:42:40,200 in the command line as you saw before we 12378 07:42:40,200 --> 07:42:42,638 could use Forge create interactive paste 12379 07:42:42,638 --> 07:42:44,718 our private key in and it wouldn't be in 12380 07:42:44,718 --> 07:42:46,878 our command line we actually can't use 12381 07:42:46,878 --> 07:42:49,318 interactive for when we're sending 12382 07:42:49,318 --> 07:42:50,840 scripts at the moment I'm sure in the 12383 07:42:50,840 --> 07:42:51,840 future they'll make it a little bit 12384 07:42:51,840 --> 07:42:53,920 easier for us to do this but right now 12385 07:42:53,920 --> 07:42:56,160 we really don't want to have to do-- 12386 07:42:56,160 --> 07:42:58,440 private key and paste our private key in 12387 07:42:58,440 --> 07:43:01,520 PL Tex so what else can we do what 12388 07:43:01,520 --> 07:43:03,958 alternatives can do we have now what I'm 12389 07:43:03,958 --> 07:43:06,878 about to show you once again only do 12390 07:43:06,878 --> 07:43:09,280 this for your development environments 12391 07:43:09,280 --> 07:43:11,318 do not put a real private key in here 12392 07:43:11,318 --> 07:43:12,958 the reason I'm showing you this is 12393 07:43:12,958 --> 07:43:15,478 because it is much quicker to test 12394 07:43:15,478 --> 07:43:17,040 however it's terrible to use in 12395 07:43:17,040 --> 07:43:18,318 production so this is cool for 12396 07:43:18,318 --> 07:43:20,680 development purposes this is not cool 12397 07:43:20,680 --> 07:43:23,318 for actual production purposes what 12398 07:43:23,318 --> 07:43:24,080 we're going to do is we're going to 12399 07:43:24,080 --> 07:43:26,680 create a new file called EnV and 12400 07:43:26,680 --> 07:43:28,638 whenever you create a EnV the first 12401 07:43:28,638 --> 07:43:30,478 thing you should do is go to a g ignore 12402 07:43:30,478 --> 07:43:34,798 file make sure that a EnV is in this G 12403 07:43:34,798 --> 07:43:37,160 ignore I'll explain what the dog ignore 12404 07:43:37,160 --> 07:43:39,200 does in the future but for now just have 12405 07:43:39,200 --> 07:43:41,360 that be the first thing you do in our DV 12406 07:43:41,360 --> 07:43:43,000 file we can put in what's called 12407 07:43:43,000 --> 07:43:45,080 environment variables these are 12408 07:43:45,080 --> 07:43:47,000 variables that might be a little bit 12409 07:43:47,000 --> 07:43:48,318 sensitive that we don't want to actually 12410 07:43:48,318 --> 07:43:49,638 write in the command line or 12411 07:43:49,638 --> 07:43:51,638 accidentally expose to the public one of 12412 07:43:51,638 --> 07:43:52,840 those of course is going to be our 12413 07:43:52,840 --> 07:43:57,000 private key so let's go to Anvil scroll 12414 07:43:57,000 --> 07:44:00,080 up grab that private key copy and paste 12415 07:44:00,080 --> 07:44:02,200 it in here and we have this private key 12416 07:44:02,200 --> 07:44:04,840 equals this typically you'll also see 12417 07:44:04,840 --> 07:44:09,440 RPC URL equals what's our Anvil RPC Rel 12418 07:44:09,440 --> 07:44:11,558 let this right here so we'll do 12419 07:44:11,558 --> 07:44:14,920 HTTP SL slash paste that in there and 12420 07:44:14,920 --> 07:44:17,000 great now that we have those in there 12421 07:44:17,000 --> 07:44:20,360 what we can do is now run source. EMV 12422 07:44:20,360 --> 07:44:22,160 which will add these environment 12423 07:44:22,160 --> 07:44:25,638 variables into our shell here and we can 12424 07:44:25,638 --> 07:44:28,398 do Echo private key like that and we'll 12425 07:44:28,398 --> 07:44:30,200 see our private the key actually show up 12426 07:44:30,200 --> 07:44:32,718 like so we can also do Echo dollar sign 12427 07:44:32,718 --> 07:44:36,160 RPC URL and we'll see our RPC URL 12428 07:44:36,160 --> 07:44:37,680 actually show up like this and then what 12429 07:44:37,680 --> 07:44:40,360 we could do is we could go back to our 12430 07:44:40,360 --> 07:44:42,360 Forge script and instead of typing in 12431 07:44:42,360 --> 07:44:44,360 our private key we would just do dollar 12432 07:44:44,360 --> 07:44:48,760 sign private key and dollar sign RPC URL 12433 07:44:48,760 --> 07:44:51,000 so now our RPC URL and our private key 12434 07:44:51,000 --> 07:44:53,440 at least aren't being run in our command 12435 07:44:53,440 --> 07:44:55,680 line so that it's not stored in our 12436 07:44:55,680 --> 07:44:57,760 Shell's history the issue of course is 12437 07:44:57,760 --> 07:45:00,000 that okay well now we have it stored in 12438 07:45:00,000 --> 07:45:02,680 this EnV anytime you have your key 12439 07:45:02,680 --> 07:45:04,558 stored in plain text you should be 12440 07:45:04,558 --> 07:45:06,798 afraid you should be a little bit 12441 07:45:06,798 --> 07:45:09,478 nervous so we can actually take one more 12442 07:45:09,478 --> 07:45:12,040 step to make this even more secure and 12443 07:45:12,040 --> 07:45:13,000 this is going to be one of the steps 12444 07:45:13,000 --> 07:45:14,160 that I recommend that you take when 12445 07:45:14,160 --> 07:45:15,798 you're actually working with production 12446 07:45:15,798 --> 07:45:17,958 code you definitely do not want to 12447 07:45:17,958 --> 07:45:20,318 launch production code with aemv file 12448 07:45:20,318 --> 07:45:22,558 and I'm going to summarize all this very 12449 07:45:22,558 --> 07:45:24,558 soon just stick with me I promise this 12450 07:45:24,558 --> 07:45:25,798 is a little bit boring but it's 12451 07:45:25,798 --> 07:45:27,600 incredibly incredibly important that you 12452 07:45:27,600 --> 07:45:29,200 get this right and I'm going to try to 12453 07:45:29,200 --> 07:45:30,680 prevent you from getting wrecked now 12454 07:45:30,680 --> 07:45:32,440 Foundry is a tool that is constantly 12455 07:45:32,440 --> 07:45:34,478 being improved and updated and there's 12456 07:45:34,478 --> 07:45:36,200 an issue in The Foundry repo right now 12457 07:45:36,200 --> 07:45:38,200 called improve wallet management us 12458 07:45:38,200 --> 07:45:40,718 using key store I would love a way for 12459 07:45:40,718 --> 07:45:42,398 you to actually encrypt your private 12460 07:45:42,398 --> 07:45:45,120 keys so that none of you accidentally 12461 07:45:45,120 --> 07:45:46,638 push a private key up to GitHub or 12462 07:45:46,638 --> 07:45:48,280 expose a private key that it's in PL 12463 07:45:48,280 --> 07:45:52,200 text if you run Forge script d-el and 12464 07:45:52,200 --> 07:45:54,398 you scroll up you get this wallet 12465 07:45:54,398 --> 07:45:56,120 options section where you can actually 12466 07:45:56,120 --> 07:45:58,600 pass the path to an encrypted key store 12467 07:45:58,600 --> 07:46:01,600 file and a password a key store is a 12468 07:46:01,600 --> 07:46:03,840 file that has your private key but 12469 07:46:03,840 --> 07:46:05,920 encrypted by a password instead of 12470 07:46:05,920 --> 07:46:08,120 having your private key in PL text you 12471 07:46:08,120 --> 07:46:09,280 would have it encrypted and you would 12472 07:46:09,280 --> 07:46:10,718 just need the password to decrypt it 12473 07:46:10,718 --> 07:46:13,920 that is a much safer way to deploy your 12474 07:46:13,920 --> 07:46:16,080 contracts I've added some context in 12475 07:46:16,080 --> 07:46:18,558 another issue on Foundry as well and if 12476 07:46:18,558 --> 07:46:19,920 you all could come in here and give this 12477 07:46:19,920 --> 07:46:21,920 a thumbs up that would be fantastic a 12478 07:46:21,920 --> 07:46:24,080 way to encrypt your private key into a 12479 07:46:24,080 --> 07:46:25,958 key store file natively doesn't exist in 12480 07:46:25,958 --> 07:46:28,080 Foundry yet but I've put out a bounty 12481 07:46:28,080 --> 07:46:30,000 for someone to actually implement this 12482 07:46:30,000 --> 07:46:31,600 so be sure to just check the G up repo 12483 07:46:31,600 --> 07:46:33,440 associated with this course to check to 12484 07:46:33,440 --> 07:46:35,680 see whether this feature is implemented 12485 07:46:35,680 --> 07:46:37,360 so what I'm really trying to get at is 12486 07:46:37,360 --> 07:46:39,680 for the moment a private key in ourv 12487 07:46:39,680 --> 07:46:42,398 file is cool so long as we don't expose 12488 07:46:42,398 --> 07:46:45,398 the EMV file but for real money you're 12489 07:46:45,398 --> 07:46:46,958 not going to do that we're not going to 12490 07:46:46,958 --> 07:46:49,160 do that okay for real money we're going 12491 07:46:49,160 --> 07:46:51,040 to use the dashes interactive to paste 12492 07:46:51,040 --> 07:46:53,040 our private key or we're going to use a 12493 07:46:53,040 --> 07:46:55,760 keystore file with a password once 12494 07:46:55,760 --> 07:46:57,798 Foundry adds that there are some tools 12495 07:46:57,798 --> 07:46:59,798 like dap tools e sign that you could 12496 07:46:59,798 --> 07:47:01,440 optionally download if you want to 12497 07:47:01,440 --> 07:47:03,520 deploy and interact with wallets that 12498 07:47:03,520 --> 07:47:05,120 have real money in them and it does have 12499 07:47:05,120 --> 07:47:07,760 this import keyword where you can import 12500 07:47:07,760 --> 07:47:10,240 your private key into a key store file 12501 07:47:10,240 --> 07:47:11,240 and then you would just obviously 12502 07:47:11,240 --> 07:47:13,360 encrypt that with a password so for the 12503 07:47:13,360 --> 07:47:15,120 moment this is your setup but in the 12504 07:47:15,120 --> 07:47:17,040 future this is going to be your setup 12505 07:47:17,040 --> 07:47:18,718 okay this is cool now but not in the 12506 07:47:18,718 --> 07:47:20,878 future and additionally if you go to The 12507 07:47:20,878 --> 07:47:22,558 Foundry full course f23 you go to 12508 07:47:22,558 --> 07:47:25,558 discussions and this will also be in and 12509 07:47:25,558 --> 07:47:27,080 this will also be somewhere on this side 12510 07:47:27,080 --> 07:47:29,638 at some point you'll see this the EMV 12511 07:47:29,638 --> 07:47:31,160 pledge which has a whole bunch of 12512 07:47:31,160 --> 07:47:33,878 information about working withv files 12513 07:47:33,878 --> 07:47:35,520 and keeping your private key safer for 12514 07:47:35,520 --> 07:47:36,920 the rest of this course we are going to 12515 07:47:36,920 --> 07:47:39,398 be working with this syntax because it 12516 07:47:39,398 --> 07:47:41,280 is easier however I'm really hoping that 12517 07:47:41,280 --> 07:47:43,760 Foundry in the future adds this key 12518 07:47:43,760 --> 07:47:45,638 store encryption by default so that we 12519 07:47:45,638 --> 07:47:47,360 don't accidentally expose our private 12520 07:47:47,360 --> 07:47:49,840 keys and I'm not doing this to scare you 12521 07:47:49,840 --> 07:47:51,520 but I'm doing this to impress upon you 12522 07:47:51,520 --> 07:47:53,558 the importance of making sure you keep 12523 07:47:53,558 --> 07:47:55,798 that private key and that pneumonic safe 12524 07:47:55,798 --> 07:47:56,958 the other reason that we're okay to put 12525 07:47:56,958 --> 07:47:59,280 our private key in ourv file is that 12526 07:47:59,280 --> 07:48:01,240 you have already promised me that you're 12527 07:48:01,240 --> 07:48:03,478 only going to work with a development 12528 07:48:03,478 --> 07:48:04,760 private key or a private key that you're 12529 07:48:04,760 --> 07:48:06,920 not going to add any real money into so 12530 07:48:06,920 --> 07:48:09,040 if you expose it it'll be fine but you 12531 07:48:09,040 --> 07:48:10,920 still want to practice not exposing it 12532 07:48:10,920 --> 07:48:12,680 so please take some time to read this 12533 07:48:12,680 --> 07:48:14,478 and then if you do agree to everything 12534 07:48:14,478 --> 07:48:17,878 just say I will be safe as a comment on 12535 07:48:17,878 --> 07:48:19,398 this DV pledge so I'm going to read it 12536 07:48:19,398 --> 07:48:21,160 out and it's important for you to 12537 07:48:21,160 --> 07:48:22,760 understand this moving forward so it's 12538 07:48:22,760 --> 07:48:23,878 going to be a little dry here but I am 12539 07:48:23,878 --> 07:48:25,878 just going to read it I solemnly swear 12540 07:48:25,878 --> 07:48:27,398 that I will never place a private key or 12541 07:48:27,398 --> 07:48:29,760 secret phrase or pneumonic in ainv file 12542 07:48:29,760 --> 07:48:31,958 that is associated with real funds I 12543 07:48:31,958 --> 07:48:34,360 will only place private keys in ainv 12544 07:48:34,360 --> 07:48:36,558 file that have only test at eth link or 12545 07:48:36,558 --> 07:48:38,558 other cryptocurrencies when I'm testing 12546 07:48:38,558 --> 07:48:40,520 and developing I will use a different 12547 07:48:40,520 --> 07:48:42,280 wallet than the one associated with my 12548 07:48:42,280 --> 07:48:45,318 real funds I am aware that if I forget a 12549 07:48:45,318 --> 07:48:48,120 DOT get ignore and push my keyphrase to 12550 07:48:48,120 --> 07:48:50,160 GitHub even for a split second or show 12551 07:48:50,160 --> 07:48:52,360 my keyphrase to the internet for a split 12552 07:48:52,360 --> 07:48:54,558 second it should be considered 12553 07:48:54,558 --> 07:48:56,200 compromised and I should move all my 12554 07:48:56,200 --> 07:48:57,638 funds immediately this is a really 12555 07:48:57,638 --> 07:49:00,000 important line even if you show your 12556 07:49:00,000 --> 07:49:01,798 private key to anywhere on the internet 12557 07:49:01,798 --> 07:49:03,798 for even a split second it is considered 12558 07:49:03,798 --> 07:49:05,718 compromised and you should move all your 12559 07:49:05,718 --> 07:49:08,000 funds immediately if I unsure if my 12560 07:49:08,000 --> 07:49:09,440 account has real funds in it I will 12561 07:49:09,440 --> 07:49:11,360 assume it has real funds in it if I 12562 07:49:11,360 --> 07:49:12,760 assume it has real funds in it I will 12563 07:49:12,760 --> 07:49:14,558 not use it for developing purposes I 12564 07:49:14,558 --> 07:49:18,240 aware that even in my metamask if I hit 12565 07:49:18,240 --> 07:49:19,958 create account or add account on my 12566 07:49:19,958 --> 07:49:21,958 metamask or other eth wallet I will get 12567 07:49:21,958 --> 07:49:24,240 a new private key but it will share the 12568 07:49:24,240 --> 07:49:26,440 same secret phrase slne monic of the 12569 07:49:26,440 --> 07:49:27,638 other accounts generated in that 12570 07:49:27,638 --> 07:49:29,760 metamask these are some additions that I 12571 07:49:29,760 --> 07:49:31,360 made from the last course for this 12572 07:49:31,360 --> 07:49:33,478 course I will only use funds associated 12573 07:49:33,478 --> 07:49:35,600 with my brand new neverbe used metamask 12574 07:49:35,600 --> 07:49:37,920 or other wallet and again most browsers 12575 07:49:37,920 --> 07:49:39,920 you can choose a different profile and 12576 07:49:39,920 --> 07:49:41,318 install a metamask on a different 12577 07:49:41,318 --> 07:49:43,240 profile and use that metamask for this 12578 07:49:43,240 --> 07:49:45,398 development purpose if I must use a 12579 07:49:45,398 --> 07:49:46,558 private key associated with real funds 12580 07:49:46,558 --> 07:49:48,760 in the future until I'm 100% sure what I 12581 07:49:48,760 --> 07:49:51,200 am doing I will always either use 12582 07:49:51,200 --> 07:49:53,398 encryption methods like the DAP tools 12583 07:49:53,398 --> 07:49:55,280 keystore file I'm not going to show you 12584 07:49:55,280 --> 07:49:57,080 how to work with this because some of 12585 07:49:57,080 --> 07:49:58,160 the installs might be a little bit 12586 07:49:58,160 --> 07:49:59,958 tricky but they have a way to actually 12587 07:49:59,958 --> 07:50:02,920 import and encrypt private keys to a key 12588 07:50:02,920 --> 07:50:05,080 store file use the foundaries built in 12589 07:50:05,080 --> 07:50:06,440 key store Creator which is an 12590 07:50:06,440 --> 07:50:08,958 implemented yet anybody here who is a 12591 07:50:08,958 --> 07:50:10,718 rust developer or knows some rust or 12592 07:50:10,718 --> 07:50:12,280 wants to participate definitely be sure 12593 07:50:12,280 --> 07:50:13,840 to check out this issue which is on 12594 07:50:13,840 --> 07:50:15,680 Foundry and I would love somebody to 12595 07:50:15,680 --> 07:50:18,718 take a crack at this or if you must use 12596 07:50:18,718 --> 07:50:20,558 the command line as a way to pass your 12597 07:50:20,558 --> 07:50:22,520 private keys and then delete the command 12598 07:50:22,520 --> 07:50:25,920 line history immediately afterwards if I 12599 07:50:25,920 --> 07:50:27,558 never actually deploy anything to main 12600 07:50:27,558 --> 07:50:29,160 out myself or work with the private key 12601 07:50:29,160 --> 07:50:31,440 with real funds I do not need to be 12602 07:50:31,440 --> 07:50:33,398 concerned for any of you who are getting 12603 07:50:33,398 --> 07:50:34,798 a little bit nervous about this just 12604 07:50:34,798 --> 07:50:37,040 remember if you don't work with any real 12605 07:50:37,040 --> 07:50:39,000 money you don't have to worry about this 12606 07:50:39,000 --> 07:50:41,160 okay so a lot of you people who are who 12607 07:50:41,160 --> 07:50:43,040 are newer here who are going to be going 12608 07:50:43,040 --> 07:50:44,600 through this course we're not going to 12609 07:50:44,600 --> 07:50:47,280 use any real funds so you won't have to 12610 07:50:47,280 --> 07:50:48,478 be worried about this for those of you 12611 07:50:48,478 --> 07:50:50,398 who are doing the extra credit which is 12612 07:50:50,398 --> 07:50:52,478 with real funds you will need to keep 12613 07:50:52,478 --> 07:50:54,080 this some mind moving forward and I 12614 07:50:54,080 --> 07:50:56,120 would try to load your real metamask 12615 07:50:56,120 --> 07:50:58,120 with real money with small amounts so 12616 07:50:58,120 --> 07:51:00,000 that if it all gets stolen you won't 12617 07:51:00,000 --> 07:51:02,920 lose sleep at night okay great and I'm 12618 07:51:02,920 --> 07:51:05,478 telling you all this to arm you with 12619 07:51:05,478 --> 07:51:06,840 this knowledge that you can be more 12620 07:51:06,840 --> 07:51:08,920 secure moving forward take a look at 12621 07:51:08,920 --> 07:51:10,840 this read this internalize it and if you 12622 07:51:10,840 --> 07:51:12,478 want to copy paste this on Twitter in a 12623 07:51:12,478 --> 07:51:14,318 huge tweet thread shout this from the 12624 07:51:14,318 --> 07:51:16,040 rooftops put this in an article make a 12625 07:51:16,040 --> 07:51:18,520 tick tock with this Dov pledge have an 12626 07:51:18,520 --> 07:51:20,638 absolute blast the more people who know 12627 07:51:20,638 --> 07:51:22,040 about this and the more people who 12628 07:51:22,040 --> 07:51:24,160 understand this the better thank you for 12629 07:51:24,160 --> 07:51:26,318 coming to my TED Talk all right so I 12630 07:51:26,318 --> 07:51:27,638 know that was a lot of private key 12631 07:51:27,638 --> 07:51:29,280 information and there's going to be more 12632 07:51:29,280 --> 07:51:31,478 soon too so but the reason I'm harping 12633 07:51:31,478 --> 07:51:33,558 on this is because I really really 12634 07:51:33,558 --> 07:51:34,878 really really really want to make sure 12635 07:51:34,878 --> 07:51:37,558 that all of you don't actually mess this 12636 07:51:37,558 --> 07:51:39,478 up since you are the developers you are 12637 07:51:39,478 --> 07:51:40,718 going to be the ones responsible for 12638 07:51:40,718 --> 07:51:41,958 dealing with all this and I want to make 12639 07:51:41,958 --> 07:51:44,760 sure that you get it 12640 07:51:45,920 --> 07:51:48,920 right one final option that we can do as 12641 07:51:48,920 --> 07:51:51,878 well which again saves us from having to 12642 07:51:51,878 --> 07:51:53,760 have our private key and plain text is 12643 07:51:53,760 --> 07:51:55,600 going to be using something like third 12644 07:51:55,600 --> 07:51:57,718 web deploy so we actually have Kira from 12645 07:51:57,718 --> 07:52:00,080 the third web team team to explain third 12646 07:52:00,080 --> 07:52:02,280 web deploy now she is going to use the 12647 07:52:02,280 --> 07:52:05,478 MPX command which comes with nodejs and 12648 07:52:05,478 --> 07:52:07,760 mpm installation which we haven't gone 12649 07:52:07,760 --> 07:52:09,798 over in this course but we will leave 12650 07:52:09,798 --> 07:52:12,000 some links in the GitHub repo associated 12651 07:52:12,000 --> 07:52:13,680 with this course to download that if 12652 07:52:13,680 --> 07:52:15,958 you're interested so take it away Kira 12653 07:52:15,958 --> 07:52:17,798 in this video we're going to learn how 12654 07:52:17,798 --> 07:52:21,638 to easily deploy any contract to any evm 12655 07:52:21,638 --> 07:52:24,638 chain using one simple command this 12656 07:52:24,638 --> 07:52:27,760 command requires no setup hardcoded 12657 07:52:27,760 --> 07:52:30,878 private keys RPC URLs or scripting 12658 07:52:30,878 --> 07:52:33,280 required third web handles all of the 12659 07:52:33,280 --> 07:52:35,280 complexities for you because there's no 12660 07:52:35,280 --> 07:52:38,280 need to export your private key this is 12661 07:52:38,280 --> 07:52:40,840 much more secure the deployment is done 12662 07:52:40,840 --> 07:52:43,718 through the dashboard UI using your own 12663 07:52:43,718 --> 07:52:47,160 wallet so with that said let's jump into 12664 07:52:47,160 --> 07:52:50,398 deploying our contracts so let's say we 12665 07:52:50,398 --> 07:52:53,558 have cloned this repo or written our own 12666 07:52:53,558 --> 07:52:55,200 contract this can obviously be any 12667 07:52:55,200 --> 07:52:57,280 contract at all but I have gone ahead 12668 07:52:57,280 --> 07:53:00,160 and cloned this simple storage contracts 12669 07:53:00,160 --> 07:53:02,440 just to demonstrate how we can deploy 12670 07:53:02,440 --> 07:53:04,080 our contract as you can see in the 12671 07:53:04,080 --> 07:53:06,120 sidebar um so yes I've opened this up in 12672 07:53:06,120 --> 07:53:08,280 my code editor in the sidebar there is 12673 07:53:08,280 --> 07:53:11,760 nov file I haven't set up an RPC URL I 12674 07:53:11,760 --> 07:53:14,200 haven't exported my private key there is 12675 07:53:14,200 --> 07:53:16,440 no setup needed here I want to reiterate 12676 07:53:16,440 --> 07:53:18,558 this you do not need to pre-install 12677 07:53:18,558 --> 07:53:20,760 anything there are no dependencies so to 12678 07:53:20,760 --> 07:53:22,478 deploy our contract we are going to run 12679 07:53:22,478 --> 07:53:26,958 the simple command npx third web deploy 12680 07:53:26,958 --> 07:53:28,718 so what this done is detected our 12681 07:53:28,718 --> 07:53:30,840 project type which is Foundry and also 12682 07:53:30,840 --> 07:53:33,080 could be hard hat or Brownie and then it 12683 07:53:33,080 --> 07:53:35,398 has compiled our contract and then it's 12684 07:53:35,398 --> 07:53:37,360 allowing me to select which contractor 12685 07:53:37,360 --> 07:53:39,638 deploy so I'm going to select the simple 12686 07:53:39,638 --> 07:53:41,920 storage contract so this is now 12687 07:53:41,920 --> 07:53:45,280 uploading the contract metadata to ipfs 12688 07:53:45,280 --> 07:53:47,000 and it means that our contract is going 12689 07:53:47,000 --> 07:53:49,520 to be automatically verified if you 12690 07:53:49,520 --> 07:53:51,558 would like more details on how this 12691 07:53:51,558 --> 07:53:53,360 actually works then please go ahead and 12692 07:53:53,360 --> 07:53:55,680 visit the third web developer docs which 12693 07:53:55,680 --> 07:53:57,558 you can see here which is at portal. 12694 07:53:57,558 --> 07:54:00,120 third web.com SL deploy and you can read 12695 07:54:00,120 --> 07:54:02,240 all about how this works so what's 12696 07:54:02,240 --> 07:54:04,878 happened now is that a browser tab has 12697 07:54:04,878 --> 07:54:07,318 popped up in my browser um and this 12698 07:54:07,318 --> 07:54:10,160 allows me to deploy my contract from a 12699 07:54:10,160 --> 07:54:12,920 front end so if I had construct prams 12700 07:54:12,920 --> 07:54:14,958 which I do not in this case there are no 12701 07:54:14,958 --> 07:54:16,958 construct parameters um then I would be 12702 07:54:16,958 --> 07:54:18,760 able to fill these out from the front 12703 07:54:18,760 --> 07:54:20,760 end right here next what we need to do 12704 07:54:20,760 --> 07:54:22,760 is select the chain that we want to 12705 07:54:22,760 --> 07:54:25,080 deploy to as I said this can be any evm 12706 07:54:25,080 --> 07:54:28,080 network so we can select ones that are 12707 07:54:28,080 --> 07:54:31,080 pop such as bass or we could add a 12708 07:54:31,080 --> 07:54:33,120 custom network if this is not already in 12709 07:54:33,120 --> 07:54:35,680 the list but I'm going to select Mumbai 12710 07:54:35,680 --> 07:54:37,200 when I click deploy now this is going to 12711 07:54:37,200 --> 07:54:39,440 trigger two transactions the first one 12712 07:54:39,440 --> 07:54:41,280 is going to be the transaction to deploy 12713 07:54:41,280 --> 07:54:43,120 my contract the second one is going to 12714 07:54:43,120 --> 07:54:45,120 be a message which I will sign and this 12715 07:54:45,120 --> 07:54:47,080 is a gasless step and this just adds 12716 07:54:47,080 --> 07:54:49,718 your contract to your dashboard so that 12717 07:54:49,718 --> 07:54:51,558 you have a user interface in which to 12718 07:54:51,558 --> 07:54:53,478 interact with this contract a little bit 12719 07:54:53,478 --> 07:54:54,478 like 12720 07:54:54,478 --> 07:54:56,958 remix so I'm going to click this button 12721 07:54:56,958 --> 07:54:57,920 I'm just going to sign these two 12722 07:54:57,920 --> 07:55:02,200 transaction Cs and then I will be right 12723 07:55:05,120 --> 07:55:07,878 back as you can see our contract has now 12724 07:55:07,878 --> 07:55:10,360 been successfully deployed how easy was 12725 07:55:10,360 --> 07:55:13,318 that awesome so you can see the contract 12726 07:55:13,318 --> 07:55:15,040 address here which we can copy if we 12727 07:55:15,040 --> 07:55:16,760 needed to use that later I'm just going 12728 07:55:16,760 --> 07:55:18,520 to give you a very quick overview of the 12729 07:55:18,520 --> 07:55:20,958 dashboard so there's this build tab here 12730 07:55:20,958 --> 07:55:23,200 which just enables you to build your 12731 07:55:23,200 --> 07:55:25,080 contract into a front end with easy to 12732 07:55:25,080 --> 07:55:27,240 use hooks for different languages uh 12733 07:55:27,240 --> 07:55:28,318 Hooks and functions for different 12734 07:55:28,318 --> 07:55:30,958 languages uh the Explorer tab allows you 12735 07:55:30,958 --> 07:55:33,040 to see all the read and write functions 12736 07:55:33,040 --> 07:55:34,680 on your contract so you could add a 12737 07:55:34,680 --> 07:55:37,318 person and then input the parameters 12738 07:55:37,318 --> 07:55:40,680 here you can store list the people name 12739 07:55:40,680 --> 07:55:42,878 to favorite number and retrieve all of 12740 07:55:42,878 --> 07:55:44,478 the functions that we wrote in the 12741 07:55:44,478 --> 07:55:46,680 contract you can see and interact with 12742 07:55:46,680 --> 07:55:48,520 here you can see the events on the 12743 07:55:48,520 --> 07:55:51,398 contract and the source code as you can 12744 07:55:51,398 --> 07:55:54,958 see this was a super simple easy and 12745 07:55:54,958 --> 07:55:57,718 safe way to deploy your contracts using 12746 07:55:57,718 --> 07:56:00,600 third web third web is the fastest way 12747 07:56:00,600 --> 07:56:04,160 to build web 3 apps we can have sdks in 12748 07:56:04,160 --> 07:56:06,520 multiple languages we have pre-built 12749 07:56:06,520 --> 07:56:09,520 contracts we have a solidity SDK and 12750 07:56:09,520 --> 07:56:12,040 infrastructure for your web3 development 12751 07:56:12,040 --> 07:56:14,000 needs for more information please head 12752 07:56:14,000 --> 07:56:16,080 to third web.com or visit our 12753 07:56:16,080 --> 07:56:17,878 documentation and if you have any 12754 07:56:17,878 --> 07:56:22,318 questions please head to our Discord 12755 07:56:42,558 --> 07:56:44,760 in any case let's go ahead and let's 12756 07:56:44,760 --> 07:56:46,160 learn how to interact with these 12757 07:56:46,160 --> 07:56:48,398 contracts from the command line first 12758 07:56:48,398 --> 07:56:49,798 and in later courses we'll learn how to 12759 07:56:49,798 --> 07:56:53,160 do it from scripts so we have our Anvil 12760 07:56:53,160 --> 07:56:55,440 running and we've deployed our contract 12761 07:56:55,440 --> 07:56:57,680 using our deploy using at least 12762 07:56:57,680 --> 07:56:59,440 something marginally better using 12763 07:56:59,440 --> 07:57:01,240 private key as an environment variable 12764 07:57:01,240 --> 07:57:02,798 as opposed to just pasting it right in 12765 07:57:02,798 --> 07:57:04,520 here so what we can do now is we can 12766 07:57:04,520 --> 07:57:05,878 take this contract address and we can 12767 07:57:05,878 --> 07:57:07,958 actually start to interact with it 12768 07:57:07,958 --> 07:57:11,360 Foundry has another tool built in called 12769 07:57:11,360 --> 07:57:14,160 cast and if you type cast d-el you'll 12770 07:57:14,160 --> 07:57:16,000 see we get a whole bunch of commands to 12771 07:57:16,000 --> 07:57:17,878 work with cast one of the commands that 12772 07:57:17,878 --> 07:57:20,718 we can work with is going to be send 12773 07:57:20,718 --> 07:57:22,760 which is to sign and publish a 12774 07:57:22,760 --> 07:57:24,878 transaction so what we can do is we can 12775 07:57:24,878 --> 07:57:28,798 do cast send d-el we can see the help of 12776 07:57:28,798 --> 07:57:30,718 send and we can see the arguments it 12777 07:57:30,718 --> 07:57:34,160 takes is going to be two the signature 12778 07:57:34,160 --> 07:57:37,840 and the arguments so on remix for 12779 07:57:37,840 --> 07:57:39,760 example we have our simple storage 12780 07:57:39,760 --> 07:57:41,760 contract and we deployed it if we wanted 12781 07:57:41,760 --> 07:57:44,600 to call our store function in send the 12782 07:57:44,600 --> 07:57:46,318 transaction we would just add some 12783 07:57:46,318 --> 07:57:47,958 numbers in here and then click store 12784 07:57:47,958 --> 07:57:50,558 like this right if we want to call store 12785 07:57:50,558 --> 07:57:53,600 from the command line we can do cast 12786 07:57:53,600 --> 07:57:57,200 send the address we want to do the 12787 07:57:57,200 --> 07:57:59,160 signature which which for now just know 12788 07:57:59,160 --> 07:58:01,718 is the is the function and the input 12789 07:58:01,718 --> 07:58:05,520 types it needs so we could call store 12790 07:58:05,520 --> 07:58:08,600 with a parthy u 256 because we're 12791 07:58:08,600 --> 07:58:10,478 calling the function store which takes a 12792 07:58:10,478 --> 07:58:13,958 un 256 as input parameter and then the 12793 07:58:13,958 --> 07:58:15,878 arguments or the values we want to pass 12794 07:58:15,878 --> 07:58:17,840 to our store function and we'll go ahead 12795 07:58:17,840 --> 07:58:19,840 and hit enter of course this fails 12796 07:58:19,840 --> 07:58:21,760 because we need to add our private key 12797 07:58:21,760 --> 07:58:24,920 and RPC URL so we'll hit up we'll do RPC 12798 07:58:24,920 --> 07:58:28,520 URL we'll do dollar sign RPC URL and 12799 07:58:28,520 --> 07:58:31,200 then we'll do-- private key and then 12800 07:58:31,200 --> 07:58:34,280 private key like that and now you'll see 12801 07:58:34,280 --> 07:58:36,798 we'll get all of this data about our 12802 07:58:36,798 --> 07:58:39,600 transaction back we get the block hash 12803 07:58:39,600 --> 07:58:41,558 block number contract address is blank 12804 07:58:41,558 --> 07:58:43,520 probably because it's a local chain logs 12805 07:58:43,520 --> 07:58:44,718 we can learn we'll learn about logs 12806 07:58:44,718 --> 07:58:47,520 later the transaction hash Etc now in 12807 07:58:47,520 --> 07:58:49,478 order to read this we're going to use 12808 07:58:49,478 --> 07:58:52,478 cast call which is going to read off the 12809 07:58:52,478 --> 07:58:55,958 blockchain and if we do cast call d-el 12810 07:58:55,958 --> 07:58:58,120 and we scroll up a little bit we'll see 12811 07:58:58,120 --> 07:59:00,718 call takes two signature and arguments 12812 07:59:00,718 --> 07:59:03,200 exact same as send but the difference is 12813 07:59:03,200 --> 07:59:04,958 it's like call is like doing one of 12814 07:59:04,958 --> 07:59:07,120 these blue buttons it's calling as 12815 07:59:07,120 --> 07:59:09,638 opposed to sending a transaction it's 12816 07:59:09,638 --> 07:59:11,360 just doing a view function not actually 12817 07:59:11,360 --> 07:59:14,280 sending a transaction so we'll do cast 12818 07:59:14,280 --> 07:59:17,080 call we'll paste the contract address 12819 07:59:17,080 --> 07:59:24,558 we'll call retrieve r t r i v r e t r IE 12820 07:59:24,558 --> 07:59:27,000 V did I spell retrieve wrong I don't 12821 07:59:27,000 --> 07:59:28,680 know I guess we'll find out no input 12822 07:59:28,680 --> 07:59:30,360 parameters here and no arguments so we 12823 07:59:30,360 --> 07:59:32,558 can just hit enter and we'll see we get 12824 07:59:32,558 --> 07:59:35,840 the hex value back this is where I said 12825 07:59:35,840 --> 07:59:37,520 you're going to be converting stuff from 12826 07:59:37,520 --> 07:59:40,200 hex back and forth a lot then we do cast 12827 07:59:40,200 --> 07:59:44,680 d-2 base paste the hex and say decimal 12828 07:59:44,680 --> 07:59:46,440 and we can see we get back 1 2 three 12829 07:59:46,440 --> 07:59:47,958 which is exactly what we've stored on 12830 07:59:47,958 --> 07:59:50,318 chain so if we hit up a couple times 12831 07:59:50,318 --> 07:59:53,080 back to our cast send transaction our 12832 07:59:53,080 --> 07:59:56,080 cast send command and we change 1 2 3 to 12833 07:59:56,080 --> 07:59:59,000 777 we hit enter we'll send that 12834 07:59:59,000 --> 08:00:01,760 transaction now if we hit up three time 12835 08:00:01,760 --> 08:00:03,840 two or three times we'll call cast call 12836 08:00:03,840 --> 08:00:05,600 retrieve now and we should see the new 12837 08:00:05,600 --> 08:00:08,040 number which we get back as a hex and 12838 08:00:08,040 --> 08:00:11,478 then we'll do cast d-2 base paste it in 12839 08:00:11,478 --> 08:00:15,120 deck and we do indeed see 777 returned 12840 08:00:15,120 --> 08:00:17,080 to us awesome so now we know how to 12841 08:00:17,080 --> 08:00:19,360 actually interact with our contracts 12842 08:00:19,360 --> 08:00:21,000 from the command line and this is going 12843 08:00:21,000 --> 08:00:22,240 to be the same way we can actually 12844 08:00:22,240 --> 08:00:23,958 interact with our contracts on an actual 12845 08:00:23,958 --> 08:00:28,760 test net or on an actual main net 12846 08:00:30,000 --> 08:00:32,000 all right so now you might be asking 12847 08:00:32,000 --> 08:00:33,718 okay Patrick what does this look like on 12848 08:00:33,718 --> 08:00:37,798 a test net or a live Network so let's go 12849 08:00:37,798 --> 08:00:40,798 ahead let's go to ourv file and let's 12850 08:00:40,798 --> 08:00:44,840 update this so that it's aemv file for 12851 08:00:44,840 --> 08:00:46,958 an actual test net so the first thing is 12852 08:00:46,958 --> 08:00:49,398 we're going to need an RPC URL for an 12853 08:00:49,398 --> 08:00:51,760 actual test net for an actual Network 12854 08:00:51,760 --> 08:00:54,000 and this is where in our metamasks 12855 08:00:54,000 --> 08:00:56,360 actually have inferior connections built 12856 08:00:56,360 --> 08:00:59,120 in remember before we went to our 12857 08:00:59,120 --> 08:01:04,398 settings networks eum main net we saw oh 12858 08:01:04,398 --> 08:01:06,478 we saw we have this inferior connection 12859 08:01:06,478 --> 08:01:08,000 we can't use this one because this one's 12860 08:01:08,000 --> 08:01:10,000 designed specifically for our metamask 12861 08:01:10,000 --> 08:01:11,440 so we're going to have to get our own 12862 08:01:11,440 --> 08:01:14,080 RPC URL for an actual test net well one 12863 08:01:14,080 --> 08:01:15,240 of the things we could do is we could 12864 08:01:15,240 --> 08:01:17,160 run our own blockchain node but a lot of 12865 08:01:17,160 --> 08:01:18,840 people don't want to do that so what a 12866 08:01:18,840 --> 08:01:20,318 lot of people do is use something called 12867 08:01:20,318 --> 08:01:22,760 a node as a service to do this what I'm 12868 08:01:22,760 --> 08:01:24,240 going to recommend you do is actually 12869 08:01:24,240 --> 08:01:26,478 come over to The Foundry full course 12870 08:01:26,478 --> 08:01:29,040 repo scroll down down and there's going 12871 08:01:29,040 --> 08:01:30,558 to be a section called deploying to a 12872 08:01:30,558 --> 08:01:32,718 test net or a main net if we click this 12873 08:01:32,718 --> 08:01:34,638 link we'll actually go ahead and we'll 12874 08:01:34,638 --> 08:01:37,280 get sent to the Alchemy platform where 12875 08:01:37,280 --> 08:01:40,200 we're going to sign up for a free notice 12876 08:01:40,200 --> 08:01:41,520 of service that we can actually send 12877 08:01:41,520 --> 08:01:42,920 transactions to and we're going to go 12878 08:01:42,920 --> 08:01:45,200 ahead and sign up for their platform you 12879 08:01:45,200 --> 08:01:46,958 can sign up with Google sign up with SSO 12880 08:01:46,958 --> 08:01:48,558 whatever you want to do I'm going to go 12881 08:01:48,558 --> 08:01:50,600 ahead sign in with Google I'm indeed 12882 08:01:50,600 --> 08:01:52,440 human we're going to come to their user 12883 08:01:52,440 --> 08:01:54,318 interface that looks something like this 12884 08:01:54,318 --> 08:01:55,920 we're going to deploy this to sepolia 12885 08:01:55,920 --> 08:01:57,558 but remember go to the recommended test 12886 08:01:57,558 --> 08:01:59,840 n section of this course so what we're 12887 08:01:59,840 --> 08:02:01,398 going to do now that we're in here is 12888 08:02:01,398 --> 08:02:03,160 we're going to go ahead and create a new 12889 08:02:03,160 --> 08:02:05,478 app and you can name it whatever you 12890 08:02:05,478 --> 08:02:08,680 want I'm going to call it tooa testing 12891 08:02:08,680 --> 08:02:09,958 I'm just going to copy this for a 12892 08:02:09,958 --> 08:02:12,000 description this is on the ethereum 12893 08:02:12,000 --> 08:02:15,478 Chain but on ethereum spolia we're not 12894 08:02:15,478 --> 08:02:17,520 going to do any advanced features we'll 12895 08:02:17,520 --> 08:02:20,240 go ahead to create app and now we have 12896 08:02:20,240 --> 08:02:23,360 this ethereum seoa app where we can view 12897 08:02:23,360 --> 08:02:25,840 details we can see how often we're 12898 08:02:25,840 --> 08:02:27,120 calling this and we can see different 12899 08:02:27,120 --> 08:02:28,878 details about our notes Noe and if we 12900 08:02:28,878 --> 08:02:32,040 hit view key we see we have this https 12901 08:02:32,040 --> 08:02:33,760 endpoint and this is going to be the 12902 08:02:33,760 --> 08:02:36,000 exact same thing as that Anvil or ganach 12903 08:02:36,000 --> 08:02:38,080 or metamask endpoint that we saw and 12904 08:02:38,080 --> 08:02:39,760 we're going to go ahead and copy this 12905 08:02:39,760 --> 08:02:42,478 and back in our b v what we could do is 12906 08:02:42,478 --> 08:02:45,760 we we can create a new RPC URL called 12907 08:02:45,760 --> 08:02:50,040 sepolia RPC URL equals and we'll paste 12908 08:02:50,040 --> 08:02:52,398 that in here now we have an RPC that 12909 08:02:52,398 --> 08:02:54,280 points to an actual test St with our 12910 08:02:54,280 --> 08:02:56,520 private key we can't use this as our 12911 08:02:56,520 --> 08:02:58,240 private key because this is in Anvil 12912 08:02:58,240 --> 08:02:59,840 private key and it doesn't have any real 12913 08:02:59,840 --> 08:03:01,520 money in it and it doesn't have any 12914 08:03:01,520 --> 08:03:04,120 testet eth in it but what we can do is 12915 08:03:04,120 --> 08:03:06,520 instead we can use our one of our 12916 08:03:06,520 --> 08:03:08,958 private keys in our metamask so if we 12917 08:03:08,958 --> 08:03:11,920 switch back to sapoia in our metamask we 12918 08:03:11,920 --> 08:03:13,200 can pick one of our accounts that 12919 08:03:13,200 --> 08:03:14,440 actually has some money in it I'm going 12920 08:03:14,440 --> 08:03:17,120 to pick account number one we'll hit the 12921 08:03:17,120 --> 08:03:20,440 three little dots Account Details export 12922 08:03:20,440 --> 08:03:22,920 private key and remember it's okay for 12923 08:03:22,920 --> 08:03:24,638 me to show the private key here because 12924 08:03:24,638 --> 08:03:26,478 this is just a dummy private key but 12925 08:03:26,478 --> 08:03:28,638 I'll add my password in and remember I'm 12926 08:03:28,638 --> 08:03:30,080 never going to actually do any real 12927 08:03:30,080 --> 08:03:33,958 money with this and I'll copy this done 12928 08:03:33,958 --> 08:03:37,280 and paste this in here and maybe I'll 12929 08:03:37,280 --> 08:03:40,000 maybe I'll comment this line out inmv 12930 08:03:40,000 --> 08:03:43,040 file this hashtag or this pound sign is 12931 08:03:43,040 --> 08:03:44,920 what the comment is but maybe we'll do a 12932 08:03:44,920 --> 08:03:47,120 new private key equals and I'll paste 12933 08:03:47,120 --> 08:03:48,958 this in here and now I have the private 12934 08:03:48,958 --> 08:03:51,840 key for metamask I have the RPC RL and 12935 08:03:51,840 --> 08:03:53,520 those are all I need to actually deploy 12936 08:03:53,520 --> 08:03:56,000 a transaction so what I can do now pull 12937 08:03:56,000 --> 08:03:57,558 my terminal back up so we're going to 12938 08:03:57,558 --> 08:03:59,280 run this command to actually deploy this 12939 08:03:59,280 --> 08:04:03,200 to a real test net from our Foundry 12940 08:04:03,200 --> 08:04:06,120 using Alchemy as our node as a service 12941 08:04:06,120 --> 08:04:08,638 and you'll see in the user interface of 12942 08:04:08,638 --> 08:04:10,240 alchemy you'll see a transaction 12943 08:04:10,240 --> 08:04:11,840 actually come through our node This Is 12944 08:04:11,840 --> 08:04:15,000 Us sending a transaction to a real node 12945 08:04:15,000 --> 08:04:17,120 and we'll be able to see the stats here 12946 08:04:17,120 --> 08:04:19,440 on our Alchemy dashboard so let's go 12947 08:04:19,440 --> 08:04:21,478 ahead let's do this again so first we're 12948 08:04:21,478 --> 08:04:24,200 going to need to run source. AMV to make 12949 08:04:24,200 --> 08:04:27,958 sure all of our AMV stuff is loaded then 12950 08:04:27,958 --> 08:04:31,680 we're going to run Forge script script 12951 08:04:31,680 --> 08:04:33,878 deploy simple storage. s.o and I'm 12952 08:04:33,878 --> 08:04:36,040 hitting tab to autocomplete 12953 08:04:36,040 --> 08:04:41,760 here-- RPC URL sepolia RPC URL with the 12954 08:04:41,760 --> 08:04:45,760 little dollar sign D- private key dollar 12955 08:04:45,760 --> 08:04:48,080 sign private 12956 08:04:48,080 --> 08:04:51,440 key-- broadcast if you don't add the D- 12957 08:04:51,440 --> 08:04:53,680 bradc it won't actually send it it'll 12958 08:04:53,680 --> 08:04:56,558 simulate sending it now if I hit enter 12959 08:04:56,558 --> 08:04:58,638 we'll see a compile and now we're 12960 08:04:58,638 --> 08:05:01,478 running this script deploy simple 12961 08:05:01,478 --> 08:05:03,920 storage. s.o which actually deploys it 12962 08:05:03,920 --> 08:05:06,280 and we'll see we went ahead and deployed 12963 08:05:06,280 --> 08:05:08,440 our contract simple storage on the 12964 08:05:08,440 --> 08:05:10,958 sepolia Chain we see all these details 12965 08:05:10,958 --> 08:05:12,638 about it it's sending the transaction 12966 08:05:12,638 --> 08:05:16,318 right now it's storing the latest run 12967 08:05:16,318 --> 08:05:18,798 under the broadcast folder under its 12968 08:05:18,798 --> 08:05:20,920 chain ID in here in this run latest. 12969 08:05:20,920 --> 08:05:23,360 Json and after a brief delay we'll see 12970 08:05:23,360 --> 08:05:25,798 it went through and what we can do is we 12971 08:05:25,798 --> 08:05:29,798 can grab this hash go over to sea. 12972 08:05:29,798 --> 08:05:33,200 etherscan.io paste that hash in here and 12973 08:05:33,200 --> 08:05:35,840 we'll see we actually successfully sent 12974 08:05:35,840 --> 08:05:38,520 a transaction and if we click on our 12975 08:05:38,520 --> 08:05:40,920 contract address we just created we'll 12976 08:05:40,920 --> 08:05:42,920 see we actually just created this 12977 08:05:42,920 --> 08:05:45,638 contract on a real test name we go back 12978 08:05:45,638 --> 08:05:47,318 to our Alchemy dashboard and we hit 12979 08:05:47,318 --> 08:05:50,318 refresh we'll see we actually sent we 12980 08:05:50,318 --> 08:05:52,680 sent some requests we scroll down we can 12981 08:05:52,680 --> 08:05:54,080 see some of the different requests we 12982 08:05:54,080 --> 08:05:57,638 sent eth send raw transaction was the 12983 08:05:57,638 --> 08:05:59,558 request that we sent to actually send 12984 08:05:59,558 --> 08:06:02,040 our transaction to the blockchain but we 12985 08:06:02,040 --> 08:06:03,840 also got some stuff about the chain ID 12986 08:06:03,840 --> 08:06:06,558 fee history 12987 08:06:07,798 --> 08:06:10,080 Etc one thing that you'll notice though 12988 08:06:10,080 --> 08:06:11,840 when looking at this on ether scan is 12989 08:06:11,840 --> 08:06:14,798 that the contract o it's just a whole 12990 08:06:14,798 --> 08:06:16,520 bunch of bite code here right this isn't 12991 08:06:16,520 --> 08:06:19,000 very readable what we can do is we can 12992 08:06:19,000 --> 08:06:21,080 actually verify this contract and now 12993 08:06:21,080 --> 08:06:22,878 I'm going to show you the hard way first 12994 08:06:22,878 --> 08:06:24,280 and I'm going to teach you the easier 12995 08:06:24,280 --> 08:06:27,160 way later but you can manually verify a 12996 08:06:27,160 --> 08:06:28,080 contract 12997 08:06:28,080 --> 08:06:30,680 on ether scan or other block explorers 12998 08:06:30,680 --> 08:06:34,040 by selecting verify going to solidity 12999 08:06:34,040 --> 08:06:35,718 this is a single file contract so we're 13000 08:06:35,718 --> 08:06:37,398 going to do single file I know that we 13001 08:06:37,398 --> 08:06:38,558 were on 13002 08:06:38,558 --> 08:06:42,120 0.8.9 and our open source license is MIT 13003 08:06:42,120 --> 08:06:44,318 we'll hit continue we'll go back to our 13004 08:06:44,318 --> 08:06:46,958 simple storage. soul and we'll copy the 13005 08:06:46,958 --> 08:06:49,558 whole contract scroll down we'll hit 13006 08:06:49,558 --> 08:06:52,878 paste optimization is going to be yes 13007 08:06:52,878 --> 08:06:55,478 there's no Constructor args no contract 13008 08:06:55,478 --> 08:06:57,280 Library addresses no Miss settings I'm 13009 08:06:57,280 --> 08:07:00,360 not a robot and we hit verify and public 13010 08:07:00,360 --> 08:07:01,478 sometimes this can be a little bit 13011 08:07:01,478 --> 08:07:03,240 tricky to get right and we're going to 13012 08:07:03,240 --> 08:07:05,558 work with programmatic verification 13013 08:07:05,558 --> 08:07:07,638 pretty soon that makes it a lot easier 13014 08:07:07,638 --> 08:07:09,840 but if we did it correctly what'll 13015 08:07:09,840 --> 08:07:11,958 happen then is if we click on our 13016 08:07:11,958 --> 08:07:14,000 contract address here and we go to 13017 08:07:14,000 --> 08:07:15,600 contract and we scroll down we can 13018 08:07:15,600 --> 08:07:17,600 actually see our contract right in ether 13019 08:07:17,600 --> 08:07:20,878 scan this will also give access to these 13020 08:07:20,878 --> 08:07:23,920 read and right contract buttons which we 13021 08:07:23,920 --> 08:07:26,680 can see it now looks really similar to 13022 08:07:26,680 --> 08:07:28,360 what's on remix and we can actually 13023 08:07:28,360 --> 08:07:30,280 interact with our contract right from 13024 08:07:30,280 --> 08:07:32,638 etherscan or another block Explorer like 13025 08:07:32,638 --> 08:07:34,440 I said that's the manual way to verify 13026 08:07:34,440 --> 08:07:36,558 your contracts and you can run into a 13027 08:07:36,558 --> 08:07:37,958 lot of issues doing that so I don't 13028 08:07:37,958 --> 08:07:39,680 recommend doing it I recommend doing the 13029 08:07:39,680 --> 08:07:40,798 programmatic way which I'm going to 13030 08:07:40,798 --> 08:07:43,318 teach you very 13031 08:07:44,398 --> 08:07:46,920 soon all right so now we're just about 13032 08:07:46,920 --> 08:07:49,080 done with our very basic project here 13033 08:07:49,080 --> 08:07:51,080 which is fantastic we've learned a ton 13034 08:07:51,080 --> 08:07:52,760 already but there's a couple things we 13035 08:07:52,760 --> 08:07:55,120 want to keep in mind here moving forward 13036 08:07:55,120 --> 08:07:56,558 and one of those things is when it comes 13037 08:07:56,558 --> 08:07:59,440 to formatting so we are using the vs 13038 08:07:59,440 --> 08:08:01,760 code autof formatter to Auto forat our 13039 08:08:01,760 --> 08:08:04,120 code but if somebody else comes and I'm 13040 08:08:04,120 --> 08:08:05,520 going to actually save with without 13041 08:08:05,520 --> 08:08:07,040 formatting if somebody else comes to our 13042 08:08:07,040 --> 08:08:09,798 code base we're going to want to have 13043 08:08:09,798 --> 08:08:11,798 them format it the exact same way that 13044 08:08:11,798 --> 08:08:14,040 we format it so what we can do is we can 13045 08:08:14,040 --> 08:08:17,120 use the forge format command which if we 13046 08:08:17,120 --> 08:08:19,240 run it you see favorite number actually 13047 08:08:19,240 --> 08:08:20,520 went ahead and formatt it so I'm going 13048 08:08:20,520 --> 08:08:22,878 to save without formatting again run 13049 08:08:22,878 --> 08:08:24,638 Forge format and it's going to Auto 13050 08:08:24,638 --> 08:08:26,398 format our code here so this is a 13051 08:08:26,398 --> 08:08:28,120 command that will automatic format all 13052 08:08:28,120 --> 08:08:30,360 of our solidity code awesome and 13053 08:08:30,360 --> 08:08:33,240 additionally for every single repo you 13054 08:08:33,240 --> 08:08:34,920 ever work with you always want to make a 13055 08:08:34,920 --> 08:08:38,478 readme.md file so right click new file 13056 08:08:38,478 --> 08:08:41,440 readme.md I actually already made one 13057 08:08:41,440 --> 08:08:42,878 over here and this is where you're going 13058 08:08:42,878 --> 08:08:44,840 to put information about your project 13059 08:08:44,840 --> 08:08:47,080 here I put some notes about the private 13060 08:08:47,080 --> 08:08:48,600 key usage which I'm just going to delete 13061 08:08:48,600 --> 08:08:50,798 for now readme files are generally where 13062 08:08:50,798 --> 08:08:52,398 you put information about your project 13063 08:08:52,398 --> 08:08:54,718 instructions to work with it places to 13064 08:08:54,718 --> 08:08:56,718 contact you really any information that 13065 08:08:56,718 --> 08:08:58,558 another open ource developer should know 13066 08:08:58,558 --> 08:08:59,718 when they want to interact with your 13067 08:08:59,718 --> 08:09:01,360 project because we are going to push 13068 08:09:01,360 --> 08:09:03,200 this up to GitHub as well we're not 13069 08:09:03,200 --> 08:09:04,718 going to push this up to our GitHub 13070 08:09:04,718 --> 08:09:06,638 because it's kind of easy but in the 13071 08:09:06,638 --> 08:09:08,040 next project we're actually going to 13072 08:09:08,040 --> 08:09:09,760 push the code up to GitHub and I'm going 13073 08:09:09,760 --> 08:09:11,760 to teach you how to do that readme.md 13074 08:09:11,760 --> 08:09:14,600 are this markdown syntax remember how we 13075 08:09:14,600 --> 08:09:16,160 were talking about answering questions 13076 08:09:16,160 --> 08:09:18,280 or asking questions using markdown 13077 08:09:18,280 --> 08:09:19,840 syntax well this is going to be the 13078 08:09:19,840 --> 08:09:23,240 exact same if I do a hashtag or pound 13079 08:09:23,240 --> 08:09:25,160 sign like this and I say hello and then 13080 08:09:25,160 --> 08:09:27,440 some text down here and if I hit save 13081 08:09:27,440 --> 08:09:29,160 what I can do is I can actually preview 13082 08:09:29,160 --> 08:09:31,760 this markdown so in my extensions over 13083 08:09:31,760 --> 08:09:34,080 here we're going to look for a markdown 13084 08:09:34,080 --> 08:09:35,958 extension actually already have one 13085 08:09:35,958 --> 08:09:39,280 markdown allinone or markdown preview or 13086 08:09:39,280 --> 08:09:41,160 whatever you want to install and we can 13087 08:09:41,160 --> 08:09:43,478 do open up our Command pet with command 13088 08:09:43,478 --> 08:09:47,160 shift p or view command pallet we can do 13089 08:09:47,160 --> 08:09:50,478 markdown preview open preview like this 13090 08:09:50,478 --> 08:09:52,120 and we can see what this looks like as 13091 08:09:52,120 --> 08:09:54,600 if it was on a GitHub repo we can see 13092 08:09:54,600 --> 08:09:57,000 Hello is Big we can see our text down 13093 08:09:57,000 --> 08:09:59,398 here is small and if I were to do like 13094 08:09:59,398 --> 08:10:01,718 some back Texs like this I can say like 13095 08:10:01,718 --> 08:10:04,398 code here save that look at our preview 13096 08:10:04,398 --> 08:10:05,958 again we can see this is formatted now 13097 08:10:05,958 --> 08:10:09,360 as code you can also do command shift V 13098 08:10:09,360 --> 08:10:11,080 to automatically go to preview mode or 13099 08:10:11,080 --> 08:10:13,840 it might be control shift V for Windows 13100 08:10:13,840 --> 08:10:15,398 and Linux users there's a lot of 13101 08:10:15,398 --> 08:10:17,040 different ways to go preview your 13102 08:10:17,040 --> 08:10:20,120 markdown and remember if formatting your 13103 08:10:20,120 --> 08:10:22,878 your readme is difficult usually AIS do 13104 08:10:22,878 --> 08:10:24,558 a pretty good job at formatting your 13105 08:10:24,558 --> 08:10:26,160 markdown for you if you just ask them 13106 08:10:26,160 --> 08:10:29,160 politely 13107 08:10:30,318 --> 08:10:32,200 now Alchemy has a couple of other really 13108 08:10:32,200 --> 08:10:34,120 cool features about it especially when 13109 08:10:34,120 --> 08:10:35,798 it comes to learning more about what's 13110 08:10:35,798 --> 08:10:37,760 actually happening with our transactions 13111 08:10:37,760 --> 08:10:39,718 whenever we send a transaction to a 13112 08:10:39,718 --> 08:10:41,638 blockchain node it actually enters 13113 08:10:41,638 --> 08:10:43,798 something called the M Pool it's 13114 08:10:43,798 --> 08:10:45,398 basically the place where transactions 13115 08:10:45,398 --> 08:10:47,878 go before they get actually sent and the 13116 08:10:47,878 --> 08:10:49,600 Alchemy dashboard is a great place to 13117 08:10:49,600 --> 08:10:52,280 actually view those transactions and see 13118 08:10:52,280 --> 08:10:53,878 their status so I'm going to go ahead 13119 08:10:53,878 --> 08:10:56,040 and turn it over to veto from the 13120 08:10:56,040 --> 08:10:57,680 Alchemy team who's going to expl explain 13121 08:10:57,680 --> 08:10:59,840 more about what Alchemy has to offer 13122 08:10:59,840 --> 08:11:01,558 some of the other cool parts of alchemy 13123 08:11:01,558 --> 08:11:08,920 and more ZK Stark ZK Nar Z proof z Oh W 13124 08:11:08,920 --> 08:11:11,200 oh I'm I'm sorry I'm Jam Jam everyone 13125 08:11:11,200 --> 08:11:13,120 and welcome this brand new video I'm V 13126 08:11:13,120 --> 08:11:15,360 and today I'm going to walk 13127 08:11:15,360 --> 08:11:17,478 to this is not my 13128 08:11:17,478 --> 08:11:21,558 channel this is not even AR's Channel 13129 08:11:21,558 --> 08:11:23,920 what oh my God this is the latest 13130 08:11:23,920 --> 08:11:25,840 Patrick Collins video about Foundry that 13131 08:11:25,840 --> 08:11:27,958 everyone must watch oh well well welcome 13132 08:11:27,958 --> 08:11:31,200 everyone I am VTO and thank you Patrick 13133 08:11:31,200 --> 08:11:33,240 for hosting this comeu I guess my job 13134 08:11:33,240 --> 08:11:35,200 today is to tell you a bit more about 13135 08:11:35,200 --> 08:11:38,000 what Alchemy is what we do how we do it 13136 08:11:38,000 --> 08:11:39,958 and how you can get the most out of it 13137 08:11:39,958 --> 08:11:42,120 well before getting started let me 13138 08:11:42,120 --> 08:11:45,120 quickly quickly introduce myself I am 13139 08:11:45,120 --> 08:11:47,718 BTO lead developer experience at Alchemy 13140 08:11:47,718 --> 08:11:49,760 blog hand developer and web free content 13141 08:11:49,760 --> 08:11:51,878 creator on a mission to aboard 1 million 13142 08:11:51,878 --> 08:11:54,558 developers onto web free of course today 13143 08:11:54,558 --> 08:11:56,520 we're not here to talk about me but we 13144 08:11:56,520 --> 08:11:58,398 here to talk about how Alchemy can app 13145 08:11:58,398 --> 08:12:00,638 your decentralized applications scale to 13146 08:12:00,638 --> 08:12:04,520 billions of users so to get started what 13147 08:12:04,520 --> 08:12:07,558 is alchemy well Alchemy is a node 13148 08:12:07,558 --> 08:12:09,600 provider and web free developer tooling 13149 08:12:09,600 --> 08:12:11,920 platform powering hundreds of thousands 13150 08:12:11,920 --> 08:12:14,520 of web three and web to Applications out 13151 08:12:14,520 --> 08:12:17,760 there things like openc Nifty Gateway 13152 08:12:17,760 --> 08:12:21,520 but also zerox Argent Dapper but as well 13153 08:12:21,520 --> 08:12:24,760 as big massive web to companies such as 13154 08:12:24,760 --> 08:12:27,760 Adobe Shopify and stripe the question 13155 08:12:27,760 --> 08:12:29,680 here probably is why do these companies 13156 08:12:29,680 --> 08:12:33,000 use us why Alchemy well that's the 13157 08:12:33,000 --> 08:12:36,160 question we try to answer here briefly 13158 08:12:36,160 --> 08:12:38,958 the thing is when you need to develop an 13159 08:12:38,958 --> 08:12:40,958 application chances are you won't run 13160 08:12:40,958 --> 08:12:43,000 the servers you'll code your code will 13161 08:12:43,000 --> 08:12:46,080 run on and most likely you won't even 13162 08:12:46,080 --> 08:12:48,318 develop the deployment and integration 13163 08:12:48,318 --> 08:12:50,760 pipelines for it to do this you will use 13164 08:12:50,760 --> 08:12:54,520 services such as AWS Azure Google Cloud 13165 08:12:54,520 --> 08:12:57,200 well Alchemy does exactly this but for 13166 08:12:57,200 --> 08:13:00,520 web free you can see it as the AWS of 13167 08:13:00,520 --> 08:13:04,398 web free with apis sdks libraries that 13168 08:13:04,398 --> 08:13:05,920 will simply make your developer 13169 08:13:05,920 --> 08:13:08,798 experience better but how do we do that 13170 08:13:08,798 --> 08:13:11,040 well we do it in mainly three ways the 13171 08:13:11,040 --> 08:13:14,120 first one is the super node a blockchain 13172 08:13:14,120 --> 08:13:16,798 propriatary engene that acts as a load 13173 08:13:16,798 --> 08:13:18,680 balancer on top of your node and make 13174 08:13:18,680 --> 08:13:20,840 sure you always got the latest available 13175 08:13:20,840 --> 08:13:23,318 data from the blockchain on top of the 13176 08:13:23,318 --> 08:13:25,680 super node we built the announced apis 13177 08:13:25,680 --> 08:13:28,000 the announced apis are set of apis that 13178 08:13:28,000 --> 08:13:29,558 will allow you to pull data from the 13179 08:13:29,558 --> 08:13:32,120 blockchain with ease here you can see 13180 08:13:32,120 --> 08:13:34,000 how we envision this with the Alchemy 13181 08:13:34,000 --> 08:13:35,878 supernode at the center as the core 13182 08:13:35,878 --> 08:13:38,318 infrastructure powering its ecosystem 13183 08:13:38,318 --> 08:13:40,760 all around such as our announced apis 13184 08:13:40,760 --> 08:13:42,680 but also our monitoring tools and of 13185 08:13:42,680 --> 08:13:44,798 course supporting all the chains that we 13186 08:13:44,798 --> 08:13:47,360 support to date and we'll get back to it 13187 08:13:47,360 --> 08:13:49,798 in a few seconds but the question is of 13188 08:13:49,798 --> 08:13:51,958 course how do you get started well the 13189 08:13:51,958 --> 08:13:53,478 first thing that we're going to do is 13190 08:13:53,478 --> 08:13:56,040 navigate in on alchemy.com and we're 13191 08:13:56,040 --> 08:13:57,840 going to create a new account creating 13192 08:13:57,840 --> 08:14:00,160 an account on alchemy.com is completely 13193 08:14:00,160 --> 08:14:02,558 free and actually cool thing is that 13194 08:14:02,558 --> 08:14:04,398 you'll be able to scale your application 13195 08:14:04,398 --> 08:14:06,398 using our Premium plan because it's 13196 08:14:06,398 --> 08:14:09,200 quite generous so don't be concerned 13197 08:14:09,200 --> 08:14:11,120 about paying anything everything you'll 13198 08:14:11,120 --> 08:14:13,120 see today and probably in Patrick's 13199 08:14:13,120 --> 08:14:16,200 course is completely free to use let's 13200 08:14:16,200 --> 08:14:18,240 go back creating a new account in this 13201 08:14:18,240 --> 08:14:19,958 case I would just sign in of course I 13202 08:14:19,958 --> 08:14:21,718 already have an account so I click on 13203 08:14:21,718 --> 08:14:24,478 sign in and as soon as we'll open this 13204 08:14:24,478 --> 08:14:26,240 window you will see all of your 13205 08:14:26,240 --> 08:14:28,440 applications of course if this is the 13206 08:14:28,440 --> 08:14:30,638 first time you loging in on Alchemy you 13207 08:14:30,638 --> 08:14:32,600 will only see the demo application but 13208 08:14:32,600 --> 08:14:33,958 no worries we're going to learn how to 13209 08:14:33,958 --> 08:14:36,638 create a new application right now super 13210 08:14:36,638 --> 08:14:39,120 important click on create app and let's 13211 08:14:39,120 --> 08:14:41,280 give it a name so we're going to call it 13212 08:14:41,280 --> 08:14:43,398 Patrick is cool and I'm going to use 13213 08:14:43,398 --> 08:14:45,160 underscores just because of personal 13214 08:14:45,160 --> 08:14:47,318 preference feel free to use spaces or 13215 08:14:47,318 --> 08:14:49,440 name your application the way you want 13216 08:14:49,440 --> 08:14:51,000 we're going to also give a description 13217 08:14:51,000 --> 08:14:53,398 this is optional you don't have to but I 13218 08:14:53,398 --> 08:14:57,520 really think that Patrick is cool and 13219 08:14:57,520 --> 08:15:00,318 then we're going to select a chain as we 13220 08:15:00,318 --> 08:15:02,478 said before we support the majority of 13221 08:15:02,478 --> 08:15:04,680 evm compatible chains as you can see 13222 08:15:04,680 --> 08:15:07,318 here we support ethereum polygon P also 13223 08:15:07,318 --> 08:15:10,958 ZK evm as well as optimism and AAR and 13224 08:15:10,958 --> 08:15:13,080 on top of that we support Solana and non 13225 08:15:13,080 --> 08:15:16,160 evm chain here you can select your chain 13226 08:15:16,160 --> 08:15:18,160 and here you can select your network in 13227 08:15:18,160 --> 08:15:20,318 this case we will go for eum mayet but 13228 08:15:20,318 --> 08:15:22,440 feel free to try out all the other 13229 08:15:22,440 --> 08:15:24,840 networks and test Nets of course we have 13230 08:15:24,840 --> 08:15:27,760 one for all of these um main net that we 13231 08:15:27,760 --> 08:15:30,878 support so I will create the new app and 13232 08:15:30,878 --> 08:15:33,160 once the app has been created I can just 13233 08:15:33,160 --> 08:15:36,200 go and search for my name so Patrick is 13234 08:15:36,200 --> 08:15:40,160 cool and click on my application here we 13235 08:15:40,160 --> 08:15:43,120 go once the application has open you 13236 08:15:43,120 --> 08:15:45,440 will be able to see the application 13237 08:15:45,440 --> 08:15:48,120 specific dashboard and this is a big 13238 08:15:48,120 --> 08:15:50,160 change big game Cher for all de 13239 08:15:50,160 --> 08:15:51,798 centralized application developers 13240 08:15:51,798 --> 08:15:54,000 because this gives you full visibility 13241 08:15:54,000 --> 08:15:56,360 over your application and infrastructure 13242 08:15:56,360 --> 08:15:58,558 health you'll be able to see things such 13243 08:15:58,558 --> 08:16:02,040 as latency compute units that that is 13244 08:16:02,040 --> 08:16:04,680 how many RPC calls are eating your notes 13245 08:16:04,680 --> 08:16:06,478 as well as the success rate of your 13246 08:16:06,478 --> 08:16:08,718 calls the throughput and so on and so 13247 08:16:08,718 --> 08:16:10,718 forth super useful when you need to 13248 08:16:10,718 --> 08:16:14,680 debug so let's say that here you see 98% 13249 08:16:14,680 --> 08:16:16,840 of success rate you'll be able to 13250 08:16:16,840 --> 08:16:18,958 understand why your transactions are not 13251 08:16:18,958 --> 08:16:20,760 going through well let's actually do an 13252 08:16:20,760 --> 08:16:22,878 example let me go back and find an 13253 08:16:22,878 --> 08:16:25,798 application that has actual codes so 13254 08:16:25,798 --> 08:16:28,638 here we go I just navigated to this demo 13255 08:16:28,638 --> 08:16:30,680 key application that as you can see has 13256 08:16:30,680 --> 08:16:33,638 a ton of calls but also as you can see 13257 08:16:33,638 --> 08:16:36,360 it has a success rate of 13258 08:16:36,360 --> 08:16:39,920 98.5% that means that 1.5% of our calls 13259 08:16:39,920 --> 08:16:42,478 are failing to go through but how do you 13260 08:16:42,478 --> 08:16:44,120 understand that how do you debug this 13261 08:16:44,120 --> 08:16:46,798 well if you not using Alchemy chances 13262 08:16:46,798 --> 08:16:48,920 are that to debug your RPC calls you 13263 08:16:48,920 --> 08:16:50,878 will have to spin up your own nodes or 13264 08:16:50,878 --> 08:16:53,040 be run a local node and in that case 13265 08:16:53,040 --> 08:16:54,878 you'll be able to see the logs coming 13266 08:16:54,878 --> 08:16:56,958 from the node otherwise there is no 13267 08:16:56,958 --> 08:16:58,478 possibility to see the logs coming from 13268 08:16:58,478 --> 08:17:00,000 the node this is not something you will 13269 08:17:00,000 --> 08:17:02,878 see on E scan using Alchemy you'll be 13270 08:17:02,878 --> 08:17:05,120 able to see all the issues related to 13271 08:17:05,120 --> 08:17:07,120 your calls as well as the known issues 13272 08:17:07,120 --> 08:17:10,040 related to your calls in this dashboard 13273 08:17:10,040 --> 08:17:13,040 so let's say that we have 1.5% of call 13274 08:17:13,040 --> 08:17:14,520 not going through what we can do is go 13275 08:17:14,520 --> 08:17:17,478 on the recent invalid request dub and 13276 08:17:17,478 --> 08:17:19,080 here all the requests that didn't go 13277 08:17:19,080 --> 08:17:21,440 through will be listed as well as the 13278 08:17:21,440 --> 08:17:23,478 reason why they didn't go through for 13279 08:17:23,478 --> 08:17:25,600 example here we have an e Sand Road 13280 08:17:25,600 --> 08:17:27,520 transaction that didn't go through 13281 08:17:27,520 --> 08:17:29,398 because there weren't sufficient gas 13282 08:17:29,398 --> 08:17:31,840 funds but let's take another one here 13283 08:17:31,840 --> 08:17:33,798 execution reverted for example means 13284 08:17:33,798 --> 08:17:35,160 that probably there is a problem with 13285 08:17:35,160 --> 08:17:38,000 the smart contract so as you can see the 13286 08:17:38,000 --> 08:17:40,280 bugging as well as you can see other 13287 08:17:40,280 --> 08:17:42,238 information on the left hand side but I 13288 08:17:42,238 --> 08:17:44,040 will go back at this in a few seconds 13289 08:17:44,040 --> 08:17:45,878 because I want to show you another tool 13290 08:17:45,878 --> 08:17:47,760 that is even more precise to see the 13291 08:17:47,760 --> 08:17:50,280 information about the acttion request 13292 08:17:50,280 --> 08:17:52,318 here you'll be able to debug your RPC 13293 08:17:52,318 --> 08:17:55,000 calls with super Ease on top of that as 13294 08:17:55,000 --> 08:17:57,160 I was saying we have other tools to help 13295 08:17:57,160 --> 08:17:59,600 you debug and get more visibility on 13296 08:17:59,600 --> 08:18:01,360 your application so if you click on the 13297 08:18:01,360 --> 08:18:03,638 menu and here what we can do is navigate 13298 08:18:03,638 --> 08:18:06,360 on the M Pool and the manool is actually 13299 08:18:06,360 --> 08:18:08,000 just like the manool that you might 13300 08:18:08,000 --> 08:18:09,440 think about when you're thinking about 13301 08:18:09,440 --> 08:18:11,360 ethereum so it's a place where all of 13302 08:18:11,360 --> 08:18:13,638 your transactions are and you can see 13303 08:18:13,638 --> 08:18:15,120 the status of the transaction the 13304 08:18:15,120 --> 08:18:17,080 information about the transaction what 13305 08:18:17,080 --> 08:18:18,760 if the transaction is going through if 13306 08:18:18,760 --> 08:18:20,440 didn't go through if it's spending for 13307 08:18:20,440 --> 08:18:23,000 hours if you got mind how much it cost 13308 08:18:23,000 --> 08:18:25,760 and so on and so forth so let's say we 13309 08:18:25,760 --> 08:18:28,200 we just navigated on our mempo Watcher 13310 08:18:28,200 --> 08:18:30,160 and here we have all the transactions 13311 08:18:30,160 --> 08:18:32,238 going through on our applications here I 13312 08:18:32,238 --> 08:18:33,840 have a bunch of applications so that's 13313 08:18:33,840 --> 08:18:35,920 why I'm seeing a lot of transactions 13314 08:18:35,920 --> 08:18:37,600 here on the top you can see all the Mind 13315 08:18:37,600 --> 08:18:39,520 transactions so the transactions that 13316 08:18:39,520 --> 08:18:42,600 already went through like can me mind or 13317 08:18:42,600 --> 08:18:45,398 validated the pending transactions um 13318 08:18:45,398 --> 08:18:47,000 let me just select one application 13319 08:18:47,000 --> 08:18:48,680 because of course otherwise it's going 13320 08:18:48,680 --> 08:18:51,000 to take a long time here you have all 13321 08:18:51,000 --> 08:18:52,840 dep pending transactions that mean all 13322 08:18:52,840 --> 08:18:54,638 the transactions that are waiting to be 13323 08:18:54,638 --> 08:18:56,958 mined or validated and here you you have 13324 08:18:56,958 --> 08:18:58,920 dropped and dropped and replaced so 13325 08:18:58,920 --> 08:19:00,360 transactions that have been dropped 13326 08:19:00,360 --> 08:19:02,120 cancelled or replaced by other 13327 08:19:02,120 --> 08:19:04,398 transactions with the same non same call 13328 08:19:04,398 --> 08:19:08,318 data and the same gas fees or dropped 13329 08:19:08,318 --> 08:19:10,280 means there are transactions that have 13330 08:19:10,280 --> 08:19:12,718 been cancelled and won't be validated or 13331 08:19:12,718 --> 08:19:15,318 mind but on top of that you can get even 13332 08:19:15,318 --> 08:19:18,360 more information on these calls on these 13333 08:19:18,360 --> 08:19:20,958 transactions if I click here on the ash 13334 08:19:20,958 --> 08:19:23,200 this won't bring me on ether Canal will 13335 08:19:23,200 --> 08:19:25,200 bring me on the M poool transaction 13336 08:19:25,200 --> 08:19:27,760 summary page and here I can see all the 13337 08:19:27,760 --> 08:19:30,080 information about the transaction I can 13338 08:19:30,080 --> 08:19:32,398 see how much gas it costed uh which 13339 08:19:32,398 --> 08:19:34,680 network it was on of course uh the 13340 08:19:34,680 --> 08:19:37,360 transaction hash as well as the from 13341 08:19:37,360 --> 08:19:39,200 address so who send the transaction and 13342 08:19:39,200 --> 08:19:41,200 who's sending the transaction to as well 13343 08:19:41,200 --> 08:19:43,798 as the value inside transaction the time 13344 08:19:43,798 --> 08:19:47,360 it took to get sent and the time it took 13345 08:19:47,360 --> 08:19:49,958 to get um validated this is more clear 13346 08:19:49,958 --> 08:19:51,638 on validated transactions where 13347 08:19:51,638 --> 08:19:53,478 everything has already be filled out so 13348 08:19:53,478 --> 08:19:55,638 I can go back in my mind 13349 08:19:55,638 --> 08:19:59,478 page so here we go I can select one and 13350 08:19:59,478 --> 08:20:01,478 as you can see here I have all the 13351 08:20:01,478 --> 08:20:04,238 information so I have Max veper gas I 13352 08:20:04,238 --> 08:20:06,318 have the transaction type so this was 13353 08:20:06,318 --> 08:20:09,360 using the EAP 1559 and a bunch of other 13354 08:20:09,360 --> 08:20:12,120 information about the transaction itself 13355 08:20:12,120 --> 08:20:13,920 super helpful to debug and get full 13356 08:20:13,920 --> 08:20:16,478 visibility over it all right now that we 13357 08:20:16,478 --> 08:20:18,318 have quickly gone through how Alchemy 13358 08:20:18,318 --> 08:20:21,318 Works what it is and how it's features 13359 08:20:21,318 --> 08:20:23,440 can help your developer experience 13360 08:20:23,440 --> 08:20:25,878 become way better and develop faster I 13361 08:20:25,878 --> 08:20:27,120 don't want to steal much much more of 13362 08:20:27,120 --> 08:20:28,840 your time while learning during this 13363 08:20:28,840 --> 08:20:30,600 amazing course so what I'm going to do 13364 08:20:30,600 --> 08:20:32,600 is leave you with a couple of resources 13365 08:20:32,600 --> 08:20:34,398 that will make your developer experience 13366 08:20:34,398 --> 08:20:36,798 with Alchemy even better the first one 13367 08:20:36,798 --> 08:20:38,920 is our documentation so our 13368 08:20:38,920 --> 08:20:41,080 documentation has everything you need to 13369 08:20:41,080 --> 08:20:44,360 get started using our apis SDK libraries 13370 08:20:44,360 --> 08:20:46,200 and also tools that we didn't have the 13371 08:20:46,200 --> 08:20:48,040 time to go through today such as our 13372 08:20:48,040 --> 08:20:50,280 generalized custom graphql web books 13373 08:20:50,280 --> 08:20:52,280 that allow you to pull data real time 13374 08:20:52,280 --> 08:20:53,878 from the blockchain through graft 13375 08:20:53,878 --> 08:20:56,000 queries on top of that you will also 13376 08:20:56,000 --> 08:20:58,200 have tutorial and guides to build your 13377 08:20:58,200 --> 08:21:00,440 applications and complement the 13378 08:21:00,440 --> 08:21:02,798 knowledge you're creating during this 13379 08:21:02,798 --> 08:21:05,200 course of course follow us on Twitter at 13380 08:21:05,200 --> 08:21:08,080 Alchemy platform or Alchemy learn and if 13381 08:21:08,080 --> 08:21:09,440 you want to shoot me a message telling 13382 08:21:09,440 --> 08:21:10,878 me the amazing things that you're 13383 08:21:10,878 --> 08:21:12,558 building while learning from the 13384 08:21:12,558 --> 08:21:14,958 Patrick's course please shoot it at 13385 08:21:14,958 --> 08:21:17,840 vostock on Twitter thank you so much 13386 08:21:17,840 --> 08:21:19,798 Patrick once again for hosting us and 13387 08:21:19,798 --> 08:21:22,478 thank everyone for sticking with us for 13388 08:21:22,478 --> 08:21:24,760 12 minutes it's been a pleasure see you 13389 08:21:24,760 --> 08:21:28,520 around and happy building 13390 08:21:30,398 --> 08:21:31,760 but for this one you should be 13391 08:21:31,760 --> 08:21:33,238 incredibly proud of yourself you just 13392 08:21:33,238 --> 08:21:36,280 did an entire project in Foundry huge 13393 08:21:36,280 --> 08:21:38,160 congratulations so let's do a quick 13394 08:21:38,160 --> 08:21:39,760 recap of everything we learned and then 13395 08:21:39,760 --> 08:21:41,798 we'll move to the next project and yes 13396 08:21:41,798 --> 08:21:43,718 we are going to push our next project up 13397 08:21:43,718 --> 08:21:45,478 to GitHub and a lot more advanced 13398 08:21:45,478 --> 08:21:47,200 Foundry and a lot more advanced tooling 13399 08:21:47,200 --> 08:21:49,080 here so let's do a quick recap of what 13400 08:21:49,080 --> 08:21:51,080 we learned so far well first we learned 13401 08:21:51,080 --> 08:21:52,798 how to create new Foundry projects with 13402 08:21:52,798 --> 08:21:55,440 Forge Das Das and knit which will give 13403 08:21:55,440 --> 08:21:57,238 us all of these folders on the left hand 13404 08:21:57,238 --> 08:21:58,760 side here to actually start working with 13405 08:21:58,760 --> 08:22:00,280 our projects in a more professional 13406 08:22:00,280 --> 08:22:02,000 environment we learned about some of the 13407 08:22:02,000 --> 08:22:04,718 basic Foundry commands such as cast 13408 08:22:04,718 --> 08:22:07,238 Anvil and Forge Forge is used for 13409 08:22:07,238 --> 08:22:08,558 compiling and interacting with our 13410 08:22:08,558 --> 08:22:11,000 contracts cast is used for interacting 13411 08:22:11,000 --> 08:22:12,080 with contracts that have already been 13412 08:22:12,080 --> 08:22:14,680 deployed and Anvil is used to deploy a 13413 08:22:14,680 --> 08:22:16,920 local blockchain similar to ganach which 13414 08:22:16,920 --> 08:22:18,398 is another local blockchain that we 13415 08:22:18,398 --> 08:22:20,360 worked with we learned that whenever we 13416 08:22:20,360 --> 08:22:22,798 send a transaction on our metamask we're 13417 08:22:22,798 --> 08:22:25,160 actually making an HTTP post request to 13418 08:22:25,160 --> 08:22:27,000 this RPC URL 13419 08:22:27,000 --> 08:22:29,760 and we can also take an RPC URL from a 13420 08:22:29,760 --> 08:22:31,920 node as a service like Alchemy and use 13421 08:22:31,920 --> 08:22:34,040 it to actually send transactions from 13422 08:22:34,040 --> 08:22:36,600 our Foundry projects we learned both how 13423 08:22:36,600 --> 08:22:39,160 to actually compile our code in Foundry 13424 08:22:39,160 --> 08:22:41,478 and then also write a script to deploy 13425 08:22:41,478 --> 08:22:44,000 it directly in solidity we've learned 13426 08:22:44,000 --> 08:22:46,120 some very basic information about 13427 08:22:46,120 --> 08:22:48,280 keeping our private Keys safe for the 13428 08:22:48,280 --> 08:22:49,200 rest of the course we're going to be 13429 08:22:49,200 --> 08:22:51,798 working with aemv file but when we work 13430 08:22:51,798 --> 08:22:53,680 with real money we might not want to 13431 08:22:53,680 --> 08:22:55,600 actually have our private key in plain 13432 08:22:55,600 --> 08:22:57,718 text ever so we learned how to deploy 13433 08:22:57,718 --> 08:22:59,040 our contracts to a blockchain 13434 08:22:59,040 --> 08:23:00,638 programmatically and then we learned how 13435 08:23:00,638 --> 08:23:02,440 to interact with them using the cast 13436 08:23:02,440 --> 08:23:05,200 keyword and send to send transactions 13437 08:23:05,200 --> 08:23:07,238 and then cast call to read from those 13438 08:23:07,238 --> 08:23:09,080 contracts we've learned how to autof 13439 08:23:09,080 --> 08:23:11,920 format our contracts with Forge format 13440 08:23:11,920 --> 08:23:13,840 and we learned the manual way to 13441 08:23:13,840 --> 08:23:16,000 actually verify one of our contracts on 13442 08:23:16,000 --> 08:23:19,600 the blockchain we learned a lot here so 13443 08:23:19,600 --> 08:23:22,000 be absolutely sure to take a minute to 13444 08:23:22,000 --> 08:23:24,360 go on a walk go get a cup of coffee go 13445 08:23:24,360 --> 08:23:26,318 grab some ice cream go post on Twitter 13446 08:23:26,318 --> 08:23:27,680 that that you've taken an extra step in 13447 08:23:27,680 --> 08:23:29,638 your web 3 developer Journey you should 13448 08:23:29,638 --> 08:23:31,200 be incredibly proud of yourself for 13449 08:23:31,200 --> 08:23:33,200 getting this far like I said earlier 13450 08:23:33,200 --> 08:23:35,120 installing some of these tools like vs 13451 08:23:35,120 --> 08:23:37,200 code and Foundry can be one of the 13452 08:23:37,200 --> 08:23:39,478 hardest parts of this entire course so 13453 08:23:39,478 --> 08:23:40,958 if you're in here if you're working with 13454 08:23:40,958 --> 08:23:43,160 me you're doing fantastic we've got a 13455 08:23:43,160 --> 08:23:45,200 lot more to go but just by getting this 13456 08:23:45,200 --> 08:23:47,558 far you've done incredibly well so with 13457 08:23:47,558 --> 08:23:50,200 that being said take that break remember 13458 08:23:50,200 --> 08:23:52,520 breakes are good for your brain take 13459 08:23:52,520 --> 08:23:54,798 that break and we'll see you in the next 13460 08:23:54,798 --> 08:23:57,798 one996730

Can't find what you're looking for?
Get subtitles in any language from opensubtitles.com, and translate them here.