日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

助力在线教育,阿里云推出百万专项扶持基金计划

發布時間:2024/8/23 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 助力在线教育,阿里云推出百万专项扶持基金计划 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

云棲號:https://yqh.aliyun.com
第一手的上云資訊,不同行業精選的上云企業案例庫,基于眾多成功案例萃取而成的最佳實踐,助力您上云決策!

前話

提供一個思路幫助你了解區塊鏈基礎運作,文本并不是一個完整的區塊鏈,希望你能舉一反三

源碼:ar414-com/phpblock

記住

區塊鏈是一個 不可變的、有序的 被稱為塊的記錄鏈。它們可以包含交易、文件或任何您喜歡的數據。但重要的是,他們用哈希 一起被鏈接在一起

需要準備什么?

  • php5.6+

1、Block 區塊

塊是什么樣的?

每個塊都有一個索引,一個時間戳(Unix時間戳),一個事務列表, 一個校驗(工作證明算法生成的證明)和前一個塊的哈希。

block = {'index': 2,'timestamp': 1506057125,'transactions': [{'sender': "8527147fe1f5426f9dd545de4b27ee00",'recipient': "a77f5cdfa2934df3954a5c7c7da5df1f",'amount': 5,}], 'proof': 324984774000,'previous_hash': "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" }

在這一點上,一個 區塊鏈 的概念應該是明顯的 - 每個新塊都包含在其內的前一個塊的 哈希 。 這是至關重要的,因為這是 區塊鏈 不可改變的原因:如果攻擊者損壞 區塊鏈 中較早的塊,則所有后續塊將包含不正確的哈希值。

新建一個Block類,區塊鏈由N個區塊組成,在區塊鏈里,價值信息存儲在區塊之中。比如,比特幣的區塊存儲交易記錄,而交易記錄是任何加密貨幣的核心。除此之外,區塊里還包含有技術信息,比如它的版本號,當前的時間戳,以及上一個區塊的哈希(Hash)。

