Skip to content

Commit

Permalink
Added Comments And Tests
Browse files Browse the repository at this point in the history
  • Loading branch information
dogukan authored and dogukan committed Nov 8, 2017
1 parent 7ab9c63 commit 49cab4a
Show file tree
Hide file tree
Showing 4 changed files with 104 additions and 30 deletions.
37 changes: 21 additions & 16 deletions src/pa193_test_parser_sixeleven/PA193_test_parser_SixEleven.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@


import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
Expand All @@ -24,25 +25,29 @@ public class PA193_test_parser_SixEleven {
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws IOException {
public static void main(String[] args) throws IOException {



Utils util = new Utils();
//SixElevenBlock s = new SixElevenBlock("f9beb611d700000001000100524c85a744672dd9a3c2e794c5ed473f1d98c6d493801572529bc8c3960000006e318b64ee63ac50723af6ccb324a4a84f1fcd8e25f185a7e527b3568f1daca2c86fd655f0ff0f1e000351520101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0704f0ff0f1e0108ffffffff010003d8390e0000004341043d85d6355c84738ca498482525e6ac032a4bce87ec3b4d97104eaa8be708591d5acdfca0fc1d0c940e5a33223bf4b158816ee3492fbc00b2a26ba9ef12b44cbfac00000000");
//SixElevenBlock s2 = new SixElevenBlock("11beb611d700000001000100524c85a744672dd9a3c2e794c5ed473f1d98c6d493801572529bc8c3960000006e318b64ee63ac50723af6ccb324a4a84f1fcd8e25f185a7e527b3568f1daca2c86fd655f0ff0f1e000351520101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0704f0ff0f1e0108ffffffff010003d8390e0000004341043d85d6355c84738ca498482525e6ac032a4bce87ec3b4d97104eaa8be708591d5acdfca0fc1d0394045a33223bf4b158816ee3492fbc00b2a26ba9ef12b44cbfac00000000");
ArrayList<SixElevenBlock> elements = new ArrayList<>();

BufferedReader br = new BufferedReader (new FileReader ("testblk.txt"));
ArrayList<SixElevenBlock> blocklist = new ArrayList<>();
File file = new File("testblk.txt");
if(file.exists() && !file.isDirectory()) // Simple Check If File Is Exists
{
BufferedReader br = new BufferedReader (new FileReader (file));
String line;
while( (line = br.readLine() ) != null) {
elements.add(new SixElevenBlock(line));
}
while( (line = br.readLine() ) != null)
{
blocklist.add(new SixElevenBlock(line));
}
util.displayBlock(blocklist);
}

util.displayBlock(elements);
}


else
{
System.out.println("testblk.txt could not find.....");
}
}

}
//To produce random inputs, we used: cat /dev/urandom | tr -dc '0-9a-fA-F' | fold -w 446 | head -n 1
// This produces random data with the same size
// Also we concatenated the date with correct block magic id"f9beb611"
62 changes: 57 additions & 5 deletions src/pa193_test_parser_sixeleven/SixElevenBlock.java
Original file line number Diff line number Diff line change
Expand Up @@ -68,14 +68,26 @@ public int getHeader_length() {
}

public void setHeader_length(int header_length) {

if(header_length == -1)
{
blockvalid = false;
}

this.header_length = header_length;

}

public int getVersion() {
return version;
}

public void setVersion(int version) {
if(version == -1)
{
blockvalid = false;
}

this.version = version;
}

Expand Down Expand Up @@ -116,6 +128,10 @@ public int getNonce() {
}

public void setNonce(int nonce) {
if(nonce == -1)
{
blockvalid = false;
}
this.nonce = nonce;
}

Expand All @@ -124,6 +140,10 @@ public int getTransaction_count() {
}

public void setTransaction_count(int transaction_count) {
if(transaction_count == -1)
{
blockvalid = false;
}
this.transaction_count = transaction_count;
}

