Creation and Deployment of Smart Contracts on Ethereum Blockchain. Dr. Hidaia Mahmood Alassouli

Чтение книги онлайн.

Читать онлайн книгу Creation and Deployment of Smart Contracts on Ethereum Blockchain - Dr. Hidaia Mahmood Alassouli страница 2

Creation and Deployment of Smart Contracts on Ethereum Blockchain - Dr. Hidaia Mahmood Alassouli

Скачать книгу

made on an Ethereum blockchain. The name gas is inspired by the view that this fee acts as cryptofuel, driving the motion of smart contracts. Gas is purchased for ether from the miners that execute the code. Gas and ether are decoupled deliberately since units of gas align with computation units having a natural cost, while the price of ether generally fluctuates as a result of market forces. The two are mediated by a free market: the price of gas is actually decided by the miners, who can refuse to process a transaction with a lower gas price than their minimum limit. To get gas you simply need to add ether to your account. The Ethereum clients automatically purchase gas for your ether in the amount you specify as your maximum expenditure for the transaction."

       In Solidity, you define a variable by first specifying its type.

      What other types are there?

      1 boolThis is a Boolean, which returns true or false.

      2 int / uintBoth int and uint represent integers, or number values. The primary difference between int and uint (Unsigned Integer), is that int can hold negative numbers as values.

      3 addressThe address type represents a 20 byte value, which is meant to store an Ethereum address. Variables that are typed as address also have members, including balance and transfer.

      4 bytes1 through 32This is a fixed-size byte array.

      5 bytesA dynamically-sized byte array.

      6 stringA dynamically signed string.

      7 mappingHash tables with key types and value types. We will look at mappings more in depth later on in the course.

      8 structStructs allow you to define new types. We will also cover this more in depth shortly.

       Let's define a string variable in our contract. Let's also define my age. No one can have a negative age, so we will use an unsigned integer for this:

      pragma solidity ^0.4.18;

      contract Coursetro {

       string fName = 'Gary';

       uint age = 34;

      }

       Solidity has four types of visibilities for both functions and variables:

      1 PublicThis allows you to define functions or variables that can be called internally or through messages.

      2 PrivatePrivate variables and functions are only available to the current contract and not derived contracts.

      3 InternalFuctions and variables that can only be accessed internally (current contract or derived).

      4 ExternalFunctions that can be called from other contracts and transactions. They cannot be called internally, except with "this.functionName()".

       Let's add the public visibility to our variables:

      pragma solidity ^0.4.18;

      contract Coursetro {

       string public fName = 'Gary';

       uint public age = 34;

      }

       Click Deploy, we can now see on the right that we have 2 blue buttons with the name of our variables and the associated values. When you define public state variables, the EVM creates getter functions for them. So, you can actually click on these buttons and it will return the value, as if it were a function.

       Every smart contract has a constructor function. This constructor is called when a contract is created. Inside of it, you can define the values of variables. Let's re-adjust our code to work with a constructor:

      pragma solidity ^0.4.18;

      contract Coursetro {

      string public fName;

      uint public age;

      function Coursetro() public {

      fName = 'Gary';

      age = 34;

      }

      }

       Variables can be declared as being constant. As the name suggests, these are variables with a constant value that does not change.Let's transform the fName variable to a constant variable:

      pragma solidity ^0.4.18;

      contract Coursetro {

      string constant fName = 'Gary';

      uint public age;

      function Coursetro() public {

      fName = 'Gary';

      age = 34;

      }

      }

      In your IDE, you'll notice a red "X" next to line 9. If you hover over it, you will notice that it says, "TypeError: cannot assign to a constant variable". Remove line 9 and the error goes away.

       Our smart contract at this point is pretty boring. Let's integrate a potential user interaction where we can manually define a Coursetro Instructor's name and age. Paste the following:

      pragma solidity ^0.4.18;

      contract Coursetro {

       string fName;

       uint age;

       function setInstructor(string _fName, uint _age) public {

       fName = _fName;

       age = _age;

       }

       function getInstructor() public constant returns (string, uint) {

       return (fName, age);

       }

      }

       Our smart contract at this point is pretty boring. Let's integrate a potential user interaction where we can manually define a Coursetro Instructor's name and age. Paste the following:

      pragma solidity ^0.4.18;

      contract Coursetro {

Скачать книгу