<?php /*** Created by PhpStorm.* User: ar414.com@gmail.com* Date: 2020/2/2* Time: 18:42*/class Block {/*** @var integer 索引*/private $index;/*** @var integer 時間戳*/private $timestamp;/*** @var array 事務列表*/private $transactions;/*** @var string 上一塊的哈希值*/private $previousHash;/*** @var integer 由工作證明算法生成的證明*/private $proof;/*** @var string 當前塊的哈希值*/private $hash;/*** 通過調用方法返回新生成塊的哈希* 防止外界改動* @return string*/public function getHash(){return $this->hash;}public function __construct($index,$timestamp,$transactions,$previousHash,$proof){$this->index = $index;$this->timestamp = $timestamp;$this->transactions = $transactions;$this->previousHash = $previousHash;$this->proof = $proof;$this->hash = $this->blockHash();}/*** 當前塊簽名* @return string*/private function blockHash(){//我們必須確保這個字典(區塊)是經過排序的,否則我們將會得到不一致的哈希值$blockArray = ['index' => $this->index,'timestamp' => $this->timestamp,'transactions' => $this->transactions,'proof' => $this->proof,'previous_hash' => $this->previousHash];$blockString = json_encode($blockArray);return hash('sha256',$blockString);} }
  • index是當前塊的索引
  • timestamp是當前塊的生成時間
  • transactions是當前塊的交易事務列表(有多個或一個交易)
  • previousHash是上一個區塊的簽名哈希
  • hash是當前區塊的簽名哈希
  • proof是當前區塊的礦工工作量證明

proof

使用工作量證明(PoW)算法,來證明是如何在區塊鏈上創建或挖掘新的區塊。PoW 的目標是計算出一個符合特定條件的數字,這個數字對于所有人而言必須在計算上非常困難,但易于驗證。這是工作證明背后的核心思想。

在比特幣中,工作量證明算法被稱為 Hashcash ,它和上面的問題很相似,只不過計算難度非常大。這就是礦工們為了爭奪創建區塊的權利而爭相計算的問題。 通常,計算難度與目標字符串需要滿足的特定字符的數量成正比,礦工算出結果后,就會獲得一定數量的比特幣獎勵(通過交易)

2、創建一個區塊鏈

我們要創建一個Blockchain類 ,他的構造函數創建了一個初始化的空列表(要存儲我們的區塊鏈)并且創建世紀快,以及初始化了事務列表。下面是我們這個類的實例:

Step 1:初始化區塊列表并且創建創世塊

/*** @var array 區塊列表*/private $chain;/*** @var array 交易事務列表*/private $currentTransactions;public function __construct(){$this->chain = [$this->createGenesisBlock()];$this->currentTransactions = [];}/*** 創建創世塊* @return array*/private function createGenesisBlock(){$block = ['index' => 1,'timestamp' => time(),'transactions' => [],'proof' => 100,'previous_hash' => '0000000000000000000000000000000000000000000000000000000000000000',//參考BTC的第一個創世塊];$block['hash'] = (new Block($block['index'],$block['timestamp'],$block['transactions'],$block['previous_hash'],$block['proof']))->getHash();return $block;}

Step 2:新增交易事務

創建一筆新的交易到交易事務列表中等待新區塊打包,每次生成新區塊后清空列表

/*** 新增交易事務* @param $senderPrivateKey* @param $senderAddress* @param $recipientAddress* @param $amount* @return bool*/public function createTransaction($senderPrivateKey,$senderAddress,$recipientAddress,$amount){$row = ['from' => $senderAddress,'to' => $recipientAddress,'amount' => $amount,'timestamp' => time()];//TODO 私鑰簽名(就像支票簽名)//TODO 區塊鏈節點可以用發送者的簽名來推導出公鑰,再通過公鑰驗簽并對比數據$this->currentTransactions[] = $row;return true;}

Step 3:創建新區塊

當前示例創建新區快操作只能由挖礦成功的礦工操作,挖礦講解在Step4

/*** 增加新區塊* @param int $proof* @return bool*/public function addBlock(int $proof){//上一個區塊的信息$preBlockInfo = $this->chain[count($this->chain)-1];//驗證工作證明if($this->checkProof($proof,$preBlockInfo['proof']) == false){return false;}//TODO 獎勵礦工(在交易事務中)$block = ['index' => count($this->chain) + 1,'timestamp' => time(),'transactions' => $this->currentTransactions,'proof' => $proof,'previous_hash' => $preBlockInfo['hash'],'hash' => ''];$block['hash'] = (new Block($block['index'],$block['timestamp'],$block['transactions'],$block['previous_hash'],$block['proof']))->getHash();//新增區塊$this->chain[] = $block;//重置交易事務$this->currentTransactions = [];return true;}/*** 校驗算力* @param string $proof* @param string $preProof* @return bool*/private function checkProof(string $proof,string $preProof){$string = $proof.$preProof;$hash = hash('sha256',$string);if(substr($hash,0,4) == '0000'){return true;}else{return false;}}

Step 4:挖礦

挖礦正是神奇所在,它很簡單,做了一下三件事:

  • 計算工作量證明 PoW
  • 通過新增一個交易授予礦工(自己)一個幣
  • 構造新區塊并將其添加到鏈中
  • 在比特幣中,工作量證明算法被稱為 Hashcash ,它和上面的問題很相似,只不過計算難度非常大。這就是礦工們為了爭奪創建區塊的權利而爭相計算的問題。 通常,計算難度與目標字符串需要滿足的特定字符的數量成正比,礦工算出結果后,就會獲得一定數量的比特幣獎勵(通過交易)

    讓我們來實現一個相似 PoW 算法

    找到一個數字 P ,使得它與前一個區塊的 Proof 拼接成的字符串的 Hash 值以 4 個零開頭。 /*** 挖礦* @return void*/public function mine(){ // while (true) // {$proof = 0;//最新區塊$blockInfo = $this->chain[count($this->chain)-1];$preProof = $blockInfo['proof'];while (true){$string = $proof.$preProof;$hash = hash('sha256',$string);if(substr($hash,0,4) == '0000'){//增加新區塊$this->addBlock($proof);break;}$proof++;}// }}

    Step 5:運行測試

    $blockChainObj = new Blockchain();//增加事務 $blockChainObj->createTransaction('','8527147fe1f5426f9dd545de4b27ee00','a77f5cdfa2934df3954a5c7c7da5df1f',1);//開啟挖礦(挖到則生成新區塊) $blockChainObj->mine();//查看當前區塊列表 $blockList = $blockChainObj->getChainList(); var_dump($blockList);//結果: $ php Blockchain.php array(2) {[0]=>array(6) {["index"]=>int(1)["timestamp"]=>int(1580717292)["transactions"]=>array(0) {}["proof"]=>int(100)["previous_hash"]=>string(64) "0000000000000000000000000000000000000000000000000000000000000000"["hash"]=>string(64) "567b2848f3ff87a614b3ba5ddc13389d4d7440699b1857935412561721d86d05"}[1]=>array(6) {["index"]=>int(2)["timestamp"]=>int(1580717292)["transactions"]=>array(1) {[0]=>array(4) {["from"]=>string(32) "8527147fe1f5426f9dd545de4b27ee00"["to"]=>string(32) "a77f5cdfa2934df3954a5c7c7da5df1f"["amount"]=>int(1)["timestamp"]=>int(1580717292)}}["proof"]=>int(28)["previous_hash"]=>string(64) "567b2848f3ff87a614b3ba5ddc13389d4d7440699b1857935412561721d86d05"["hash"]=>string(64) "3a599c88ddd60fb25605df33d33b19252117c3d7d0e70c66dbc45ed81ab295a9"} }

    Setp5:完整代碼ar414-com/phpblock

    云棲號在線課堂,每天都有產品技術專家分享
    立即加入圈子:https://c.tb.cn/F3.Z8gvnK
    與專家面對面,及時了解課程最新動態!

    原文鏈接
    本文為云棲社區原創內容,未經允許不得轉載。

    總結

    以上是生活随笔為你收集整理的助力在线教育,阿里云推出百万专项扶持基金计划的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。