main.sf 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. #!/usr/bin/ruby
  2. include Blockchain
  3. include SigningKey
  4. import Blockchain::Blockchain
  5. import Blockchain::Transaction
  6. import SigningKey::SigningKey
  7. # Your private key goes here
  8. var myKey = SigningKey()
  9. # Another key
  10. var evilKey = SigningKey()
  11. STDERR.printf("Your private key: %s\n", myKey.getPrivate)
  12. # From that we can calculate your public key (which doubles as your wallet address)
  13. var myWalletAddress = myKey.getPublic
  14. # Create new instance of Blockchain class
  15. var sidefCoin = Blockchain(difficulty: 2)
  16. # Mine first block
  17. sidefCoin.minePendingTransactions(myWalletAddress)
  18. # Create a transaction & sign it with your key
  19. const tx1 = Transaction(myWalletAddress, evilKey.getPublic, 100)
  20. tx1.signTransaction(myKey)
  21. #tx1.signTransaction(evilKey)
  22. sidefCoin.addTransaction(tx1)
  23. # Mine block
  24. sidefCoin.minePendingTransactions(myWalletAddress)
  25. # Create second transaction
  26. const tx2 = Transaction(myWalletAddress, evilKey.getPublic, 50)
  27. tx2.signTransaction(myKey)
  28. sidefCoin.addTransaction(tx2)
  29. # Mine block
  30. sidefCoin.minePendingTransactions(evilKey.getPublic)
  31. # Create third transaction
  32. const tx3 = Transaction(evilKey.getPublic, myWalletAddress, 10)
  33. tx3.signTransaction(evilKey)
  34. sidefCoin.addTransaction(tx3)
  35. # Mine block
  36. sidefCoin.minePendingTransactions(myWalletAddress)
  37. STDERR.say("\nMy balance is: #{sidefCoin.getBalanceOfAddress(myWalletAddress)}")
  38. STDERR.say("Evil balance is: #{sidefCoin.getBalanceOfAddress(evilKey.getPublic)}")
  39. # Uncomment this line if you want to test tampering with the chain
  40. #sidefCoin.chain[1].transactions[0].amount = 10;
  41. # Check if the chain is valid
  42. STDERR.say("\nBlockchain valid? ", sidefCoin.isChainValid() ? 'Yes' : 'No')