//Write your own contracts here. Currently compiles using solc v0.4.15+commit.bbb8e64f. pragma solidity >=0.4.18; contract DAPP { struct User { uint user_id; string user_name; uint[] connections; uint available_balance; } struct Link { uint bal; } mapping (uint => User) users; mapping (uint => mapping(uint => Link)) links; uint[] public UserIDs; function registerUser(uint user_id, string user_name, uint balance) public { User storage newUser = users[user_id]; newUser.user_id = user_id; newUser.user_name = user_name; newUser.available_balance = balance; UserIDs.push(user_id); } function createAcc(uint user_id1 ,uint user_id2, uint bal1, uint bal2) public { if (bal1 <= users[user_id1].available_balance && bal2 <= users[user_id1].available_balance){ users[user_id1].available_balance -= bal1; users[user_id2].available_balance -= bal2; users[user_id1].connections.push(user_id2); links[user_id1][user_id2].bal = bal1; links[user_id2][user_id1].bal = bal2; users[user_id2].connections.push(user_id1); } } function sendAmount(uint user_id1, uint user_id2 ) public { bool[] memory visited; uint[] memory path; path[0] = user_id1; findPath(user_id1,user_id2,visited,path); bool can_continue = false; if (path.length > 0) can_continue = true; for (uint j = 0; j < path.length - 1; j++){ if (links[path[j]][path[j+1]].bal < 1) can_continue = false; } if (can_continue){ for ( j = 0; j < path.length - 1; j++){ links[path[j]][path[j+1]].bal -= 1; links[path[j+1]][path[j]].bal += 1; } } } function findPath(uint user_id1, uint user_id2, bool[] visited, uint[] path ) public { if (user_id1 == user_id2) return; visited[user_id1] = true; if (users[user_id1].connections.length > 0){ for (uint j = 0; j < users[user_id1].connections.length; j++){ if (visited[users[user_id1].connections[j]] != true){ path[path.length] = user_id1; findPath(users[user_id1].connections[j],user_id2,visited,path); } } } delete path[path.length]; } }
0.4.18