Make buttons in GUI work
This commit is contained in:
parent
46e336bdca
commit
9a72fb8f77
|
@ -69,6 +69,7 @@ public class Blockchain {
|
||||||
}
|
}
|
||||||
blocks.add(block);
|
blocks.add(block);
|
||||||
length++;
|
length++;
|
||||||
|
if(length != 1 && Main.mainFrame != null) Main.mainFrame.onNewBlockUpdate();
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getAddressBalance(String walletAddress) {
|
public int getAddressBalance(String walletAddress) {
|
||||||
|
|
|
@ -9,6 +9,7 @@ import java.util.List;
|
||||||
public class Main {
|
public class Main {
|
||||||
public static int difficulty;
|
public static int difficulty;
|
||||||
public static Blockchain blockchain;
|
public static Blockchain blockchain;
|
||||||
|
public static MainFrame mainFrame;
|
||||||
public static DatabaseConnection db;
|
public static DatabaseConnection db;
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
|
@ -25,6 +26,9 @@ public class Main {
|
||||||
difficulty = 4;
|
difficulty = 4;
|
||||||
blockchain = new Blockchain(w1.getAddress());
|
blockchain = new Blockchain(w1.getAddress());
|
||||||
|
|
||||||
|
mainFrame = new MainFrame();
|
||||||
|
mainFrame.setVisible(true);
|
||||||
|
|
||||||
NFT n1 = new NFT(w1.getAddress(), "licencja na wozek widlowy");
|
NFT n1 = new NFT(w1.getAddress(), "licencja na wozek widlowy");
|
||||||
|
|
||||||
List<Transaction> t1 = new ArrayList<>();
|
List<Transaction> t1 = new ArrayList<>();
|
||||||
|
@ -66,8 +70,5 @@ public class Main {
|
||||||
System.out.println("Wallet 1: " + blockchain.getAddressBalance(w1.getAddress()));
|
System.out.println("Wallet 1: " + blockchain.getAddressBalance(w1.getAddress()));
|
||||||
System.out.println("Wallet 2: " + blockchain.getAddressBalance(w2.getAddress()));
|
System.out.println("Wallet 2: " + blockchain.getAddressBalance(w2.getAddress()));
|
||||||
System.out.println("Wallet 3: " + blockchain.getAddressBalance(w3.getAddress()));
|
System.out.println("Wallet 3: " + blockchain.getAddressBalance(w3.getAddress()));
|
||||||
|
|
||||||
MainFrame mf = new MainFrame();
|
|
||||||
mf.setVisible(true);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -78,26 +78,145 @@ public class MainFrame extends JFrame {
|
||||||
mineBlockTree.setModel(model);
|
mineBlockTree.setModel(model);
|
||||||
|
|
||||||
sendSubmit.addActionListener(e -> {
|
sendSubmit.addActionListener(e -> {
|
||||||
|
String sendTo = recipient.getText();
|
||||||
|
int howMuch;
|
||||||
|
if(sendTo.isEmpty()) {
|
||||||
|
JOptionPane.showMessageDialog(null, "Input correct wallet address");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
howMuch = Integer.parseInt(amountToSend.getText());
|
||||||
|
if(howMuch <= 0) throw new NumberFormatException("Value cannot be lower or equal to 0");
|
||||||
|
} catch(NumberFormatException er) {
|
||||||
|
JOptionPane.showMessageDialog(null, "Input correct amount greater than 0");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(bc.getAddressBalance(addr) - howMuch < 0 || howMuchLeftToSpend - howMuch < 0) {
|
||||||
|
JOptionPane.showMessageDialog(null, "Transaction reverted, not enough funds");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
DefaultMutableTreeNode a = new DefaultMutableTreeNode("Transaction");
|
||||||
|
transactions.add(new Transaction(addr, sendTo, howMuch));
|
||||||
|
|
||||||
|
a.add(new DefaultMutableTreeNode("Sender: " + addr));
|
||||||
|
a.add(new DefaultMutableTreeNode("Recipient: " + sendTo));
|
||||||
|
a.add(new DefaultMutableTreeNode("Amount: " + howMuch));
|
||||||
|
|
||||||
|
rootMineBlock.add(a);
|
||||||
|
DefaultTreeModel model14 = new DefaultTreeModel(rootMineBlock);
|
||||||
|
mineBlockTree.setModel(model14);
|
||||||
|
JOptionPane.showMessageDialog(null, "Transaction created, mine block to add it to blockchain");
|
||||||
|
howMuchLeftToSpend -= howMuch;
|
||||||
|
mineBlockButton.setEnabled(true);
|
||||||
|
clearButton.setEnabled(true);
|
||||||
|
mineBlockButton.setText("Mine block");
|
||||||
});
|
});
|
||||||
|
|
||||||
validateChainButton.addActionListener(e -> {
|
validateChainButton.addActionListener(e -> {
|
||||||
|
Block.VerifyCodes status = bc.validateChain();
|
||||||
|
|
||||||
|
if(status == Block.VerifyCodes.SUCCESS) JOptionPane.showMessageDialog(null, "Chain is valid", "Verification", JOptionPane.INFORMATION_MESSAGE);
|
||||||
|
else if(status == Block.VerifyCodes.HASH_MISMATCH) JOptionPane.showMessageDialog(null, "Hash mismatch found", "Verification", JOptionPane.ERROR_MESSAGE);
|
||||||
|
else if(status == Block.VerifyCodes.INVALID_POW_SIGNATURE) JOptionPane.showMessageDialog(null, "Invalid proof of work signature found", "Verification", JOptionPane.ERROR_MESSAGE);
|
||||||
|
else if(status == Block.VerifyCodes.INVALID_BLOCK_HASH) JOptionPane.showMessageDialog(null, "Invalid block hash found", "Verification", JOptionPane.ERROR_MESSAGE);
|
||||||
});
|
});
|
||||||
|
|
||||||
payForTuitionButton.addActionListener(e -> {
|
payForTuitionButton.addActionListener(e -> {
|
||||||
|
int input = JOptionPane.showConfirmDialog(null, "6 DC will be sent to pay tuition\nAre you sure?", "Payment Confirmation", JOptionPane.YES_NO_OPTION);
|
||||||
|
if(input == JOptionPane.YES_OPTION) {
|
||||||
|
if(bc.getAddressBalance(addr) - 6 < 0 || howMuchLeftToSpend - 6 < 0) JOptionPane.showMessageDialog(null, "Transaction reverted, not enough funds");
|
||||||
|
else {
|
||||||
|
DefaultMutableTreeNode a = new DefaultMutableTreeNode("Transaction");
|
||||||
|
|
||||||
|
a.add(new DefaultMutableTreeNode("Sender: " + addr));
|
||||||
|
a.add(new DefaultMutableTreeNode("Recipient: wsiz"));
|
||||||
|
a.add(new DefaultMutableTreeNode("Amount: 6"));
|
||||||
|
|
||||||
|
rootMineBlock.add(a);
|
||||||
|
DefaultTreeModel model13 = new DefaultTreeModel(rootMineBlock);
|
||||||
|
mineBlockTree.setModel(model13);
|
||||||
|
|
||||||
|
transactions.add(new Transaction(addr, "wsiz", 6));
|
||||||
|
|
||||||
|
JOptionPane.showMessageDialog(null, "Transaction created, mine block to add it to blockchain");
|
||||||
|
howMuchLeftToSpend -= 6;
|
||||||
|
mineBlockButton.setEnabled(true);
|
||||||
|
clearButton.setEnabled(true);
|
||||||
|
mineBlockButton.setText("Mine block");
|
||||||
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
payForAdvanceButton.addActionListener(e -> {
|
payForAdvanceButton.addActionListener(e -> {
|
||||||
|
int input = JOptionPane.showConfirmDialog(null, "1 DC will be sent to pay advance\nAre you sure?", "Payment Confirmation", JOptionPane.YES_NO_OPTION);
|
||||||
|
if(input == JOptionPane.YES_OPTION) {
|
||||||
|
if(bc.getAddressBalance(addr) - 1 < 0 || howMuchLeftToSpend - 1 < 0) JOptionPane.showMessageDialog(null, "Transaction reverted, not enough funds");
|
||||||
|
else {
|
||||||
|
DefaultMutableTreeNode a = new DefaultMutableTreeNode("Transaction");
|
||||||
|
|
||||||
|
a.add(new DefaultMutableTreeNode("Sender: " + addr));
|
||||||
|
a.add(new DefaultMutableTreeNode("Recipient: wsiz"));
|
||||||
|
a.add(new DefaultMutableTreeNode("Amount: 1"));
|
||||||
|
|
||||||
|
rootMineBlock.add(a);
|
||||||
|
DefaultTreeModel model12 = new DefaultTreeModel(rootMineBlock);
|
||||||
|
mineBlockTree.setModel(model12);
|
||||||
|
|
||||||
|
transactions.add(new Transaction(addr, "wsiz", 1));
|
||||||
|
|
||||||
|
JOptionPane.showMessageDialog(null, "Transaction created, mine block to add it to blockchain");
|
||||||
|
howMuchLeftToSpend -= 1;
|
||||||
|
mineBlockButton.setEnabled(true);
|
||||||
|
clearButton.setEnabled(true);
|
||||||
|
mineBlockButton.setText("Mine block");
|
||||||
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
mineBlockButton.addActionListener(e -> {
|
mineBlockButton.addActionListener(e -> {
|
||||||
|
mineBlockButton.setEnabled(false);
|
||||||
|
clearButton.setEnabled(false);
|
||||||
|
Block block = new Block(bc.getLatestBlock().getHash(), bc.getLength() + 1, transactions);
|
||||||
|
|
||||||
|
for (NFT nft : nfts) {
|
||||||
|
block.addNFT(nft);
|
||||||
|
}
|
||||||
|
|
||||||
|
rootMineBlock.removeAllChildren();
|
||||||
|
mineBlockButton.setText("Mining, please wait...");
|
||||||
|
block.mineBlock();
|
||||||
|
mineBlockButton.setText("Mine block");
|
||||||
|
JOptionPane.showMessageDialog(null, "Block mined successfully");
|
||||||
|
|
||||||
|
try {
|
||||||
|
bc.addBlock(block);
|
||||||
|
} catch (BlockchainIntegrityException er) {
|
||||||
|
JOptionPane.showMessageDialog(null, "Unable to add a block: " + er.getMessage(), "Fatal error", JOptionPane.ERROR_MESSAGE);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
transactions.clear();
|
||||||
|
|
||||||
|
howMuchLeftToSpend = bc.getAddressBalance(addr);
|
||||||
|
|
||||||
|
rootMineBlock.removeAllChildren();
|
||||||
|
DefaultTreeModel model1 = new DefaultTreeModel(rootMineBlock);
|
||||||
|
mineBlockTree.setModel(model1);
|
||||||
});
|
});
|
||||||
|
|
||||||
clearButton.addActionListener(e -> {
|
clearButton.addActionListener(e -> {
|
||||||
|
int input = JOptionPane.showConfirmDialog(null, "All pending transactions will be cancelled\nAre you sure?", "Clear Confirmation", JOptionPane.YES_NO_OPTION);
|
||||||
|
if(input == JOptionPane.YES_OPTION) {
|
||||||
|
mineBlockButton.setEnabled(false);
|
||||||
|
clearButton.setEnabled(false);
|
||||||
|
|
||||||
|
transactions.clear();
|
||||||
|
|
||||||
|
howMuchLeftToSpend = bc.getAddressBalance(addr);
|
||||||
|
|
||||||
|
rootMineBlock.removeAllChildren();
|
||||||
|
DefaultTreeModel model1 = new DefaultTreeModel(rootMineBlock);
|
||||||
|
mineBlockTree.setModel(model1);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
exportButton.addActionListener(e -> {
|
exportButton.addActionListener(e -> {
|
||||||
|
@ -105,7 +224,26 @@ public class MainFrame extends JFrame {
|
||||||
});
|
});
|
||||||
|
|
||||||
createMintNFTButton.addActionListener(e -> {
|
createMintNFTButton.addActionListener(e -> {
|
||||||
|
String input = JOptionPane.showInputDialog("Input data for NFT: ");
|
||||||
|
if(input != null && !input.isEmpty()) {
|
||||||
|
NFT n = new NFT(addr, input);
|
||||||
|
nfts.add(n);
|
||||||
|
|
||||||
|
DefaultMutableTreeNode a = new DefaultMutableTreeNode("NFT");
|
||||||
|
|
||||||
|
a.add(new DefaultMutableTreeNode("Contract: " + n.getContract()));
|
||||||
|
a.add(new DefaultMutableTreeNode("Owner: " + addr));
|
||||||
|
a.add(new DefaultMutableTreeNode("Data: " + input));
|
||||||
|
|
||||||
|
rootMineBlock.add(a);
|
||||||
|
DefaultTreeModel model13 = new DefaultTreeModel(rootMineBlock);
|
||||||
|
mineBlockTree.setModel(model13);
|
||||||
|
|
||||||
|
JOptionPane.showMessageDialog(null, "NFT minted, mine block to add it to blockchain");
|
||||||
|
mineBlockButton.setEnabled(true);
|
||||||
|
clearButton.setEnabled(true);
|
||||||
|
mineBlockButton.setText("Mine block");
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue