Skip to content

Commit bcad339

Browse files
committedMar 10, 2019
Blockchain in java done (comments pending)
1 parent 9726d60 commit bcad339

File tree

3 files changed

+104
-17
lines changed

3 files changed

+104
-17
lines changed
 

‎src/main/java/com/rampatra/blockchain/Blockchain.java

+8
Original file line numberDiff line numberDiff line change
@@ -135,4 +135,12 @@ private static String bytesToHex(byte[] hash) {
135135
}
136136
return hexString.toString();
137137
}
138+
139+
@Override
140+
public String toString() {
141+
final StringBuilder sb = new StringBuilder("Blockchain{");
142+
sb.append("blocks=").append(blocks);
143+
sb.append('}');
144+
return sb.toString();
145+
}
138146
}

‎src/main/java/com/rampatra/blockchain/P2P.java

+31
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,12 @@ public static Peer addPeer(Blockchain blockchain) {
1818
peers.add(peer);
1919
return peer;
2020
}
21+
22+
public static void removePeer(int index) {
23+
Peer peer = peers.get(index);
24+
peer.stopServer();
25+
peers.remove(index);
26+
}
2127

2228
public static void removePeer(Peer peer) {
2329
Iterator<Peer> iterator = peers.iterator();
@@ -29,8 +35,33 @@ public static void removePeer(Peer peer) {
2935
}
3036
}
3137
}
38+
39+
public static void removeAllPeers() {
40+
Iterator<Peer> iterator = peers.iterator();
41+
while (iterator.hasNext()) {
42+
Peer peer = iterator.next();
43+
peer.stopServer();
44+
iterator.remove();
45+
}
46+
}
47+
48+
public static Peer getPeer(int index) {
49+
return peers.get(index);
50+
}
3251

3352
public static List<Peer> getPeers() {
3453
return peers;
3554
}
55+
56+
public static void showPeers() {
57+
for (int i = 0; i < peers.size(); i++) {
58+
System.out.println("Peer " + (i + 1) + ": " + peers.get(i).getPort());
59+
}
60+
}
61+
62+
public static void showPeersWithBlockchain() {
63+
for (int i = 0; i < peers.size(); i++) {
64+
System.out.println("Peer " + (i + 1) + ": " + peers.get(i).getBlockchain());
65+
}
66+
}
3667
}

‎src/main/java/com/rampatra/blockchain/Peer.java

+65-17
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import java.net.Socket;
66
import java.util.ArrayList;
77
import java.util.List;
8+
import java.util.Scanner;
89
import java.util.concurrent.ExecutorService;
910
import java.util.concurrent.Executors;
1011
import java.util.stream.Collectors;
@@ -39,7 +40,7 @@ private void startServer() {
3940
throw new RuntimeException(e);
4041
}
4142
}
42-
43+
4344
public void stopServer() {
4445
try {
4546
if (!server.isClosed()) {
@@ -89,29 +90,76 @@ public void setBlockchain(Blockchain blockchain) {
8990
this.blockchain = blockchain;
9091
}
9192

93+
public int getPort() {
94+
return port;
95+
}
96+
9297
@Override
9398
public String toString() {
9499
final StringBuilder sb = new StringBuilder("Peer{");
95-
sb.append("port=").append(port);
100+
sb.append("blockchain=").append(blockchain);
101+
sb.append(", port=").append(port);
96102
sb.append('}');
97103
return sb.toString();
98104
}
99105

100106
public static void main(String[] args) {
101-
Blockchain blockchain = new Blockchain(new ArrayList<>(), 3);
102-
Peer peer1 = P2P.addPeer(blockchain);
103-
System.out.println("Peers:" + P2P.getPeers());
104-
peer1.mine("1st block by p1");
105-
System.out.println("Blockchain with p1: " + peer1.getBlockchain().getBlocks());
106-
Peer peer2 = P2P.addPeer(blockchain);
107-
System.out.println("Peers: " + P2P.getPeers());
108-
System.out.println("Blockchain with p1: " + peer1.getBlockchain().getBlocks());
109-
System.out.println("Blockchain with p2: " + peer2.getBlockchain().getBlocks());
110-
peer2.mine("2nd block by p2");
111-
System.out.println("Blockchain with p1: " + peer1.getBlockchain().getBlocks());
112-
System.out.println("Blockchain with p2: " + peer2.getBlockchain().getBlocks());
113-
peer1.mine("3rd block by p1");
114-
System.out.println("Blockchain with p1: " + peer1.getBlockchain().getBlocks());
115-
System.out.println("Blockchain with p2: " + peer2.getBlockchain().getBlocks());
107+
try {
108+
int menuChoice;
109+
int peerIndex;
110+
String data;
111+
Scanner s = new Scanner(System.in);
112+
Blockchain blockchain = new Blockchain(new ArrayList<>(), 3);
113+
114+
while (true) {
115+
116+
System.out.println("\n======= Welcome to Blockchain in Java =======");
117+
System.out.println("1. Add Peer");
118+
System.out.println("2. Mine data in peer");
119+
System.out.println("3. Remove peer");
120+
System.out.println("4. Show peers");
121+
System.out.println("5. Exit");
122+
123+
menuChoice = s.nextInt();
124+
125+
switch (menuChoice) {
126+
case 1:
127+
P2P.addPeer(blockchain);
128+
System.out.println("New peer added!");
129+
P2P.showPeersWithBlockchain();
130+
break;
131+
case 2:
132+
System.out.println("Choose peer: (ex. 1, 2, etc.)");
133+
P2P.showPeers();
134+
peerIndex = s.nextInt();
135+
Peer p = P2P.getPeer(peerIndex - 1);
136+
System.out.println("Enter data: ");
137+
data = s.next();
138+
p.mine(data);
139+
System.out.println("Data mined!");
140+
P2P.showPeersWithBlockchain();
141+
break;
142+
case 3:
143+
System.out.println("Choose peer: (ex. 1, 2, etc.)");
144+
P2P.showPeers();
145+
peerIndex = s.nextInt();
146+
P2P.removePeer(peerIndex - 1);
147+
System.out.println("Peer " + peerIndex + " removed!");
148+
P2P.showPeersWithBlockchain();
149+
break;
150+
case 4:
151+
P2P.showPeersWithBlockchain();
152+
break;
153+
case 5:
154+
P2P.removeAllPeers();
155+
System.out.println("Bye, see you soon!");
156+
System.exit(0);
157+
default:
158+
System.out.println("Wrong choice!");
159+
}
160+
}
161+
} catch (Exception e) {
162+
throw new RuntimeException(e);
163+
}
116164
}
117165
}

0 commit comments

Comments
 (0)