Make buttons in GUI work
This commit is contained in:
parent
46e336bdca
commit
9a72fb8f77
|
@ -69,6 +69,7 @@ public class Blockchain {
|
|||
}
|
||||
blocks.add(block);
|
||||
length++;
|
||||
if(length != 1 && Main.mainFrame != null) Main.mainFrame.onNewBlockUpdate();
|
||||
}
|
||||
|
||||
public int getAddressBalance(String walletAddress) {
|
||||
|
|
|
@ -9,6 +9,7 @@ import java.util.List;
|
|||
public class Main {
|
||||
public static int difficulty;
|
||||
public static Blockchain blockchain;
|
||||
public static MainFrame mainFrame;
|
||||
public static DatabaseConnection db;
|
||||
|
||||
public static void main(String[] args) {
|
||||
|
@ -25,6 +26,9 @@ public class Main {
|
|||
difficulty = 4;
|
||||
blockchain = new Blockchain(w1.getAddress());
|
||||
|
||||
mainFrame = new MainFrame();
|
||||
mainFrame.setVisible(true);
|
||||
|
||||
NFT n1 = new NFT(w1.getAddress(), "licencja na wozek widlowy");
|
||||
|
||||
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 2: " + blockchain.getAddressBalance(w2.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);
|
||||
|
||||
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 -> {
|
||||
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 -> {
|
||||
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 -> {
|
||||
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.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 -> {
|
||||
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 -> {
|
||||
|
@ -105,7 +224,26 @@ public class MainFrame extends JFrame {
|
|||
});
|
||||
|
||||
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