Hello world it's Siraj, and I've really been digging smart contracts lately. They're so powerful
We're gonna build a smart contract that implements proof of existence
It's an immutable digital
notary that proves the ownership and
existence of any document without
Needing to hire a lawyer the advent of Bitcoin proved that we could exchange value over the Internet in a way that didn't need to
involve a third party namely a bank
What made this possible was its use of a data structure that distributes trust across many nodes instead of a few called?
The blockchain I think I'm ready to jump on the path
Every node downloads a copy of it and stores every single transaction. That's occurred in the network
It can't be hacked or tampered with because it's secured by the proof-of-work
Algorithm only Jeff Dean has that much computing power
Since then several crypto currencies have popped up adding their own features to the Bitcoin blockchain to extend its functionality
But the cryptocurrency with the second highest market cap in the world
Aetherium is by far the most interesting in terms of its potential to power a new wave of
Applications if their IAM is a digital currency, just like Bitcoin, but it's also got its own turing-complete
Programming language that lets you build. What are called smart contracts?
Let's rewind a bit in the Bitcoin network any coins that you buy are sent to a unique address
No coins are actually held at this address it
Just acts as a unique identifier like a bank account number that allows the total of the transactions to and from this address to be
Calculated we can think of Bitcoin as a ledger that records the deposits and withdrawals
From accounts when we send a transaction via the Bitcoin network
The old balance is reduced by some amount and another accounts balance is increased by this amount but no physical
Value is ever moved aetherium works slightly differently it stores the number of coins you own at an address called a smart contract
This is a piece of code
Which is stored on the blockchain network it defines the conditions to which all
Parties using the contract agree upon so if required conditions met certain actions are executed
No need for a judge or AWS or really any third party to enforce the rules
The ability to store info at these addresses is called the etherium state whereas Bitcoin only stores
transactions that have been sent in the blockchain any type of data can be stored in the etherium state and thereby the
Etherium blockchain the information that is stored could range from the amount of either you have to the type of life
insurance you own and since computation is scarce there must be a mechanism to
Limit the resources used by each contract every single operation that is executed inside the EVM is
actually simultaneously
Executed by every node in the network
This is why gas exists gas is internal it can't be purchased
it's used to calculate the price of a transaction and ether and ultimately limit the EVM an
etherium transaction contract code can trigger data reads and writes do expensive computations like using cryptographic
primitives making calls to other contracts etc each of these operations
have a cost measured in gas and each gas unit consumed by a
Transaction must be paid for an ether based on a gas to ether price
which changes dynamically this price is deducted from the etherium account sending the
Transaction smart contracts enable aetherium to operate as a global server. Where you pay for each transaction
Instead of a monthly fee for some central server provider the gas as well motivates developers to write efficient code
So that it would require less gas or the execution
One interesting thing to note is that smart contracts
Can't execute API call directly if we wanted to build a weather app and wanted to connect to a weather API
to retrieve data
And show the info accordingly that code would need to be executed on each and every node
So that call to the weather API could happen at different times as the nodes might start executing the code
Not at the same time in one second
We could have rainy weather data returned and in another we could have sunny weather
Nodes wouldn't be able to reach consensus on the result of the smart contract in this case
But we need data from the real world
It's super useful so the solution is to use what's called an Oracle
Instead of the smart contract calling an external API the API itself pushes the data to the blockchain
so that means that all the nodes now have the same data within the network so a contract triggers an event an
external app can listen to that event retrieve the data from the API and add a
Transaction with the result to the contract we can ensure the integrity of the Oracle by using a smart contract as an insurance policy
against it corrupting the integrity of the data, but wait
bitcoins got smart contract functionality too with Bitcoin smart contracts
It's important to understand that each transaction
Exists as a data structure composed of inputs and outputs in order to send Bitcoin users must provide certain inputs meeting
Predetermined requirements that prove they own and therefore have the authority to send bitcoins
They claim to own
users can also create contract transactions that require a more complex set of inputs in order to trigger the release of bitcoins a
Simple example of more complex inputs is a multi signature transaction
Which requires more than one entity that sign off on the release of Bitcoin proving useful in escrow?
Situations where two of three parties have to vouch for a transfer smart contracts in general are pretty
Computationally expensive to execute so not every conditional transaction is appropriate for execution via a blockchain
We should only use them for features that demand the distributed and secure nature of a shared ledger think about an apartment
Complex and all the administrative work required to maintain it if we use smart contracts where a tenancy is registered on the blockchain
They can be used to control access to the building when you pay the rent each tenants access to the building is renewed
Owners with registered keys are granted access to all the various types of utilities like mailboxes and washing machines
We can also use biometrics to help authenticate users. No need to maintain a server
It's all completely automated this can be applied to grant ownership. That is publicly verifiable
Over really anything physical objects as well making them smart property
You could even incorporate a company on the blockchain
And if we're really ambitious an entire nation could be defined not by geography
But by the rules and benefits of citizenship on the blockchain
Let's get the building to start developing aetherium apps will need a client to connect to the network
It will act as a window to the distributed network and provide a view of the blockchain where all the EVM states are represented
There are various compatible clients for the protocol the most popular being def a go language
Implementation however it's not the most developer friendly the best option
I've found is the test RPC node which we can install and run
We can run test RPC in a new terminal and leave it running while we develop
Each time we run test RPC it will generate 10 new addresses with simulated test funds for us to use
This is not real money
And we're safe to try anything with no risk of losing funds the most popular language for writing smart contracts in aetherium is
Solidity so we'll be using that we're also using the truffle development framework, which helps with smart contract creation compiling
Deployment and testing we should be able to compile the example contracts by running truffle compile
Then to deploy the contracts through the simulated network using the test RPC node
We have running we need to run truffle migrate
We'll be writing a simple proof of existence
smart contract the idea is to create a digital notary that stores hashes of documents as
proofs of their existence we can use truffle create contracts to get started then we'll open proof of existence, that's
Sol in a text editor
contracts have States and functions
It's important to distinguish two kinds of functions that can appear in a contract the first are read-only
Functions functions that don't perform any state changes the only read States perform
computations and return values
and the other kind are
transactional functions
functions that perform a state change in the contract or move funds our
Code only stores one proof at a time using the data type bytes 32, which is the size of a shoe?
2:56 hash the transactional function notarize allows one to store the hash of a document in our smart
Contracts state variable proof the variable is public and is the only way a user of our contract has to
Verify if a document has been notarized let's deploy proof of existence to the network this time
We'll have to edit the migration file to make truffle deploy our new contract
now that our contract is deployed we can play with it as in we can send messages to it via function calls and
Read its public state using the truffle console
So what have we learned a smart contract is code that is stored and run on a blockchain?
Making it trustless and immutable we can use them to verify ownership
Automate financial instruments and create more autonomous software and etherium is currently the most developed
Platform to build smart contracts this week's coding challenge is to create a smart contract that an AI can interact with
More details are in the readme github links go in the comments
And I'll give the top two entries a shout out next Friday
Hope you liked the video please subscribe for more programming videos and for now I've got to fight the power so thanks for watching