Blockchain https://dongthoigian.net/cong-nghe-moi/blockchain/ Tue, 02 Aug 2022 09:41:09 +0000 vi hourly 1 https://wordpress.org/?v=6.7.2 https://dongthoigian.net/wp-content/uploads/2025/02/cropped-dongthoigian_huedc-32x32.png Blockchain https://dongthoigian.net/cong-nghe-moi/blockchain/ 32 32 241113670 Cách tạo chuỗi khối trong JavaScript https://dongthoigian.net/cach-tao-chuoi-khoi-trong-javascript/ https://dongthoigian.net/cach-tao-chuoi-khoi-trong-javascript/#respond Tue, 02 Aug 2022 09:41:04 +0000 https://dongthoigian.net/?p=14532 Blockchain  là một cấu  trúc dữ liệu đại diện cho mục nhập sổ cái tài chính hoặc bản ghi của một giao dịch. 

The post Cách tạo chuỗi khối trong JavaScript appeared first on Dongthoigian.net.

]]>
Trong hướng dẫn này, chúng ta sẽ xem Cách tạo chuỗi khối trong JavaScript. Blockchain lưu giữ hồ sơ của tất cả các trao đổi dữ liệu – hồ sơ này được gọi là “ sổ cái ” trong thế giới tiền điện tử và mỗi trao đổi dữ liệu là “ giao dịch ”. Mọi giao dịch đã xác minh sẽ được thêm vào sổ cái dưới dạng một “ khối ”. Nó sử dụng hệ thống phân tán để xác minh từng giao dịch – mạng ngang hàng của các nút. Sau khi đã ký và xác minh, một giao dịch mới sẽ được thêm vào blockchain và không thể thay đổi được.

Blockchain  là một cấu  trúc dữ liệu đại diện cho mục nhập sổ cái tài chính hoặc bản ghi của một giao dịch. Mỗi giao dịch đều được ký điện tử để đảm bảo tính xác thực của nó và không ai giả mạo được, vì vậy bản thân sổ cái và các giao dịch hiện có bên trong nó được coi là có tính toàn vẹn cao.

Trong hướng dẫn này, chúng tôi sẽ tạo chuỗi khối đơn giản bằng javascript, trong đó chúng tôi sử dụng Javascript làm ngôn ngữ và Node.js làm phần phụ trợ để chạy dự án nhỏ.

Cách tạo chuỗi khối trong JavaScript

Bây giờ nếu chúng ta cần tạo một Blockchain đơn giản trong Node.js, thì chúng ta cần có một Khối khởi đầu

Bạn có thể gọi Genesis Block là khối đầu tiên của Blockchain vì Blockchain là một mảng các khối và Genesis là khối đầu tiên của Blockchain .

Khối Genesis

Khối  genesis là khối đầu  tiên   của blockchain. Khối  genesis  thường được mã hóa cứng trong các ứng dụng sử dụng blockchain của nó. Genesis Block còn được gọi là Block Zero hoặc Block 0. Nó là tổ tiên mà mọi khối của mạng Blockchain có thể được truy tìm về nguồn gốc của nó. Hãy nhớ cách mọi khối trong Blockchain được liên kết trở lại khối trước đó bằng cách sử dụng hàm băm trong tiêu đề khối? Bạn tiếp tục quay lại, và bạn nhận ra rằng mọi khối do đó được kết nối với khối gốc.

Khối Genesis của chúng tôi chứa các trường hoặc thuộc tính sau.

  1. dấu thời gian
  2. lastHash
  3. băm
  4. dữ liệu

Vì vậy, nếu chúng ta kết hợp tất cả các thuộc tính này vào một đối tượng, thì nó sẽ trở thành một Khối khởi đầu. Vì vậy, dựa trên khối này, chúng tôi sẽ khai thác khối thứ hai. Sau đó, từ khối thứ hai, chúng ta sẽ trích xuất khối thứ ba, v.v. Đó là lý do tại sao chúng ta cần Genesis Block để bắt đầu một Blockchain.

Bây giờ, chúng ta hãy bắt đầu một dự án bằng cách tạo một thư mục dự án và sau đó bắt đầu xây dựng chuỗi khối tuyệt vời bằng cách sử dụng Javascript.

Bước 1: Tạo dự án và tạo Dữ liệu Genesis Bước đầu tiên là tạo một dự án. Nhập lệnh sau :

mkdir cryptochain

Vào bên trong thư mục đó.

cd cryptochain

Bây giờ, tạo tệp package.json trong trường hợp trong tương lai, chúng ta cần cài đặt bất kỳ mô-đun nút nào.

npm init -y

Hãy nhớ rằng, tôi đang sử dụng Node v11.3.0. 

Bước tiếp theo là tạo một tệp mới bên trong thư mục gốc có tên là  genesis.js  và thêm đoạn mã sau.

// genesis.js

const GENESIS_DATA = {
    timestamp: Date.now(),
    lastHash: '64b7edc786326651e031a4d12d9838d279571946d8c9a5d448c70db94b0e143f',
    hash: 'c671c84681b9d682b9fd43b2a2ef01a343eab7cfa410df9835f8165007d38467',
    data: 'krunal'
};

module.exports = { GENESIS_DATA };

Ở đây, chúng tôi đã lấy một đối tượng với các giá trị ban đầu của nó.

Như tôi đã xác định trước đó, khối của chúng ta chứa bốn thuộc tính. Đây là dữ liệu nguồn gốc, vì vậy chúng ta cần mã hóa các giá trị này.

Bạn có thể hiểu được dấu thời gian  và  dữ liệu  thuộc tính  . Nhưng tôi đã sử dụng  thuật toán SHA256  để chuyển văn bản đơn giản thành văn bản băm.

Văn bản thực tế cho lastHash là một krunal và văn bản thực tế cho hàm băm là một  krunalHash.

Bạn có thể xác minh nó bằng cách truy cập URL này:  https://passwordsgenerator.net/sha256-hash-generator/

Tại đây, bạn có thể nhập tên của tôi dưới dạng văn bản và nó sẽ cung cấp hàm băm SHA256 của văn bản đó. Bây giờ, bạn cần chuyển văn bản đó thành chữ thường bằng cách sử dụng toLowercase () của Javascript. Đó là nó. Bạn sẽ tìm thấy băm chính xác giống như tôi. Mát mẻ!! Vì vậy, bây giờ, bạn có Dữ liệu Genesis đã sẵn sàng. Việc tiếp theo là tạo Block từ dữ liệu này.

Bước 2: Tạo khối Bên trong gốc dự án của bạn, hãy tạo một tệp có tên  block.js  và thêm mã sau :

// block.js

const { GENESIS_DATA } = require('./genesis.js');

class Block {
    constructor({timestamp, lastHash, hash, data}) {
        this.timestamp = timestamp;
        this.lastHash = lastHash;
        this.hash = hash;
        this.data = data;
    }

    static genesis() {
        return new this(GENESIS_DATA);
    }
}

module.exports = Block;

Vì vậy, ở đây chúng tôi đã nhập GENESIS_DATA cho khối của chúng tôi.

Sau đó, chúng ta đã xác định  lớp Block  và truyền các tham số cho phương thức khởi tạo khi chúng ta tạo một đối tượng của Block.

Chúng tôi cũng đã xác định  phương thức tĩnh  được gọi là  genesis ()  chịu trách nhiệm trả về Genesis Block cho blockchain của chúng tôi.

Hãy nhớ rằng trước đây chúng tôi đã xác định khối không GENESIS_DATA. Sau khi tạo một đối tượng của lớp này, nó sẽ trở thành một Khối Genesis.

Bước 3: Tạo một băm dựa trên một khối trước đó.

Chúng ta cần xác định một hàm có thể tạo một băm dựa trên băm của khối trước đó. Vì vậy, trước tiên, chúng ta hãy tạo một tệp mới bên trong tệp gốc có tên là  crypto-hash.js  và thêm đoạn mã sau vào bên trong nó.

// crypto-hash.js

const crypto = require('crypto');

const cryptoHash =(...inputs) => {
    const hash = crypto.createHash('sha256');
    hash.update(inputs.sort().join(' '));
    return hash.digest('hex');
}

module.exports = cryptoHash;

Bây giờ, để tạo Hash, chúng ta cần ba thuộc tính.

  1. dấu thời gian
  2. lastHash
  3. dữ liệu

Vì vậy, trước tiên chúng tôi yêu cầu  mô-đun  tiền điện tử được cung cấp bởi Node.js.

Sau đó, chúng tôi đã xác định hàm được gọi là  cryptoHash ()  sẽ chấp nhận các đầu vào. Ở đây chúng tôi đã sử dụng toán tử spread là cú pháp của ES6.

Bên trong hàm đó, chúng ta đã gọi  phương thức createHash ()  và chuyển  sha256  làm tham số. Điều đó có nghĩa là chúng ta cần tạo một hàm băm dựa trên thuật toán sha256 .

Sau đó, chúng tôi đã sắp xếp và nối ba tham số đó và trả về các giá trị hex của nó.

Vì vậy, cuối cùng, chúng ta có thể lấy băm của khối hiện tại dựa trên ba thuộc tính của khối trước đó.

Bước 4: Khai thác một Khối mới dựa trên một Khối trước đó

Vì vậy, chúng tôi đã có Genesis Block và băm của khối đó. Bây giờ, chúng ta cần viết hàm có thể tạo một Khối mới dựa trên khối trước đó. Ngay bây giờ, trong trường hợp của chúng ta, nó là một Khối Khởi Nguyên.

Bây giờ, nhập  mô-đun  mã hóa-băm  bên trong tệp block.js  và tạo một hàm mới có tên  mineBlock ()  và chuyển hai tham số.

  1. lastBlock
  2. dữ liệu

Vì vậy, tệp block.js  cuối cùng của chúng tôi  trông như thế này.

// block.js

const { GENESIS_DATA } = require('./genesis.js');
const cryptoHash = require('./crypto-hash');

class Block {
    constructor({timestamp, lastHash, hash, data}) {
        this.timestamp = timestamp;
        this.lastHash = lastHash;
        this.hash = hash;
        this.data = data;
    }

    static genesis() {
        return new this(GENESIS_DATA);
    }

    static mineBlock({lastBlock, data}) {
        const timestamp = Date.now();
        const lastHash = lastBlock.hash;
        return new this({
            timestamp,
            lastHash,
            data,
            hash: cryptoHash(timestamp, lastHash, data)
        });
    }
}
module.exports = Block;

Vì vậy, ở đây chúng ta đã định nghĩa phương thức gọi là  mineBlock  và truyền hai tham số. MineBlock  ()  sẽ trả về một Khối mới hoàn chỉnh dựa trên khối trước đó.

Bây giờ, đã đến lúc tạo ra một Blockchain từ các khối này.

Bước 5: Tạo chuỗi khối Chúng ta đã hoàn thành bước tạo Khối Genesis và khai thác một Khối mới. Bây giờ là lúc để phát triển một blockchain. Đó là lý do tại sao tạo một tệp mới bên trong tệp gốc có tên là  blockchain.js  và thêm mã sau vào bên trong nó.

// blockchain.js

const Block = require('./block');

class Blockchain {

    constructor() {
        this.chain = [Block.genesis()];
    }

    addBlock({ data }) {
        const newBlock = Block.mineBlock({
            lastBlock: this.chain[this.chain.length-1],
            data
        });

        this.chain.push(newBlock);
    }
}

module.exports = Blockchain;

Vì vậy, trước tiên, chúng tôi đã nhập  tệp Block.js  và sau đó tạo một lớp có tên là Blockchain.

Lớp Blockchain chịu trách nhiệm thêm một khối mới bên trong blockchain.

Blockchain là một mảng của các khối bắt đầu bằng khối Genesis.

Vì vậy, trong hàm tạo, chúng ta chưa xác định một mảng trống. Thay vào đó, chúng tôi đã lấp đầy mảng chuỗi bằng khối Genesis.

Sau đó, chúng tôi đã xác định một hàm được gọi là  addBlock ()  chấp nhận dữ liệu.

Bây giờ, trước khi thêm một khối mới vào mảng chuỗi, chúng ta cần khai thác nó. Đó là lý do tại sao chúng ta đã gọi phương thức mineBlock ()  của lớp Block  để trích xuất một khối mới.

Để khai thác một khối mới, chúng ta cần một khối trước đó và dữ liệu. Đó là lý do tại sao chúng tôi đã sử dụng mã  this.chain [this.chain.length-1]  vì nó sẽ trả về khối cuối cùng trong chuỗi khối và dữ liệu đã được chúng tôi chuyển đến hàm đó. Vì vậy, chúng tôi nhận được khối mới dựa trên khối và dữ liệu trước đó.

Bước tiếp theo là thêm khối mới được khai thác đó vào bên trong chuỗi khối của chúng tôi, và thế là xong.

Bước cuối cùng là chạy dự án này và lấy blockchain.

