Обожаю этереумные смарт контракты.
У сайта etherscan.io есть много достоинств и один недостаток - они верят авторам контрактов: хочешь опубликовать код - публикуй. А вот дизассемблера у Solidity нету. То есть, можно опубликовать что-то не то.
И народ уже начал строить ловушки на хакеров. Вот одна из них - ну просто конфетка:
pragma solidity ^0.4.18;
contract MultiplicatorX2
{
address public Owner = msg.sender;
function() public payable{}
function withdraw() payable public
{
require(msg.sender == Owner);
Owner.transfer(this.balance);
}
function multiplicate(address adr) public payable
{
if(msg.value>=this.balance)
{
adr.transfer(this.balance+msg.value);
}
}
}
Контракт - проще некуда. На нем лежить один ether - это около 300 баксов. Хочешь их забрать - переведи БОЛЬШУЮ (> 1 ether) сумму "if(msg.value>=this.balance)" - и все деньги пойдут тебе.
Ну... ловушка, да. Опубликованный код не идентичен биткоду в блокчейне.
Вот адрес:
https://etherscan.io/address/0xe26e90598190a98c92c75204c9a4ecfe5983f8e0#codeТак вот. По ссылке видим, что:
первый взнос в размере 1 эфир сделал создатель контракта
второй взнос сделал неизвестный хакер
после чего владелец контракта забрал деньги и был таков
Был таков? Я сказал - был таков?
Нет, он выложил новый контракт:
https://etherscan.io/address/0x5aA88d2901C68fdA244f1D0584400368d2C8e739Обожаю этереумные смарт контракты.