智能合約

06-智能合約

0 啥是智能合約?

定義

智能合約,又稱加密合約,在一定條件下可直接控制數字貨幣或資產在各方之間轉移的一種計算機程序。

角色

  • 區塊鏈網絡可視為一個分布式存儲服務,因為它存儲了所有交易和智能合約的狀態
  • 智能合約還是基于存儲服務之上的計算,即運行在區塊鏈上的代碼程序。
alt

特點

智能合約,即先前設定好的代碼數字協議,在不可更改和公共監督情景下,去運行一個合約,違反合約的一方將付出事先約定好的代價,自動執行(無需借助外部力量)。

智能合約是公平的,第三方無法干預。

功能

智能合約不僅以與傳統合約相同方式定義協議的規則和處罰,還可自動強制執行這些義務。

它通過接受信息作為輸入,通過規則為輸入賦值,在合約中列出并執行這些合約條款。

實例

設想人壽保險,智能合約在保單持有人去世后,向指定受益人支付利益。

合約可以對在線死亡登記表進行實時檢查以確定支付時間,智能合約是可靠的,自動的。

架構地位

核心數據和核心業務邏輯運行在區塊鏈上,保證去中心化與上層業務系統進行銜接,提供用戶界面或業務集成:

alt

意義

區塊鏈智能合約:從數據可信上升到業務可信。

1 假如沒有智能合約?

區塊鏈網絡將僅作為一個分布式存儲服務。區塊鏈主要功能將會是記錄和保存數據,而不會自動執行任何邏輯或業務規則。

沒有智能合約的區塊鏈網絡的特點和局限:

1.1 特點

  • 去中心化存儲:區塊鏈仍提供去中心化的數據存儲功能,保證數據的完整性和防篡改性
  • 數據透明性:所有節點可訪問相同數據,確保信息公開透明
  • 安全性:通過共識機制和密碼學技術,確保數據安全性和不可篡改性

1.2 局限

  • 缺乏自動化處理:無法在鏈上執行自動化的業務邏輯。如不能在特定條件下自動觸發資金轉移或更新數據
  • 手動操作:所有業務邏輯和操作需要依賴鏈下的系統或人工操作,增加操作復雜性和潛在錯誤
  • 有限的應用場景:僅能用于簡單的數據記錄和查詢,無法支持復雜的去中心化應用(dApps)

1.3 假如沒有智能合約的區塊鏈網絡的典型使用場景

  1. 數據記錄:例如,公證和時間戳服務,用于證明某個數據在某個時間點已經存在。
  2. 審計跟蹤:用于保存和跟蹤記錄的變更歷史,確保記錄的完整性和不可篡改性。
  3. 簡單交易:例如,比特幣的早期應用,僅支持簡單的轉賬功能,而沒有復雜的業務邏輯。

1.4 實例

若一個區塊鏈網絡沒有智能合約,其工作流程可能:

  1. 數據寫入:用戶通過客戶端,將數據寫入區塊鏈
  2. 數據存儲:區塊鏈網絡通過共識機制將數據記錄在區塊中,并存儲在各節點的賬本中
  3. 數據查詢:用戶或應用程序可查詢區塊鏈中的數據,但不能執行任何業務邏輯

如Alice向區塊鏈提交一筆交易,記錄她向Bob轉賬1個單位貨幣。區塊鏈網絡會驗證并記錄這筆交易,確保其不可篡改。但若無智能合約,無法在特定條件下自動執行轉賬或其他邏輯操作,所有業務流程要在鏈下由用戶或第三方系統手動處理。

綜上,無智能合約的區塊鏈網絡在功能上受限,只能提供基礎的分布式存儲和數據記錄功能,無法支持復雜的自動化業務邏輯和去中心化應用。

所以,智能合約

1.5 有啥用?