Bước 6: Chạy dự án và nhận blockchain.

Bây giờ, bước cuối cùng là tạo một tệp bên trong thư mục gốc của dự án có tên là  server.js  và thêm đoạn mã sau.

// server.js

const Blockchain = require('./blockchain');
const Block = require('./block');

const blockchain = new Blockchain();

for(let i=0; i<5; i++) {
    const newData = 'krunal'+i;
    blockchain.addBlock({data: newData});
}

console.log(blockchain);

Vì vậy, ở đây chúng tôi đã nhập cả  tệp block.js  và  blockchain.js  và tạo một đối tượng của Blockchain.

Sau đó, chúng tôi sẽ lặp qua chuỗi khối đó và thêm dữ liệu vào chuỗi khối đó và tạo ra sáu khối trong chuỗi khối vì một khối là Genesis và năm khối dựa trên các khối trước đó.

Đi tới thiết bị đầu cuối và khởi động máy chủ nút.

node server Bạn sẽ thấy một đầu ra như thế này.

Blockchain

The post Cách tạo chuỗi khối trong JavaScript appeared first on Dongthoigian.net.

]]>
https://dongthoigian.net/cach-tao-chuoi-khoi-trong-javascript/feed/ 0 14532
Python Blockchain – Thêm Khối Genesis https://dongthoigian.net/python-blockchain-them-khoi-genesis/ https://dongthoigian.net/python-blockchain-them-khoi-genesis/#respond Tue, 25 Jan 2022 03:43:41 +0000 https://dongthoigian.net/?p=10612 Bây giờ, bạn sẽ kết xuất nội dung của chuỗi khối bằng cách gọi hàm toàn cầu của chúng tôi là dump_blockchain

The post Python Blockchain – Thêm Khối Genesis appeared first on Dongthoigian.net.

]]>
Thêm một khối vào chuỗi khối liên quan đến việc thêm khối đã tạo vào danh sách TPCoins của chúng tôi .

TPCoins.append (block0)

Lưu ý rằng không giống như các khối còn lại trong hệ thống, khối gốc chỉ chứa một giao dịch được khởi tạo bởi người khởi tạo hệ thống TPCoins. Bây giờ, bạn sẽ kết xuất nội dung của chuỗi khối bằng cách gọi hàm toàn cầu của chúng tôi là dump_blockchain –

dump_blockchain(TPCoins)

Khi bạn thực thi chức năng này, bạn sẽ thấy kết quả sau:

Number of blocks in the chain: 1
block # 0
sender: Genesis
-----
recipient:
30819f300d06092a864886f70d010101050003818d0030818902818100ed272b52ccb539
e2cd779c6cc10ed1dfadf5d97c6ab6de90ed0372b2655626fb79f62d0e01081c163b0864
cc68d426bbe9438e8566303bb77414d4bfcaa3468ab7febac099294de10273a816f7047d
4087b4bafa11f141544d48e2f10b842cab91faf33153900c7bf6c08c9e47a7df8aa7e60d
c9e0798fb2ba3484bbdad2e4430203010001
-----
value: 500.0
-----
time: 2019-01-14 16:18:02.042739
-----
--------------
=====================================

Tại thời điểm này, hệ thống blockchain đã sẵn sàng để sử dụng. Giờ đây, chúng tôi sẽ cho phép những khách hàng quan tâm trở thành thợ đào bằng cách cung cấp cho họ một chức năng khai thác

Python Blockchain – Tạo công cụ khai thác

Để cho phép khai thác, chúng ta cần phát triển một chức năng khai thác. Chức năng khai thác cần tạo thông báo về một chuỗi thông báo nhất định và cung cấp bằng chứng công việc. Hãy để chúng tôi thảo luận về điều này trong chương này.

Chức năng thông báo thông báo

Chúng tôi sẽ viết một hàm tiện ích có tên là sha256 để tạo thông báo về một thông báo nhất định

def sha256(message):
return hashlib.sha256(message.encode('ascii')).hexdigest()

Hàm sha256 nhận một thông báo làm tham số, mã hóa nó thành ASCII, tạo một thông báo thập lục phân và trả về giá trị cho người gọi.

Chức năng khai thác

Bây giờ chúng tôi phát triển chức năng khai thác để thực hiện chiến lược khai thác của riêng mình. Chiến lược của chúng tôi trong trường hợp này sẽ là tạo một mã băm trên thông báo đã cho có tiền tố là số 1 cho trước. Số lượng nhất định của 1 được chỉ định làm tham số để khai thác chức năng được chỉ định là mức độ khó.

Ví dụ: nếu bạn chỉ định mức độ khó là 2, hàm băm được tạo trên một tin nhắn nhất định sẽ bắt đầu bằng hai chữ 1 – như 11xxxxxxxx. Nếu mức độ khó là 3, hàm băm được tạo phải bắt đầu bằng ba số 1 – như 111xxxxxxxx. Với những yêu cầu này, bây giờ chúng ta sẽ phát triển chức năng khai thác như được hiển thị trong các bước dưới đây.

Bước 1

Hàm khai thác nhận hai tham số – thông báo và mức độ khó.

def mine(message, difficulty=1):

Bước 2

Mức độ khó cần lớn hơn hoặc bằng 1, chúng tôi đảm bảo điều này với câu khẳng định sau:

assert difficulty >= 1

Bước 3

Chúng tôi tạo một biến tiền tố bằng cách sử dụng mức độ khó đã đặt.

prefix = '1' * difficulty

Lưu ý nếu mức độ khó là 2, tiền tố sẽ là “11” và nếu mức độ khó là 3, tiền tố sẽ là “111”, v.v. Chúng tôi sẽ kiểm tra xem tiền tố này có tồn tại trong bản tóm tắt thông báo được tạo hay không. Để thông báo chính nó, chúng tôi sử dụng hai dòng mã sau:

for i in range(1000):
   digest = sha256(str(hash(message)) + str(i))

Chúng tôi tiếp tục thêm một số mới i vào băm thông báo trong mỗi lần lặp lại và tạo một thông báo mới về thông báo kết hợp. Khi đầu vào cho hàm sha256 thay đổi trong mỗi lần lặp, giá trị thông báo cũng sẽ thay đổi. Chúng tôi kiểm tra xem giá trị thông báo này có tiền tố đã đặt ở trên hay không .

if digest.startswith(prefix):

Nếu điều kiện được thỏa mãn, chúng ta sẽ kết thúc vòng lặp for và trả về giá trị thông báo cho người gọi. Toàn bộ mã mỏ được hiển thị ở đây

def mine(message, difficulty=1):
   assert difficulty >= 1
   prefix = '1' * difficulty
   for i in range(1000):
      digest = sha256(str(hash(message)) + str(i))
      if digest.startswith(prefix):
         print ("after " + str(i) + " iterations found nonce: "+ digest)
      return digest

Đối với sự hiểu biết của bạn, chúng tôi đã thêm in tuyên bố rằng in các tiêu hóa giá trị và số lần lặp lại nó mất để đáp ứng điều kiện trước khi trở về từ hàm.

Kiểm tra chức năng khai thác

Để kiểm tra chức năng khai thác của chúng tôi, chỉ cần thực hiện câu lệnh sau:

mine ("test message", 2)

Khi bạn chạy đoạn mã trên, bạn sẽ thấy kết quả tương tự như bên dưới:

after 138 iterations found nonce:
11008a740eb2fa6bf8d55baecda42a41993ca65ce66b2d3889477e6bfad1484c

Lưu ý rằng thông báo được tạo bắt đầu bằng “11”. Nếu bạn thay đổi mức độ khó thành 3, thông báo được tạo sẽ bắt đầu bằng “111” và tất nhiên, nó có thể sẽ yêu cầu nhiều lần lặp hơn. Như bạn có thể thấy, một người khai thác có nhiều khả năng xử lý hơn sẽ có thể khai thác một tin nhắn nhất định sớm hơn. Đó là cách các thợ mỏ cạnh tranh với nhau để kiếm doanh thu của họ.

Bây giờ, chúng tôi đã sẵn sàng thêm nhiều khối hơn vào chuỗi khối của mình. Hãy để chúng tôi tìm hiểu điều này trong chương tiếp theo của chúng tôi.

Python Blockchain – Thêm khối

Mỗi người khai thác sẽ chọn các giao dịch từ một nhóm giao dịch đã tạo trước đó. Để theo dõi số lượng tin nhắn đã được khai thác, chúng ta phải tạo một biến toàn cục –

last_transaction_index = 0

Bây giờ chúng tôi sẽ có người khai thác đầu tiên của chúng tôi thêm một khối vào blockchain.

Thêm khối đầu tiên

Để thêm một khối mới, trước tiên chúng ta tạo một thể hiện của lớp Block .

block = Block()

Chúng tôi chọn 3 giao dịch hàng đầu từ hàng đợi

for i in range(3):
   temp_transaction = transactions[last_transaction_index]
   # validate transaction

Trước khi thêm giao dịch vào khối, người khai thác sẽ xác minh tính hợp lệ của giao dịch. Tính hợp lệ của giao dịch được xác minh bằng cách kiểm tra tính bình đẳng giữa hàm băm do người gửi cung cấp so với hàm băm do người khai thác tạo ra bằng cách sử dụng khóa công khai của người gửi. Ngoài ra, người khai thác sẽ xác minh rằng người gửi có đủ số dư để thanh toán cho giao dịch hiện tại.

Để ngắn gọn, chúng tôi chưa đưa chức năng này vào hướng dẫn. Sau khi giao dịch được xác thực, chúng tôi thêm nó vào danh sách verify_transactions trong trường hợp khối .

block.verified_transactions.append (temp_transaction)

Chúng tôi tăng chỉ số giao dịch cuối cùng để người khai thác tiếp theo sẽ nhận các giao dịch tiếp theo trong hàng đợi.

last_transaction_index += 1

Chúng tôi thêm chính xác ba giao dịch vào khối. Khi điều này được thực hiện, chúng tôi sẽ khởi tạo phần còn lại của các biến cá thể của lớp Block . Đầu tiên chúng tôi thêm băm của khối cuối cùng.

block.previous_block_hash = last_block_hash

Tiếp theo, chúng tôi khai thác khối với độ khó là 2.

block.Nonce = mine (block, 2)

Lưu ý rằng tham số đầu tiên của hàm mine là một đối tượng nhị phân. Bây giờ chúng tôi băm toàn bộ khối và tạo thông báo về nó.

digest = hash (block)

Cuối cùng, chúng tôi thêm khối đã tạo vào blockchain và khởi tạo lại biến toàn cục last_block_hash để sử dụng trong khối tiếp theo.

Toàn bộ mã để thêm khối được hiển thị bên dưới:

block = Block()
for i in range(3):
   temp_transaction = transactions[last_transaction_index]
   # validate transaction
   # if valid
   block.verified_transactions.append (temp_transaction)
   last_transaction_index += 1

block.previous_block_hash = last_block_hash
block.Nonce = mine (block, 2)
digest = hash (block)
TPCoins.append (block)
last_block_hash = digest

Thêm các khối khác

Bây giờ chúng tôi sẽ thêm hai khối nữa vào blockchain của mình. Mã để thêm hai khối tiếp theo được đưa ra dưới đây:

# Miner 2 adds a block
block = Block()

for i in range(3):
   temp_transaction = transactions[last_transaction_index]
   # validate transaction
   # if valid
   block.verified_transactions.append (temp_transaction)
   last_transaction_index += 1
block.previous_block_hash = last_block_hash
block.Nonce = mine (block, 2)digest = hash (block)
TPCoins.append (block)last_block_hash = digest
# Miner 3 adds a block
block = Block()

for i in range(3):
   temp_transaction = transactions[last_transaction_index]
   #display_transaction (temp_transaction)
   # validate transaction
   # if valid
   block.verified_transactions.append (temp_transaction)
   last_transaction_index += 1

block.previous_block_hash = last_block_hash
block.Nonce = mine (block, 2)
digest = hash (block)

TPCoins.append (block)
last_block_hash = digest

Khi bạn thêm hai khối này, bạn cũng sẽ thấy số lần lặp lại để tìm Nonce. Tại thời điểm này, blockchain của chúng tôi bao gồm hoàn toàn 4 khối bao gồm cả khối gốc.

Bán phá giá toàn bộ chuỗi khối

Bạn có thể xác minh nội dung của toàn bộ chuỗi khối bằng cách sử dụng câu lệnh sau:

dump_blockchain(TPCoins)

Bạn sẽ thấy đầu ra tương tự như kết quả được hiển thị bên dưới:

