이 계약 사기는 어떻게 작동합니까?
누군가가 계속 만들고있는이 이상한 계약을 발견했습니다. 일종의 사기처럼 보입니다. 어떻게 작동합니까?
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{}
}
답변
2 Ismael
계약 정기 거래 내역 만 읽으면 생성 후 Start(string _question, string _response)
거래 0xc96ddea6...블록 10668934에서 다음과 같이 호출 하여 초기화되었다고 가정합니다.
- _question = "변호사들은 어떤 옷을 입나요?"
- _response = "LawsuiT"
그러나 내부 트랜잭션을 보면 10668933 블록 function New(string _question, bytes32 _responseHash)
에서 트랜잭션 0xbed05f75 ... 에 대한 이전 호출이 있었습니다.
에 대한 호출 은 피해자가 예상 한대로 Start
변경되지 않았 responseHash
으므로 호출 Try
이 실패합니다.
참고 :이 "허니팟"을 가지고 놀지 마십시오.지는 것은 매우 쉽고 당신이 이길 가능성은 낮습니다.