No puedo entender la diferencia de gas para el siguiente problema. Generé un valor hash sha256 y la salida que elegí para ser hexadecimal en minúsculas. Entonces, el valor de salida es una cadena hexadecimal de 64 caracteres. Luego guardé este valor en una variable bytes32 dentro de un contrato inteligente. El código del contrato inteligente es:
pragma solidity ^0.4.23;
contract Project {
bytes32 public value;
function addValue(bytes32 val) public {
value = val;
}
}
Usando remix, noté que la operación para agregar un valor costaba 43629 para algunos valores y 43693 para otros. Entonces, la diferencia es 64 de gas. ¿Alguien puede ayudarme a entender por qué sucede esto? Probé muchos valores y la diferencia fue de 64 gases, ¿fue aleatorio? También probé para almacenarlo como cadena. Luego, el costo fue constante para todas las entradas, tal vez porque los valores tienen la misma longitud, como dije, los valores de las entradas tienen 64 caracteres.
Del papel amarillo :
Gtxdatazero 4 Pagado por cada cero byte de datos o código para una transacción.
Gtxdatanonzero 68 Pagado por cada byte de datos o código distinto de cero para una transacción
Entonces, si reemplaza un valor distinto de cero con un cero en los datos de su transacción, reducirá el costo en 64 (68-4).
Tenga en cuenta que los 0 consecutivos no necesariamente importan, solo si representan un byte completo. Es más fácil ver si separa los bytes: d5 bf 2c b4 91 dd 63 f8 00 37 3f 16 ab 0f c4 86 ff e0 40 92 35 87 c0 0a dc ea d3 dc 4a 45 44 b6
. Entonces, el segundo valor que mencionó en su comentario tiene exactamente un byte cero.
usuario19510
kati
usuario19510
kati
usuario19510
kati
kati
usuario19510
kati
usuario19510