Number of blocks in the chain: 4
block # 0
sender: Genesis
-----
recipient:
30819f300d06092a864886f70d010101050003818d0030818902818100ed272b52ccb539e2cd779
c6cc10ed1dfadf5d97c6ab6de90ed0372b2655626fb79f62d0e01081c163b0864cc68d426bbe943
8e8566303bb77414d4bfcaa3468ab7febac099294de10273a816f7047d4087b4bafa11f141544d4
8e2f10b842cab91faf33153900c7bf6c08c9e47a7df8aa7e60dc9e0798fb2ba3484bbdad2e44302
03010001
-----
value: 500.0
-----
time: 2019-01-14 16:18:02.042739
-----
--------------
=====================================
block # 1
sender:
30819f300d06092a864886f70d010101050003818d0030818902818100bb064c99c492144a9f463
480273aba93ac1db1f0da3cb9f3c1f9d058cf499fd8e54d244da0a8dd6ddd329ec86794b04d773e
b4841c9f935ea4d9ccc2821c7a1082d23b6c928d59863407f52fa05d8b47e5157f8fe56c2ce3279
c657f9c6a80500073b0be8093f748aef667c03e64f04f84d311c4d866c12d79d3fc3034563dfb02
03010001
-----
recipient:
30819f300d06092a864886f70d010101050003818d0030818902818100be93b516b28c6e674abe7
abdb11ce0fdf5bb728b75216b73f37a6432e4b402b3ad8139b8c0ba541a72c8add126b6e1a1308f
b98b727beb63c6060356bb177bb7d54b54dbe87aee7353d0a6baa9397704de625d1836d3f42c7ee
5683f6703259592cc24b09699376807f28fe0e00ff882974484d805f874260dfc2d1627473b9102
03010001
-----
value: 15.0
-----
time: 2019-01-14 16:18:01.859915
-----
--------------
sender:
30819f300d06092a864886f70d010101050003818d0030818902818100bb064c99c492144a9f463
480273aba93ac1db1f0da3cb9f3c1f9d058cf499fd8e54d244da0a8dd6ddd329ec86794b04d773e
b4841c9f935ea4d9ccc2821c7a1082d23b6c928d59863407f52fa05d8b47e5157f8fe56c2ce3279
c657f9c6a80500073b0be8093f748aef667c03e64f04f84d311c4d866c12d79d3fc3034563dfb02
03010001
-----
recipient:
30819f300d06092a864886f70d010101050003818d0030818902818100a070c82b34ae143cbe59b
3a2afde7186e9d5bc274955d8112d87a00256a35369acc4d0edfe65e8f9dc93fbd9ee74b9e7ea12
334da38c8c9900e6ced1c4ce93f86e06611e656521a1eab561892b7db0961b4f212d1fd5b5e49ae
09cf8c603a068f9b723aa8a651032ff6f24e5de00387e4d062375799742a359b8f22c5362e56502
03010001
-----
value: 6.0
-----
time: 2019-01-14 16:18:01.860966
-----
--------------
sender:
30819f300d06092a864886f70d010101050003818d0030818902818100be93b516b28c6e674abe7
abdb11ce0fdf5bb728b75216b73f37a6432e4b402b3ad8139b8c0ba541a72c8add126b6e1a1308f
b98b727beb63c6060356bb177bb7d54b54dbe87aee7353d0a6baa9397704de625d1836d3f42c7ee
5683f6703259592cc24b09699376807f28fe0e00ff882974484d805f874260dfc2d1627473b9102
03010001
-----
recipient:
30819f300d06092a864886f70d010101050003818d0030818902818100cba097c0854876f41338c
62598c658f545182cfa4acebce147aedf328181f9c4930f14498fd03c0af6b0cce25be99452a81d
f4fa30a53eddbb7bb7b203adf8764a0ccd9db6913a576d68d642d8fd47452590137869c25d9ff83
d68ebe6d616056a8425b85b52e69715b8b85ae807b84638d8f00e321b65e4c33acaf6469e18e302
03010001
-----
value: 2.0
-----
time: 2019-01-14 16:18:01.861958
-----
--------------
=====================================
block # 2
sender:
30819f300d06092a864886f70d010101050003818d0030818902818100a070c82b34ae143cbe59b
3a2afde7186e9d5bc274955d8112d87a00256a35369acc4d0edfe65e8f9dc93fbd9ee74b9e7ea12
334da38c8c9900e6ced1c4ce93f86e06611e656521a1eab561892b7db0961b4f212d1fd5b5e49ae
09cf8c603a068f9b723aa8a651032ff6f24e5de00387e4d062375799742a359b8f22c5362e56502
03010001
-----
recipient:
30819f300d06092a864886f70d010101050003818d0030818902818100be93b516b28c6e674abe7
abdb11ce0fdf5bb728b75216b73f37a6432e4b402b3ad8139b8c0ba541a72c8add126b6e1a1308f
b98b727beb63c6060356bb177bb7d54b54dbe87aee7353d0a6baa9397704de625d1836d3f42c7ee
5683f6703259592cc24b09699376807f28fe0e00ff882974484d805f874260dfc2d1627473b9102
03010001
-----
value: 4.0
-----
time: 2019-01-14 16:18:01.862946
-----
--------------
sender:
30819f300d06092a864886f70d010101050003818d0030818902818100cba097c0854876f41338c
62598c658f545182cfa4acebce147aedf328181f9c4930f14498fd03c0af6b0cce25be99452a81d
f4fa30a53eddbb7bb7b203adf8764a0ccd9db6913a576d68d642d8fd47452590137869c25d9ff83
d68ebe6d616056a8425b85b52e69715b8b85ae807b84638d8f00e321b65e4c33acaf6469e18e302
03010001
-----
recipient:
30819f300d06092a864886f70d010101050003818d0030818902818100a070c82b34ae143cbe59b
3a2afde7186e9d5bc274955d8112d87a00256a35369acc4d0edfe65e8f9dc93fbd9ee74b9e7ea12
334da38c8c9900e6ced1c4ce93f86e06611e656521a1eab561892b7db0961b4f212d1fd5b5e49ae
09cf8c603a068f9b723aa8a651032ff6f24e5de00387e4d062375799742a359b8f22c5362e56502
03010001
-----
value: 7.0
-----
time: 2019-01-14 16:18:01.863932
-----
--------------
sender:
30819f300d06092a864886f70d010101050003818d0030818902818100be93b516b28c6e674abe7
abdb11ce0fdf5bb728b75216b73f37a6432e4b402b3ad8139b8c0ba541a72c8add126b6e1a1308f
b98b727beb63c6060356bb177bb7d54b54dbe87aee7353d0a6baa9397704de625d1836d3f42c7ee
5683f6703259592cc24b09699376807f28fe0e00ff882974484d805f874260dfc2d1627473b9102
03010001
-----
recipient:
30819f300d06092a864886f70d010101050003818d0030818902818100a070c82b34ae143cbe59b
3a2afde7186e9d5bc274955d8112d87a00256a35369acc4d0edfe65e8f9dc93fbd9ee74b9e7ea12
334da38c8c9900e6ced1c4ce93f86e06611e656521a1eab561892b7db0961b4f212d1fd5b5e49ae
09cf8c603a068f9b723aa8a651032ff6f24e5de00387e4d062375799742a359b8f22c5362e56502
03010001
-----
value: 3.0
-----
time: 2019-01-14 16:18:01.865099
-----
--------------
=====================================
block # 3
sender:
30819f300d06092a864886f70d010101050003818d0030818902818100a070c82b34ae143cbe59b
3a2afde7186e9d5bc274955d8112d87a00256a35369acc4d0edfe65e8f9dc93fbd9ee74b9e7ea12
334da38c8c9900e6ced1c4ce93f86e06611e656521a1eab561892b7db0961b4f212d1fd5b5e49ae
09cf8c603a068f9b723aa8a651032ff6f24e5de00387e4d062375799742a359b8f22c5362e56502
03010001
-----
recipient:
30819f300d06092a864886f70d010101050003818d0030818902818100bb064c99c492144a9f463
480273aba93ac1db1f0da3cb9f3c1f9d058cf499fd8e54d244da0a8dd6ddd329ec86794b04d773e
b4841c9f935ea4d9ccc2821c7a1082d23b6c928d59863407f52fa05d8b47e5157f8fe56c2ce3279
c657f9c6a80500073b0be8093f748aef667c03e64f04f84d311c4d866c12d79d3fc3034563dfb02
03010001
-----
value: 8.0
-----
time: 2019-01-14 16:18:01.866219
-----
--------------
sender:
30819f300d06092a864886f70d010101050003818d0030818902818100a070c82b34ae143cbe59b
3a2afde7186e9d5bc274955d8112d87a00256a35369acc4d0edfe65e8f9dc93fbd9ee74b9e7ea12
334da38c8c9900e6ced1c4ce93f86e06611e656521a1eab561892b7db0961b4f212d1fd5b5e49ae
09cf8c603a068f9b723aa8a651032ff6f24e5de00387e4d062375799742a359b8f22c5362e56502
03010001
-----
recipient:
30819f300d06092a864886f70d010101050003818d0030818902818100be93b516b28c6e674abe7
abdb11ce0fdf5bb728b75216b73f37a6432e4b402b3ad8139b8c0ba541a72c8add126b6e1a1308f
b98b727beb63c6060356bb177bb7d54b54dbe87aee7353d0a6baa9397704de625d1836d3f42c7ee
5683f6703259592cc24b09699376807f28fe0e00ff882974484d805f874260dfc2d1627473b9102
03010001
-----
value: 1.0
-----
time: 2019-01-14 16:18:01.867223
-----
--------------
sender:
30819f300d06092a864886f70d010101050003818d0030818902818100cba097c0854876f41338c
62598c658f545182cfa4acebce147aedf328181f9c4930f14498fd03c0af6b0cce25be99452a81d
f4fa30a53eddbb7bb7b203adf8764a0ccd9db6913a576d68d642d8fd47452590137869c25d9ff83
d68ebe6d616056a8425b85b52e69715b8b85ae807b84638d8f00e321b65e4c33acaf6469e18e302
03010001
-----
recipient: 
30819f300d06092a864886f70d010101050003818d0030818902818100bb064c99c492144a9f463
480273aba93ac1db1f0da3cb9f3c1f9d058cf499fd8e54d244da0a8dd6ddd329ec86794b04d773e
b4841c9f935ea4d9ccc2821c7a1082d23b6c928d59863407f52fa05d8b47e5157f8fe56c2ce3279
c657f9c6a80500073b0be8093f748aef667c03e64f04f84d311c4d866c12d79d3fc3034563dfb02
03010001
-----
value: 5.0
-----
time: 2019-01-14 16:18:01.868241
-----
--------------
=====================================

Python Blockchain – Phạm vi và Kết luận

Trong hướng dẫn này, chúng ta đã học cách xây dựng một dự án blockchain bằng Python. Có rất nhiều khu vực mà bạn cần bổ sung thêm chức năng cho dự án này.

Ví dụ, bạn sẽ cần viết các hàm để quản lý hàng đợi giao dịch. Sau khi các giao dịch được khai thác và khối được khai thác được hệ thống chấp nhận, chúng không cần được lưu trữ nữa.

Ngoài ra, các thợ đào chắc chắn sẽ thích nhận các giao dịch với mức phí cao nhất. Đồng thời, bạn sẽ phải đảm bảo rằng các giao dịch có phí thấp hoặc miễn phí sẽ không bị chết đói mãi mãi.

Bạn sẽ cần phát triển các thuật toán để quản lý hàng đợi. Ngoài ra, hướng dẫn hiện tại không bao gồm mã giao diện máy khách. Bạn sẽ cần phát triển điều này cho cả khách hàng bình thường và thợ đào. Dự án blockchain chính thức sẽ chạy vào nhiều dòng mã hơn và nằm ngoài phạm vi của hướng dẫn này. Bạn đọc quan tâm có thể tải xuống nguồn bitcoin để nghiên cứu thêm.

Kết luận

Hướng dẫn rõ ràng này sẽ giúp bạn bắt đầu tạo dự án blockchain của riêng mình.

Để phát triển dự án blockchain chính thức, bạn có thể tìm hiểu thêm từ nguồn bitcoin . Đối với các dự án thương mại hoặc phi thương mại lớn hơn, bạn có thể cân nhắc sử dụng Ethereum – một nền tảng ứng dụng blockchain sẵn sàng sử dụng.

The post Python Blockchain – Thêm Khối Genesis appeared first on Dongthoigian.net.

]]>
https://dongthoigian.net/python-blockchain-them-khoi-genesis/feed/ 0 10612
blockchain Tạo nhiều giao dịch https://dongthoigian.net/blockchain-tao-nhieu-giao-dich/ https://dongthoigian.net/blockchain-tao-nhieu-giao-dich/#respond Sun, 23 Jan 2022 11:25:32 +0000 https://dongthoigian.net/?p=10527 các khách hàng khác nhau được xếp hàng đợi trong hệ thống; các thợ đào nhận các giao dịch từ hàng đợi này và thêm nó vào khối.

