annotate src/main/java/christie/blockchain/BlockHeader.java @ 146:0ef25958ac04

add transaction
author akahori
date Mon, 07 Jan 2019 16:02:26 +0900
parents 694ea96a557a
children cd2fab84cd8b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
109
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
1 package christie.blockchain;
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
2
110
eab161e557bd fix Refactor
akahori
parents: 109
diff changeset
3 import org.bouncycastle.util.BigIntegers;
eab161e557bd fix Refactor
akahori
parents: 109
diff changeset
4
109
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
5 import java.io.ByteArrayOutputStream;
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
6 import java.io.IOException;
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
7 import java.math.BigInteger;
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
8 import java.nio.charset.Charset;
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
9
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
10 public class BlockHeader {
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
11
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
12 private byte[] presentHash;
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
13
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
14 private byte[] parentHash;
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
15
139
694ea96a557a refactor blockchain
akahori
parents: 110
diff changeset
16 private long difficulty;
694ea96a557a refactor blockchain
akahori
parents: 110
diff changeset
17
694ea96a557a refactor blockchain
akahori
parents: 110
diff changeset
18 private long number;
694ea96a557a refactor blockchain
akahori
parents: 110
diff changeset
19
109
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
20 private long timestamp;
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
21
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
22 private long nonce;
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
23
110
eab161e557bd fix Refactor
akahori
parents: 109
diff changeset
24 HashUtil hashUtil = new HashUtil();
eab161e557bd fix Refactor
akahori
parents: 109
diff changeset
25
139
694ea96a557a refactor blockchain
akahori
parents: 110
diff changeset
26 public BlockHeader(byte[] parentHash, long difficulty, long number, long timestamp) {
109
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
27 this.parentHash = parentHash;
139
694ea96a557a refactor blockchain
akahori
parents: 110
diff changeset
28 this.difficulty = difficulty;
694ea96a557a refactor blockchain
akahori
parents: 110
diff changeset
29 this.number = number;
109
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
30 this.timestamp = timestamp;
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
31 }
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
32
146
0ef25958ac04 add transaction
akahori
parents: 139
diff changeset
33 public byte[] getParamByteArray(boolean withNonce){
110
eab161e557bd fix Refactor
akahori
parents: 109
diff changeset
34
eab161e557bd fix Refactor
akahori
parents: 109
diff changeset
35 ByteArrayOutputStream output = new ByteArrayOutputStream();
109
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
36
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
37 byte[] timestampByte = BigInteger.valueOf(this.timestamp).toByteArray();
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
38
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
39 try {
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
40 output.write(parentHash);
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
41 output.write(timestampByte);
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
42 } catch (IOException e) {
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
43 e.printStackTrace();
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
44 }
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
45
110
eab161e557bd fix Refactor
akahori
parents: 109
diff changeset
46 if(withNonce){
eab161e557bd fix Refactor
akahori
parents: 109
diff changeset
47 byte[] nonceByte = BigInteger.valueOf(this.nonce).toByteArray();
eab161e557bd fix Refactor
akahori
parents: 109
diff changeset
48 try {
eab161e557bd fix Refactor
akahori
parents: 109
diff changeset
49 output.write(nonceByte);
eab161e557bd fix Refactor
akahori
parents: 109
diff changeset
50 } catch (IOException e) {
eab161e557bd fix Refactor
akahori
parents: 109
diff changeset
51 e.printStackTrace();
eab161e557bd fix Refactor
akahori
parents: 109
diff changeset
52 }
eab161e557bd fix Refactor
akahori
parents: 109
diff changeset
53 }
eab161e557bd fix Refactor
akahori
parents: 109
diff changeset
54
eab161e557bd fix Refactor
akahori
parents: 109
diff changeset
55 return output.toByteArray();
109
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
56
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
57 }
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
58
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
59 public byte[] getParentHash() {
146
0ef25958ac04 add transaction
akahori
parents: 139
diff changeset
60
109
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
61 return parentHash;
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
62 }
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
63
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
64 public byte[] getPresentHash() {
146
0ef25958ac04 add transaction
akahori
parents: 139
diff changeset
65
0ef25958ac04 add transaction
akahori
parents: 139
diff changeset
66 return hashUtil.sha256(getParamByteArray(true));
109
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
67 }
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
68
146
0ef25958ac04 add transaction
akahori
parents: 139
diff changeset
69 public byte[] getByteArrayWithoutNonce(){
0ef25958ac04 add transaction
akahori
parents: 139
diff changeset
70
0ef25958ac04 add transaction
akahori
parents: 139
diff changeset
71 return getParamByteArray(false);
110
eab161e557bd fix Refactor
akahori
parents: 109
diff changeset
72 }
109
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
73
139
694ea96a557a refactor blockchain
akahori
parents: 110
diff changeset
74 public void setTimestamp(long timestamp) {
694ea96a557a refactor blockchain
akahori
parents: 110
diff changeset
75 this.timestamp = timestamp;
694ea96a557a refactor blockchain
akahori
parents: 110
diff changeset
76 }
694ea96a557a refactor blockchain
akahori
parents: 110
diff changeset
77
109
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
78 public long getTimestamp() {
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
79 return timestamp;
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
80 }
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
81
139
694ea96a557a refactor blockchain
akahori
parents: 110
diff changeset
82 public void setNonce(long nonce) {
694ea96a557a refactor blockchain
akahori
parents: 110
diff changeset
83 this.nonce = nonce;
109
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
84 }
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
85
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
86 public long getNonce(){
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
87 return this.nonce;
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
88 }
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
89
139
694ea96a557a refactor blockchain
akahori
parents: 110
diff changeset
90 public void setNumber(long number) {
694ea96a557a refactor blockchain
akahori
parents: 110
diff changeset
91 this.number = number;
694ea96a557a refactor blockchain
akahori
parents: 110
diff changeset
92 }
694ea96a557a refactor blockchain
akahori
parents: 110
diff changeset
93
694ea96a557a refactor blockchain
akahori
parents: 110
diff changeset
94 public long getNumber() {
694ea96a557a refactor blockchain
akahori
parents: 110
diff changeset
95 return number;
694ea96a557a refactor blockchain
akahori
parents: 110
diff changeset
96 }
694ea96a557a refactor blockchain
akahori
parents: 110
diff changeset
97
694ea96a557a refactor blockchain
akahori
parents: 110
diff changeset
98 public void setDifficulty(long difficulty) {
694ea96a557a refactor blockchain
akahori
parents: 110
diff changeset
99 this.difficulty = difficulty;
694ea96a557a refactor blockchain
akahori
parents: 110
diff changeset
100 }
694ea96a557a refactor blockchain
akahori
parents: 110
diff changeset
101
694ea96a557a refactor blockchain
akahori
parents: 110
diff changeset
102 public long getDifficulty() {
694ea96a557a refactor blockchain
akahori
parents: 110
diff changeset
103 return difficulty;
694ea96a557a refactor blockchain
akahori
parents: 110
diff changeset
104 }
109
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
105 }