1– laboratoriya mashg’ulot Mavzu: Blockchain prototipini ishlab chiqish muhiti va tuzilishi


Blokka tranzaktsiyalarni kiritish



Yüklə 1,05 Mb.
Pdf görüntüsü
səhifə6/6
tarix03.06.2023
ölçüsü1,05 Mb.
#124404
1   2   3   4   5   6
1-labaratoriya blokchain

Blokka tranzaktsiyalarni kiritish 
Birinchidan, siz Transaction nomli yangi sinf yaratishingiz va unga bir nechta 
maydonlarni, ular uchun oluvchilarni va konstruktorni qo'shishingiz kerak


1 package blockchain.basic;
2
3 public class Transaction {
4
5 private String sender;
6 private String recipient;
7 private int amount;
8
9
10 public Transaction(String sender, String recipient, int amount)
11{
12 this.sender = sender;
13 this.recipient = recipient;
14 this.amount = amount;
15 }
16
17 public String getSender() {
18 return sender;
19 }
20
21 public String getRecipient() {
22 return recipient;
23 }
24
25 public int getAmount() {
26 return amount;
27 }
28
29} 
Keyinchalik, blokga tranzaktsiyalarni qo'shish usuli kerak. Buning uchun 
newTransaction() usuli javobgar bo'ladi: 
1 /**
2 *
3 * Направляє нову транзакцію в наступний блок
4 *
5 *
6 * @param sender Адреса відправника
7 * @param recipient Адреса отримувача
8 * @param amount Сума
9 * @return Індекса блока, що буде зберігати цю транзакцію
10 */
11
12 public int newTransaction(String sender, String recipient, int
amount) {
13 this.currentTransactions.add(new Transaction(sender, recipient,
amount));
14 return this.chain.size();
15 } 


newTransaction() tranzaksiyani roʻyxatga qoʻshgandan soʻng, tranzaksiya 
qoʻshiladigan blok indeksini, yaʼni almashtiriladigan keyingi blokni qaytaradi. Bu 
kelajakda tranzaktsiyani yuboradigan foydalanuvchi uchun foydali bo'ladi. 
Yangi bloklarni yaratish 
 
Biz yangi Block sinfini yaratamiz va unga kerakli maydonlarni, ular uchun 
oluvchilarni va konstruktorni qo'shamiz: 
1 package blockchain.basic;
2
3 Import java.util.List;
4
5 public class Block {
6
7 private int index;
8 private long timestamp;
9 private List transactions;
10 private int proof;
11 private String previousHash;
12
13 public Block(int index, int proof, String previousHash,
List transactions) {
14 this.index = index;
15 this.proof = proof;
16 this.previousHash = previousHash;
17 this.transactions = transactions;
18 this.timestamp = System.currentTimeMillis();
19 } 
20
21 public int getIndex() {
22 return index;
23 }
24
25 public long getTimestamp() {
26 return timestamp;
27 }
28
29 public List getTransactions() {
30 return transactions;
31 }
32 public int getProof() {
33 return proof;
34 }
35
36 public String getPreviousHash() {
37 return previousHash;
38 }
39 } 


Keling, newBlock() va hash() usullarini yozamiz: 
1 /**
2 *
3 * @param proof Bajarilgan ishning dalili 
4 * @param previousHash Oldingi blokning xeshi 
5 * @return Yangi blok 
6 */ 
7 ommaviy bloklash newBlock(int proof, String previousHash) { 

9 // ro'yxatning nusxasini yarating 
10 roʻyxat tranzaksiyalari = this.currentTransac- 
tions.stream().to'plash(Kollektorlar.toList()); 
11 
12 // yangi blok ob'ektini yarating 
13 Block newBlock = new Blok(this.chain.size(), isbot, oldingi 
ousHash, tranzaktsiyalar); 
14 
15 // tranzaktsiyalar ro'yxatini tozalang 
16 this.currentTransactions.clear(); 
17 
18 // zanjirga yangi blok qo'shing 
19 this.chain.add(newBlock); 
20 
21 // yangi blokni qaytaring 
22 yangi blokni qaytarish; 
23 } 
24 
25 /** 
26 * 
27 * @param bloki Blok 
28 * @return Blokning xeshi 
29 */ 
30 umumiy statik String xesh(Blok bloki) { 
31 StringBuilder hashingInputBuilder = new StringBuilder(); 
32 
33 // blok parametrlarini ma'lum bir o'zgarmas tarzda o'zgaruvchiga qo'shing 
chiziq 
34 hashingInputBuilder.append(block.getIndex()) 
.append(block.getTimestamp()).apppend(block.getProof()) 
.append(block.getPreviousHash()); 
36 
37 String hashingInput = hashingInputBuilder.toString(); 
38 // o'zgaruvchidan foydalanib, uning maydonlari asosida blok xeshini yarating 
39 return Hashing.sha256().hashString(hashingInput, Standard-Charsets.UTF_8).toString();
40 } 
Endi siz genezis bloki qo'shiladigan konstruktorni yaratishingiz kerak: 
25
1 public Blockchain() {


2 newBlock(100, "0");
3 } 
PoWning asosiy amalga oshirilishi 
Qoida yuqorida aytib o'tilganga o'xshash bo'ladi: 
Oldingi blokning yechimi bilan xeshlanganda to„rtta yetakchi nolga ega xesh hosil 
qiluvchi p sonini toping. 

Yüklə 1,05 Mb.

Dostları ilə paylaş:
1   2   3   4   5   6




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©azkurs.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin