Solidity:
// SPDX-License-Identifier: MIT
// compiler version must be greater than or equal to 0.8.17 and less than 0.9.0
pragma solidity ^0.8.17;
contract HelloWorld {
string public greet = "Hello World!";
}
Donde:
pragma solidity ^0.8.17 especifica la version del compilador de Solidity.
contract HelloWorld define el comienzo del contrato y el nombre del mismo, las {} indican el bloque donde estarán las funciones de nuestro contrato.
string public greet es la forma en como se define una variable de estado que contendra una cadena de texto (”Hello World!”) que es de tipo string, donde la visibilidad de la variable es publica que quiere decir que se puede leer la variable desde cualquier función dentro del contrato o desde otros contratos.
Cairo:
#[starknet::contract]
mod HelloStarknet {
#[storage]
struct Storage {
greet: felt252,
}
}
Donde:
el macro #[starknet::contract] indica que estamos escribiendo un contrato para Starknet.
mod HelloStarknet define el comienzo del contrato y el nombre del mismo y al igual que en solidity las {} indican el bloque donde estarán las funciones de nuestro contrato.
En el caso de Cairo 1, todas las variables de estado se declaran dentro del un struct de nombre Storage
A diferencia de solidity en cairo un string es una colección de datos guardados en un tipo de dato felt, los Strings pueden tener un maximo de 31 caracteres de longitud, en cairo no necesitamos definir la visibilidad de la variable greet, por default al ser de tipo Storage es accesible para todas las funciones del contrato y para otros contratos
| Solidity | Cairo | |
|---|---|---|
| Boolean | bool | bool |
| Uint | uint8, uint16, uint32, uint64, uint128, uint256 | u8, u16, u32, u64, u128, u256, usize |
| Int | int8, int16, int32, int64, int128, int256 | *felt |
| address | address | ContractAddress |