Go-Ethereum

在重負載測試中測量一組事務的部署時間

  • January 31, 2020

我目前正在嘗試對 ERC20 令牌執行重負載測試。我的計劃是使用 truffle 來測試一些東西,比如部署 500 個傳輸交易需要多長時間(在私有區塊鏈上)、每秒最大交易數量,以及理想情況下通過包含來自多個節點的交易來測試可擴展性。下面是我執行 500 個事務的程式碼

const EnergyToken = artifacts.require("EnergyToken");
const assert = require('assert');
const truffleAssert = require('truffle-assertions');
const { performance } = require('perf_hooks');

const numberOfTransactions = 200;
contract("Energy Token Test3 ", async accounts => {


    it("send $numberOfTransactions transactions from account 0 to account 1", async () => {

      let contract = await EnergyToken.at("0x5BbD383bD43aC3896B86207eFe88cf0628ad06F0");


       for (let i = 1; i < 1 + numberOfTransactions; i++) {
          let t0 =performance.now();  

            contract.transfer.sendTransaction(accounts[1],1,{from: accounts[0]});

           let t1 = performance.now();
           console.log("Transaction " + i + " ***** From:" + accounts[0] + " ***** To: " + accounts[1] + "took " + (t1-t0) + " ms" );


       }

   });

問題是,現在我正在測量送出這些事務所需的時間,而不是它們的部署速度。我之前嘗試過使用 await ,contract.transfer但隨後交易被 1 比 1 處理(每個塊 1 tx),這也需要大量時間。我的問題是是否有更好的方法來測量時間?

我的問題是是否有更好的方法來測量時間?

我懷疑存在概念上的脫節。這不是同步操作,時間取決於比這裡考慮的更多因素。此外,如果這樣做,快速交易可能會導致生產麻煩。

網路吞吐量

是的,您正在衡量流程迭代和送出交易的時間。處理交易的網路時間取決於其他因素:

  • gasPrice (未指定,但可以與{gasPrice: bid}
  • 網路擁塞
  • 網路區塊gasLimit(區塊承載能力)

充其量,您可以測量給定時間點的交易確認時間。gasPrice它與您的循環解耦 -在特定時間(網路條件)給定 a 或多或少相同,除非網路變得飽和,可能是因為您的積極送出。此外,您會發現它更適合在曲線上測量。

在此處輸入圖像描述

來源:https ://www.ethgasstation.info/index.php (向下滾動)

擴展建議

這些建議與您的問題相鄰,以使遇到此文章的其他人受益。

  • **解決失去/失敗的情況。**成功並不能保證——例如,天然氣定價錯誤。失去/失敗的交易可能會堵塞整個隊列,因為來自給定帳戶的交易保證以隨機數順序進行探勘。重新送出或取消,這樣生活才能繼續。
  • **考慮速率限制。**您自己的交易可能會成為網路擁塞的根源,這可能會導致未來區塊中的 gasPrices 增加,並可能導致 gas 定價錯誤。請記住,有一個有限的區塊 gasLimit,如果您真的很認真,可以將其填滿,但維持它會非常昂貴。

在這裡查看:帳戶隨機數的並發模式

很有可能從測試網獲得非常誤導性的資訊,其中交易基本上是免費的,網路使用率遠低於主網。

希望能幫助到你。

您可以測量從創建到它出現在區塊鏈上所花費的交易時間。

創建事務後,您將使用數據庫中的雜湊記錄時間。當交易被探勘時,您記錄塊時間戳。

您還可以測量其他時間,例如交易第一次出現在待處理池中。

正如 Rob 所說,有許多參數會影響結果。像塊氣體限制、網路使用、伺服器容量、探勘時間(對於 PoW 是一個隨機過程)。

引用自:https://ethereum.stackexchange.com/questions/79469