The post blockchain Tạo nhiều giao dịch appeared first on Dongthoigian.net.

]]>
Các giao dịch được thực hiện bởi các khách hàng khác nhau được xếp hàng đợi trong hệ thống; các thợ đào nhận các giao dịch từ hàng đợi này và thêm nó vào khối. Sau đó, họ sẽ khai thác khối và người khai thác chiến thắng sẽ có đặc quyền thêm khối vào blockchain và do đó kiếm được một số tiền cho mình.

Chúng tôi sẽ mô tả quá trình khai thác này sau khi chúng tôi thảo luận về việc tạo ra blockchain. Trước khi chúng tôi viết mã cho nhiều giao dịch, hãy thêm một chức năng tiện ích nhỏ để in nội dung của một giao dịch nhất định.

Hiển thị Giao dịch

Hàm display_transaction chấp nhận một tham số duy nhất của loại giao dịch. Đối tượng từ điển trong giao dịch đã nhận được sao chép vào một biến tạm thời được gọi là dict và sử dụng các khóa từ điển, các giá trị khác nhau được in trên bảng điều khiển.

def display_transaction(transaction):
   #for transaction in transactions:
   dict = transaction.to_dict()
   print ("sender: " + dict['sender'])
   print ('-----')
   print ("recipient: " + dict['recipient'])
   print ('-----')
   print ("value: " + str(dict['value']))
   print ('-----')
   print ("time: " + str(dict['time']))
   print ('-----')

Tiếp theo, chúng tôi xác định một hàng đợi giao dịch để lưu trữ các đối tượng giao dịch của chúng tôi.

Hàng đợi giao dịch

Để tạo một hàng đợi, chúng ta khai báo một biến danh sách toàn cục được gọi là các giao dịch như sau:

transactions = []

Chúng tôi chỉ cần nối mỗi giao dịch mới được tạo vào hàng đợi này. Xin lưu ý rằng để ngắn gọn, chúng tôi sẽ không triển khai logic quản lý hàng đợi trong hướng dẫn này.

Tạo nhiều khách hàng

Bây giờ, chúng ta sẽ bắt đầu tạo giao dịch. Đầu tiên, chúng tôi sẽ tạo ra bốn khách hàng sẽ gửi tiền cho nhau để nhận các dịch vụ hoặc hàng hóa khác nhau từ những người khác.

Dinesh = Client()
Ramesh = Client()
Seema = Client()
Vijay = Client()

Tại thời điểm này, chúng tôi có bốn khách hàng tên là Dinesh, Ramesh, Seema và Vijay. Hiện tại, chúng tôi giả định rằng mỗi khách hàng này có một số TPCoins trong ví của họ để giao dịch. Danh tính của từng khách hàng này sẽ được xác định bằng cách sử dụng thuộc tính nhận dạng của các đối tượng này.

Tạo giao dịch đầu tiên

Bây giờ, chúng tôi bắt đầu giao dịch đầu tiên của mình như sau:

t1 = Transaction(
   Dinesh,
   Ramesh.identity,
   15.0
)

Trong giao dịch này, Dinesh gửi 5 TPCoins cho Ramesh. Để giao dịch thành công, chúng tôi sẽ phải đảm bảo rằng Dinesh có đủ tiền trong ví của anh ấy cho khoản thanh toán này. Lưu ý rằng, chúng tôi sẽ cần một giao dịch gốc để bắt đầu lưu thông TPCoin trong hệ thống. Bạn sẽ viết mã giao dịch cho giao dịch khởi đầu này ngay sau khi bạn đọc cùng.

Chúng tôi sẽ ký giao dịch này bằng khóa cá nhân của Dinesh và thêm nó vào hàng đợi giao dịch như sau:

t1.sign_transaction()
transactions.append(t1)

Sau giao dịch đầu tiên do Dinesh thực hiện, chúng tôi sẽ tạo thêm một số giao dịch giữa các khách hàng khác nhau mà chúng tôi đã tạo ở trên.

Thêm nhiều giao dịch hơn

Bây giờ chúng tôi sẽ tạo thêm một số giao dịch, mỗi giao dịch sẽ cung cấp một vài TPCoin cho một bên khác. Khi ai đó tiêu tiền, không nhất thiết anh ta phải kiểm tra xem có đủ số dư trong ví này hay không. Người khai thác dù sao cũng sẽ xác thực từng giao dịch cho số dư mà người gửi có trong khi bắt đầu giao dịch.

Trong trường hợp không đủ số dư, người khai thác sẽ đánh dấu giao dịch này là không hợp lệ và sẽ không thêm nó vào khối này.

Đoạn mã sau tạo và thêm chín giao dịch khác vào hàng đợi của chúng tôi.

t2 = Transaction(
   Dinesh,
   Seema.identity,
   6.0
)
t2.sign_transaction()
transactions.append(t2)
t3 = Transaction(
   Ramesh,
   Vijay.identity,
   2.0
)
t3.sign_transaction()
transactions.append(t3)
t4 = Transaction(
   Seema,
   Ramesh.identity,
   4.0
)
t4.sign_transaction()
transactions.append(t4)
t5 = Transaction(
   Vijay,
   Seema.identity,
   7.0
)
t5.sign_transaction()
transactions.append(t5)
t6 = Transaction(
   Ramesh,
   Seema.identity,
   3.0
)
t6.sign_transaction()
transactions.append(t6)
t7 = Transaction(
   Seema,
   Dinesh.identity,
   8.0
)
t7.sign_transaction()
transactions.append(t7)
t8 = Transaction(
   Seema,
   Ramesh.identity,
   1.0
)
t8.sign_transaction()
transactions.append(t8)
t9 = Transaction(
   Vijay,
   Dinesh.identity,
   5.0
)
t9.sign_transaction()
transactions.append(t9)
t10 = Transaction(
   Vijay,
   Ramesh.identity,
   3.0
)
t10.sign_transaction()
transactions.append(t10)

Khi bạn chạy đoạn mã trên, bạn sẽ có mười giao dịch trong hàng đợi để các thợ đào tạo khối của họ.

Giao dịch bán phá giá

Với tư cách là người quản lý blockchain, bạn có thể định kỳ xem xét nội dung của hàng đợi giao dịch. Với mục đích này, bạn có thể sử dụng hàm display_transaction mà chúng tôi đã phát triển trước đó. Để kết xuất tất cả các giao dịch trong hàng đợi, chỉ cần lặp lại danh sách giao dịch và đối với mỗi giao dịch được tham chiếu, hãy gọi hàm display_transaction như được hiển thị ở đây

for transaction in transactions:
   display_transaction (transaction)
   print ('--------------')

Các giao dịch được phân tách bằng một đường đứt nét để phân biệt. Nếu chạy đoạn mã trên, bạn sẽ thấy danh sách giao dịch như hình bên dưới:

sender:
30819f300d06092a864886f70d010101050003818d0030818902818100bb064c99c49214
4a9f463480273aba93ac1db1f0da3cb9f3c1f9d058cf499fd8e54d244da0a8dd6ddd329e
c86794b04d773eb4841c9f935ea4d9ccc2821c7a1082d23b6c928d59863407f52fa05d8b
47e5157f8fe56c2ce3279c657f9c6a80500073b0be8093f748aef667c03e64f04f84d311
c4d866c12d79d3fc3034563dfb0203010001
-----
recipient:
30819f300d06092a864886f70d010101050003818d0030818902818100be93b516b28c6e
674abe7abdb11ce0fdf5bb728b75216b73f37a6432e4b402b3ad8139b8c0ba541a72c8ad
d126b6e1a1308fb98b727beb63c6060356bb177bb7d54b54dbe87aee7353d0a6baa93977
04de625d1836d3f42c7ee5683f6703259592cc24b09699376807f28fe0e00ff882974484
d805f874260dfc2d1627473b910203010001
-----
value: 15.0
-----
time: 2019-01-14 16:18:01.859915
-----
--------------
sender:
30819f300d06092a864886f70d010101050003818d0030818902818100bb064c99c49214
4a9f463480273aba93ac1db1f0da3cb9f3c1f9d058cf499fd8e54d244da0a8dd6ddd329e
c86794b04d773eb4841c9f935ea4d9ccc2821c7a1082d23b6c928d59863407f52fa05d8b
47e5157f8fe56c2ce3279c657f9c6a80500073b0be8093f748aef667c03e64f04f84d311
c4d866c12d79d3fc3034563dfb0203010001
-----
recipient:
30819f300d06092a864886f70d010101050003818d0030818902818100a070c82b34ae14
3cbe59b3a2afde7186e9d5bc274955d8112d87a00256a35369acc4d0edfe65e8f9dc93fb
d9ee74b9e7ea12334da38c8c9900e6ced1c4ce93f86e06611e656521a1eab561892b7db0
961b4f212d1fd5b5e49ae09cf8c603a068f9b723aa8a651032ff6f24e5de00387e4d0623
75799742a359b8f22c5362e5650203010001
-----
value: 6.0
-----
time: 2019-01-14 16:18:01.860966
-----
--------------
sender:
30819f300d06092a864886f70d010101050003818d0030818902818100be93b516b28c6e
674abe7abdb11ce0fdf5bb728b75216b73f37a6432e4b402b3ad8139b8c0ba541a72c8ad
d126b6e1a1308fb98b727beb63c6060356bb177bb7d54b54dbe87aee7353d0a6baa93977
04de625d1836d3f42c7ee5683f6703259592cc24b09699376807f28fe0e00ff882974484
d805f874260dfc2d1627473b910203010001
-----
recipient:
30819f300d06092a864886f70d010101050003818d0030818902818100cba097c0854876
f41338c62598c658f545182cfa4acebce147aedf328181f9c4930f14498fd03c0af6b0cc
e25be99452a81df4fa30a53eddbb7bb7b203adf8764a0ccd9db6913a576d68d642d8fd47
452590137869c25d9ff83d68ebe6d616056a8425b85b52e69715b8b85ae807b84638d8f0
0e321b65e4c33acaf6469e18e30203010001
-----
value: 2.0
-----
time: 2019-01-14 16:18:01.861958
-----
--------------

Để ngắn gọn, tôi chỉ in một số giao dịch đầu tiên trong danh sách. Trong đoạn mã trên, chúng tôi in tất cả các giao dịch bắt đầu bằng giao dịch đầu tiên ngoại trừ giao dịch gốc chưa bao giờ được thêm vào danh sách này. Khi các giao dịch được thêm vào các khối định kỳ, bạn thường sẽ quan tâm đến việc chỉ xem danh sách các giao dịch chưa được khai thác. Trong trường hợp đó, bạn sẽ cần tạo một vòng lặp for thích hợp để lặp lại các giao dịch chưa được khai thác.

Cho đến nay, bạn đã học được cách tạo khách hàng, cho phép họ tham gia với nhau và duy trì một hàng đợi các giao dịch đang chờ xử lý sẽ được khai thác. Bây giờ, đến phần quan trọng nhất của hướng dẫn này và đó là tạo ra chính một blockchain. Bạn sẽ tìm hiểu điều này trong bài học tiếp theo.

Blockchain Python – Lớp khối

Một khối bao gồm một số lượng giao dịch khác nhau. Để đơn giản, trong trường hợp của chúng tôi, chúng tôi sẽ giả định rằng khối bao gồm một số lượng giao dịch cố định, trong trường hợp này là ba. Vì khối cần lưu trữ danh sách ba giao dịch này, chúng tôi sẽ khai báo một biến thể hiện có tên là Veri_transactions như sau:

self.verified_transactions = []

Chúng tôi đã đặt tên biến này là Veri_transactions để chỉ ra rằng chỉ những giao dịch hợp lệ đã được xác minh mới được thêm vào khối. Mỗi khối cũng giữ giá trị băm của khối trước đó, để chuỗi khối trở nên bất biến.

Để lưu trữ hàm băm trước đó, chúng ta khai báo một biến thể hiện như sau:

self.previous_block_hash = “”

Cuối cùng, chúng tôi khai báo một biến nữa được gọi là Nonce để lưu trữ các nonce do người khai thác tạo ra trong quá trình khai thác.

self.Nonce = “”

Định nghĩa đầy đủ của lớp Block được đưa ra dưới đây:

class Block:
   def __init__(self):
      self.verified_transactions = []
      self.previous_block_hash = ""
      self.Nonce = ""

Vì mỗi khối cần giá trị băm của khối trước đó, chúng tôi khai báo một biến toàn cục được gọi là last_block_hash như sau:

last_block_hash = “” Bây giờ chúng ta hãy tạo khối đầu tiên của mình trong blockchain.

Python Blockchain – Tạo Khối Genesis xem thêm

The post blockchain Tạo nhiều giao dịch appeared first on Dongthoigian.net.

]]>
https://dongthoigian.net/blockchain-tao-nhieu-giao-dich/feed/ 0 10527
Hướng dẫn về chuỗi khối Python https://dongthoigian.net/huong-dan-ve-chuoi-khoi-python/ https://dongthoigian.net/huong-dan-ve-chuoi-khoi-python/#respond Tue, 28 Sep 2021 05:23:43 +0000 https://dongthoigian.net/?p=8763 Blockchain là thông tin nổi bật hiện nay đang thống trị các xu hướng phát triển phần mềm. Việc phát triển và thiết kế Blockchain liên quan đến ba thành phần chính

