cómo crear un bucle for anidado que almacene el valor hash para cada

Tengo dos matrices:

address[ ] addresses
uint [ ] numbers

Quiero crear una función que cree otra matriz que almacene el valor hash de ambos.

bytes32[ ] addressNumbers

por ejemplo, si tengo dos direcciones almacenadas y dos unidades:

address[address1, address2] addresses,
uint [1, 2] numbers.

Quiero hacer un hash con ellos para keccak256(address, uint)obtener una matriz:

bytes 32[ address1,1 ,address1,2 , address2,1 , address2,2 ] 
addressNumbers

Supongo que necesito usar un bucle for anidado, pero tengo problemas para descubrir cómo. alguno de ustedes me puede ayudar a poner?

Necesita adaptación a la forma en que funciona Ethereum. ¿Qué vas a hacer con los hashes?
está en relación con otra pregunta aquí: ethereum.stackexchange.com/questions/13994/… quiero unir las dos matrices para crear voterIssues para cada votante en cada tema.

Respuestas (1)

Lo que puede hacer es tratarlo como una unión de muchos a muchos entre dos tablas, Votantes y Problemas. La relación suele abordarse con una tercera mesa, en este caso Voto (o Ballet si reduce la confusión).

En resumen, coloque Votantes y Problemas en tablas (matrices o asignaciones con índices). Algunos patrones aquí: ¿Existen patrones de almacenamiento simples y bien resueltos para Solidity?

Elija un patrón que le permita confirmar fácilmente que un votante está realmente registrado y que realmente existe un problema. Luego haga hash de las claves y presione un voto en la tabla de votos.

Por "tabla" me refiero a una de las construcciones descritas en la respuesta vinculada anteriormente. Piensa en las fortalezas y debilidades y elige en consecuencia. Para los votos en sí, consideraría:

struct Vote {
  bool yayNay;
  bool isVote;
}

mapping(she3HashKey => Vote) voteStructs;

El segundo campo se establecería en verdadero para todos los votos emitidos para que pueda distinguir un "falso" real de un 0 predeterminado, porque...

En mi enfoque , necesita funciones simples para verificar si existen cosas:

isVoter() public constant returns(bool isIndeed) {}
isIssue() public constant returns(bool isIndeed) {}
isVote()  public constant returns(bool isIndeed) {}

Eso es imprescindible o podría enredarse en problemas incómodos, por ejemplo, diferenciar un valor predeterminado (falso) de un "No" real.

Verifique los dos primeros antes de permitir un nuevo Voto.

if(!isVoter(msg.sender)) throw;
if(!isIssue(issueId)) throw;
// continue ... 

Verifique el tercero antes de hacer algo con un voto almacenado.

Mantenga sus cuentas a medida que avanza para que pueda evitar la iteración a toda costa.

Espero eso ayude.