Expand All @@ -140,6 +160,10 @@ public int getInput_count() {
}

public void setInput_count(int input_count) {
if(input_count == -1)
{
blockvalid = false;
}
this.input_count = input_count;
}

Expand All @@ -164,6 +188,10 @@ public int getvNumber() {
}

public void setvNumber(int vNumber) {
if(vNumber == -1)
{
blockvalid = false;
}
this.vNumber = vNumber;
}

Expand All @@ -172,6 +200,10 @@ public int getScript_length() {
}

public void setScript_length(int script_length) {
if(script_length == -1)
{
blockvalid = false;
}
this.script_length = script_length;
}

Expand Down Expand Up @@ -204,6 +236,10 @@ public double getValue() {
}

public void setValue(double value) {
if(value == -1)
{
blockvalid = false;
}
this.value = value;
}

Expand All @@ -212,6 +248,10 @@ public int getOutput_script_length() {
}

public void setOutput_script_length(int output_script_length) {
if(output_script_length == -1)
{
blockvalid = false;
}
this.output_script_length = output_script_length;
}

Expand All @@ -228,18 +268,22 @@ public int getTransaction_lock_time() {
}

public void setTransaction_lock_time(int transaction_lock_time) {
if(transaction_lock_time == -1)
{
blockvalid = false;
}
this.transaction_lock_time = transaction_lock_time;
}

public void Parse_Hex(String hexstring)
public void Parse_Hex(String hexstring) // Actual Parser Method