The post Hướng dẫn về chuỗi khối Python appeared first on Dongthoigian.net.

]]>
Blockchain là thông tin nổi bật hiện nay đang thống trị các xu hướng phát triển phần mềm. Việc phát triển và thiết kế Blockchain liên quan đến ba thành phần chính: máy khách, người khai thác và chuỗi khối. Hướng dẫn này nhằm cung cấp cho bạn hiểu biết rõ ràng về quá trình xây dựng blockchain của riêng bạn.

Bất kỳ người đam mê lập trình nào muốn bắt kịp xu hướng phát triển Blockchain gần đây đều có thể thu được lợi ích từ hướng dẫn này. Nếu bạn là một người học muốn tìm hiểu những kiến ​​thức cơ bản về Phát triển Blockchain, thì hướng dẫn này rất phù hợp với nhu cầu của bạn

Hướng dẫn này được viết với giả định rằng người học có ý tưởng về lập trình bằng Python và ý tưởng cơ bản về Blockchain. Nếu bạn chưa quen với bất kỳ khái niệm nào trong số này, chúng tôi khuyên bạn nên chọn các hướng dẫn dựa trên các khái niệm này trước khi bạn tham gia vào hướng dẫn này

Python Blockchain – Giới thiệu

Trong phần hướng dẫn về Blockchain, chúng ta đã tìm hiểu chi tiết về lý thuyết đằng sau blockchain. Blockchain là khối xây dựng cơ bản đằng sau đồng tiền kỹ thuật số phổ biến nhất thế giới Bitcoin. Hướng dẫn giải quyết sâu sắc những phức tạp của Bitcoin, giải thích đầy đủ về kiến ​​trúc blockchain. Bước tiếp theo là xây dựng blockchain của riêng chúng tôi.

Satoshi Nakamoto đã tạo ra đồng tiền ảo đầu tiên trên thế giới có tên là Bitcoin. Nhìn vào sự thành công của Bitcoin, nhiều người khác đã tạo ra các loại tiền ảo của riêng họ. Để kể tên một số – Litecoin, Zcash, v.v.

Bây giờ, bạn cũng có thể muốn khởi chạy tiền tệ của riêng mình. Hãy để chúng tôi gọi đây là TPCoin (TutorialsPoint Coin). Bạn sẽ viết một blockchain để ghi lại tất cả các giao dịch giao dịch với TPCoin. TPCoin có thể được sử dụng để mua Pizza, Burger, Salad, v.v. Có thể có các nhà cung cấp dịch vụ khác tham gia vào mạng lưới của bạn và bắt đầu chấp nhận TPCoin làm đơn vị tiền tệ để cung cấp dịch vụ của họ. Khả năng là vô tận.

Trong hướng dẫn này, hãy để chúng tôi hiểu cách xây dựng một hệ thống như vậy và khởi chạy đồng tiền kỹ thuật số của riêng bạn trên thị trường.

blockchain

Các thành phần tham gia vào phát triển dự án chuỗi khối

Toàn bộ quá trình phát triển dự án blockchain bao gồm ba thành phần chính:

  • Khách hàng
  • Thợ mỏ
  • Chuỗi khối

Khách hàng

Khách hàng là người sẽ mua hàng hóa từ các nhà cung cấp khác. Bản thân khách hàng có thể trở thành người bán hàng và sẽ nhận tiền từ người khác đối với hàng hóa mà anh ta cung cấp. Ở đây chúng tôi giả định rằng khách hàng có thể vừa là nhà cung cấp vừa là người nhận TPCoins. Vì vậy, chúng tôi sẽ tạo một lớp khách hàng trong mã của chúng tôi có khả năng gửi và nhận tiền.

Thợ mỏ

Người khai thác là người chọn các giao dịch từ một nhóm giao dịch và tập hợp chúng thành một khối. Người khai thác phải cung cấp bằng chứng công việc hợp lệ để nhận được phần thưởng khai thác. Tất cả số tiền mà người khai thác thu như một khoản phí sẽ được anh ta giữ. Anh ta có thể chi số tiền đó để mua hàng hóa hoặc dịch vụ từ các nhà cung cấp đã đăng ký khác trên mạng, giống như cách Khách hàng đã mô tả ở trên.

Chuỗi khối

Cuối cùng, Blockchain là một cấu trúc dữ liệu chuỗi tất cả các khối được khai thác theo thứ tự thời gian. Chuỗi này là bất biến và do đó chống nóng.

Bạn có thể làm theo hướng dẫn này bằng cách gõ mã được trình bày trong từng bước trong một sổ ghi chép Jupyter mới. Ngoài ra, bạn có thể tải xuống toàn bộ sổ ghi chép Jupyter từ www.anaconda.com . Trong chương tiếp theo, chúng tôi sẽ phát triển một ứng dụng khách sử dụng hệ thống blockchain của chúng tôi.

Python Blockchain – Đang phát triển khách hàng

Khách hàng là một người nào đó nắm giữ TPCoins và giao dịch chúng cho hàng hóa / dịch vụ từ các nhà cung cấp khác trên mạng bao gồm cả của chính anh ta. Chúng ta nên xác định một lớp Client cho mục đích này. Để tạo nhận dạng duy nhất trên toàn cầu cho khách hàng, chúng tôi sử dụng PKI (Cơ sở hạ tầng khóa công khai). Trong chương này, chúng ta hãy nói về điều này một cách chi tiết.

Khách hàng sẽ có thể gửi tiền từ ví của mình cho một người khác đã biết. Tương tự, khách hàng sẽ có thể nhận tiền từ bên thứ ba. Để tiêu tiền, khách hàng sẽ tạo một giao dịch ghi rõ tên người gửi và số tiền phải trả. Để nhận tiền, khách hàng sẽ cung cấp danh tính của mình cho bên thứ ba – về cơ bản là người gửi tiền. Chúng tôi không lưu trữ số dư tiền mà khách hàng giữ trong ví của mình. Trong quá trình giao dịch, chúng tôi sẽ tính toán số dư thực tế để đảm bảo rằng khách hàng có đủ số dư để thực hiện thanh toán. Để phát triển lớp Client và cho phần còn lại của mã trong dự án, chúng ta sẽ cần nhập nhiều thư viện Python. Chúng được liệt kê dưới đây

# import libraries

import hashlib

import random

import string

import json

import binascii

import numpy as np

import pandas as pd

import pylab as pl

import logging

import datetime

import collections

Ngoài các thư viện tiêu chuẩn ở trên, chúng tôi sẽ ký các giao dịch của mình, tạo hàm băm của các đối tượng, v.v. Đối với điều này, bạn sẽ cần nhập các thư viện sau:

# following imports are required by PKI

import Crypto

import Crypto.Random

from Crypto.Hash import SHA

from Crypto.PublicKey import RSA from Crypto.Signature import PKCS1_v1_5

Python Blockchain – Lớp khách hàng

Lớp Khách hàng tạo ra các khóa riêng tư và khóa công khai bằng cách sử dụng thuật toán Python RSA được tích hợp sẵn . Người đọc quan tâm có thể tham khảo hướng dẫn này để thực hiện RSA. Trong quá trình khởi tạo đối tượng, chúng tôi tạo khóa riêng tư và khóa công khai và lưu trữ các giá trị của chúng trong biến cá thể.

self._private_key = RSA.generate(1024, random)

self._public_key = self._private_key.publickey()

Lưu ý rằng bạn không bao giờ được làm mất khóa cá nhân của mình. Để lưu trữ hồ sơ, khóa cá nhân đã tạo có thể được sao chép trên bộ nhớ ngoài được bảo mật hoặc bạn có thể chỉ cần viết ra biểu diễn ASCII của nó trên một mảnh giấy. Khóa công khai được tạo sẽ được sử dụng làm danh tính của khách hàng. Đối với điều này, chúng tôi xác định một thuộc tính được gọi là danh tính trả về biểu diễn HEX của khóa công khai.

@property
   def identity(self):
      return
binascii.hexlify(self._public_key.exportKey(format='DER'))
.decode('ascii')

Danh tính là duy nhất cho mỗi khách hàng và có thể được công bố công khai. Bất kỳ ai cũng có thể gửi tiền ảo cho bạn bằng cách sử dụng danh tính này và nó sẽ được thêm vào ví của bạn. Mã đầy đủ cho lớp Khách hàng được hiển thị ở đây

class Client:
   def __init__(self):
      random = Crypto.Random.new().read
      self._private_key = RSA.generate(1024, random)
      self._public_key = self._private_key.publickey()
      self._signer = PKCS1_v1_5.new(self._private_key)

   @property
   def identity(self):
      return
binascii.hexlify(self._public_key.exportKey(format='DER')).decode('ascii')
class Client:
   def __init__(self):
      random = Crypto.Random.new().read
      self._private_key = RSA.generate(1024, random)
      self._public_key = self._private_key.publickey()
      self._signer = PKCS1_v1_5.new(self._private_key)
 
   @property
   def identity(self):
      return
binascii.hexlify(self._public_key.exportKey(format='DER')).decode('ascii')

Kiểm tra khách hàng

Bây giờ, chúng ta sẽ viết mã minh họa cách sử dụng lớp Khách hàng

Dinesh = Client()
print (Dinesh.identity)

Đoạn mã trên tạo một thể hiện của Máy khách và gán nó cho biến Dinesh . Chúng tôi in khóa công khai của Dinesh bằng cách gọi phương thức nhận dạng của nó . Kết quả được hiển thị ở đây

30819f300d06092a864886f70d010101050003818d0030818902818100b547fafceeb131e07
0166a6b23fec473cce22c3f55c35ce535b31d4c74754fecd820aa94c1166643a49ea5f49f72
3181ff943eb3fdc5b2cb2db12d21c06c880ccf493e14dd3e93f3a9e175325790004954c34d3
c7bc2ccc9f0eb5332014937f9e49bca9b7856d351a553d9812367dc8f2ac734992a4e6a6ff6
6f347bd411d07f0203010001

Python Blockchain – Lớp giao dịch

BLOCKCHAIN

Trong chương này, chúng ta hãy tạo một lớp Giao dịch để khách hàng có thể gửi tiền cho ai đó. Lưu ý rằng khách hàng có thể vừa là người gửi hoặc vừa là người nhận tiền. Khi bạn muốn nhận tiền, một số người gửi khác sẽ tạo một giao dịch và chỉ định địa chỉ công khai của bạn trong đó. Chúng tôi định nghĩa việc khởi tạo một lớp giao dịch như sau:

def __init__(self, sender, recipient, value):
   self.sender = sender
   self.recipient = recipient
   self.value = value
   self.time = datetime.datetime.now()

Các init phương pháp có ba thông số – của người gửi công cộng quan trọng, của người nhận công cộng quan trọng, và số tiền được gửi đi. Chúng được lưu trữ trong các biến cá thể để sử dụng bởi các phương thức khác. Ngoài ra, chúng tôi tạo thêm một biến để lưu trữ thời gian giao dịch.

Tiếp theo, chúng ta viết một phương thức tiện ích có tên là to_dict kết hợp tất cả bốn biến phiên bản nêu trên trong một đối tượng từ điển. Điều này chỉ là để đưa toàn bộ thông tin giao dịch có thể truy cập được thông qua một biến duy nhất. Như bạn đã biết từ hướng dẫn trước đó rằng khối đầu tiên trong blockchain là khối Genesis . Khối Genesis chứa giao dịch đầu tiên do người tạo ra blockchain khởi xướng. Danh tính của người này có thể được giữ bí mật như trong trường hợp của Bitcoin. Vì vậy, khi giao dịch đầu tiên này được tạo, người tạo có thể chỉ gửi danh tính của mình là Genesis . Do đó, trong khi tạo từ điển, chúng tôi kiểm tra xem người gửi có phải là Genesis hay không và nếu có, chúng tôi chỉ cần gán một số giá trị chuỗi cho biến nhận dạng; nếu không, chúng tôi chỉ định danh tính của người gửi cho biến nhận dạng .

if self.sender == "Genesis":
   identity = "Genesis"
else:
   identity = self.sender.identity

Chúng tôi xây dựng từ điển bằng cách sử dụng dòng mã sau

return collections.OrderedDict({
   'sender': identity,
   'recipient': self.recipient,
   'value': self.value,
   'time' : self.time})

Toàn bộ mã cho phương thức to_dict được hiển thị bên dưới:

def to_dict(self):
   if self.sender == "Genesis":
      identity = "Genesis"
   else:
      identity = self.sender.identity

   return collections.OrderedDict({
      'sender': identity,
      'recipient': self.recipient,
      'value': self.value,
      'time' : self.time})