在區塊鏈社會里,大家共同維護一個區塊鏈賬本,所有交易數據無法篡改、不可偽造,還能減少人工對賬的出錯概率和人力成本。 隨智能合約普及,我們也會變得更佛系。面對潛在的糾紛,無需自己出馬,一切代碼說了算。

如乘飛機買延誤險,理賠就變得簡單多了:

  • 投保乘客信息、航班延誤險和航班實時動態均以智能合約的形式存儲在區塊鏈上
  • 一旦航班延符合賠付標準,賠償款將自動劃賬到投保乘客賬戶,保單處理十分高效
  • 你也不需要跟工作人員費口舌、爭論計賠時間等問題

智能合約是以太坊區塊鏈上指定地址的代碼和數據集合,智能合約能直接相互發送消息,同時也能執行圖靈完備計算。

智能合約是建立在以太坊虛擬機字節碼基礎之上的。

一般不會直接編寫字節碼,而是使用像 Solidity 這樣的以太坊高級語言。

Solidity 是可以用來編寫以太坊智能合約的高級語言,它和js很像。

推薦使用 Solidity 語言,其使用的人比較多,意味著更好的生態,能找到更多的資源,有問題也更容易找到答案。

2 重要性

2.1 經濟活動可編程

代碼即法律,表達現實世界的經濟活動,滿足條件自動觸發的電子合約

2.2 現實事物可映射

智能提供豐富的數據結構,完成復雜的現實事物的標識和時序變化

2.3 區塊鏈2.0的標志

區塊鏈2.0通常指的是在比特幣之后出現的區塊鏈技術,其核心特征是支持智能合約(Smart Contracts)。智能合約是一種自動執行的合約,其中的條款和條件直接編碼到代碼中,無需第三方介入即可執行。

以太坊,HLFabric等都是建立在智能合約的基礎上。

3 智能合約框架

alt

3.1 廣域網的狀態一致性

  • 不同節點得到一致執行結果
  • 不同硬件環境得到一致的資源消耗

3.2 合約開發語言多樣性

適應不同開發者的開發習慣

支持不同的合約語言:

  • C++
  • GO
  • JAVA
  • Solidity

支持不同的合約類型:

  • WASM 合約
  • Native 合約
  • EVM 合約

合約語言/運行時相容矩陣:

alt
  • 環境準備
  • 合約編寫
  • 合約編譯
  • 部署調用

3.3 合約執行的高性能

支撐真實落地場景的業務體量

3.4 不同業務場景的可擴展性

  • 公開網絡和聯盟網絡的虛擬機需求
  • 兼容已有的區塊鏈生態

4 WASM智能合約字節碼

將智能合約編譯成WebAssembly字節碼格式,以便在區塊鏈環境中高效、安全地執行。WASM(WebAssembly)是一種高效、可移植的低級字節碼格式,最初是為在瀏覽器中高效運行而設計的,但由于其安全性、跨平臺兼容性和高效性,逐漸在區塊鏈和智能合約領域中獲得廣泛應用。

4.1 優點

字節碼預編譯AOT,實現高性能

硬件無關中間碼,生成本地指令 編譯執行 V.S 解釋執行

WASM字節碼經過優化,可以接近本地執行速度,確保智能合約的高效執行。

資源限制及審計
  • 設置資源限制,超限制自動退出
  • 多緯度資源統計:CPU,內存,磁盤
安全性保障
  • 內存越界檢查
  • 限制系統資源訪問,類似web沙盒環境。WASM運行在沙盒環境中,隔離了智能合約執行和底層系統,減少了安全漏洞。
  • 超資源自動退出保護機制,防惡意攻擊
alt
可移植性

WASM字節碼可以在任何支持WASM的環境中執行,增加了智能合約的跨鏈兼容性

多語言支持

開發者可用多種編程語言(如Rust、C++、Go等)編寫智能合約,然后編譯成WASM字節碼