{
if(hexValid(hexstring))

{
System.out.println("Parsing the block...");
setMagic_id(blockhexstring.substring(0, 8));
setHeader_length(utils.hexToInt(blockhexstring.substring(8, 16)));
setHeader_length(utils.hexToInt(blockhexstring.substring(8, 16)));
setVersion(utils.hexToInt(blockhexstring.substring(16, 24)));
setPrevious_hash(utils.reverseHex(blockhexstring.substring(24, 24 + 64)));
setPrevious_hash(utils.reverseHex(blockhexstring.substring(24, 24 + 64)));
Expand All @@ -258,9 +302,17 @@ public void Parse_Hex(String hexstring)
setRaw_script(utils.reverseHex(blockhexstring.substring(274, 274 + 2)));
setSequence_number(utils.reverseHex(blockhexstring.substring(276, 276 + 8)));
setNumber_of_outputs(utils.hexToInt(blockhexstring.substring(284, 284 + 2)));
setValue(utils.hexToLong(blockhexstring.substring(286, 286 + 16)) / 100000000); //mili
setValue(utils.hexToLong(blockhexstring.substring(286, 286 + 16)) / 100000000.0); //mili
setOutput_script_length(utils.hexToInt(blockhexstring.substring(302, 302 + 2)));
int x = 2*getOutput_script_length();
int x=0;
if(getOutput_script_length() == -1)
{
setOutput_script("Invalid");
}
else
{
x = 2 * getOutput_script_length();
}
setOutput_script(utils.reverseHex(blockhexstring.substring(304, 304 + x)));
setTransaction_lock_time(utils.hexToInt(blockhexstring.substring(304 + x, 304 + x + 8)));
}
Expand All @@ -269,7 +321,7 @@ public void Parse_Hex(String hexstring)
private boolean hexValid(String hexstring)

{
String pattern = "f9beb611[0-9a-fA-F]+";
String pattern = "f9beb611[0-9a-fA-F]+0000"; // Checks if the block is in the correct format
// Create a Pattern object
Pattern r = Pattern.compile(pattern);
// Now create matcher object.
Expand Down
31 changes: 23 additions & 8 deletions src/pa193_test_parser_sixeleven/Utils.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,32 @@

public class Utils {

public int hexToInt(String hex){
return Integer.parseInt(reverseHex(hex), 16);

public int hexToInt(String hex){ // Converts Hex to Int Value
try
{
return Integer.parseInt(reverseHex(hex), 16);
}
catch(Exception e)
{
System.err.println("Block Format is Invalid");
return -1;
}
}

public long hexToLong(String hex){
public long hexToLong(String hex){ // Converts Hex to Long Value
try
{
return Long.parseLong(reverseHex(hex), 16);
}
catch(Exception e)
{
System.err.println("Block Format is Invalid");
return -1;
}

}

public String reverseHex(String hex)
public String reverseHex(String hex) // Converts Hex Values From Reverse Order
{ String reverse="";
int i;
for(i = hex.length() - 2; i >= 0 ; i -= 2){
Expand All @@ -28,15 +43,15 @@ public String reverseHex(String hex)

}

public String timestampToDate(String hex){
public String timestampToDate(String hex){ // Convert Hex Value To TimeStamp
long ts = hexToLong(hex);
Date date = new Date(ts * 1000); //to convert Unix time to date time
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
return dateFormat.format(date);


}
public void displayBlock(SixElevenBlock block)
public void displayBlock(SixElevenBlock block) // For Only Single
{
if(block != null)
{
Expand Down Expand Up @@ -69,7 +84,7 @@ public void displayBlock(SixElevenBlock block)


}
public void displayBlock(ArrayList<SixElevenBlock> blockarray)
public void displayBlock(ArrayList<SixElevenBlock> blockarray) // Get List of Blocks and Parse Them
{
for(SixElevenBlock block:blockarray)
{
Expand Down
4 changes: 3 additions & 1 deletion testblk.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
f9beb611d700000001000100524c85a744672dd9a3c2e794c5ed473f1d98c6d493801572529bc8c3960000006e318b64ee63ac50723af6ccb324a4a84f1fcd8e25f185a7e527b3568f1daca2c86fd655f0ff0f1e000351520101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0704f0ff0f1e0108ffffffff010003d8390e0000004341043d85d6355c84738ca498482525e6ac032a4bce87ec3b4d97104eaa8be708591d5acdfca0fc1d0c940e5a33223bf4b158816ee3492fbc00b2a26ba9ef12b44cbfac00000000
0c9Ba2cB4DbdDdD5a7EDD3a96615ECfE1eEbbbEEe89758eea1baFeD9b4b46BeDD2dFEB1852fABACd42A99DDE5E35fEEE03E36BA2FE444E7aEEC5F2Ae43DC40E01C14bE02CdFb47B5358fdBf2483CFb10d813c3e39656F7Ed9ABCD7cB572B39F7EDFb9A7b0e0eaE9ecDBf45d32dF83169Df96f3AbC24ABcB32534d99774a636D27CcdcBaEcEFbad62BECb8C0b007dec06a2e64BeC0FB1Dce41ea0376ddFe9Ca7afd018977FE7A038dA5593dE61DA69eCaaed3bb5e5Db4388B1DEce57F1Dd6abD2f9EF7cA34604a988a030431e2bAdDE34a04B2ed7FddCCc03e5C5EEE7bC0d32
f9beb6114DbdDdD5a7EDD3a96615ECfE1eEbbbEEe89758eea1baFeD9b4b46BeDD2dFEB1852fABACd42A99DDE5E35fEEE03E36BA2FE444E7aEEC5F2Ae43DC40E01C14bE02CdFb47B5358fdBf2483CFb10d813c3e39656F7Ed9ABCD7cB572B39F7EDFb9A7b0e0eaE9ecDBf45d32dF83169Df96f3AbC24ABcB32534d99774a636D27CcdcBaEcEFbad62BECb8C0b007dec06a2e64BeC0FB1Dce41ea0376ddFe9Ca7afd018977FE7A038dA5593dE61DA69eCaaed3bb5e5Db4388B1DEce57F1Dd6abD2f9EF7cA34604a988a030431e2bAdDE34a04B2ed7FddCCc03e5C5EEE7bC0d32
eBffBbAd2d3EfC95a75cA2665Eb42CEF041b9F873Ad78B4A43De170B4070CBde408ab5a29B39b8cb84aC79b1aEFF4a62fcbfEc49f2ebbe83d3A9c8A926F144c20CC9ae86920aa0E43FDD1f4238Bc5F5beD5B6156cFd2a7EbFdF8DdCD7ECb062bA7DF6BbdBE78fD80d8F7B7315ca24AdB5f69e7cEd8f4C7E4BC34d25A3489DFAd2B3a129da4ebeC1E8fD95f061A90d673CBa632B0c692AdEb40b2AcE1a06b5AE73A20285faaCFCF5bAbAF1cbB90dd1CceB89dA2B1C5a1dF70520fBD937a816D59EBB6eC1CE79FCbee23E2A02da7FAE3eeB2E6617511dEF1619ea00A0Ccd5DF3
Ec8D3a7F73b48fafFEeEf3Fe5d09E3De90D35c3aB8fCf4d840eD7F4c8FEbDECdD1e0d0198730eB2E52BB71893CCB92aDaaCdDb3F2ddbd4EbCFCa2e6D97116D0eC3873c1f79436ABd578cAf885D2D0bDcf0e71E7a3fEADc7699264e2D2B3fe3d01Cb58fCD3ECe3FCbAEe12aE21FEBDFabdf9bc6c1BA05b4Efcc5EdDDEC78eb50067dc98363DEeB061715eBA6Bb7dA7cA3cA5A3F986eC7c0CB47E8Fafb5C576F6D3b8c2710E760f2Ab2b2eCAd920aEDf788750Ba2bca6da1E230d66Cba5C2fdb6E359f5d96BBA596A7AA5248e3165bc1FfbEAc4bcdf76E34888B2187f100b037
f9be611AE905e85838Eb0aD35C8BbEaCEFcEa742b9a65F85e2578E88b76A68F6616Bb2A4F5a67bcE74b1b7EBAcEca3FAf62eE7b0FfB9bfeDBC3ebcf380A930Cc2dD56809FA5cDbdFddAf114dEAdb9D7D0eFdc696cf3133DA1EDA58C7E2DbeE4AACFC5f8cdaA8c34B4f1E2C44d5Dcaac9BB02868FBAc4ef0bfd3cb7AF2A31Fb762C306c06FBc299A15f9FdAD227263BFc7117d8E4aC5d8Ae54faEC90f7C30f612801DFB1ADB93f766b735b2Db0ebCab7BDA70eeC1ea252B3A4Be29b7E1518a3ffF3a8CAB44adfcEc0f7869ffD4ad6faACDeaDe9EdB6FF32AaBa54d56687Ce9
f9beb611d700000001000100558b4ea5d60708270d6b8b11d020fd613a7a96794bbfd2325651d5a606000000039fde6cbb510057ff6056e9e300b7bc9e3aeac3852e8ee5e70acda199872a43f9ebd755b973081d082509490101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0704b973081d0106ffffffff0180332f6c01000000434104577ab3294160349317359e7d093fa9a2656a484654a4999d09495b3d12e4df0d1a2aed1dbadd3fc5992a6e5017cdc840e70b4c14afdf9400a141ce01c669ed6aac00000000
f9beb611d70000000100010006b92f2dc3521b760875436aa4c6154913a335f7f11f59aacb1ed369050000006186241119eff736eaeaa3637c5e60c6cf49e3665ea9e2380c8cf28e3db566cccceed755b973081d2a403c170101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0704b973081d0117ffffffff0180332f6c010000004341042b864ea49522dd69bd6225693b38c435d42dffac53a4a68f307e6d952622a6030bd3919a5757957336b4588afb016c750ccf130a297f78fec2feb26d30d68cd9ac00000000

0 comments on commit 49cab4a

Please sign in to comment.