logo

  • Hỏi Đáp
  • Kiến Thức
  • Sức Khỏe
  • Tử Vi
  • Công Nghệ
No Result
View All Result
logo
No Result
View All Result
Trang chủ lập trình blockchain php

LẬP TRÌNH BLOCKCHAIN PHP

by Admin _ June 08, 2022

Năm 2021 chắc rằng là một năm bùng nổ của Blockchain, khi tín đồ người nhà nhà có tác dụng Blockchain, game NFT, Token.... Vậy trường hợp Blockchain được trở nên tân tiến trên ngôn từ PHP thì sao?

Blockchain là gì?

Blockchain (hay call là cuốn sổ cái) là khối hệ thống cơ sở dữ liệu có thể chấp nhận được lưu trữ với truyền tải các khối thông tin (block). Bọn chúng được links với nhau nhờ mã hóa. Các khối thông tin này hoạt động tự do và hoàn toàn có thể mở rộng lớn theo thời gian. Bọn chúng được cai quản bởi những người tham gia khối hệ thống chứ không thông qua đơn vị trung gian. Nghĩa là lúc một khối tin tức được ghi vào khối hệ thống Blockchain thì không tồn tại cách nào biến hóa được. Chỉ gồm thể bổ sung cập nhật thêm khi dành được sự đồng thuận của toàn bộ mọi người.

Bạn đang xem: Lập trình blockchain php

Tạo một block

Chúng ta sẽ khởi tạo 1 class mang tên là Block, Class này sẽ làm trọng trách mã hóa toàn bộ dữ liệu vào thành 1 chuỗi khóa

class Block public $index; //index là key của 1 block public $previousHash; // đấy là hash của block trước public $timeHash; // là thời gian mã hóa của block public $data; // data là của block ( văn bản transaction chẳng hạn ) public $hash; // hash của block này public function __construct($index = 0, $previousHash = "", $timeHash = "", $data = "") $this->index = $index; $this->previousHash = $previousHash; $this->timeHash = $timeHash; $this->data = $data; $this->hash = $this->execHash(); public function execHash() if(is_array($this->data)) $dataContent = json_encode($this->data); else $dataContent = $this->data; return hash("sha256", $this->index . $this->previousHash . $dataContent . $this->timeHash); Tiếp đến họ tạo một class Blockchain

namespace AppServices;use CarbonCarbon;class BlockChain extends Block public $chain = array(); public function __construct() $this->chain<> = $this->createGenesisBlock(); parent::__construct(); public function createGenesisBlock() return new Block(0000,"the first", Carbon::now()->format("d/m/Y H:i:s"), <"from" => "hunghd", "to" => "hunghd2", "amount"=> 3000>); private function getLatestBlock() return $this->chain<(count($this->chain) - 1)>; public function addBlock($index, $timeHash, $data) $previousHash = $this->getLatestBlock()->hash; $newBlock = new Block($index, $previousHash, $timeHash, $data); $this->chain<> = $newBlock; Ở trên đây mình sẽ khởi tạo 1 block khi có một data truyền vào. Trả dụ data là 1 trong những transaction hunghd giữ hộ tiền đến hunghd2 thì từ bây giờ mình sẽ khởi tạo ra 1 Block mới. Block này là block thứ nhất thế đề xuất index = 0 , previousHash = "the first".

Xem thêm: Kỹ Thuật Pgd Là Gì ? Nghĩa Của Từ Pgd Trong Tiếng Việt Tìm Hiểu Thuật Ngữ Pgd Và Pgs Trong Ivf

Và khi gồm thêm transaction hunghd2 gửi mang đến hunghd3 thì block tiếp theo sẽ sở hữu previousHash = mã hash của block trước đó. Từ đó cứ thêm transaction bắt đầu được thêm vào sẽ tạo nên ra thêm 1 block mới nối với các trước đó. Từ bỏ đó họ có một blockchain cơ bản.Đây là code tác dụng khi mình chạy thêm block:

public function inValidBlock() for ($i = 1; $i count($this->chain); $i++) $currentBlock = $this->chain<$i>; $previousBlock = $this->chain<$i - 1>; if ($currentBlock->hash !== $currentBlock->execHash()) return false; if ($currentBlock->previousHash !== $previousBlock->hash) return false; return true; Giờ mình đã thử thay đổi 1 block ( chuyển đổi data hoặc hash ) trong chain sẽ có hiệu quả như sau:

$bl = new AppServicesBlockChain();$bl->addBlock(1, Carbon::now()->format("d/m/Y H:i:s"), <"from" => "hunghd2", "to" => "hunghd3", "amount"=> 4000>);$bl->addBlock(2, Carbon::now()->format("d/m/Y H:i:s"), <"from" => "hunghd3", "to" => "hunghd4", "amount"=> 5000>);$bl->addBlock(3, Carbon::now()->format("d/m/Y H:i:s"), <"from" => "hunghd4", "to" => "hunghd", "amount"=> 6000>);$bl->chain<2>->data = < "from" => "hunghd3", "to" => "hunghd", "amount" => 5000>;$bl->chain<2>->hash = $bl->chain<2>->execHash();$bl->invalid = $bl->inValidBlock();Ở trên đây thấy mã hash của block thứ 2 đã bị đổi khác mà block vật dụng 3 đã bảo quản mã hash của block đồ vật 2 trước lúc thay đổi. Nên hiệu quả kiểm tra là false

*

Proof-of-work