4.2 工作流程

  1. 編寫合約:開發者使用高層語言(如Rust)編寫智能合約。
  2. 編譯成WASM字節碼:使用編譯工具將智能合約編譯成WASM字節碼。
  3. 部署:將編譯后的WASM字節碼部署到區塊鏈網絡上。
  4. 執行:當調用智能合約時,區塊鏈節點將加載并執行WASM字節碼。
alt

4.3 例子

1. 編寫智能合約(Rust)
#[no_mangle]
pub?extern?"C"?fn?add(a:?i32,?b:?i32)?->?i32?{
????a?+?b
}
2. 編譯為WASM字節碼

使用Rust工具鏈和wasm-pack將代碼編譯為WASM字節碼:

wasm-pack?build?--target?web

編譯后生成的WASM字節碼文件可以部署到支持WASM的區塊鏈平臺。

3. 部署和調用

將生成的WASM字節碼文件部署到區塊鏈上,然后通過交易調用合約函數。例如,調用add函數并傳遞參數ab

4.4 未來

WASM智能合約在區塊鏈領域具有廣闊的前景:

  • 跨鏈互操作性:由于WASM的可移植性,未來不同區塊鏈平臺之間可以更方便地共享和執行智能合約。
  • 更高性能:WASM的高效執行能力使得區塊鏈平臺可以支持更復雜和計算密集的應用。
  • 更安全的合約執行:WASM沙盒環境提供了更好的安全性,減少了智能合約中的潛在漏洞。

5 Gas 計費原理-控制流圖分析

alt

Gas 計費是區塊鏈平臺(如以太坊)用來防止資源濫用和激勵資源使用優化的機制。智能合約執行過程中每一步操作都會消耗一定量的Gas,用戶需要為這些操作支付費用。Gas 費用通常以加密貨幣(例如以太幣)支付。

Gas 計費原理

  1. 初始Gas分配:在交易開始前,用戶需要指定一個Gas上限(即最大愿意支付的Gas量)和Gas價格(每單位Gas愿意支付的費用)。在交易執行時,這個Gas上限會被鎖定,確保不會超過用戶設定的最大Gas量。

  2. 操作計費:智能合約執行過程中,每個操作指令(如算術運算、存儲操作、合約調用等)都有預定義的Gas消耗。虛擬機(如以太坊的EVM)會根據操作指令的類型和數量逐步扣除Gas。

  3. Gas不足處理:如果執行過程中Gas消耗超過了用戶設定的Gas上限,交易會被強制中止并回滾,但已經消耗的Gas不會退還。

  4. 剩余Gas退還:如果交易執行完畢且未耗盡所有的Gas,上限中未用盡的部分會退還給用戶。

控制流圖分析

控制流圖(CFG)是用來表示程序所有可能執行路徑的圖結構,節點表示基本塊(basic blocks),邊表示控制流(control flow)。在智能合約中,CFG可以幫助分析程序的Gas消耗情況。

示例智能合約控制流圖

假設有一個簡單的智能合約,偽代碼如下:

function?foo(x)?{
????if?(x?>?10)?{
????????y?=?x?*?2;
????}?else?{
????????y?=?x?+?10;
????}
????return?y;
}

其控制流圖如下所示:

        [Start]|v[Entry: x > 10]/       \/         \v           v
[y = x * 2]   [y = x + 10]\         /\       /v     v[Return y]
Gas 計費過程
  1. 進入合約:Gas 消耗包括調用合約的基礎費用和傳遞參數的費用。

  2. 條件判斷:根據條件判斷的復雜度,會消耗一定量的Gas。

  3. 分支執行

    • x > 10,執行 y = x * 2,算術運算消耗Gas。
    • x <= 10,執行 y = x + 10,算術運算消耗Gas。
  4. 返回結果:返回結果的過程會消耗Gas。

通過控制流圖,可以直觀地分析不同路徑上的Gas消耗情況,并優化智能合約代碼以減少Gas使用。例如,在上述示例中,可以通過合并相似的計算路徑來減少條件判斷的復雜度。