Cuối cùng, chúng tôi sẽ ký đối tượng từ điển này bằng cách sử dụng khóa riêng của người gửi. Như trước đây, chúng tôi sử dụng PKI tích hợp với thuật toán SHA. Chữ ký đã tạo được giải mã để lấy biểu diễn ASCII để in và lưu trữ nó trong chuỗi khối của chúng tôi. Các sign_transaction phương pháp mã được hiển thị ở đây

def sign_transaction(self):
   private_key = self.sender._private_key
   signer = PKCS1_v1_5.new(private_key)
   h = SHA.new(str(self.to_dict()).encode('utf8'))
   return binascii.hexlify(signer.sign(h)).decode('ascii')

Bây giờ chúng ta sẽ kiểm tra lớp Giao dịch này 

Kiểm tra lớp giao dịch

Với mục đích này, chúng tôi sẽ tạo hai người dùng, được gọi là Dinesh và Ramesh . Dinesh sẽ gửi 5 TPCoins cho Ramesh. Đầu tiên, chúng tôi tạo các khách hàng có tên là Dinesh và Ramesh.

Dinesh = Client()
Ramesh = Client()

Hãy nhớ rằng khi bạn khởi tạo một lớp Máy khách , các khóa công khai và riêng tư duy nhất cho máy khách sẽ được tạo. Vì Dinesh đang gửi thanh toán cho Ramesh, anh ta sẽ cần khóa công khai của Ramesh, khóa này có được bằng cách sử dụng thuộc tính nhận dạng của khách hàng. Do đó, chúng tôi sẽ tạo phiên bản giao dịch bằng cách sử dụng mã sau:

t = Transaction(
   Dinesh,
   Ramesh.identity,
   5.0
)

Lưu ý rằng tham số đầu tiên là người gửi, tham số thứ hai là khóa công khai của người nhận và tham số thứ ba là số tiền cần chuyển. Các sign_transaction phương pháp lấy private key của người gửi từ tham số đầu tiên cho hát giao dịch. Sau khi đối tượng giao dịch được tạo, bạn sẽ ký nó bằng cách gọi phương thức sign_transaction của nó . Phương thức này trả về chữ ký đã tạo ở định dạng có thể in được. Chúng tôi tạo và in chữ ký bằng hai dòng mã sau:

signature = t.sign_transaction()
print (signature)

Khi bạn chạy đoạn mã trên, bạn sẽ thấy đầu ra tương tự như sau:

7c7e3c97629b218e9ec6e86b01f9abd8e361fd69e7d373c38420790b655b9abe3b575e343c7
13703ca1aee781acd7157a0624db3d57d7c2f1172730ee3f45af943338157f899965856f6b0
0e34db240b62673ad5a08c8e490f880b568efbc36035cae2e748f1d802d5e8e66298be826f5

c6363dc511222fb2416036ac04eb972

Bây giờ khi cơ sở hạ tầng cơ bản của chúng tôi để tạo khách hàng và giao dịch đã sẵn sàng, giờ đây chúng tôi sẽ có nhiều khách hàng thực hiện nhiều giao dịch như trong một tình huống thực tế.

Tạo nhiều giao dịch Xem Thêm

The post Hướng dẫn về chuỗi khối Python appeared first on Dongthoigian.net.

]]>
https://dongthoigian.net/huong-dan-ve-chuoi-khoi-python/feed/ 0 8763
Blockchain – Bằng chứng công việc https://dongthoigian.net/blockchain-bang-chung-cong-viec/ https://dongthoigian.net/blockchain-bang-chung-cong-viec/#respond Mon, 26 Jul 2021 04:32:35 +0000 https://dongthoigian.net/?p=8222 Như chúng ta đã thấy trong chương Bitcoin - Khai thác, một người khai thác có thể bị ngập trong nhiều giao dịch tại bất kỳ khoảng thời gian nhất định nào

The post Blockchain – Bằng chứng công việc appeared first on Dongthoigian.net.

]]>
Certificate work

Vì tất cả các giao dịch đều được đóng dấu thời gian, chúng tôi cần triển khai máy chủ dấu thời gian phân tán trên mạng ngang hàng. Điều này yêu cầu một số triển khai bổ sung và đó là Proof-of-Work mà tôi sẽ mô tả ngay bây giờ. Đối với mỗi khối, bây giờ chúng ta thêm một mục nữa được gọi là Nonce như thể hiện trong hình bên dưới

Bằng chứng công việc

Nonce là một số sao cho hàm băm của khối đáp ứng một tiêu chí nhất định. Tiêu chí này có thể là hàm băm được tạo phải có bốn chữ số đứng đầu là số không.

Do đó, hàm băm được tạo sẽ giống như 000010101010xxx. Nói chung, người khai thác bắt đầu với giá trị Nonce là 0 và tiếp tục tăng nó cho đến khi hàm băm được tạo đáp ứng tiêu chí đã chỉ định.

Lưu ý rằng quá trình tạo hàm băm hoạt động ngẫu nhiên và nằm ngoài tầm kiểm soát của bạn – nghĩa là bạn không thể buộc hàm băm tạo ra một hàm băm nhất định. Do đó, có thể mất vài lần lặp lại cho đến khi tạo được hàm băm mong muốn với bốn số 0 ở đầu. Thời gian dự kiến ​​để tạo một khối trong hệ thống bitcoin là 10 phút. Sau khi người khai thác khai thác thành công khối, anh ta giải phóng khối đó trong hệ thống khiến nó hiện là khối cuối cùng trong chuỗi. Lưu ý rằng có nhiều thợ đào cạnh tranh để tạo ra khối hợp pháp. Hệ thống Bitcoin trao thưởng cho người khai thác thành công đầu tiên bằng cách trao cho anh ta một số bitcoin nhất định. Nói chung, người khai thác có nhiều khả năng tính toán hơn có thể là người chiến thắng sớm. Điều này có thể gây ra các cuộc tấn công vào toàn bộ hệ thống bởi những kẻ sở hữu sức mạnh xử lý khổng lồ. Tôi sẽ mô tả các cuộc tấn công và cách chúng được giảm thiểu ở phần cuối của hướng dẫn này

Blockchain – Mạng & Khai thác

Bây giờ tôi sẽ tóm tắt các bước được mô tả ở trên; đây là những gì xảy ra trong mạng –

  • Bất kỳ ai muốn nhận dịch vụ từ bên thứ ba đã quảng cáo trên mạng trước tiên sẽ tạo một giao dịch (thông báo cho người nhận mong muốn).
  • Trong một khoảng thời gian nhất định, có thể có nhiều người gửi (người mua) và người nhận (người bán) tạo ra các giao dịch như vậy.
  • Tất cả các giao dịch được phát trên mạng tới tất cả các nút. Lưu ý rằng không nhất thiết một giao dịch nhất định phải tiếp cận từng nút khác trong mạng.
  • Mỗi nút tập hợp các giao dịch mới thành một khối. Lưu ý rằng tập hợp các giao dịch trong mỗi khối là độc lập với tập hợp trong các khối được tạo bởi những người khác và đương nhiên sẽ khác với những khối khác. Điều này không thành vấn đề; hệ thống đảm bảo rằng mọi giao dịch được phát trên mạng đều được đưa vào một số khối trong một khoảng thời gian hợp lý. Nói chung, người gửi sẽ khuyến khích nút bằng cách cung cấp một lượng bitcoin nhất định cho người khai thác vì những nỗ lực của nó. Người khai thác có thể chọn ưu tiên đưa vào khối cho những người có ưu đãi cao hơn.
  • Nút hiện đang hoạt động để tìm bằng chứng công việc cho khối đã lắp ráp của nó.
  • Khi nút tìm thấy bằng chứng công việc, nó sẽ phát khối đã lắp ráp trên mạng.
  • Các nút nhận được khối mới sẽ chỉ chấp nhận nó sau khi xác minh rằng tất cả các giao dịch trong khối là hợp lệ và chưa được chi tiêu.
  • Nếu khối được chấp nhận là hợp lệ, nút đang làm việc trên khối mới của chính nó sẽ phải tập hợp lại các giao dịch trong khối của nó để đảm bảo rằng các giao dịch không bị trùng lặp. Nút hiện đang hoạt động để tìm bằng chứng công việc trên khối mới được tạo của nó; trong khi làm như vậy nó sẽ lấy băm của khối được chấp nhận làm băm trước đó.
  • Tương tự như vậy, blockchain tiếp tục phát triển mãi mãi.

Bây giờ, như chúng ta đã thấy toàn bộ hệ thống hoạt động như thế nào, hãy để tôi mô tả một số tác dụng phụ và cách giải quyết chúng.

Blockchain – Ưu đãi cho người khai thác

Như chúng ta đã thấy trong chương Bitcoin – Khai thác, một người khai thác có thể bị ngập trong nhiều giao dịch tại bất kỳ khoảng thời gian nhất định nào. Kích thước tối đa cho một khối được xác định trước trong hệ thống, yêu cầu chỉ một số lượng giao dịch nhất định được đưa vào khối.

Số lượng giao dịch trong khối được xác định bởi kích thước khối được xác định trước và độ dài trung bình của mỗi khối. Một mẹo quan trọng ở đây là người gửi không nên đưa quá nhiều thông tin vào tin nhắn của mình để làm cho nó ngắn gọn và do đó khuyến khích người khai thác chấp nhận nó trước những tin nhắn dài khác.

Người gửi nói chung cũng sẽ thêm phí giao dịch đối với một số lượng bitcoin nhất định để khuyến khích người khai thác sớm đưa vào khối của mình. Hệ quả khác trong việc xây dựng blockchain là kích thước đơn thuần của nó. Trong một khoảng thời gian, toàn bộ blockchain có thể trở nên quá lớn để một nút có thể lưu trữ nó trên đĩa của nó. Điều này được giải quyết bằng cách sử dụng Merkle Tree được mô tả tiếp theo

Blockchain – Cây Merkle

Vấn đề về không gian đĩa trong một nút có thể dễ dàng khắc phục vì tất cả các giao dịch trong một khối được băm trong Cây Merkle như trong hình

Blockchain - Cây Merkle

Tiêu đề khối bây giờ chứa hàm băm của khối trước đó, Nonce và Root Hash của tất cả các giao dịch trong khối hiện tại trong Merkle Tree. Vì Root Hash này bao gồm các hàm băm của tất cả các giao dịch trong khối, các giao dịch này có thể được lược bớt để tiết kiệm dung lượng đĩa. Vì vậy, bây giờ blockchain của bạn sẽ giống như trong hình ảnh dưới đây

Blockchain - Cây Merkle

Điều này có thể dẫn đến tiết kiệm rất nhiều dung lượng ổ đĩa. Chiến lược này được sử dụng bởi một khách hàng bình thường, những người chỉ quan tâm đến việc nhận thanh toán từ người khác. Tuy nhiên, các thợ đào cần phải lưu toàn bộ chuỗi khối. Bây giờ câu hỏi được đặt ra, làm thế nào người nhận xác minh khoản thanh toán mà không có khả năng truy tìm nguồn gốc của đồng xu đã nhận. Điều này được giải thích tiếp theo

Blockchain – Xác minh thanh toán

Hãy xem xét một trường hợp, trong đó với tư cách là nhà cung cấp, bạn có thể muốn xác minh một khoản thanh toán nhất định đã thực hiện trong quá khứ. Vì blockchain bạn đang giữ trên máy của mình chỉ chứa các tiêu đề khối như được hiển thị trong hình trước đó, giao dịch mà bạn đang tìm kiếm bị thiếu trong bản sao blockchain của bạn. Giờ đây, bạn có thể tìm kiếm ngược lại trong bản sao chuỗi khối của mình cho đến khi bạn tìm thấy khối trong đó giao dịch mong muốn được đánh dấu thời gian. Bây giờ, hãy yêu cầu cây merkle của khối đã chọn và bạn sẽ có giao dịch mà bạn đang tìm kiếm. Điều này được minh họa trong Hình dưới đây

Ở đây, chúng tôi giả định rằng bạn đang tìm kiếm Tx103. Mặc dù bạn có thể không xem được nội dung của Tx103, nhưng bạn biết rằng điều này đã được chấp nhận bởi khối mà nó thuộc về và tất cả các khối tiếp theo trong chuỗi. Vì vậy, bạn có thể an tâm tin tưởng giao dịch này và tiến hành kinh doanh của bạn

Blockchain – Giải quyết xung đột

Như chúng ta đã thấy mạng Bitcoin chứa một số thợ đào. Có thể hai người khai thác khác nhau giải quyết Proof-of-Work cùng một lúc và do đó thêm các khối của họ vào khối cuối cùng đã biết trong chuỗi. Điều này được minh họa trong hình ảnh dưới đây

Blockchain - Giải quyết xung đột

