Title: [ERC-20] Фейковые транзакции )) Post by: bomj on August 07, 2019, 09:29:11 PM Некоторое время тому назад прочитал любопытную статью Джеффа Ху (https://medium.com/taipei-ethereum-meetup/etherscan-tricks-transfer-erc20-tokens-out-of-thin-air-b4c51dc7e7bb) о фейковых транзакциях
ERC-20 токенов, в которой рассказано, как создать контракт с помощью которого можно сделать фейковый вывод, созданных по данному контракту токенов, с любого адреса. Т.е. заглянув на свой Эфирный адрес вы можете обнаружить, что с вашего адреса было выведено н-ное кол-во каких-то-либо токенов. На самом деле никакие токены не выводились, ваш баланс не изменился, как и не пополнился баланс адреса на который якобы ушли данные токены. Т.е. не произошло никакого перемещения токенов, но в блокчейне сохранилась запись о событии. Код Github здесь. (https://gist.github.com/yhuag/6cee2ee80d78ffdc129372920996d7da) Я протестировал контракты и действительно все работает. Через некоторое время мне было скучно и я решил закинуть подобный контракт в Гл. сеть эфира. В качестве жертвы, с чьего адреса я решил совершить фейк. вывод, я выбрал всеми нами "любимый" WEX. Подумал: "Мож хоть разок икнут эти жертвы аборта )" Возможно некоторые из вас уже видели эту транзакцию: https://etherscan.io/tx/0x25e96fbce81f03d819d5bc430b274241c79af0e038dcc1e11599e523824bbad6 В дальнейшем я сделал еще пару транзакций, где якобы вывел эти токены на контракт Dai-Uniswap (https://etherscan.io/tx/0xf2ad52a65be0465aa81c4f3aab1d98d4261201a3e45dc5eb1510baab9a419de8). В реальности же никаких перемещений токенов не происходило. Контракт: https://etherscan.io/address/0x90c0b811b44e885f6a4ea520ea76e2b8a06e96f1 В данном контракте я создал токены Dai Stablecoin v0.0x536D696C653A29, которые я якобы и вывел с WEXа. Если кто был внимательным, то он конечно увидел, что версия токена - 0.0x536D696C653A29 и если перевести из hex в text, то получите = Smile:) Вы можете попробовать создать свой контракт, а можете воспользоваться данным c помощью MyEtherWallet (https://www.myetherwallet.com/interface/interact-with-contract), используя ABI контракта: Quote [ { "constant": true, "inputs": [], "name": "name", "outputs": [ { "name": "", "type": "string" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "name": "_spender", "type": "address" }, { "name": "_value", "type": "uint256" } ], "name": "approve", "outputs": [ { "name": "", "type": "bool" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [], "name": "totalSupply", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "name": "_from", "type": "address" }, { "name": "_to", "type": "address" }, { "name": "_value", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "name": "", "type": "bool" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [], "name": "INITIAL_SUPPLY", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "decimals", "outputs": [ { "name": "", "type": "uint8" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "name": "_owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "name": "_sender", "type": "address" }, { "name": "_receiver", "type": "address" }, { "name": "_value", "type": "uint256" }, { "name": "_note", "type": "string" } ], "name": "fTransfer", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [], "name": "owner", "outputs": [ { "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "symbol", "outputs": [ { "name": "", "type": "string" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "name": "_to", "type": "address" }, { "name": "_value", "type": "uint256" } ], "name": "transfer", "outputs": [ { "name": "", "type": "bool" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [ { "name": "_owner", "type": "address" }, { "name": "_spender", "type": "address" } ], "name": "allowance", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "anonymous": false, "inputs": [ { "indexed": true, "name": "_from", "type": "address" }, { "indexed": true, "name": "_to", "type": "address" }, { "indexed": false, "name": "_value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "name": "_owner", "type": "address" }, { "indexed": true, "name": "_spender", "type": "address" }, { "indexed": false, "name": "_value", "type": "uint256" } ], "name": "Approval", "type": "event" } ] Используйте функцию - FTransfer Удачи... Данная статья размещена в ознакомительных целях..............))) |