Gas 計費優化

  1. 減少存儲操作:存儲操作(如寫入合約存儲)是最昂貴的操作之一,盡量減少寫操作可以顯著降低Gas消耗。
  2. 優化計算:避免不必要的復雜計算,使用低Gas消耗的操作替代高Gas消耗的操作。
  3. 減少條件判斷:減少條件分支的復雜度和數量,優化控制流路徑。
  4. 合約重用:通過模塊化設計,重用常見操作,減少重復代碼帶來的額外Gas消耗。

總結

Gas計費是區塊鏈智能合約執行中的重要機制,通過控制流圖分析,可以幫助理解和優化智能合約的Gas消耗。結合具體操作和優化策略,可以有效地降低智能合約的執行成本,提高運行效率。

6 合約執行事務流程

alt

從用戶發起交易請求到交易完成被區塊鏈網絡記錄:

  1. 用戶發起交易請求

    • 用戶通過錢包或DApp(去中心化應用)向區塊鏈網絡提交一筆交易請求。
    • 交易請求中包含調用的智能合約地址、函數名、參數、Gas上限和Gas價格等信息。
  2. 交易廣播

    • 用戶的交易請求通過節點被廣播到整個區塊鏈網絡。
    • 所有全節點都會接收到這筆交易請求。
  3. 交易驗證

    • 節點對交易請求進行驗證,包括簽名驗證、Nonce驗證(防止重放攻擊)和檢查用戶賬戶是否有足夠的余額支付Gas費用。
    • 驗證通過的交易被放入交易池中等待打包。
  4. 礦工打包交易

    • 礦工節點從交易池中選取若干交易進行打包。
    • 選取策略通常優先選擇Gas價格較高的交易,以獲得更多的手續費收入。
  5. 交易執行

    • 礦工節點在虛擬機(如以太坊的EVM)中執行交易。
    • 虛擬機按順序執行交易中的每一條指令,并逐步扣除Gas。
    • 若交易中的Gas不足,交易會被中止并回滾,但已經消耗的Gas不會退還。
  6. 智能合約調用

    • 在交易執行過程中,合約函數被調用,執行相應的邏輯。
    • 合約調用過程中可能會涉及狀態修改、事件觸發、調用其他合約等操作。
    • 執行結束后,結果(包括狀態變更、返回值等)被記錄下來。
  7. 交易結果打包

    • 礦工將交易執行結果和狀態變更打包成一個新的區塊。
    • 新區塊包含區塊頭(包含區塊號、時間戳、前一區塊哈希等信息)和交易列表。
  8. 區塊廣播

    • 新區塊通過P2P網絡廣播給其他節點。
    • 其他節點收到新塊后,對區塊和其中的交易進行驗證。
  9. 共識算法

    • 區塊鏈網絡使用共識算法(如PoW、PoS等)對新塊進行共識驗證。
    • 驗證通過后,區塊被添加到區塊鏈上,交易被正式確認。
  10. 客戶端確認

    • 客戶端通過監聽交易或區塊事件,確認交易已上鏈。
    • 用戶可以查詢交易狀態,查看交易是否成功、Gas消耗情況等。

流程關鍵點

  • Gas機制:交易執行過程中每一步操作都會消耗一定量的Gas,防止資源濫用。
  • 交易驗證:確保交易的合法性,包括簽名驗證和賬戶余額檢查。
  • 共識機制:通過共識算法保證區塊鏈的去中心化和安全性。
  • 狀態變更:合約調用過程中會涉及狀態變更,必須確保狀態變更的一致性和不可篡改性。

7 合約并發執行原理

alt

