//Write your own contracts here. Currently compiles using solc v0.4.15+commit.bbb8e64f. pragma solidity ^0.4.25; contract deCent{ uint userCount = 0; struct User { uint id; string name; uint[] peers; uint[] accounts; } mapping(uint => User) users; mapping(uint => uint) pred; struct jointAccount { uint id; mapping(uint => uint) balances; } uint currentAcc = 0; mapping(uint => jointAccount) public accounts; function registerUser(uint user_id, string user_name) public { User storage user = users[user_id]; user.id = user_id; user.name = user_name; userCount += 1; } function createAccount(uint user_id1, uint user_id2,uint balance) public { User storage user1 = users[user_id1]; User storage user2 = users[user_id2]; accounts[currentAcc] = jointAccount({id: currentAcc}); accounts[currentAcc].balances[user_id1] = balance/2; accounts[currentAcc].balances[user_id2] = balance/2; user1.peers.push(user_id2); user1.accounts.push(currentAcc); user2.peers.push(user_id1); user2.accounts.push(currentAcc); currentAcc += 1; } uint[] queue; mapping(uint => bool) vis; function bfs(uint user_id1, uint user_id2, uint amount) internal { for(uint i = 0; i < userCount; i+=1 ){ vis[users[i].id] = false; } vis[user_id1] = true; queue.length = 0; queue.push(user_id1); uint ret = 0; while(ret != 1){ uint id = queue[0]; delete queue[0]; for(i = 0; i < users[id].peers.length; i+=1){ if(accounts[users[id]].accounts[i].balances[id] < amount) continue; if(!vis[users[id].peers[i]]){ vis[users[id]].peers[i] = true; queue.push(users[id].peers[i]); pred[users[id].peers[i]] = id; if(users[id].peers[i] == user_id2){ ret = 1; break; } } } } } function transfer(uint user_id1, uint user_id2, uint amount) internal { for(uint i = 0; i < users[user_id1].peers.length; i+=1){ if(users[user_id1].peers[i] == user_id2){ accounts[] } } } function sendAmount(uint user_id1, uint user_id2, uint amount) public returns(uint){ bfs(user_id1,user_id2,amount); uint temp = user_id2; while(temp != user_id1){ transfer(pred[temp], temp, amount); temp = pred[temp]; } } function closeAccount(uint user_id1, uint user_id2) public { User storage user1 = users[user_id1]; User storage user2 = users[user_id2]; for (uint i=0; i < user1.peers.length; i+= 1) { if (user1.peers[i] == user_id2) { delete user1.peers[i]; delete accounts[user1.accounts[i]]; delete user1.accounts[i]; break; } } for (i=0; i < user2.peers.length; i+= 1) { if (user2.peers[i] == user_id1) { delete user2.peers[i]; delete user2.accounts[i]; break; } } } }
0.4.25