Permitir múltiples encuestas para el usuario

¿Hay alguna manera de permitir que el usuario vote por múltiples propuestas? Por ejemplo: el usuario A puede votar por las propuestas: P1, P2, P3, etc. Una vez que A ha votado por P1, no se le debe permitir votar por P1, pero puede votar por P2 y P3. Puedo redactar un contrato que muestre qué propuestas ha votado el candidato. ¡¡Alguien puede ayudar!!

¿Estás hablando de prueba de participación?
¡Todo es posible! Sin embargo, cómo se puede lograr esto depende de su implementación. Por favor ilumínenos.
Soy incapaz de idear una lógica para ello. Alguien me puede ayudar con eso. Tengo estructura para la propuesta:
Oh, acabo de responder, pero olvidé preguntarte si realmente usas Solidity.
Sí. estoy usando solidez

Respuestas (1)

Puede mantener la elegibilidad de los usuarios para votar por una propuesta en particular en una estructura como

mapping(uint => mapping(address => bool)) hasVoted;
//      ^proposal IDs   ^users     ^already voted or not
mapping(uint => uint) votesCount;

y luego verificar si son elegibles para votar, aquí hay un ejemplo en Solidity:

modifier canVote(address user, uint proposal){
    require(!hasVoted[proposal][user]);
    _;
}

function vote(uint proposal)
public 
canVote(msg.sender, proposal) //throw if user has already voted
{
    hasVoted[proposal][msg.sender] = true; //make note of the fact he's voting now
    votesCount[proposal]++;
    //other voting logic you need
}

Tenga cuidado de utilizar un tipo adecuado para los ID de su propuesta, como uint8o lo que sea que sea suficiente.

si quiero verificar/permitir que el usuario vote por un candidato en una propuesta, entonces tendría que modificar mi mapeo hasVoted, ¿no? mapeo(bytes32 => mapeo(bytes32 => mapeo(dirección => bool))) hasVoted;. sin embargo, el usuario debería poder votar por el candidato en otra propuesta, digamos P2.
Bueno, naturalmente, el código debería depender de lo que quieras que haga. Este ejemplo muestra solo la votación de propuestas, es decir, cuántos votos recoge una propuesta. Si la estructura de votación es más compleja que eso, probablemente signifique que solo tiene que cambiar votesCountla estructura y su uso. hasVotedpuede quedar igual.
Lamento haber hecho estas preguntas. soy nuevo en programacion y solidity
No hay problemas, las preguntas son de lo que se trata este sitio. Aclarando lo anterior: creo que no tienes que alterar hasVoted, porque un usuario puede votar por una propuesta solo una vez, sin importar qué candidato eligió (¿es así?)
Quiero permitir que el usuario vote por múltiples propuestas. Pero solo un candidato en cada propuesta. Por ejemplo: Propuestas:P1(C1,C2) ;P2(C3,C4:candidatos). El usuario debe poder votar por P1 y P2, pero solo un candidato en cada uno. Además, si el usuario ha votado por el candidato en P1, entonces no se le debería permitir votar por el candidato en P1 nuevamente.
Sí, para esta hasVotedestructura de caso de uso y el modificador en este ejemplo siguen siendo los mismos.