pragma solidity ^0.4.23; contract Accounts { mapping(address => Account) accounts; struct Account { address ID; int64 Balance; bytes32[] History; } event BalanceUpdated(address sender, address receiver, int64 value); function updateBalance(address _receiver, int64 _value) public { // check if balance of _sender is under the limit require(accounts[msg.sender].Balance - _value > -100, "too much negative balance"); // substract _value from _sender account accounts[msg.sender].Balance = accounts[msg.sender].Balance - _value; // add _value to _receiver account accounts[_receiver].Balance = accounts[_receiver].Balance + _value; // add transaction to history of sender and receiver accounts // emit BalanceUpdated emit BalanceUpdated(msg.sender, _receiver, _value); } function getBalance(address _address) public view returns (int64) { return accounts[_address].Balance; } }