通過允許多個智能合約交易并行處理,可以顯著提高系統的吞吐量和響應速度。

  1. 交易分類

    • 首先,將待處理的交易按照涉及的賬戶或智能合約進行分類。不同賬戶或合約的交易可以并發執行,而相同賬戶或合約的交易則需要按順序執行以避免沖突。
  2. 依賴關系檢測

    • 通過依賴關系檢測算法,確定交易之間的依賴關系。依賴關系指的是交易之間存在數據讀寫沖突的情況。
    • 例如,交易A需要讀取交易B寫入的數據,則A依賴于B,需要等待B執行完畢才能執行A。
  3. 構建依賴圖

    • 根據依賴關系構建一個依賴圖(DAG,Directed Acyclic Graph),其中每個節點代表一個交易,邊表示依賴關系。
    • DAG圖確保了并發執行的正確性,即交易的執行順序符合依賴關系。
  4. 并發執行引擎

    • 使用并發執行引擎對交易進行調度和執行。引擎根據DAG圖中的依賴關系,選擇可以并行執行的交易集。
    • 同時滿足無依賴關系的交易可以并行執行,依賴關系中的交易按順序執行。
  5. 狀態隔離

    • 每個交易在執行過程中操作的狀態(如賬戶余額、合約存儲等)在隔離的環境中進行,以確保并行執行時不會互相影響。
    • 使用沙盒技術或事務管理機制實現狀態隔離,保證數據的一致性和隔離性。
  6. 結果合并

    • 所有交易執行完畢后,將各個交易的執行結果(狀態變更、事件觸發等)合并到全局狀態中。
    • 確保最終的全局狀態一致性,即所有交易的結果都正確應用到區塊鏈上。
  7. 共識與確認

    • 并發執行完成后,交易結果進入共識階段,由區塊鏈網絡通過共識算法進行驗證和確認。
    • 確認通過的交易結果被持久化到區塊鏈中,完成整個并發執行流程。

流程關鍵點

  • 并發調度:通過依賴圖調度交易執行,確保無依賴關系的交易可以并發執行。
  • 狀態隔離:使用沙盒或事務管理技術,確保并行執行時的狀態隔離和數據一致性。
  • 依賴檢測:檢測交易之間的讀寫依賴關系,構建依賴圖以指導并發執行。

并發執行的優勢

  • 提高吞吐量:并發執行可以顯著提高區塊鏈網絡的交易處理能力,增加每秒交易處理數量(TPS)。
  • 縮短確認時間:并發執行減少了交易等待時間,縮短了交易確認所需的時間,提高了用戶體驗。
  • 優化資源利用:并發執行可以更高效地利用節點的計算資源,提高區塊鏈系統的整體性能。

挑戰與解決方案

  • 數據沖突:需要有效的依賴關系檢測和沖突解決機制,避免并發執行時的數據沖突。
  • 隔離與一致性:確保并發執行環境中的狀態隔離和最終的一致性,保證數據的準確性和可靠性。
  • 復雜性管理:并發執行引擎的設計和實現較為復雜,需要處理多種并發場景和異常情況。

通過上述原理和流程,可以有效地實現智能合約的并發執行,提高區塊鏈系統的性能和可擴展性。

獲取更多干貨內容,記得關注我哦。

本文由 mdnice 多平臺發布

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/62157.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/62157.shtml
英文地址,請注明出處:http://en.pswp.cn/web/62157.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

智慧油客:從初識、再識OceanBase,到全棧上線

今天&#xff0c;我們邀請了智慧油客的研發總監黃普友&#xff0c;為我們講述智慧油客與 OceanBase 初識、熟悉和結緣的故事。 智慧油客自2016年誕生以來&#xff0c;秉持新零售的思維&#xff0c;成功從過去二十年間以“以銷售產品為中心”的傳統思維模式&#xff0c;轉向“以…

【深度學習】手機SIM卡托缺陷檢測【附鏈接】

一、手機SIM卡托用途 SIM卡托是用于固定和保護SIM卡的部件&#xff0c;通過連接SIM卡與手機主板的方式&#xff0c;允許設備訪問移動網絡&#xff0c;用戶可以通過SIM卡進行通話、發送短信和使用數據服務。 二、手機SIM卡托不良影響 SIM卡接觸不良&#xff0c;造成信號中斷&…

