Example

by Maria Gomez

JavaScript

//Blockchain simulation
var contractBalance = 200;
var msg;

function sendMoney(user, amount)
{
document.write("sending money to: "+ user+ "." + " Amount: "+amount+"<br/>");
contractBalance -= amount;
FALLBACK()
}

//contract Bank
var userBalances = [];
function getBalance(){
    return contractBalance;
}

function addToBalance(){
if(userBalances[msg.sender] ==undefined)
{
userBalances[msg.sender]=0;
}
userBalances[msg.sender] = userBalances[msg.sender] + msg.value;
contractBalance += msg.value;

}

function getUserBalance(x){
return userBalances[x];

}

function withdrawBalance(){

 var amountToWithdraw = userBalances[msg.sender];
 sendMoney(msg.sender,amountToWithdraw);
 userBalances[msg.sender] = 0;
}

//Contract BankAttacker
var is_attack=true;
function FALLBACK()
{
 if(is_attack==true){
   is_attack=false;
   withdrawBalance();
 }


}

//Execution simulation
document.write("Contract Balance: "+contractBalance+"<br/>");
msg={
"sender":"david"
,"value":75
}
addToBalance();

document.write("Your balance in contract Bank is " + getUserBalance("david")+"<br/>");

msg={
"sender":"david"
}
withdrawBalance();

document.write("Your balance in contract Bank is " + getUserBalance("david")+"<br/>");