Bây giờ, chúng ta có hai nhánh sau Khối 3. Cả hai nhánh đều hợp lệ. Vì vậy, khối được khai thác tiếp theo có thể được thêm vào một trong hai nhánh. Giả sử, người khai thác thêm khối mới được khai thác vào Khối 104-A, nhánh chứa Khối 104-A sẽ dài hơn nhánh chứa Khối 104-B. Điều này được minh họa trong hình ảnh dưới đây

Trong kiến ​​trúc Bitcoin, nhánh dài nhất luôn thắng và nhánh ngắn hơn sẽ bị loại bỏ. Vì vậy, Block 104-B phải được thanh lọc. Trước khi xóa khối này, tất cả các giao dịch trong khối này sẽ được trả lại cho nhóm giao dịch để chúng được khai thác và thêm vào một số khối trong tương lai. Đây là cách các xung đột được giải quyết và hệ thống chỉ duy trì một chuỗi khối duy nhất

Blockchain – Quyền riêng tư

Vì sổ cái ghi lại tất cả các giao dịch bitcoin được công khai thực sự, nên quyền riêng tư đang bị đe dọa. Bất kỳ ai trên thế giới sẽ có thể biết ai đã trả tiền cho ai? Hệ thống ngân hàng truyền thống có thể duy trì loại quyền riêng tư này bằng cách giữ bí mật hồ sơ của nó.

Quyền riêng tư trong hệ thống Bitcoin đạt được bằng một chiến lược khác. Lưu ý rằng chúng tôi đã nói rằng người gửi bitcoin cần biết người trả tiền. Vì vậy, anh ta yêu cầu khóa công khai của nhà cung cấp mà anh ta muốn thực hiện thanh toán. Khóa công khai này có thể được ẩn danh. Theo nghĩa, với tư cách là nhà cung cấp một số dịch vụ, khi ai đó hỏi bạn gửi thanh toán ở đâu, bạn chỉ cần gửi cho họ khóa công khai của mình. Mối liên kết của khóa công khai này với bạn không được ghi lại ở bất kỳ đâu trong sổ cái. Bằng cách đó, bất kỳ ai bên ngoài giao dịch này sẽ chỉ biết có bao nhiêu tiền được giao dịch và khóa công khai nào mà tiền được thanh toán

Để đạt được mức độ bảo mật cao hơn, đối với mọi giao dịch, bạn có thể tạo khóa riêng tư / công khai mới cho mỗi giao dịch để nhiều giao dịch do bạn thực hiện không thể bị nhóm lại với nhau bởi một bên thứ ba. Đối với người ngoài, điều này đơn giản có nghĩa là nhiều giao dịch có giá trị nhỏ hơn đã được thực hiện và chúng sẽ không bao giờ được liên kết với một nguồn chung. Cuối cùng, bất kỳ hệ thống dựa trên internet trực tuyến nào cũng dễ bị lạm dụng. Bây giờ tôi sẽ mô tả một số loại tấn công có thể xảy ra vào hệ thống Bitcoin và cách giảm thiểu những loại tấn công đó

Bitcoin – hạn chế các cuộc tấn công

Cuộc tấn công

Là một kẻ tấn công, bạn có thể nhanh chóng gửi cùng một đồng tiền đến các nhà cung cấp khác nhau, có thể bằng cách sử dụng hai máy khác nhau. Nếu các nhà cung cấp không đợi xác nhận khối trước khi giao hàng, họ sẽ rất sớm nhận ra rằng giao dịch đã bị từ chối trong quá trình khai thác. Giải pháp cho kiểu tấn công này là nhà cung cấp phải đợi ít nhất một xác nhận khối trước khi gửi hàng đi

Finney Attack

Trong trường hợp này, kẻ tấn công là thợ mỏ. Người khai thác khai thác một khối với giao dịch của mình và không giải phóng nó trong hệ thống. Giờ đây, anh ấy sử dụng cùng một đồng tiền trong giao dịch thứ hai và sau đó phát hành khối tiền khai thác. Rõ ràng, giao dịch thứ hai cuối cùng sẽ bị từ chối bởi các thợ đào khác, nhưng điều này sẽ mất một thời gian. Để giảm thiểu rủi ro này, người bán nên đợi ít nhất sáu xác nhận khối trước khi giải phóng hàng hóa

Tấn công 51%

Trong kiểu tấn công này, chúng tôi đưa ra một giả định không thực tế rằng ai đó sở hữu 51% sức mạnh tính toán của mạng. Kẻ tấn công trong kiểu tấn công này khai thác một blockchain riêng tư, nơi anh ta chi tiêu gấp đôi số tiền.

Vì anh ấy sở hữu phần lớn sức mạnh tính toán, anh ấy được đảm bảo rằng chuỗi khối riêng tư của anh ấy vào một thời điểm nào đó sẽ dài hơn chuỗi mạng “trung thực”. Sau đó, anh ấy phát hành chuỗi khối riêng tư của mình trong hệ thống khiến tất cả các giao dịch trước đó được ghi lại trong chuỗi khối trung thực trở thành không hợp lệ. Loại tấn công này là hư cấu vì rất tốn kém để có được sức mạnh tính toán bằng hoặc vượt quá 51% sức mạnh tính toán của toàn bộ mạng

Blockchain – Kết luận

Trong hướng dẫn ngắn này, bạn đã được giới thiệu một số khái niệm về Blockchain bằng cách lấy Bitcoin làm nghiên cứu điển hình. Bitcoin là sự triển khai thành công đầu tiên của blockchain. Ngày nay, thế giới đã tìm thấy các ứng dụng của công nghệ blockchain trong một số ngành công nghiệp, nơi mong muốn sự tin tưởng mà không có sự tham gia của cơ quan quản lý tập trung. Vì vậy, chào mừng bạn đến với thế giới của Blockchai

Trang web chính thức – Bitcoin.org

The post Blockchain – Bằng chứng công việc appeared first on Dongthoigian.net.

]]>
https://dongthoigian.net/blockchain-bang-chung-cong-viec/feed/ 0 8222
Hướng dẫn về Blockchain https://dongthoigian.net/huong-dan-ve-blockchain/ https://dongthoigian.net/huong-dan-ve-blockchain/#respond Sun, 25 Jul 2021 08:50:05 +0000 https://dongthoigian.net/?p=8210 Công nghệ blockchain, động lực đằng sau tiền điện tử, Bitcoin. Bạn sẽ tìm hiểu các khía cạnh khác nhau của mật mã

The post Hướng dẫn về Blockchain appeared first on Dongthoigian.net.

]]>
Blockchain là một danh sách ngày càng tăng của các bản ghi, được gọi là các khối, được liên kết bằng cách sử dụng mật mã. Mỗi khối chứa một hàm băm mật mã của khối trước đó, dấu thời gian và dữ liệu giao dịch. Những ngày này, Blockchain đã gây được tiếng vang lớn. Và điều đó chủ yếu là do nó là xương sống của loại tiền điện tử rất nổi tiếng trên thế giới – Bitcoin. Nhiều Chính phủ và các Ngân hàng hàng đầu đã quyết định đưa nhiều giao dịch thông thường của họ dựa trên khái niệm Blockchain. Các ứng dụng và tiềm năng của khuôn khổ này là rất lớn và được coi là sẽ thay đổi cách thức thực hiện các giao dịch trong các lĩnh vực khác nhau

Hướng dẫn này đã được chuẩn bị cho các chuyên gia mong muốn tìm hiểu những điều cơ bản về Blockchain. Chúng tôi đã cố gắng giải thích các khái niệm Blockchain thông qua Tiền điện tử Bitcoin. Khóa học này sẽ cung cấp cho bạn sự hiểu biết tuyệt vời cho sinh viên và các chuyên gia mong muốn tạo dựng sự nghiệp trong công nghệ Blockchain.

Công nghệ blockchain, động lực đằng sau tiền điện tử, Bitcoin. Bạn sẽ tìm hiểu các khía cạnh khác nhau của mật mã, quá trình tạo và liên kết các Khối, Mạng & Khai thác và nhiều khái niệm khác liên quan đến công nghệ blockchain bao gồm thiết kế mạng blockchain.

Blockchain – Giới thiệu

Trong những năm gần đây, có rất nhiều tiếng vang về Blockchain. Nhiều người đã mô tả đây là một công nghệ đột phá nhất trong thập kỷ. Đặc biệt, thị trường tài chính có thể bị ảnh hưởng nhiều nhất.

Công nghệ này đang được điều chỉnh cho nhiều ngành dọc như Chăm sóc sức khỏe, Thuốc men, Bảo hiểm, Tài sản Thông minh, Xe ô tô và thậm chí cả Chính phủ.

Tuy nhiên, cho đến nay việc triển khai thành công nhất của Blockchain là Bitcoin – Hệ thống tiền mặt điện tử ngang hàng, tình cờ cũng là ứng dụng đầu tiên của công nghệ blockchain. Do đó, để hiểu công nghệ blockchain, tốt nhất là hiểu cách Hệ thống Bitcoin được thiết kế và triển khai.

Trong bài viết này, bạn sẽ tìm hiểu Blockchain là gì, kiến ​​trúc của nó, cách nó được triển khai và các tính năng khác nhau của nó. Tôi sẽ trang web triển khai Bitcoin trong khi mô tả sự phức tạp của blockchain. Kiến trúc blockchain không quá tầm thường và nhiều người đã viết các bài báo hay, hướng dẫn bao gồm một số video. Đối tượng này bao gồm từ Người mới làm quen đến Người chuyên nghiệp. Trong hướng dẫn này, tôi sẽ tập trung vào sự hiểu biết khái niệm về kiến ​​trúc blockchain, lưu ý cả Người mới và Người chuyên nghiệp. Trước khi đi sâu vào blockchain, điều quan trọng là phải biết tại sao nhu cầu về công nghệ mới này lại xuất hiện? Câu trả lời cho câu hỏi này nằm trong cái được gọi là Nhân đôi – Chi tiêu

Blockchain – Chi tiêu gấp đôi

Hãy xem xét một tình huống được hiển thị trong hình ảnh

Blockchain - Chi tiêu gấp đôi

Như đã thấy rõ ở đây, Bob đang đấu thầu tờ 10 đô la cho Lisa để đổi lấy một cuốn sách. Khi Lisa nhận được tờ 10 đô la vật chất này, Bob sẽ không có cách nào sử dụng lại số tiền này cho một số giao dịch khác, vì đồng tiền vật chất hiện thuộc quyền sở hữu của Lisa. Bây giờ, hãy xem xét một tình huống mà tiền được thanh toán ở dạng Kỹ thuật số. Điều này được minh họa bằng hình ảnh

Blockchain - Chi tiêu gấp đôi

Vì định dạng trao đổi tiền ở định dạng kỹ thuật số, về cơ bản nó là một tệp vật lý nhị phân được lưu trữ ở đâu đó trên thiết bị của Bob. Sau khi Bob đưa tệp này (tiền kỹ thuật số) cho Lisa, anh ta cũng có thể đưa một bản sao của tệp cho Alice. Giờ đây, cả hai đều nghĩ rằng họ đã nhận được tiền mà không cần bất kỳ phương tiện xác thực đồng tiền kỹ thuật số nào và do đó sẽ giao hàng hóa tương ứng của họ cho Bob. Đây được gọi là chi tiêu kép trong đó người gửi chi cùng một khoản tiền tại nhiều nơi để nhận dịch vụ hoặc hàng hóa từ nhiều nhà cung cấp. Để giải quyết vấn đề chi tiêu gấp đôi này, người ta sẽ sử dụng một cơ quan có thẩm quyền tập trung để giám sát tất cả các giao dịch. Điều này được minh họa bằng hình ảnh

Blockchain - Chi tiêu gấp đôi

Cơ quan tập trung, theo thuật ngữ phổ biến là ngân hàng của bạn, duy trì một sổ cái ghi lại tất cả các giao dịch. Bây giờ, Bob phải gửi tiền kỹ thuật số của mình đến ngân hàng, người sẽ thực hiện một mục nhập vào sổ cái ghi nợ tài khoản của Bob. Sau khi đảm bảo rằng Bob có đủ số dư để thanh toán tiền kỹ thuật số mà anh ấy muốn gửi, sẽ gửi tiền cho Lisa bằng cách ghi có vào tài khoản của cô ấy trong sổ cái của nó.

Bây giờ, có thể đảm bảo rằng Bob không thể tiêu gấp đôi số tiền. Nếu mọi giao dịch kỹ thuật số được định tuyến thông qua một cơ quan tập trung như thế này, vấn đề chi tiêu gấp đôi sẽ được giải quyết. Điều này cũng cung cấp một lợi ích khác trong việc xác nhận tính xác thực của từng đồng xu (tiền kỹ thuật số) mà nó nhận được trong giao dịch. Vì vậy, tiền giả (tiền sao y như trường hợp Bob trả tiền cho Alice bằng bản sao) sẽ dễ dàng bị phát hiện và ngăn chặn lưu thông.

Sự ra đời của cơ quan quyền lực tập trung mặc dù nó giải quyết được vấn đề chi tiêu kép, nhưng lại đưa đến một vấn đề lớn khác – chi phí tạo và duy trì cơ quan quyền lực tập trung.

