pragma solidity ^0.4.21; import "github.com/OpenZeppelin/zeppelin-solidity/contracts/math/SafeMath.sol"; contract Accounts { using SafeMath for uint256; event Logging(address sender, uint _timestamp, uint _amount, bool _state); event checkBalance(uint bal); struct account { mapping(uint => Book[]) books; } struct Book { uint timestamp; uint amount; bool state; } mapping (address => account) accounts; function readBook(uint _deposit_id, uint _index) public { Book storage _books = accounts[msg.sender].books[_deposit_id][_index]; uint book_timestamp = _books.timestamp; uint book_amount = _books.amount; bool book_state = _books.state; emit Logging(msg.sender, book_timestamp, book_amount, book_state); } function deposit(uint _deposit_id) public payable { require(msg.value > 0); accounts[msg.sender].books[_deposit_id].push(Book(now, msg.value, true)); } function withdraw1(uint _deposit_id, uint _amount) public { uint id_income = 0; uint id_outcome = 0; for (uint i = 0; i <= accounts[msg.sender].books[_deposit_id].length; i++) { if (accounts[msg.sender].books[_deposit_id][i].state == true) { id_income += accounts[msg.sender].books[_deposit_id][i].amount; } if (accounts[msg.sender].books[_deposit_id][i].state == false) { id_outcome -= accounts[msg.sender].books[_deposit_id][i].amount; } } uint id_balance = id_income - id_outcome; emit checkBalance(id_balance); require(id_balance >= _amount); accounts[msg.sender].books[_deposit_id].push(Book(now, _amount, false)); require(msg.sender.send(_amount)); } function withdrawAll() public { msg.sender.transfer(address(this).balance); } function withdraw2(uint _deposit_id, uint _amount) payable public { uint id_balance = 0; for (uint i = 0; i <= accounts[msg.sender].books[_deposit_id].length; i++) { if (accounts[msg.sender].books[_deposit_id][i].state == true) { id_balance += accounts[msg.sender].books[_deposit_id][i].amount; } if (accounts[msg.sender].books[_deposit_id][i].state == false) { id_balance -= accounts[msg.sender].books[_deposit_id][i].amount; } } emit checkBalance(id_balance); require(id_balance >= _amount); accounts[msg.sender].books[_deposit_id].push(Book(now, _amount, false)); msg.sender.transfer(_amount); } function totalDepositAmount() public view returns(uint256) { return address(this).balance; } }
0.4.21