高新技術企業復審需要哪些材料?

高新技術企業復審需要準備以下材料&#xff1a; 《高新技術企業認定復審申請書》&#xff1b;高新技術企業證書&#xff1b;企業營業執照副本、稅務登記證書&#xff08;復印件&#xff09;&#xff1b;企業職工人數、學歷結構以及研發人員占企業職工的比例證明&#xff1b;五…

消防物證管理系統|DW-S404實現消防物證智能化管理

一、系統概述 智慧消防物證管理系統DW-S404系統旨在借助現代信息技術&#xff0c;達成消防物證管理的高效化、安全化及智能化管理目標。該系統運用物聯網、大數據、云計算等先進技術&#xff0c;實現對消防物證從產生到銷毀的全生命周期跟蹤與監控&#xff0c;從而增強物證管理…

Odoo :一款免費且開源的食品生鮮領域ERP管理系統

文 / 貝思納斯 Odoo金牌合作伙伴 引言 提供業財人資稅的精益化管理&#xff0c;實現研產供銷的融通、食品安全的追蹤與溯源&#xff0c;達成渠道的扁平化以及直面消費者的 D2C 等數字化解決方案&#xff0c;以此提升運營效率與核心競爭力&#xff0c;支撐高質量的變速擴張。…

如何部署vue項目到Github Pages

1.創建vue項目 npm create vitelatest my-vue-app -- --template vue 2.創建github倉庫 3.連接倉庫 在項目根目錄右鍵選擇open git base here&#xff0c;如果沒有安裝git請先安裝git。 初始化倉庫 $ git init $ git add . $ git commit -m "init"將項目與倉庫連…

Dubbo應用篇

文章目錄 一、Dubbo簡介二、SSM項目整合Dubbo1.生產者方配置2.消費者方配置 三、Spring Boot 項目整合Dubbo1.生產者方配置2.消費者方配置 四、應用案例五、Dubbo配置的優先級別1. 方法級配置&#xff08;Highest Priority&#xff09;2. 接口級配置3. 消費者/提供者級配置4. 全…

ubuntu的matlab使用心得

1.讀取視頻 v VideoReader(2222.mp4);出問題&#xff0c;報錯&#xff1a; matlab 錯誤使用 VideoReader/initReader (第 734 行) 由于出現意外錯誤而無法讀取文件。原因: Unable to initialize the video properties 出錯 audiovideo.internal.IVideoReader (第 136 行) init…

消息中間件-Kafka1-實現原理

消息中間件-Kafka 一、kafka簡介 1、概念 Kafka是最初由Linkedin公司開發&#xff0c;是一個分布式、支持分區&#xff08;partition&#xff09;、多副本的&#xff08;replica&#xff09;&#xff0c;基于zookeeper協調的分布式消息系統&#xff0c;它的最大的特性就是可以…

如何利用“一鍵生成ppt”減輕工作壓力

隨著數字化的快速發展&#xff0c;PPT設計這一傳統任務也迎來了新的變化。過去&#xff0c;制作一個簡潔、專業的PPT需要花費大量時間與精力。但現在借助科技的力量&#xff0c;一鍵生成PPT的夢想成真了。從智能生成ppt到ai生成ppt的技術不斷進步&#xff0c;令我們能夠體驗到更…

創造未來:The Sandbox 創作者訓練營如何賦能全球創造者

創作者訓練營讓創造者有能力打造下一代數字體驗。通過促進合作和提供尖端工具&#xff0c;The Sandbox 計劃確保今天的元宇宙是由一個個創造者共同打造。 2024 年 5 月&#xff0c;The Sandbox 推出了「創作者訓練營」系列&#xff0c;旨在重新定義數字創作。「創作者訓練營」系…

Docker多架構鏡像構建踩坑記

