Una persona ha declarado en el hilo del Foro DAO Ha comenzado la votación que ha podido votar más de una vez sobre una propuesta.
¿Puedo votar más de una vez por cada propuesta de The DAO?
La siguiente es la función del código fuentevote()
de The DAO .
function vote(
uint _proposalID,
bool _supportsProposal
) onlyTokenholders noEther returns (uint _voteID) {
Proposal p = proposals[_proposalID];
if (p.votedYes[msg.sender]
|| p.votedNo[msg.sender]
|| now >= p.votingDeadline) {
throw;
}
if (_supportsProposal) {
p.yea += balances[msg.sender];
p.votedYes[msg.sender] = true;
} else {
p.nay += balances[msg.sender];
p.votedNo[msg.sender] = true;
}
if (blocked[msg.sender] == 0) {
blocked[msg.sender] = _proposalID;
} else if (p.votingDeadline > proposals[blocked[msg.sender]].votingDeadline) {
// this proposal's voting deadline is further into the future than
// the proposal that blocks the sender so make it the blocker
blocked[msg.sender] = _proposalID;
}
Voted(_proposalID, _supportsProposal, msg.sender);
}
La primera declaración condicional en la vote()
función:
if (p.votedYes[msg.sender]
|| p.votedNo[msg.sender]
|| now >= p.votingDeadline) {
throw;
}
cancelará su transacción ( throw
) si su cuenta ya ha votado Sí ( p.votedYes[msg.sender]
) o No ( p.votedNo[msg.sender]
) en una propuesta.
Su transacción también se cancelará si vota después de la fecha límite de votación de la propuesta ( now >= p.votingDeadline
).
Se gastará un poco de gas (éter) cuando se cancele su transacción.
Aquí hay dos transacciones que envían votos para la misma propuesta desde la misma cuenta:
Estas dos transacciones son ambas llamadas a la vote()
función, ya que la firma que usa web3.sha3('vote(uint256,bool)').substr(0, 10)
produce el resultado 0xc9d27afe
que coincide con el inicio de los datos de entrada en ambas transacciones.
Y aquí está la segunda transacción que muestra la cancelación de la transacción.
La tarifa de la primera transacción fue de 0,001489425 éter, y la tarifa de la segunda transacción cancelada fue de 0,00315 éter. Tenga en cuenta que la segunda transacción cancelada costó más que la primera transacción exitosa.
Actualización de resultados de un útil usuario anónimo del foro DAOHub:
tayvano
privacidadisahumanright.eth
estimateGas()
me puede interesar (¿soy tan predecible?). Ahora he creado un script de Perl para listar propuestas, listar el estado de votación de cada cuenta contra las propuestas y votar sobre las propuestas, desde la línea de comando. Uso delestimateGas()
método para verificar el estado de la votación. Consulte github.com/bokkypoobah/TheDAOVoter/blob/master/theDAOVoter . Gracias @tayvano.