- Hey guys, welcome to this webinar
on writing your first smart contract
on the Ethereum Blockchain.
If you are not familiar with Ethereum or Blockchains
I encourage you to read our awesome articles
and courses online at blockgeeks.com
where you can learn more about the Blockchain
and Ethereum and the details of its inner workings.
But in this webinar, we're gonna take a look at
how to write a very simple smart contract
using a language called solidity.
So a smart contract is just a program
deployed on to the Blockchain.
And this program can contain
a set of variables or fields and set of methods
that manipulate those fields
to achieve the task of the smart contract.
So in this webinar, we're gonna take a look at
a very simple hello world type example
and just get a very gentle intro to solidity
and how you would go about
developing smart contracts on your own machine.
So to get started, we are just gonna
open up our browsers.
I am just using chrome over here.
And we are gonna use a tool called remix,
which is in open source IDE
specifically for solidity smart contracts.
And you can just get it by going to remix.ethereum.org
and it will just load up this webpage
which presents an IDE.
Now my favorite part about remix is that
you just have to go to remix.ethereum.org
and you don't have to install anything else
and you have a full-fledged IDE
where you have an editor, a debugger
as well as the test blockchain where you can test out
your smart contracts.
So I really highly recommended,
It's open source,
you can go to the get hub and downloaded as well
and run it locally if you like.
But this is a very convenient option to get started,
just in your browser without having
any sort of complicated set up.
So let's just give you a brief intro to the UI.
On the left hand side we have this menu bar,
where we can select which of our contracts
you wanna open.
So this is just a little file explorer,
you can also add a new file and open an existing one.
In the middle over here, we have our text editor
where we type in our solidity code.
When you go to the page there is a sample
voting smart contract that is given as an example.
I encourage you to through it,
but this is little more complicated
then what we are gonna see in this webinar.
So on the right hand side,
we also have another menu bar
that has some tabs for us.
We have a compile tab, where we can select
which smart contract we wanna compile
and we can also get some more details
about the compile smart contract
like its bytecode and its interface.
On the run tab, which is probably
we're gonna be using most
you can you know set up which environment
you want to deploy your smart contract to.
And we are gonna use JavaScript VM
and if you just mouse over each of these options
it tells you more detail about what it does.
But JavaScript VM all it really means is
it will spin up a test blockchain inside this browser tab.
And you can use this test Blockchain
to deploy your smart contract
and the benefit of that is obviously
you don't need to actually pay it to deploy
a transaction to the production Ethereum network
and you just test
and develop your contracts for free.
So we are just gonna click JavaScript VM.
These other two options allow you to connect
to other instances outside of the browser,
but we are gonna get into that.
We just gonna keep it really simple
and click JavaScript VM.
And when we click that
we see that this accounts drop down also generated
some values for us.
So we see five accounts that were automatically
generated for us with a hundred test ether each.
And the first one is selected for us by default
and we can copy the address if we like.
Gas limits you can specify you know how much gas
you want to sort of provide for your transactions.
And values also how much ether you wanna provide
with your transactions
and you can specify that in way or ether
and all of these are just
smaller denominations of ether.
And down here we can also select
which smart contract we wanna run.
So if we have multiple open,
we can select them from this drop down
and we can either create a new instance
of this smart contract or we can connect
to an existing instance by using the add address button.
So in order to create a new ballot contract,
I would actually have to put in an integer
to designate the number of proposals
and this lines up with this parameter over here
being passed into the constructor
and I would just enter some value and click create
which we will see in a bit with our hello world contract.
And just one last thing with UI at the bottom.
We have this terminal which is gonna
print out some useful logs and transaction details for us
to help us debug and understand what is going on
while we are developing.
So all that being said there was a quick intro
to remix in the UI,
Now let's create our first smart contract
and we will create a new file
by clicking this plus button
and we'll just call our contract
instead of calling a hello world,
we are gonna make it a little bit more interesting
and we are gonna call a code word.
So the first line at the top
of any solidity smart contract is the pragma statement
where you declare which version
of solidity you will be using.
So I am just going with point four dot 19
where you can see that this specific version of remix
is actually using a slightly newer version
point four dot two two
But it's upto you whatever you wanna use
and this caret sign this upwards arrow
indicates that any version above
point four dot 19 is also okay as well.
Now to declare our smart contract,
we use the contract keyword.
Very similar to how you will use the class keyword
to define the class in Java
if you have the Java background
and we are just gonna call our contract outdoor.
So we've defined the structure of our contract by using
the contract keyword and providing
a name for it, awesome.
And we also gonna define a variable in our contract.
We need to find the string variable called reading,
which we'll just store a string value
and the next thing we are gonna define
is a constructor.
So smart contracts can have a constructor,
that is invoked only once
and that's only when the smart contract
is first deployed to the Blockchain.
So if you are deploying it to the production Blockchain,
we're gonna call then but as we will see
in this example when we deployed
to our test Blockchain it will get invoked.
And the way we declare our constructor
is by saying function
using the function keyword
and then using the same name
as we did for the contract name
that's how the compiler can tell that
this is the constructor
and in our constructor,
we also want to provide the first initial greeting
that should be set
and we'll pass that in as a parameter
and just set it to our field, our greeting field
to be the initial value.
One more thing we are gonna do
is we are gonna declare this variable public
by just adding the public keyword
in front of the variable name
and what this does is
aside from making this variable public,
it automatically generates a getter function
for this variable.
So if I wanted to provide a public getter
for the greeting variable
you know normally I would have to do something
like this and explicitly declare it
that it returns string
and I would have to say something like this.
But just by adding this public key word,
this function is automatically generated for me
so I don't need to explicitly declare.
So one thing we are gonna add
to this smart contract is a way to change the greeting.
And we're gonna do that by declaring another function
and we're gonna call our functions set greeting.
And we also gonna pass in the new greeting
as a parameter into the function
and we are gonna do the same thing,
we are just gonna set our variable
to whatever parameter was passed in.
And there we have a very simple smart contracts,
very simple hello world smart contract
that gets initialized with the greeting, right
and anyone can read this greeting
from the smart contract,
because we declared the variable public.
And anyone can also set the greeting
on the smart contract.
So we wanna provide a bit more access control
to the set greeting function.
So how would we do that.
Let's take a look
So I wanna update this set greeting function
so that only the owner of this contract
only the person who deployed this contract
we can call the set greeting function.
So the first thing I need to do is key track
of who created this contract.
And the way I can do that is in the constructor,
I can declare an owner variable which is just going to
keep track of the person who has sent the message.
So when I invoke message dot sender it's referring
to the account where the address
that invoked this constructor.
And you can only invoke the constructor
where you are deploying it.
So this owner filed is of the address data type
and we'll also make it public
but it's gonna store whoever was the person sending
the deployment transaction for the smart contract
and we'll report that over here.
Now to make sure that only the owner can call
the set greeting function.
We are gonna use the require function
and the require function all it does is
it checks in condition and if it evaluates to false
then it throws an exception
and the transaction is reverted.
So the execution does not continue beyond that point.
So inside the set greeting function,
we are gonna make sure that owner equals
message dot sender.
So when I use message dot sender in this function,
it's actually different from
this message dot sender, right.
Because in this function this variable is referencing
whoever called the set greeting function
whereas in the constructor message dot sender
is referencing whoever called the constructor.
So using this require statement,
I can ought check that says
hey make sure that the person calling this method
is actually the owner
and if it's not then throw an exception
and don't continue going down
this function any longer.
And one more thing that I wanna demonstrate is
just a way to broadcast any you know event of interest
that occurred during execution
and the way we do that
is using something called solidity events.
And we can declare a new event
by just using the event keyword
and giving it a name and you know you can also pass
parameters to the event to provide
extra information about the event.
So in our case all we are gonna do is
provide the old greeting as well as the new greeting.
So that anytime the greeting is changed,
whoever is listening for that event is notified
and typically who ever the person or the application
that is listing for this events
are front ends which need to
you know update their state
based on changes to the smart contract.
And so we have declared our greeting changed event
at the top using the event keyword
and the way we fired the event
is just by calling the name of the event
and also passing in the parameters,
but if we pass in the parameter after
we have changed our greeting
then we'll lose track,
we'll lose reference to the old greeting
so we just gonna move this line
below the event so that we can print out
the old greeting as well as the new greeting.
So there we have a simple smart contract
that allows you to change and set a greeting
and it fires an event whenever
that greeting has changed
and tells you what the value was changed to,
okay awesome.
So we have written the solidity code,
you might notice, it looks very similar to JavaScript
so it shouldn't be you know too different,
but you know its JavaScript with data types
and some other extra features as well.
But we just saw a very simple example
of how to use some of those features.
So now let's see how we can actually run this code
inside the browser on a test Blockchain.
So like we said we select JavaScript VM
from the environment drop down.
We are just gonna keep it selected to
the first account, any account will do.
And in this dropdown, we are gonna select outdoor.
And as you can see to create a new instance
or to deploy a new instance of the smart contract,
we need to provide the initial greeting.
So the initial greeting will just be outdoor
and if I click create
we see that a new square pops up towards the bottom
of the run tab
telling us that a new instance has been deployed
to the test Blockchain notified by this JavaScript VM.
And we also saw you know some output printed out
in our terminal over here below
and it basically printed out a log of the transaction
that was invoked to deploy the smart contract.
So to deploy the smart contract,
we took this solidity code
compiled it down to EVM bytecode
which is just you can take as low level machine code
And we send that machine code to the Blockchain,
so in this case to our test Blockchain
running inside our browser
and that deployment is sent
using something called the transaction.
You can take up a just message being sent
to the Blockchain.
And in this message we,
let's take a look at the details of this message
that we sent to deploy this smart contract
to the test Blockchain.
So if I click the details button,
you know it'll tell me the status
that you know the transaction succeeded.
It will also tell me the address of this smart contract.
So whenever you deploy a new smart contract,
it is written, it is assigned an address,
when it is successfully deployed
and any further interaction with the smart contract
is done using this contract address.
We also see from tab which is just from field
which is just our address CA35B,
which matches up with what we have over here, right,
because this is the account that we selected to deploy.
And the to address is left empty
and it just says that since we are not sending
this transaction to any particular address,
we are deploying a new smart contract
to the Blockchain.
And it also indicates how much gas we provided.
So gas is just a unit of competition, right.
So each of these lines in solidity
translates to some EVM bytecode and each of those EVM
bytecode operations requires a certain amount of gas.
And it varies depending on what the operation is.
But you basically have to provide enough gas
for your transaction to complete
And after you have deployed the transaction
it will tell you, you know, how much gas it cost to
actually send the data to the Blockchain
which is the transaction cost.
And how much gas did it cost to actually run the logic
on the Blockchain which is the execution cost
and the execution cost in this case would just be
you know running the constructor
and initializing our greeting and our owner variables.
We are also given a hash for this transaction.
So this hash references this particular transaction
and the from address, the to address
as well as any data provided with it.
And the data I am just gonna increase this a bit,
the data is provided in this input
and this is the compiled EVM bytecode
that is sent to the test Blockchain.
So this is what the compiled solidity code
is translated into and this is the data
that is actually sent to the Blockchain.
And we also we since we provided
a greeting input parameter
this is also included in our transaction log
and since we didn't provide any ether with it
this just indicates the zero way.
This logs field also will print out any
events or other things of interest first
and these are, these logs will be forever stored
on the Blockchain so we can come back
and re-use them and revisit them
to extract information.
And we'll see how these logs
get printed out in a second.
But this is just the details of one transaction to deploy
our smart contract to the test Blogchain, awesome.
Okay and you'll also see that the buttons that
we have available inside our smart contract instance
line up with the functions that we have available
to invoke on the smart contract.
So we have the set greeting
for the set greeting function, we have this greeting
function as well which is auto generated for us
using this public keyword as well as the owner function
which is auto generated for us using
this public keyword.
So if I just click owner, right, it'll tell me the address
of whoever is the owner
and it matches up with the address
that we have selected over here
and so calling the greeting or the owner function
doesn't require any gas.
And that's because all we're doing in the greeting
and the owner function is reading data
from the Blockchain
and we are just retrieving data from the Blockchain.
We are not actually executing any code or any logic,
which is what gas is okay.
So gas is just competition, right,
and if you are running some competition,
then you need to cover the cost of that gas.
But in this case if you are just
retrieving the owner address
or if you are just retrieving a string greeting value
it doesn't actually cost any gas.
And we can see that in the calls
that are being printed out in the terminal over here,
right so when I clicked greeting
let's take a look at the details of this transaction, right,
and it will indicate to us that you know
this cost only applies when called by a contract,
but what we are seeing over here is that
you know it's slightly different from the transaction
that was required to deploy this smart contract,
which is where we are writing
some data to the Blockchain.
But over here we have a little less information
and we see that it didn't actually cost any gas
to retrieve this string value.
Yeah and the output of this invocation
was provided in our decoded output field.
So okay now let's see how
we can actually set the greeting.
So first let's test our require statement over here
to make sure that only the owner of the contract
can call set greeting.
So if I change my address that I am using, right
let's use our second address
and just one thing before I do that
you will notice that our balance for the first address
changed from 100 ether to 99.99999.
And that balance was reduced as a result of the gas cost
of deploying this smart contract to the test Blockchain.
So it's taken directly out of the first contract.
But let's quickly change it to the second account
and let's try this set the greeting to something else.
Right I am just gonna clear my terminal over here
so we can get the fresh output
and if I try to click set greeting let's see what happens.
So when I click details,
as well as look at the output of my transaction log,
but when I click details it tells me
that the transaction failed
but it doesn't tell me exactly on which line it fails.
So this is one of the limitations
of exception handling and solidity right now.
You can tell that an exception was thrown,
but you can't really get any more information
about the exception like some sort of string message
or what line it was on,
but this is feature that is currently in development,
but right now there is no easy way to figure out
like what line exactly the exception was thrown.
But we can also see more details
about this transaction.
We can see that it cost us gas,
so we have to provide gas.
And even though our transaction failed, right,
we still have to cover the cost of the gas ,right,
because it's still running competition,
it's still needs to go through the competition
to figure out that hey there is exception over here
so there is some cost for this transaction.
And yeah we can see our input,
which is just our encoded string,
which is outdoor
and also this input contains the information about
which function we are calling on our smart contract.
And we can see that the to address is the same address
as our smart contract, which is 692A
and that lines up with the address,
which is also shown over here, 692.
And we can see that our input parameter
was also included.
But we can see that the transaction failed
and which is will be expected
because we are not the owner of the contracts.
So we shouldn't be able to set the greeting.
And in the logs, we can see that the logs are empty
so we know that no events were fired.
Okay, so now let's try the same thing again,
by using the actual owner address, right.
So I'll switch back to the owner account,
and now if I try to click set greeting,
let's see what happens,
you gonna clear the terminal,
so we have it fresh and click set greeting, right
and we see our transaction log being printed out
and this time we see that our transaction was mind
and it succeeded, right,
so the to address again is just our contract address
and the input contains information about
which function we're calling
as well as any input parameters
and we also have hash for this transaction,
which uniquely identifies this transaction.
As well as information about the gas cost
of running this set greeting function.
And since the execution succeeded
and the greeting change event was fired on line 17,
we can see that it was printed out in the logs field
of our transaction, right.
And we can see that you know
it printed out the event name
which is greeting changed
and it printed out the arguments
which was the old greeting as well as the new greeting.
And we can verify that the greeting was updated
by just clicking the greeting button again
and we get the new string
that was passed into the smart contract.
So this is just a very simple example
of a hello world type smart contract
where we can read some data from it
like a string reading
and we can also write some data to it
and provide some access control around
that ability to write data to the smart contract.
So that brings me to the end of my example.
This is just a very gentle intro to solidity smart contracts
just to get you used to the syntax
as well as this interface of remix,
which is a really great interface
for developing your smart contracts.
And if you want to learn more
and get into more detailed examples
about smart contracts and some other codes
and limitation of them,
definitely check out our online courses
as well as our online articles.
One of the courses eth 101
is the course that I teach on Ethereum
and how to build solidity smart contracts
as well as how to built more complicated dApps
including the front end to interact
with the smart contract.
So I highly recommend checking those out
at blockgeeks.com and yeah thanks for tuning in
to this very simple webinar
on how to write your first smart contract.
And we look forward to see on blockgeeks.com.



For more infomation >> Suzuki Swift Styl 1.0 Boosterjet 112pk Smart Hybrid - Duration: 0:54.
For more infomation >> Suzuki Swift Stijl 1.2 Dualjet 90pk Smart Hybrid - Duration: 1:13.
For more infomation >> Smart Forfour 52 kW Pure - Duration: 1:06.
For more infomation >> MeshCrafts - Smart elbillading - Mobility - Duration: 2:05. 



For more infomation >> Key Battery Mazda proximity smart Key - Duration: 2:13. 

Không có nhận xét nào:
Đăng nhận xét