Khi các ngân hàng cần tiền cho hoạt động của mình, họ bắt đầu cắt hoa hồng trên mỗi giao dịch tiền tệ mà họ thực hiện cho khách hàng của mình. Điều này đôi khi có thể trở nên rất tốn kém, đặc biệt là trong việc chuyển tiền ra nước ngoài khi nhiều đại lý (ngân hàng) có thể tham gia vào toàn bộ giao dịch. Tất cả các vấn đề trên được giải quyết bằng sự ra đời của tiền tệ kỹ thuật số, được gọi là Bitcoin. Bây giờ tôi sẽ cung cấp cho bạn một nền tảng ngắn gọn về Bitcoin là gì trước khi đi sâu vào thiết kế và kiến ​​trúc của nó

Bitcoin – Lịch sử tóm tắt

Bitcoin đã được giới thiệu trên thế giới này bởi Satoshi Nakamoto thông qua một sách trắng kiểu nghiên cứu có tên Bitcoin: Hệ thống tiền mặt điện tử ngang hàng vào năm 2008.

Bitcoin không chỉ giải quyết được vấn đề chi tiêu gấp đôi mà còn mang lại nhiều lợi thế hơn nữa, Một lợi thế đáng nói ở đây là tính ẩn danh trong các giao dịch. Satoshi, người đã tạo ra hệ thống và đã giao dịch một vài đồng tiền trên hệ thống này hoàn toàn ẩn danh đối với toàn thế giới. Chỉ cần tưởng tượng, trong thế giới truyền thông xã hội này, khi quyền riêng tư của mỗi cá nhân bị đe dọa, thế giới không thể tìm ra Satoshi là ai? Trên thực tế, chúng tôi không biết Satoshi là một cá nhân hay một nhóm người. Googling nó cũng tiết lộ thực tế rằng số bitcoin mà Satoshi Nakamoto nắm giữ trị giá khoảng 19,4 tỷ đô la – số tiền đó hiện vẫn chưa được xác nhận trong hệ thống Bitcoin. Vậy Bitcoin là gì – hãy cùng chúng tôi tìm hiểu!

Bitcoin là gì?

Như bạn đã thấy trước đó, ngân hàng duy trì một sổ cái ghi lại từng giao dịch. Sổ cái này do ngân hàng tư nhân nắm giữ và duy trì. Satoshi đề xuất rằng hãy để sổ cái này được công khai và được cộng đồng duy trì.

Thời điểm bạn công khai một sổ cái như vậy, bạn sẽ phải cân nhắc một số vấn đề. Sổ cái này phải chống giả mạo để không ai có thể sửa đổi các mục nhập của nó. Vì mỗi mục trong sổ cái được hiển thị công khai, chúng tôi sẽ phải tìm cách duy trì tính ẩn danh – rõ ràng là bạn sẽ không muốn mọi người trên thế giới biết rằng tôi đã trả cho bạn một triệu đô la.

Ngoài ra, vì chỉ có một sổ cái duy nhất theo dõi từng và mọi giao dịch trên thế giới, kích thước của sổ cái sẽ là một mối quan tâm lớn khác. Cung cấp một giải pháp cho những phức tạp này không hề tầm thường và đó là những gì tôi đang cố gắng thực hiện ở đây để giúp bạn hiểu kiến ​​trúc cơ bản của Bitcoin bằng những từ ngữ đơn giản. Kiến trúc cơ bản này là Blockchain và đó là nội dung của hướng dẫn này. Để hiểu kiến ​​trúc Blockchain, bạn cần hiểu một vài tính năng chính mà nó dựa trên. Vì vậy, chúng ta hãy bắt đầu với PKI – Mật mã khóa công khai

Blockchain – Mật mã khóa công khai

Public Key Cryptography hay nói ngắn gọn là PKI còn được gọi là mật mã không đối xứng. Nó sử dụng hai cặp khóa – công khai và riêng tư. Khóa là một số nhị phân dài. Khóa công khai được phân phối trên toàn thế giới và thực sự công khai như tên gọi của nó. Khóa cá nhân phải được giữ riêng tư một cách nghiêm ngặt và người ta không bao giờ được làm mất nó.

Trong trường hợp của Bitcoin, nếu bạn mất khóa cá nhân cho ví Bitcoin của mình, toàn bộ nội dung trong ví của bạn sẽ ngay lập tức dễ bị đánh cắp và trước khi bạn biết điều đó, tất cả tiền của bạn (nội dung trong ví của bạn) sẽ biến mất. cơ chế trong hệ thống để tìm ra ai đã đánh cắp nó – đó là tính ẩn danh trong hệ thống mà tôi đã đề cập trước đó. PKI thực hiện hai chức năng – xác thực và bảo mật thông điệp thông qua cơ chế mã hóa / giải mã. Bây giờ tôi sẽ giải thích cả hai chức năng này

Xác thực

Khi hai bên trao đổi thông điệp, điều quan trọng là phải thiết lập sự tin cậy giữa người gửi và người nhận. Đặc biệt, người nhận phải tin tưởng vào nguồn tin nhắn. Quay lại kịch bản trước đó của chúng ta (được mô tả trong Hình 1) về việc Bob gửi một số tiền cho Lisa để mua một số hàng hóa từ cô ấy, hãy cùng xem PKI xây dựng lòng tin giữa Bob và Lisa như thế nào. Nhìn vào hình ảnh dưới đây

Blockchain - Chi tiêu gấp đôi

Trước hết, nếu Bob muốn gửi một số tiền cho Lisa, anh ta phải tạo một khóa riêng tư / công khai của riêng mình. Lưu ý rằng cả hai khóa luôn được ghép nối với nhau và bạn không thể kết hợp khóa cá nhân và khóa công khai của các cá nhân khác nhau hoặc các trường hợp khác nhau.

Bây giờ, Bob nói rằng anh ấy đang gửi 10 đô la cho Lisa. Vì vậy, anh ta tạo một tin nhắn (một tin nhắn văn bản thuần túy) chứa khóa công khai của Bob (người gửi), khóa công khai của Lisa (người nhận) và số tiền (10 đô la). Mục đích của việc chuyển tiền này như “Tôi muốn mua bí ngô từ bạn” cũng được thêm vào tin nhắn. Toàn bộ thư hiện đã được ký bằng khóa riêng của Bob. Khi Lisa nhận được tin nhắn này, cô ấy sẽ sử dụng thuật toán xác minh chữ ký của PKI và khóa công khai của Bob để đảm bảo rằng tin nhắn thực sự có nguồn gốc từ Bob. Cách hoạt động của PKI nằm ngoài phạm vi của hướng dẫn này. Bạn đọc quan tâm có thể tham khảo trang web này để có một cuộc thảo luận chi tiết hơn về PKI. Điều này thiết lập tính xác thực của người khởi tạo thông báo. Bây giờ, chúng ta hãy xem xét quyền riêng tư của tin nhắn

Bảo mật tin nhắn

Bây giờ, khi Lisa đã nhận được khoản thanh toán của mình, cô ấy muốn gửi liên kết đến cuốn sách điện tử của mình mà Bob muốn mua. Vì vậy, Lisa sẽ tạo một tin nhắn và gửi cho Bob như thể hiện trong hình ảnh

Blockchain - Chi tiêu gấp đôi

Lisa tạo một thông báo chẳng hạn như “Đây là liên kết đến ebook của tôi mà bạn đã yêu cầu”, ký nó bằng khóa công khai của Bob mà cô ấy đã nhận được trong tin nhắn yêu cầu của Bob và cũng mã hóa tin nhắn bằng một số khóa bí mật được chia sẻ giữa hai người trong quá trình bắt tay HTTPS.

Bây giờ, Lisa chắc chắn rằng chỉ Bob mới có thể giải mã tin nhắn bằng khóa riêng tư do một mình Bob nắm giữ. Ngoài ra, ai đó chặn tin nhắn sẽ không thể khôi phục nội dung của nó vì nội dung được mã hóa bằng khóa bí mật chỉ do Bob và Alice nắm giữ. Điều này đảm bảo với Lisa rằng quyền truy cập vào sách điện tử của cô ấy chỉ được cấp cho Bob.

Sau khi nhìn thấy cả hai tính năng, Xác thực và Bảo mật tin nhắn, được ngụ ý bởi PKI, chúng ta hãy tiếp tục xem cách Bitcoin sử dụng PKI để bảo mật sổ cái công khai mà tôi đã đề cập trong chương “Bitcoin là gì?”. Theo hiểu biết của bạn – Các thuật toán PKI phổ biến nhất là RSA và ECDSA , Bitcoin sử dụng thuật toán thứ hai

Blockchain – Băm

Một trong những hàm quan trọng nhất trong PKI là hàm băm. Hàm băm ánh xạ dữ liệu có kích thước tùy ý bất kỳ thành dữ liệu có kích thước cố định. Bitcoin sử dụng hàm băm SHA-256 để tạo ra một hàm băm (đầu ra) có kích thước 256 bit (32 byte). Điều này được minh họa bằng hình ảnh

Blockchain - Chi tiêu gấp đôi

Bob, trong khi đặt hàng với Lisa, tạo ra một thông báo tương tự như thông báo được hiển thị ở trên. Thông báo này được băm thông qua một hàm băm tạo ra một hàm băm 32 byte. Vẻ đẹp của hàm băm này là cho tất cả các mục đích thực tế, hàm băm (số 256-bit) được coi là duy nhất cho nội dung của thông báo. Nếu thông báo được sửa đổi, giá trị băm sẽ thay đổi. Không những thế với một giá trị băm, không thể tạo lại thông điệp ban đầu. Sau khi đã thấy tầm quan trọng của băm, chúng ta hãy chuyển sang một khái niệm khác trong Bitcoin đó là khai thác

Bitcoin – Khai thác

Khi Bob tạo yêu cầu mua hàng cho Lisa, anh ta không gửi cho Lisa một mình. Thay vào đó, thông báo yêu cầu được phát trên toàn bộ mạng mà anh ta được kết nối. Mạng của Bob được mô tả bằng hình ảnh

Blockchain - Chi tiêu gấp đôi

Thông báo đến tất cả các nút (máy) được kết nối. Một số nút trong sơ đồ được đánh dấu là thợ đào. Đây là những máy chạy một phần mềm để khai thác thông điệp bitcoin. Bây giờ tôi sẽ giải thích cho bạn ý nghĩa của việc khai thác này

Quy trình khai thác

Vì toàn bộ mạng được phân phối rộng rãi, mọi thợ đào trong mạng phải nhận được nhiều tin nhắn từ nhiều nhà cung cấp tại bất kỳ khoảng thời gian nhất định nào. Những gì người khai thác làm là anh ta kết hợp các thông báo này trong một khối duy nhất. Điều này được minh họa bằng hình ảnh

Blockchain - Chi tiêu gấp đôi

Sau khi một khối thông báo được hình thành, người khai thác sẽ tạo một hàm băm trên khối bằng cách sử dụng hàm băm được mô tả trước đó. Bây giờ, như bạn đã biết nếu bất kỳ bên thứ ba nào sửa đổi nội dung của khối này, hàm băm của nó sẽ trở nên không hợp lệ. Ngẫu nhiên, mỗi tin nhắn được đánh dấu thời gian để không ai có thể sửa đổi thứ tự thời gian của nó mà không ảnh hưởng đến giá trị băm của khối. Do đó, các tin nhắn trong khối được bảo mật hoàn hảo khỏi sự giả mạo. Thực tế này được sử dụng như thế nào để bảo mật tất cả các giao dịch trong mạng được giải thích thêm

Blockchain – Khối chuỗi

Các khối được tạo bởi các thợ đào khác nhau được liên kết với nhau để tạo thành cái được gọi là sổ cái công khai phân tán thực sự.

Blockchain - Chi tiêu gấp đôi

Mỗi khối trong chuỗi chứa nhiều thông điệp (giao dịch) như đã thấy trước đó trong Hình 8. Một khối trong chuỗi có thể đến từ bất kỳ người khai thác nào. Trong khi tạo chuỗi khối, chúng tôi quan sát quy tắc băm của khối trước đó được thêm vào khối hiện tại. Do đó, một người khai thác trong khi tạo khối, chọn băm của khối cuối cùng trong chuỗi, kết hợp nó với bộ thông điệp của chính nó và tạo một băm cho khối mới được tạo của nó. Khối mới được tạo này hiện trở thành điểm kết thúc mới cho chuỗi và do đó chuỗi tiếp tục phát triển khi ngày càng có nhiều khối được thêm vào bởi các thợ đào

Chương sau Tìm hiểu Blockchain Bằng chứng công việc

The post Hướng dẫn về Blockchain appeared first on Dongthoigian.net.

]]>
https://dongthoigian.net/huong-dan-ve-blockchain/feed/ 0 8210