<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # LineChain(來鏈)發布 自2022年2月初到現在,因工作繁忙,停更了近2個月。 從今天開始,將繼續更新。 做自己喜歡的事情,不存在困難,只有探索未知,而探索是一種真正的樂趣。 1、今天把項目的go升級到1.18版本了; 2、升級了項目依賴的第三方庫。發現libp2p更新很少,應該是很穩定了; 3、為了實現給不同的blockchain實例創建專屬的錢包,給錢包創建命令增加了instanceId參數,這樣,當在一臺計算機上啟動不同的終端模擬多個node的時候,可以以instanceId作為文件夾區分錢包目錄,以滿足在一臺計算機上創建多個錢包文件的需要。 計劃下周完成測試后,將目前的代碼全部上傳到github中,作為今后不斷進行更新的blockchain唯一正式項目(基于第八版)。 正式版項目命名為**LineChain**,簡單易記易發音,中文為“**來鏈**”。已為此申請域名linchain.cc,后面抽空花點時間建立一個專門的網站,相關文檔將則要地同步更新到網站上。 LineChain 因為廣泛參考或引用了第三方開源項目,將會一直遵循最開放的**GNU GPL**開源協議。[GNU General Public Licence](www.opensource.org/licenses/gpl-2.0.php)(GPL) 有可能是開源界最常用的許可模式。GPL 保證了所有開發者的權利,同時為使用者提供了足夠的復制,分發,修改的權利: **1.可自由復制** 你可以將軟件復制到你的電腦,你客戶的電腦,或者任何地方。復制份數沒有任何限制。 **2.可自由分發** 在你的網站提供下載,拷貝到U盤送人,或者將源代碼打印出來從窗戶扔出去(環保起見,請別這樣做)。 **3.可以用來盈利** 你可以在分發軟件的時候收費,但你必須在收費前向你的客戶提供該軟件的 GNU GPL 許可協議,以便讓他們知道,他們可以從別的渠道免費得到這份軟件,以及你收費的理由。 **4.可自由修改** 如果你想添加或刪除某個功能,沒問題,如果你想在別的項目中使用部分代碼,也沒問題,唯一的要求是,使用了這段代碼的項目也必須使用 GPL 協議。 4、README 更新 # LineChain Readme ## 區塊鏈構成圖 ![](https://img.kancloud.cn/77/a6/77a6a9bd10e92058013268ae027d33fd_921x241.png) 實現了區塊鏈所需的關鍵功能: * Blockchain結構 * Nodes節點 * 共識算法, Blocks & Proof Of Work (POW) * Wallet錢包 * Transactions交易 * Uspent Transaction Output (UTXO) * Merkle Tree * Networking (P2P/分布式系統)網絡層:p2plib * Database:高性能數據庫badger ## 文件清單 | 文件夾 | 內容 | | --- | --- | | `./p2p` | 網絡層 | | `./cmd` | CLI腳本,可與blockchain交互 | | `./Binaries` | 可執行文件夾,如 Wallet等 | | `./wallet` | Wallet源碼 | | `./api` | 使用Go, Python, Rust 和 JS 等編寫的API封裝 | ## 關于部署 可部署在windows、linux系統的電腦上,以及任意支持交叉編譯go的其它操作系統的終端,每個部署程序的都是一個全節點。 不同終端啟動節點的命令參數 instanceId 可以相同。 同一個終端部署多個節點用于開發和測試用,需要使用不同的instanceId區分不同的終端。 運行節點的計算機,不需要安裝第三方依賴庫。 ## Blockchain Blockchain 定義為一個存儲區塊的數據庫,在數據庫中,每一個區塊鏈接到前一個區塊。 ## Nodes Nodes 可被定義為任何類型的設備(主要是計算機), 手機, 筆記本電腦, 大數據中心。Nodes建立區塊鏈網絡基礎架構,沒有node就沒有網絡。所有nodes彼此連接,它們通常互相交換最新的區塊鏈數據,確保所有節點保持最新。節點的主要作用包括但不限于:存儲區塊鏈數據,驗證新的交易和區塊,幫助新的和已經存在的節點保持最新。 區塊鏈由三類節點組成: ### Mining Nodes 這是區塊鏈網絡中最重要的節點,他們保持網絡運行,它們負責挖出新的幣,它們驗證交易,驗證和挖出新的區塊。 ### Full Nodes 這類節點負責為礦工驗證新的交易,管理內存池(未驗證的交易),以及驗證新的區塊。 ### Ordinary Nodes 這類節點是網絡的一部分,保持網絡運行,它們更多驗證網絡上的新節點。 ### Gerneral Nodes 這類節點是網絡的大多部分,保持網絡運行。 本區塊鏈支持**fullnode**、**mining node**和**gerneral node**,但只是分工不同,他們都是全節點(以后將考慮升級支持輕節點)。 ### 共識算法,挖礦, 區塊 與 Proof Of Work (POW) 本項目實現了Proof of work算法,POW被bitcoin和litecoin使用。 ### Blocks 圖表 ![](https://img.kancloud.cn/18/e9/18e926082a42b83653e7c97a99913bc4_801x341.png) ### 我們如何知道一個區塊是否合法? 我們檢查兩件事: 1. 我們檢查前一個區塊引用是否存在和合法。 2. 我們檢查該區塊的POW合法. ## Wallet 錢包系統類似于銀行賬戶,包括一對公私密鑰。密鑰用于跟蹤擁有者權屬、接受和發出加密貨幣。 錢包系統獨立于區塊鏈網絡。 ### 錢包、地址、余額關聯圖 ![](https://img.kancloud.cn/70/f7/70f7016222b24519118767e98199e043_580x261.png) ### Commands 這里命令參數 intanceid 請與 blockchain 的 instanceId 保持一致,以指定錢包文件的目錄。 產生一個新錢包 ~~~ ./wallet new --intanceid INSTANCE_ID ~~~ 打印所有本地錢包 ~~~ ./wallet print --intanceid INSTANCE_ID ~~~ 根據地質打印錢包 ~~~ ./wallet print --address ADDRESS --intanceid INSTANCE_ID ~~~ ### Transactions 一個交易是在錢包之間的價值傳送。它由交易輸入和交易輸出組成。交易輸入由已花費幣數組組成,同時交易輸出由未花費幣數組組成。交易由私鑰簽名,以證明一個用戶確實是擁有這些幣。交易初始化后發送到網絡,隨后網絡節點們使用該用戶的公鑰對該交易執行一序列驗證。 ### Memory pool 交易池是一個未確認交易的等待區。當一個用戶發出了一個交易后,該交易被發送給網絡上的所有全節點,全節點驗證交易后,將它們放入到它們的內存池中,同時等待礦工節點拾起它,并包含到下一個區塊中。 ### Uspent Transaction Output (UTXO) Model 得益于bitcoin區塊鏈,這個概念變得真正流行起來,它定義為一個區塊鏈交易未花費的輸出。 它們可用于新的交易(只要您用私鑰解鎖它們),這使得他們變得有用。當一個用戶試著發送X數量的幣給Y用戶,UTXOs用作輸入,該用戶可以解鎖它們。 計算一個錢包的balance(余額)可以通過將被特定地址鎖定的所有未花費交易輸出相加得到。 #### 為什么我們需要這個 ? balance(余額) 區塊鏈數據相當冗長,其大小可為從幾百到幾億的數據,通過區塊鏈計算一個用戶的錢包余額相當昂貴,UTXOs作為一個拯救手段可降低費用。UTXOs不是完全聰明,但是一個進步,而每一個主意都有它的權衡。 #### 它是如何工作的? UTXOs被存儲在BadgerDB,提供特別的命令執行這個,但記住,UTXOS是從創世區塊開始創建的,UTXOS是從創世區塊開始的區塊鏈中創建的,每次執行新交易時都會進行計算,并且每次用戶檢查其余額時和添加新區塊時都會進行計算。 ### Merkle Tree Merkle樹可以簡單地定義為二進制哈希樹數據結構,它由一組節點組成,在樹的底部包含大量底層節點,這些底層節點包含基礎數據,還有一組中間節點,其中每個節點都是哈希,最后也是一個由其兩個子節點的哈希組成的單個根節點,稱為merkle根的樹的“頂部”,這使得能夠快速驗證區塊鏈數據以及快速移動區塊鏈數據。 在merkle樹算法上執行事務生成單個哈希,該哈希是一串數字和字母,可用于驗證給定的數據集與原始事務集相同。 ### Merkle 樹示例 ![](https://img.kancloud.cn/c2/03/c2030bf913e9b1721e887539a6bfaac2_701x332.png) ### Networking (peer-to-peer) 區塊鏈協議在互聯網上運行,在P2P網絡上,計算機運行該協議,并持有相同的交易賬本的副本,通過共識機制實現P2P價值交易。在計算上,p2p是一個對等網絡,它可以以相同的能力(在計算方面可能有所不同)和功能來存儲和共享文件。它們同時扮演服務器和客戶端,實時交換信息,當一個節點扮演客戶端時候,它從其它網絡節點下載文件。但當他們以服務器工作時,它們成為源頭,其它節點從這里下載文件。P2P網絡不存在單點故障,即使在諸如容錯等錯誤事件時依然能使系統繼續正常運行。P2P網絡是區塊鏈必不可少的一個部分,因為它允許區塊鏈數據分布于多節點/終端,防止困擾無數系統的Denial-of-Service (DoS)攻擊,使他們無法接受中央機構的審查。P2P的主要局限性在于在所有同級之間保持數據一致的能力(主觀),而且工作量的證明對于功能較弱的計算機而言過于計算昂貴,并且隨著區塊鏈變得更大且難度增加,這種情況只會變得更糟 這意味著具有較低計算能力的節點最終會離開,但從好的方面來說,P2P使去中心化成為可能,并為區塊鏈提供整體安全性。 #### Network 概覽 ![](https://img.kancloud.cn/b5/ed/b5edafa4adba0067a8446221bab6261d_478x393.png) ## Demon CLI 這是本項目官方的命令行工具,命令行工具允許開發者與區塊鏈網絡交互。 ### Build CLI 導航到cmd/demon目錄,運行以下命令創建cli: ~~~ go build ~~~ ### 可執行的命令清單 ~~~ 請注意,所有的命令,都需要加上instanceid參數 ~~~ #### 產生一個新錢包.這里intanceid請與blockchain的instanceId保持一致,以指定錢包文件的目錄 ~~~ ./demon wallet new --intanceid INSTANCE_ID ~~~ #### 列出所有錢包地址.這里intanceid請與blockchain的instanceId保持一致,以指定錢包文件的目錄 ~~~ ./demon wallet listaddress --intanceid INSTANCE_ID ~~~ #### 獲得余額 ~~~ ./demon wallet balance --address ADDRESS --intanceid INSTANCE_ID ~~~ #### 打印區塊鏈信息 ~~~ ./demon print --intanceid INSTANCE_ID ~~~ #### 計算UTXOs ~~~ ./demon computeutxos --intanceid INSTANCE_ID ~~~ #### 發送 ~~~ ./demon send --sendfrom ADDRESS --sendto ADDRESS --amount AMOUNT --intanceid INSTANCE_ID ~~~ #### 啟動一個RPC服務器 默認端口是**5000**./demon --rpc true --rpcport 4000 --intanceid INSTANCE\_ID #### 開始一個節點 作為礦工 ./demon startnode --port PORT --address MINER\_ADDRESS --miner --instanceid INSTANCE\_ID 作為全節點 ./demon startnode --port PORT --fullnode --instanceid INSTANCE\_ID 如果這些標志在`.env`文件中已經存在,address, fullnode, miner 和 port 標志均為可選參數。 ## 項目安裝 ### 將下面的信息添加到Env文件中(必須) ~~~ WALLET_ADDRESS_CHECKSUM = 4 ~~~ ### 礦工的其它信息(可選) ~~~ WALLET_ADDRESS_CHECKSUM = 4 MINER_ADDRESS = <YOUR_WALLET_ADDRESS> MINER = true ~~~ ### Start a node #### NB: 運行多個區塊鏈實例需要你使用--instanceid初始化一個新的區塊鏈,隨后訪問該實例時候也需要用到它,區塊鏈的數據庫以instanceid命名。一個節點只有一個唯一的instanceid,該節點的所有針對區塊鏈的操作均與其有關 #### Initialize a blockchain 這個命令創建創世區塊,并初始化區塊鏈。Instanceid允許你運行該區塊鏈的多個實例,它必須是一個字符串,如5000 ./demon init --address --instanceid #### 在啟用RPC的情況下啟動區塊鏈實例 作為礦工 ./demon startnode --port PORT --address MINER\_ADDRESS --miner --rpc --rpcport PORT --instanceid INSTANCE\_ID 作為全節點 ./demon startnode --port PORT --fullnode --rpc --rpcport PORT --instanceid INSTANCE\_ID 作為普通節點 ./demon startnode --instanceid INSTANCE\_ID --rpc --rpcport PORT --instanceid INSTANCE\_ID #### 節點JSON-RPC服務器 創建錢包 示例 curl -X POST -H "Content-Type: application/json" -d '{"id": 1, "method": "API.CreateWallet", "params": \[\]}'[http://localhost:5000/\_jsonrpc](http://localhost:5000/_jsonrpc) 獲得余額 示例 ~~~ curl -X POST -H "Content-Type: application/json" -d '{"id": 1, "method": "API.GetBalance", "params": [{"Address":"1EWXfMkVj3dAytVuUEHUdoAKdEfAH99rxa"}]}' http://localhost:5000/_jsonrpc ~~~ 得到區塊鏈 示例 ~~~ curl -X POST -H "Content-Type: application/json" -d '{"id": 1,"method": "API.GetBlockchain", "params": []}' http://localhost:5000/_jsonrpc ~~~ 通過Height得到區塊 示例 ~~~ curl -X POST -H "Content-Type: application/json" -d '{"id": 1,"method": "API.GetBlockByHeight", "params": ["Height":1]}' http://localhost:5000/_jsonrpc ~~~ 發送 示例 ~~~ curl -X POST -H "Content-Type: application/json" -d '{"id": 1 , "method": "API.Send", "params": [{"sendFrom":"1D214Jcep7x7zPphLGsLdS1hHaxnwTatCW","sendTo": "15ViKshPBH6SzKun1UwmHpbAKD2mKZNtBU", "amount":0.50, "mine": true}]}' http://localhost:5000/_jsonrpc ~~~ #### 命令行用法 ~~~ 用法: demon [flags] demon [command] 可用Commands: computeutxos 重建和計算Unspent transaction outputs help 關于任何命令的幫助 init 初始化區塊鏈并創建創始區塊 print 打印區塊鏈里面的區塊信息 send 從本地錢包地址發送X數量的幣給一個地址 startnode 開始一個節點 wallet 管理錢包 Flags: --address string 錢包地址 -h, --help demon命令幫助 --instanceid string 節點實例ID(所有命令都必須加此參數) --rpc 啟用HTTP-RPC server --rpcaddr string HTTP-RPC server監聽地址 (默認:localhost) --rpcport string HTTP-RPC server監聽端口(默認: 5000) 使用 "demon [command] --help" 得到特定命令的更多信息 ~~~ ## 挑戰 本區塊鏈項目沒有解決區塊鏈分叉問題[fork](https://en.wikipedia.org/wiki/Fork_(blockchain));此外,還沒沒有實現節點內存池,這反過來又影響了在系統中擁有多個挖礦節點和全節點的能力,輕節點也還不支持。 ## 下一步 * 改善Memorypool和Mining的實現 * 節點內存池 * 單元測試覆蓋 * 改善錯誤處理 * 腳本語言支持(智能合約支持) * 解決分叉問題(fork) * 挖礦節點(輕節點) * 驗證節點(輕節點) * 節點docker發布(包含的docker compose)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看