Cómo obtener el saldo de la dirección después de que se emitió un bloque en particular

¿Cómo obtener el saldo de la dirección si conoce el número de bloque? En solidity puede llamar a address.balance, pero sin especificar un bloque en particular. ¿Hay alguna manera de hacer esto en solidez o solo en py/js?

Respuestas (3)

Si entiendo correctamente, desea obtener el saldo de una dirección en particular en un número de bloque determinado, lo que no puede hacer en Solidity. Si este fuera el caso, haría imposible cualquier modo que no sea de sincronización completa, ya que la verificación de bloques requeriría acceso al estado en cualquier bloque arbitrario en el pasado, lo que geth --fast no podría hacer. Verificar bloques en nodos completos también sería mucho más intensivo debido al acceso de estado de bloque arbitrario.

Como señala @flygoing, no puede obtener un saldo histórico en Solidity, pero puede obtener ese valor fuera de la cadena si está ejecutando un nodo de archivo completo (o tiene acceso a un nodo de archivo completo a través del RPC). El RPC eth_getBalancetoma un argumento de bloque. Si no tiene un nodo de archivo completo, su único recurso es crear el saldo de las transacciones, lo que no es fácil de forma descentralizada (pero no es demasiado difícil con el Etherscan totalmente centralizado).

En esto, puede hacer puntos de control en Solidity (guardar un estado y luego consultar desde ese estado en un número de bloque):

Aquí hay un ejemplo: https://github.com/Giveth/minime/blob/master/contracts/MiniMeToken.sol