2. Sintaxi Bàsica de Solidity¶
2.1 Estructura d'un Contracte¶
Tot contracte Solidity segueix una estructura estandarditzada. Els elements obligatoris inclouen l'identificador de llicència SPDX, la directiva pragma que indica la versió del compilador, i la paraula clau contract que defineix el contracte.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
contract PrimerContract {
// Variables d'estat (emmagatzemades a la blockchain)
string public nom;
uint256 public valor;
// Constructor: s'executa UNA vegada en el desplegament
constructor(string memory _nom, uint256 _valor) {
nom = _nom;
valor = _valor;
}
// Funció que modifica l'estat
function actualitzarValor(uint256 _nouValor) public {
valor = _nouValor;
}
// Funció que llegeix l'estat (view)
function obtenirValor() public view returns (uint256) {
return valor;
}
}
Elements Clau
- SPDX-License-Identifier Identificador de llicència obligatori des de Solidity 0.6.8. Indica la llicència del codi (MIT, GPL, etc.).
- pragma solidity Especifica la versió del compilador. El símbol ^ indica compatibilitat amb versions menors.
- Variables d'estat S'emmagatzemen permanentment a la blockchain. Cada escriptura consumeix gas i és costosa.
- Constructor Funció especial que s'executa una sola vegada durant el desplegament. Inicialitza les variables d'estat.
2.2 Tipus de Dades¶
Solidity disposa d'un sistema de tipus ric que inclou tipus valor (copiats quan s'assignen) i tipus referència (passats per referència). Conèixer la diferència és essencial per evitar comportaments inesperats i optimitzar el consum de gas.
bool public esValid = true;
int256 public enterNegatiu = -100;
uint256 public enterPositiu = 100;
address public propietari = 0x71C7...;
address payable public compte;
bytes32 public hash;
enum Estat { Pendent, Procesant, Completat }
string public missatge = "Hola Blockchain";
uint256[] public numeros; // Array dinàmic
uint256[5] public cincNumeros; // Array fix
mapping(address => uint256)
public saldos;
struct Persona {
string nom;
uint256 edat;
address wallet;
}