Apuntes para repaso
Orden de Precedencia de Operadores
The following is the order of precedence for operators, listed in order of evaluation.
Precedence |
Description |
Operator |
---|---|---|
1 |
Postfix increment and decrement |
|
New expression |
|
|
Array subscripting |
|
|
Member access |
|
|
Function-like call |
|
|
Parentheses |
|
|
2 |
Prefix increment and decrement |
|
Unary minus |
|
|
Unary operations |
|
|
Logical NOT |
|
|
Bitwise NOT |
|
|
3 |
Exponentiation |
|
4 |
Multiplication, division and modulo |
|
5 |
Addition and subtraction |
|
6 |
Bitwise shift operators |
|
7 |
Bitwise AND |
|
8 |
Bitwise XOR |
|
9 |
Bitwise OR |
|
10 |
Inequality operators |
|
11 |
Equality operators |
|
12 |
Logical AND |
|
13 |
Logical OR |
|
14 |
Ternary operator |
|
Assignment operators |
|
|
15 |
Comma operator |
|
Variables Globales
abi.decode(bytes memory encodedData, (...)) returns (...)
: ABI-decodifica la data provista. Los tipos son dados en paréntesis como segundo argumento. Ejemplo:(uint a, uint[2] memory b, bytes memory c) = abi.decode(data, (uint, uint[2], bytes))
abi.encode(...) returns (bytes memory)
: ABI-codifica los argumentos dadosabi.encodePacked(...) returns (bytes memory)
: Realiza la codificación empaquetada de los argumentos dados. ¡Note que esta codificación puede ser ambigua!abi.encodeWithSelector(bytes4 selector, ...) returns (bytes memory)
: ABI-codifica los argumentos dados comenzando desde el segundo y antepone el selector dado de cuatro bytesabi.encodeCall(function functionPointer, (...)) returns (bytes memory)
: ABI-codifica a llamada afunctionPointer
con los argumentos encontrados en la tupla. Realiza un completa verificación de tipos asegurándose que los tipos coincidan con la signatura de la función. El resultado equivale aabi.encodeWithSelector(functionPointer.selector, (...))
abi.encodeWithSignature(string memory signature, ...) returns (bytes memory)
: Equivalente aabi.encodeWithSelector(bytes4(keccak256(bytes(signature)), ...)
bytes.concat(...) returns (bytes memory)
: Concatena un número variable de argumentos a un array de un bytestring.concat(...) returns (string memory)
: Concatena un número variable de argumentos a un array de un stringblock.basefee
(uint
): pago base del bloque actual (EIP-3198 y EIP-1559)block.chainid
(uint
): id de la cadena actualblock.coinbase
(address payable
): dirección del minero del bloque actualblock.difficulty
(uint
): dificultad del bloque actualblock.gaslimit
(uint
): límite de gas del bloque actualblock.number
(uint
): número del bloque actualblock.timestamp
(uint
): marca de fecha del bloque actual en segundos desde el tiempo Unixgasleft() returns (uint256)
: gas restantemsg.data
(bytes
): datos de llamada completosmsg.sender
(address
): remitente del mensaje (llamada actual)msg.sig
(bytes4
): primeros cuatro bytes de los datos de llamada (i.e. identificador de función)msg.value
(uint
): cantidad de wei enviados con el mensajetx.gasprice
(uint
): precio de gas de la transaccióntx.origin
(address
): remitente de la transacción (cadena de la llamada completa)assert(bool condition)
: aborta la ejecución y revierte los cambios de estado si la condición esfalse
(usar para error interno)require(bool condition)
: aborta la ejecución y revierte los cambios de estado si la condición esfalse
(usar para entradas mal construidas o error en componente externo)require(bool condition, string memory message)
: aborta la ejecución y revierte los cambios de estado si la condición esfalse
(usar para entradas mal construidas o error en componente externo). También provee mensaje de error.revert()
: aborta la ejecución y revierte los cambios de estadorevert(string memory message)
: aborta la ejecución y revierte los cambios de estado proveyendo una cadena de caracteres explicativablockhash(uint blockNumber) returns (bytes32)
: hash del bloque dado - solo funciona para los 256 bloques más recienteskeccak256(bytes memory) returns (bytes32)
: computa el hash Keccak-256 de la entradasha256(bytes memory) returns (bytes32)
: computa el hash SHA-256 de la entradaripemd160(bytes memory) returns (bytes20)
: computa el hash RIPEMD-160 de la entradaecrecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) returns (address)
: recupera la dirección asociada con la clave pública desde la signatura de curva elíptica, devuelve cero en error.addmod(uint x, uint y, uint k) returns (uint)
: computa(x + y) % k
donde la adición se lleva a cabo con precisión arbitraria y no se detiene en2**256
. Impone quek != 0
a partir de la versión 0.5.0mulmod(uint x, uint y, uint k) returns (uint)
: computa(x * y) % k
donde la multiplicación se lleva a cabo con precisión arbitraria y no se detiene en2**256
. Impone quek != 0
a partir de la versión 0.5.0.this
(tipo del contrato actual): el contrato actual, explícitamente convertible aaddress
oaddress payable
super
: un nivel más alto del contrato en la jerarquía de herenciaselfdestruct(address payable recipient)
: destruye el contrato actual enviando sus fondos a la dirección dada<address>.balance
(uint256
): balance de la dirección en Wei<address>.code
(bytes memory
): código en la dirección (puede estar vacío)<address>.codehash
(bytes32
): el código hash de la dirección<address payable>.send(uint256 amount) returns (bool)
: envía la cantidad dada de Wei a la dirección, regresafalse
al fallar<address payable>.transfer(uint256 amount)
: envía la cantidad dada de Wei a la dirección, lanza una excepción al fallartype(C).name
(string
): el nombre del contratotype(C).creationCode
(bytes memory
): creación en bytecode del contrato dado, véase Información de Tipos.type(C).runtimeCode
(bytes memory
): bytecode en tiempo de ejecución del contrato dado, véase Información de Tipos.type(I).interfaceId
(bytes4
): valor que contiene el identificador de la interface EIP-165 de la intergace dada, véase Información de Tipos.type(T).min
(T
): el valor mínimo representable por el tipo enteroT
, véase Información de Tipos.type(T).max
(T
): el valor máximo representable por el tipo enteroT
, véase Información de Tipos.
Especificadores de la Visibilidad de Funciones
function myFunction() <visibility specifier> returns (bool) {
return true;
}
public
: visible externamente e internamente (crea una función getter para variables de estado/almacenamiento)private
: solamente visible en el contrato actualexternal
: solamente visible externamente (solo para funciones) - i.e. solo se puede llamar por mensaje (a través dethis.func
)internal
: solamente visible internamente
Modificadores
pure
para funciones: No acepta la modificación o acceso al estado.view
para funciones: No acepta la modificación del estado.payable
para funciones: Permite recibir Ether junto con una llamada.constant
para variables de estado: No permite la asignación (excepto la inicialización), no ocupa lugar de almacenamiento.immutable
para variables de estado: Permite exactamente una asignación en el tiempo de construcción y es constante después. Se almacena en el código.anonymous
para eventos: No almacena la signatura del evento como tema.indexed
para parámetros de eventos: Almacena el parámetro como tema.virtual
para funciones y modificadores: Permite que el comportamiento de las funciones y modificadores se modifique en contratos derivados.override
: Establece que esta función, modificador o variable de estado pública cambia el comportamiento de una función o modificador en un contrato de base.