Anatomia contractelor inteligente
Orice date contractuale trebuie alocate unei locații: fie stocare, fie memorie. Este costisitor să modifici spațiul de stocare într-un contract inteligent, deci trebuie să te gândești unde ar trebui să existe datele tale.
Un tip address poate conține o adresă Ethereum care echivalează cu 20 de byți sau 160 de biți. Acesta returnează în notație hexazecimală cu un 0x la început.
Alte tipuri includ:
{#main-features}
- boolean
- întreg
- numere în virgulă fixă
- matrice de octeți de dimensiuni fixe
- matrice de octeți de dimensiuni dinamice
- literale raționale și întregi
- literale de tip string
{#software-included}
Pentru mai multe explicații, consultă documentele:
{#ethereum-10-clients}
{#ethereum-20-clients}
{#ethereum-framework}
- funcțiile de tip
publicpot fi apelate intern din cadrul contractului sau extern prin mesaje - funcțiile
privatesunt vizibile numai pentru contractul în care sunt definite și nu în contractele derivate
{#installation-guide-and-usage}
{#recommended-hardware-and-setup}
- Parametrul
valuede tipstringeste trecut în funcția:update_name - Este declarat
public, ceea ce înseamnă că oricine îl poate accesa - Nu este declarat
view, astfel încât să poată modifica starea contractului
{#storage}
Valorile care sunt stocate numai pe durata de viață a executării unei funcții contractuale se numesc variabile de memorie. Deoarece acestea nu sunt stocate permanent pe blockchain, acestea sunt mult mai ieftin de utilizat.
address.send()– Solidity
Află mai multe informații despre modul în care EVM stochează datele (stocare, memorie și stivă) în documentele Solidity.
{#image-download-and-installation}
{#1-download-eth-10-or-eth-20-images}
Exemple:
{#2-flash-the-image}
În termenii cei mai simpliști, funcțiile pot obține informații sau pot seta informații ca răspuns la tranzacțiile primite.
Există două tipuri de apeluri funcționale:
De asemenea, pot fi de tip public sau private
# Exemplu VyperstoredData: int128
// Exemplu Solidityfunction update_name(string value) public {dapp_name = value;}
{#3-insert-the-microsd-into-the-raspberry-pi-4-connect-an-ethernet-cable-and-attach-the-usb-ssd-disk-make-sure-you-are-using-a-blue-port}
{#4-power-on-the-device}
Iată o funcție pentru actualizarea unei variabile de stare pe un contract:
- parametru variabil și tip (dacă acceptă parametri)
- declarație internă/externă
{#5-log-in}
Ce se consideră ca modificator de stare:
// Exemplu Solidityfunction balanceOf(address _owner) public view returns (uint256 _balance) {return ownerPizzaCount[_owner];}
{#6-open-30303-port-for-geth-and-13000-if-you-are-running-prysm-beacon-chain-if-you-dont-know-how-to-do-this-google-port-forwarding-followed-by-your-router-model}
{#7-get-console-output}
dappName: public(string)@view@publicdef readName() -> string:return dappName
{#syncing-the-blockchain}
În plus față de variabilele și funcțiile pe care le definești în contract, există unele funcții speciale încorporate. Cel mai evident exemplu este:
{#monitoring-dashboards}
{#switching-clients}
Un contract complet ar putea arăta așa. Aici funcția constructor furnizează o valoare inițială pentru variabila dapp_name.
# exemplu Vyper@externaldef __init__(_beneficiary: address, _bidding_time: uint256):self.beneficiary = _beneficiaryself.auctionStart = block.timestampself.auctionEnd = self.auctionStart + _bidding_time
pragma solidity >=0.4.0 <=0.6.0;contract ExampleDapp {string dapp_name; //variabila de stare/*Apelat când contractul este implementat și inițializează valoarea*/constructor() public{dapp_name = "Exemplul meu de aplicație dapp";}//Funcția Getfunction read_name() public view returns(string){return dapp_name;}// Funcția Setfunction update_name(string value) public {dapp_name = value;}}Afișează tot
{#changing-parameters}
{#eth-10}
{#eth2}
{#nethermind-and-hyperledger-besu}
{#validator}
{#feedback-appreciated}
{#references}
- Crearea altor contracte.
- Folosirea
selfdestruct. - Trimiterea eterului prin apeluri.
- Apelarea oricărei funcții care nu este marcată
viewsaupure. - Folosirea de apeluri de nivel scăzut.
- Utilizarea ansamblului în linie care conține anumite coduri opcode.