背景 公司為了做信創項目的亮點&#xff0c;需要將現有的一套在X86上運行的應用系統遷移到ARM服務器上運行&#xff0c;整個項目通過后端Java&#xff0c;前端VUEJS開發通過CICD做成Docker鏡像在K8S里面運行。但是當前的CICD產品不支持ARM的鏡像構建&#xff0c;于是只能手工構…

python學opencv|讀取圖像(三)放大和縮小圖像

【1】引言 前序已經學習了常規的圖像讀取操作和圖像保存技巧&#xff0c;相關文章鏈接為&#xff1a; python學opencv|讀取圖像-CSDN博客 python學opencv|讀取圖像&#xff08;二&#xff09;保存彩色圖像-CSDN博客 今天我們更近一步&#xff0c;學習放大和縮小圖像的技巧&…

D86【python 接口自動化學習】- pytest基礎用法

day86 pytest配置testpaths 學習日期&#xff1a;20241202 學習目標&#xff1a;pytest基礎用法 -- pytest配置testpaths 學習筆記&#xff1a; pytest配置項 主目錄創建pytest.ini文件 [pytest] testpaths./testRule 然后Terminal里直接命令&#xff1a;pytest&#xff…

基于 Apache Dolphinscheduler3.1.9中的Task 處理流程解析

實現一個調度任務&#xff0c;可能很簡單。但是如何讓工作流下的任務跑得更好、更快、更穩定、更具有擴展性&#xff0c;同時可視化&#xff0c;是值得我們去思考得問題。 Apache DolphinScheduler是一個分布式和可擴展的開源工作流協調平臺&#xff0c;具有強大的DAG可視化界…

藍橋杯2117砍竹子(簡單易懂 包看包會版)

問題描述 這天, 小明在砍竹子, 他面前有 n 棵竹子排成一排, 一開始第 i 棵竹子的 高度為 hi?. 他覺得一棵一棵砍太慢了, 決定使用魔法來砍竹子。魔法可以對連續的一 段相同高度的竹子使用, 假設這一段竹子的高度為 H, 那么 用一次魔法可以 把這一段竹子的高度都變為 ?H2?…

如何進行 JavaScript 性能優化?

要進行 JavaScript 性能優化&#xff0c;我們可以從多個角度進行思考&#xff0c;主要包括減少頁面渲染時間、減少內存占用、優化代碼執行效率等。以下是優化的一些方法&#xff0c;并結合實際項目代碼示例講解。 目錄結構 減少 DOM 操作 緩存 DOM 元素批量更新 DOM 優化 Jav…

CTF-PWN: 全保護下格式化字符串利用 [第一屆“吾杯”網絡安全技能大賽 如果能重來] 賽后學習(不會)

通過網盤分享的文件&#xff1a;如果能重來.zip 鏈接: https://pan.baidu.com/s/1XKIJx32nWVcSpKiWFQGpYA?pwd1111 提取碼: 1111 --來自百度網盤超級會員v2的分享漏洞分析 格式化字符串漏洞,在printf(format); __int64 sub_13D7() {char format[56]; // [rsp10h] [rbp-40h]…

selenium-常見問題解決方案匯總

selenium-常見問題解決方案 selenium版本selenium代理本地瀏覽器頁面Selenium之多窗口句柄的切換 selenium版本 selenium版本為: 3.141.0 注&#xff1a;selenium4x跟selenium3x會有不同的使用方法&#xff0c; selenium代理本地瀏覽器頁面 利用 Selenium 庫實現對 Google C…

Flask使用長連接

Flask使用flask_socketio實現websocket Python中的單例模式 在HTTP通信中&#xff0c;連接復用&#xff08;Connection Reuse&#xff09;是一個重要的概念&#xff0c;它允許客戶端和服務器在同一個TCP連接上發送和接收多個HTTP請求/響應&#xff0c;而不是為每個新的請求/響…