Comment fonctionne cette escroquerie de contrat?
Vous avez remarqué ce contrat étrange que quelqu'un ne cesse de créer, ressemble à une sorte d'arnaque, comment ça marche?
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{}
}
Réponses
Si vous ne lisez que l'historique des transactions régulières du contrat, vous supposeriez qu'après sa création, il a été initialisé en appelant Start(string _question, string _response)
au 0xc96ddea6...bloc de transaction 10668934 avec
- _question = "Quels types de vêtements les avocats portent-ils?"
- _response = "LawsuiT"
Mais si vous voyez les transactions internes, il y avait un appel précédent function New(string _question, bytes32 _responseHash)
dans la transaction 0xbed05f75 ... au bloc 10668933.
L'appel à Start
n'a pas changé responseHash
comme une victime l'aurait prévu, donc l'appel à Try
échouera.
Remarque: ne jouez pas avec ces "pots de miel", il est très facile de perdre et peu probable que vous gagniez.