¿Cómo funciona esta estafa de contrato?
Noté que este contrato extraño que alguien sigue creando parece una especie de estafa, ¿cómo funciona?
https://etherscan.io/address/0x4fa738cf30036505d106b22f60e64bf52e64aa77/advanced#code:
/**
*Submitted for verification at Etherscan.io on 2020-08-16
*/
contract a1_quiz
{
function Try(string _response) external payable
{
require(msg.sender == tx.origin);
if(responseHash == keccak256(_response) && msg.value > 1 ether)
{
msg.sender.transfer(this.balance);
}
}
string public question;
bytes32 responseHash;
mapping (bytes32=>bool) admin;
function Start(string _question, string _response) public payable isAdmin{
if(responseHash==0x0){
responseHash = keccak256(_response);
question = _question;
}
}
function Stop() public payable isAdmin {
msg.sender.transfer(this.balance);
}
function New(string _question, bytes32 _responseHash) public payable isAdmin {
question = _question;
responseHash = _responseHash;
}
constructor(bytes32[] admins) public{
for(uint256 i=0; i< admins.length; i++){
admin[admins[i]] = true;
}
}
modifier isAdmin(){
require(admin[keccak256(msg.sender)]);
_;
}
function() public payable{}
}
Respuestas
Si solo lee el historial de transacciones regulares del contrato, asumiría que después de la creación se inicializó llamando Start(string _question, string _response)
al 0xc96ddea6...bloque de transacciones 10668934 con
- _question = "¿Qué tipo de ropa usan los abogados?"
- _response = "LawsuiT"
Pero si ve las transacciones internas, hubo una llamada anterior function New(string _question, bytes32 _responseHash)
en la transacción 0xbed05f75 ... en el bloque 10668933.
La llamada a Start
no cambió responseHash
como la víctima hubiera esperado, por lo que la llamada a Try
fallará.
Nota: No juegues con estos "botes de miel", es muy fácil perder y es poco probable que ganes.