Nhưng thực tế, hash cùng previousHash khi mọi người có thể biến đổi dữ liệu 1 block rồi thế previousHash cùng hash của các block sau là vẫn tạo ra một chain thích hợp lệ và họ cũng muốn người dùng cùng đề xuất đồng thuận (consensus) về một lịch sử dân tộc duy duy nhất của chain. Cùng proof-of-work thành lập để giải quyết và xử lý vấn đề này.

Nếu bạn có nhu cầu sửa thay đổi 1 block trước đó, bạn sẽ phải mine lại toàn thể các block sau nó. Nó yêu cầu quét một giá bán trị bắt đầu bằng một vài số 0 cố định khi được hash. Quý giá được điện thoại tư vấn là quý hiếm nonce, số bit 0 mở màn được hotline là difficulty. Bằng phương pháp tăng độ khó câu hỏi khai thác, đồng nghĩa rằng bài toán mine sẽ càng ngày càng khó hơn.Chúng ta có thể làm khối hệ thống này bằng cách tạo method mine

Giờ class Block mình sẽ code sau cuối như này:

class Block public $index; public $previousHash; public $timeHash; public $data; public $hash; public $mineVar; public function __construct($index = 0, $previousHash = "", $timeHash = "", $data = "") $this->index = $index; $this->previousHash = $previousHash; $this->timeHash = $timeHash; $this->data = $data; $this->hash = $this->execHash(); $this->mineVar = 0; public function execHash() if(is_array($this->data)) $dataContent = json_encode($this->data); else $dataContent = $this->data; return hash("sha256", $this->index . $this->previousHash . $dataContent . $this->timeHash . $this->mineVar ); public function mine($difficulty) while (!str_starts_with($this->execHash(), str_repeat("0", $difficulty))) $this->mineVar++; $this->hash = $this->execHash(); return $this->mineVar; Trong class Blockchain cũng cần bổ sung cập nhật code như này:

use CarbonCarbon;class BlockChain extends Block public $chain = array(); public $difficulty; public function __construct($difficulty) $this->chain<> = $this->createGenesisBlock(); $this->difficulty = $difficulty; parent::__construct(); public function createGenesisBlock() return new Block(0000,"the first", Carbon::now()->format("d/m/Y H:i:s"), <"from" => "hunghd", "to" => "hunghd2", "amount"=> 3000>); private function getLatestBlock() return $this->chain<(count($this->chain) - 1)>; public function addBlock($index, $timeHash, $data) $previousHash = $this->getLatestBlock()->hash; $newBlock = new Block($index, $previousHash, $timeHash, $data); $newBlock->mine($this->difficulty); $this->chain<> = $newBlock; public function inValidBlock() for ($i = 1; $i count($this->chain); $i++) $currentBlock = $this->chain<$i>; $previousBlock = $this->chain<$i - 1>; if ($currentBlock->hash !== $currentBlock->execHash()) return false; if ($currentBlock->previousHash !== $previousBlock->hash) return false; return true; Ok!! Giờ họ sẽ test chạy coi sao

$bl = new AppServicesBlockChain(4);$bl->addBlock(1, Carbon::now()->format("d/m/Y H:i:s"), <"from" => "hunghd2", "to" => "hunghd3", "amount"=> 4000>);$bl->addBlock(2, Carbon::now()->format("d/m/Y H:i:s"), <"from" => "hunghd3", "to" => "hunghd4", "amount"=> 5000>);$bl->addBlock(3, Carbon::now()->format("d/m/Y H:i:s"), <"from" => "hunghd4", "to" => "hunghd", "amount"=> 6000>);Kết quả bọn họ sẽ có những block tất cả số nonce như ước ao muốn. Để tăng cường mức độ khó là 5 số 0 thì mình chỉ cần thay đổi difficulty = 5.

Đây là bài viết dựa trên sự khám phá của cá thể mình nên có rất nhiều sai sót ước ao được hầu như người góp phần thêm!!!

Share Tweet Linkedin Pinterest
Previous Post

Php html online

Next Post

Các phần mềm chạy php

CÙNG CHUYÊN MỤC

form register php

Form register php

09/04/2021
fantastic blog (cms) in php with source code

Fantastic blog (cms) in php with source code

28/04/2021
validate form php javascript

Validate form php javascript

28/04/2021
http diendanlequydon com viewtopic php style 6

Http diendanlequydon com viewtopic php style 6

28/04/2021
framgia tuyển dụng php

Framgia tuyển dụng php

24/06/2022
giỏ hàng jquery php

Giỏ hàng jquery php

24/06/2022
online php formatter

Online php formatter

24/06/2022
thực tập php tại hồ chí minh

Thực tập php tại hồ chí minh

24/06/2022

Newsletter

The most important automotive news and events of the day

We won't spam you. Pinky swear.

Chuyên Mục

  • Hỏi Đáp
  • Kiến Thức
  • Sức Khỏe
  • Tử Vi
  • Công Nghệ

News Post

  • Innissfree

About

Chúng tôi tạo ra trang web nhằm mục đích mang lại kiến thức bổ ích cho cộng đồng, các bài viết được sưu tầm từ nhiều nguồn trên internet giúp mang lại kiến thức khách quan dành cho bạn

©2022 darkedeneurope.com - Website WordPress vì mục đích cộng đồng

Liên Hệ - Giới Thiệu - Nội Quy - Bảo Mật

No Result
View All Result
  • Trang chủ
  • Chuyên mục
    • Hỏi Đáp
    • Kiến Thức
    • Sức Khỏe
    • Tử Vi
    • Công Nghệ
  • Lưu trữ
  • Liên hệ

© 2022 darkedeneurope.com - Website WordPress vì mục đích cộng đồng.