Bu sözleşme dolandırıcılığı nasıl işliyor?
Birinin oluşturmaya devam ettiği bu tuhaf sözleşmeyi fark ettim, bir çeşit aldatmaca gibi görünüyor, nasıl çalışıyor?
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{}
}
Yanıtlar
Yalnızca sözleşmenin normal işlem geçmişini okursanız, oluşturulduktan sonra 10668934 Start(string _question, string _response)
işlem 0xc96ddea6...bloğunu arayarak başlatıldığını varsayarsınız.
- _question = "Avukatlar ne tür kıyafetler giyer?"
- _response = "LawsuiT"
Ancak dahili işlemleri görürseniz, 10668933 bloğunda 0xbed05f75 ...function New(string _question, bytes32 _responseHash)
işleminde bir önceki çağrı yapılmıştır.
Bir mağdurun beklediği gibi çağrı Start
değişmedi responseHash
, bu nedenle çağrı Try
başarısız olacaktır.
Not: Bu "bal potları" ile oynamayın, kaybetmek çok kolaydır ve kazanma ihtimaliniz düşüktür.