¿Qué es uint256?

Con respecto a Solidity, ¿Qué es UINT256?

Del ejemplo del token en https://ethereum.org/token :

/* This creates an array with all balances */
mapping (address => uint256) public balanceOf;

Más allá de ser un tipo variable en informática general, me encantaría obtener una mejor comprensión y contexto en el mundo de Ethereum. ¿Por qué no usar simplemente un INT? Asumiendo que es un tipo específico de Integer, ¿qué denota la "U"?

Encontré, uint significa int sin firmar. uint no permite números negativos, tiene un rango de 0 a 4,294,967,295, comparado con el rango de -2,147,483,648 a 2,147,483,647 para un int (Fuente: stackoverflow.com/questions/3068474/… )
@BruceSeymour Esos son tipos de C# predeterminados. Estoy bastante seguro de que C# tiene una longitud de int predeterminada que es mucho más corta que la predeterminada de Solidity, por lo tanto, diferentes rangos.

Respuestas (2)

Con respecto a la Solidez...

Esta es realmente una pregunta más general de informática que se respondería mejor en Stack Overflow.

A riesgo de repetir lo que ha enlazado @Ismael...

  • U- sin signo (lo que significa que este tipo solo puede representar números enteros positivos, no enteros positivos y negativos)
  • INT- entero
  • 256- 256 bits de tamaño

Contexto: La EVM (Ethereum Virtual Machine) utiliza 256 bits como tamaño de palabra. Ver: Justificación detrás de palabras de 256 bits en EVM

Gracias, el contexto con respecto a la solidez es útil. También encontré este artículo: stackoverflow.com/questions/247873/…
es mejor dar un ejemplo de cómo se ve un uint256.

Enteros en solidez:

uint256( uintes un alias) es un entero sin signo que tiene:

  • valor mínimo de 0
  • valor máximo de 2^256-1 = 115792089237316195423570985008687907853269984665640564039457584007913129639935 //78 dígitos decimales

int256( intes un alias) es un entero con signo que tiene:

  • valor mínimo de -2^255 = -57896044618658097711785492504343953926634992332820282019728792003956564819968
  • valor máximo de 2^255-1 = 57896044618658097711785492504343953926634992332820282019728792003956564819967

Por ejemplo, en Solidity podríamos escribir el siguiente código:

uint8 public constant decimals = 6;
uint256 public constant totalSupply = 1000000*10**uint256(decimals); // 1000000000000

PD Es inusual que int/ uinten Solidity tenga un tamaño de 256 bits, porque hay lenguajes tan populares como C#/Java que tienen intun tipo de datos con un tamaño de 32 bits:

  • valor mínimo de -2^31 = -2147483648
  • valor máximo de 2^31-1 = 2147483647
Creo que se eligieron 256 bits para que hubiera suficientes direcciones para que la red ethereum siguiera funcionando indefinidamente.
Las direcciones de @forgetso en Ethereum son de 160 bits, no de 256 bits. Las palabras en el EVM tienen una longitud de 256 bits y uint256casi siempre se usan para balances.