//Write your own contracts here. Currently compiles using solc v0.4.15+commit.bbb8e64f. pragma solidity ^0.4.25; contract SimpleStore { mapping(string => uint) internal userMapping; struct Edge{ uint user_id; uint amount; } //mapping(uint => Edge[]) internal edgeMapping; mapping(uint => uint[]) internal edgeMapping; mapping(uint => mapping(uint => uint)) amountMapping; constructor() public{ } function registerUser(uint user_id, string user_name) public{ userMapping[user_name]=user_id; } function createAcc(uint user_id_1, uint user_id_2, uint amount) public{ //Edge memory e1; //e1.user_id=user_id_2; //e1.amount=amount/2; //Edge memory e2; //e2.user_id=user_id_1; //e2.amount=amount/2; //edgeMapping[user_id_1].push(e1); //edgeMapping[user_id_2].push(e2); edgeMapping[user_id_1].push(user_id_2); amountMapping[user_id_1][user_id_2] = amount/2; edgeMapping[user_id_2].push(user_id_1); amountMapping[user_id_2][user_id_1] = amount/2; } uint[] path; function pathAvailable(uint user_id_1, uint user_id_2, uint amount) public returns(bool){ if(user_id_1 == user_id_2){ path.push(user_id_1); return true; } else{ uint i=0; bool retval; bool foundPath=false; for(i=0;i<edgeMapping[user_id_1].length;i++){ if(amountMapping[user_id_1][i] >= amount){ retval = pathAvailable(edgeMapping[user_id_1][i], user_id_2, amount); if(retval){ foundPath=true; path.push(user_id_1); break; } } } return foundPath; } } function sendAmount(uint user_id_1, uint user_id_2, uint amount) public{ bool rval; path.length=0; uint i=0; uint j=0; rval=pathAvailable(user_id_1, user_id_2, amount); if(rval){ for(i=path.length-1;i>0;i--){ for(j=0;j<edgeMapping[path[i]].length;j++){ if(edgeMapping[path[i]][j] == path[i-1]){ amountMapping[path[i]][path[i-1]] = amountMapping[path[i]][path[i-1]] - amount; amountMapping[path[i-1]][path[i]] = amountMapping[path[i-1]][path[i]] + amount; break; } } } } } function closeAcc(uint user_id_1, uint user_id_2) public{ uint i=0; for(i=0;i<edgeMapping[user_id_1].length;i++){ if(edgeMapping[user_id_1][i] == user_id_2){ delete edgeMapping[user_id_1][i]; delete amountMapping[user_id_1][user_id_2]; break; } } for(i=0;i<edgeMapping[user_id_2].length;i++){ if(edgeMapping[user_id_2][i] == user_id_1){ delete edgeMapping[user_id_2][i]; delete amountMapping[user_id_2][user_id_1]; break; } } } }
0.4.25