annotate src/main/java/christie/blockchain/BlockHeader.java @ 272:b592fe1d4a4e default tip

create example Attendance
author matac42 <matac@cr.ie.u-ryukyu.ac.jp>
date Thu, 01 Jul 2021 20:41:07 +0900
parents cd2fab84cd8b
children
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
139
694ea96a557a refactor blockchain
akahori
parents: 110
diff changeset
25 public BlockHeader(byte[] parentHash, long difficulty, long number, long timestamp) {
109
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
26 this.parentHash = parentHash;
139
694ea96a557a refactor blockchain
akahori
parents: 110
diff changeset
27 this.difficulty = difficulty;
694ea96a557a refactor blockchain
akahori
parents: 110
diff changeset
28 this.number = number;
109
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
29 this.timestamp = timestamp;
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
30 }
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
31
146
0ef25958ac04 add transaction
akahori
parents: 139
diff changeset
32 public byte[] getParamByteArray(boolean withNonce){
110
eab161e557bd fix Refactor
akahori
parents: 109
diff changeset
33
eab161e557bd fix Refactor
akahori
parents: 109
diff changeset
34 ByteArrayOutputStream output = new ByteArrayOutputStream();
109
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
35
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
36 byte[] timestampByte = BigInteger.valueOf(this.timestamp).toByteArray();
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
37
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
38 try {
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
39 output.write(parentHash);
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
40 output.write(timestampByte);
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
41 } catch (IOException e) {
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
42 e.printStackTrace();
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
43 }
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
44
110
eab161e557bd fix Refactor
akahori
parents: 109
diff changeset
45 if(withNonce){
eab161e557bd fix Refactor
akahori
parents: 109
diff changeset
46 byte[] nonceByte = BigInteger.valueOf(this.nonce).toByteArray();
eab161e557bd fix Refactor
akahori
parents: 109
diff changeset
47 try {
eab161e557bd fix Refactor
akahori
parents: 109
diff changeset
48 output.write(nonceByte);
eab161e557bd fix Refactor
akahori
parents: 109
diff changeset
49 } catch (IOException e) {
eab161e557bd fix Refactor
akahori
parents: 109
diff changeset
50 e.printStackTrace();
eab161e557bd fix Refactor
akahori
parents: 109
diff changeset
51 }
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 return output.toByteArray();
109
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
55
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 public byte[] getParentHash() {
146
0ef25958ac04 add transaction
akahori
parents: 139
diff changeset
59
109
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
60 return parentHash;
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
61 }
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
62
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
63 public byte[] getPresentHash() {
146
0ef25958ac04 add transaction
akahori
parents: 139
diff changeset
64
156
cd2fab84cd8b update static HashUtil
akahori
parents: 146
diff changeset
65 return HashUtil.sha256(getParamByteArray(true));
109
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
66 }
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
67
146
0ef25958ac04 add transaction
akahori
parents: 139
diff changeset
68 public byte[] getByteArrayWithoutNonce(){
0ef25958ac04 add transaction
akahori
parents: 139
diff changeset
69
0ef25958ac04 add transaction
akahori
parents: 139
diff changeset
70 return getParamByteArray(false);
110
eab161e557bd fix Refactor
akahori
parents: 109
diff changeset
71 }
109
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
72
139
694ea96a557a refactor blockchain
akahori
parents: 110
diff changeset
73 public void setTimestamp(long timestamp) {
694ea96a557a refactor blockchain
akahori
parents: 110
diff changeset
74 this.timestamp = timestamp;
694ea96a557a refactor blockchain
akahori
parents: 110
diff changeset
75 }
694ea96a557a refactor blockchain
akahori
parents: 110
diff changeset
76
109
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
77 public long getTimestamp() {
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
78 return timestamp;
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
79 }
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
80
139
694ea96a557a refactor blockchain
akahori
parents: 110
diff changeset
81 public void setNonce(long nonce) {
694ea96a557a refactor blockchain
akahori
parents: 110
diff changeset
82 this.nonce = nonce;
109
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
83 }
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
84
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
85 public long getNonce(){
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
86 return this.nonce;
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
87 }
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
88
139
694ea96a557a refactor blockchain
akahori
parents: 110
diff changeset
89 public void setNumber(long number) {
694ea96a557a refactor blockchain
akahori
parents: 110
diff changeset
90 this.number = number;
694ea96a557a refactor blockchain
akahori
parents: 110
diff changeset
91 }
694ea96a557a refactor blockchain
akahori
parents: 110
diff changeset
92
694ea96a557a refactor blockchain
akahori
parents: 110
diff changeset
93 public long getNumber() {
694ea96a557a refactor blockchain
akahori
parents: 110
diff changeset
94 return number;
694ea96a557a refactor blockchain
akahori
parents: 110
diff changeset
95 }
694ea96a557a refactor blockchain
akahori
parents: 110
diff changeset
96
694ea96a557a refactor blockchain
akahori
parents: 110
diff changeset
97 public void setDifficulty(long difficulty) {
694ea96a557a refactor blockchain
akahori
parents: 110
diff changeset
98 this.difficulty = difficulty;
694ea96a557a refactor blockchain
akahori
parents: 110
diff changeset
99 }
694ea96a557a refactor blockchain
akahori
parents: 110
diff changeset
100
694ea96a557a refactor blockchain
akahori
parents: 110
diff changeset
101 public long getDifficulty() {
694ea96a557a refactor blockchain
akahori
parents: 110
diff changeset
102 return difficulty;
694ea96a557a refactor blockchain
akahori
parents: 110
diff changeset
103 }
109
2e64b927388c fix add BlockHeader.java
akahori
parents:
diff changeset
104 }