交易

交易是由帳戶發出,帶密碼學簽名的指令。帳戶將發起交易以更新以太坊網絡的狀態。最簡單的交易是將 PSC 從一個賬戶轉到另一個帳戶。

什麼是交易?

PolySmartChain交易是指由外部持有賬戶發起的行動,換句話說,是指由人管理而不是智能合約管理的賬戶。例如,如果 Bob 發送 Alice 1 PSC,則 Bob 的帳戶必須減少 1 PSC,而 Alice 的賬戶必須增加 1 PSC。此項操作發生在交易中,會變更狀態。

改變 EVM 狀態的交易需要廣播到整個網絡。任何節點都可以在 EVM 上廣播交易請求;此後,礦工將執行交易並將由此產生的狀態變化傳播到網絡的其他部分。

交易需要收費並且必須開採才能有效。為了使這種概述更加簡單,我們將其稱為 Gas 費和挖礦。

所提交的交易包括下列信息:

  • recipient – 接收地址(如果為一個外部持有的帳戶,交易將傳輸值。 如果為合約帳戶,交易將執行合約代碼)

  • signature – 發送者的標識符。當通過發送者的私鑰簽名交易來確保發送者已授權此交易時,生成此簽名。

  • value – 從發件人向收件人轉移 ETH 的金額 (以 WEI 為單位,ETH 的一種面值單位)

  • data – 可包括任意數據的可選字段

  • gasLimit – 交易可以消耗的 Gas 的最大數量。 Gas 單位代表了計算步驟

  • maxPriorityFeePerGas - 作為礦工小費包含的最大 gas 數量

  • maxFeePerGas - 願意為交易支付的最大 gas 數量(包括 baseFeePerGas 和 maxPriorityFeePerGas)

Gas 是指礦工處理交易所需的算力。用戶必須為此計算支付費用。 gasLimit 和 gasPrice 決定支付給礦工的最高交易費用。

交易對像看起來像這樣:

//{ 
    from: "0xEA674fdDe714fd979de3EdF0F56AA9716B898ec8", 
    to: "0xac03bb73b6a9e108530aff4df5077c2b3d481e5a", 
    gasLimit: "21000", 
    maxFeePerGas: "300" 
    maxPriorityFeePerGas: "10" 
    nonce: "0", 
    value: "10000000000",
}

但交易對象需要使用發送者的私鑰簽名。這證明交易只可能來自發送者,而不是欺詐。

GPSC 這樣的PolySmartChain客戶端將處理此簽名過程。

示例 JSON-RPC 調用:

{
  "id": 2,
  "jsonrpc": "2.0",
  "method": "account_signTransaction",
  "params": [
    {
      "from": "0x1923f626bb8dc025849e00f99c25fe2b2f7fb0db",
      "gas": "0x55555",
      "maxFeePerGas": "0x1234",
      "maxPriorityFeePerGas": "0x1234",
      "input": "0xabcd",
      "nonce": "0x0",
      "to": "0x07a565b7ed7d7a678680a4c162885bedbb695fe0",
      "value": "0x1234"
    }
  ]
}

示例響應:

//{
  "jsonrpc": "2.0",
  "id": 2,
  "result": {
    "raw": "0xf88380018203339407a565b7ed7d7a678680a4c162885bedbb695fe080a44401a6e4000000000000000000000000000000000000000000000000000000000000001226a0223a7c9bcf5531c99be5ea7082183816eb20cfe0bbc322e97cc5c7f71ab8b20ea02aadee6b34b45bb15bc42d9c09de4a6754e7000908da72d48cc7704971491663",
    "tx": {
      "nonce": "0x0",
      "maxFeePerGas": "0x1234",
      "maxPriorityFeePerGas": "0x1234",
      "gas": "0x55555",
      "to": "0x07a565b7ed7d7a678680a4c162885bedbb695fe0",
      "value": "0x1234",
      "input": "0xabcd",
      "v": "0x26",
      "r": "0x223a7c9bcf5531c99be5ea7082183816eb20cfe0bbc322e97cc5c7f71ab8b20e",
      "s": "0x2aadee6b34b45bb15bc42d9c09de4a6754e7000908da72d48cc7704971491663",
      "hash": "0xeba2df809e7a612a0a0d444ccfa5c839624bdc00dd29e3340d46df3870f8a30e"
    }
  }
}
  • raw 是已簽名交易的 RLP(Recursive Length Prefix)編碼形式。

  • tx 是已簽名交易的 JSON 形式。

如有簽名哈希,可通過加密技術證明交易來自發送者並提交網絡。

交易類型

PolySmartChain有幾種不同類型的交易:

  • 常規交易:從一個錢包到另一個錢包的交易。

  • 合約部署交易:沒有“to”地址的交易,數據字段用於合約代碼。

關於 Gas

如上所述,執行交易需要花費 Gas。簡單的轉讓交易需要 21000 個 Gas。

假設 Bob 要向 Alice 發送 1 PSC,需支付 190 gwei 的 baseFeePergas 和 10 gwei 的 maxPriorityFeePerGas,那麼 Bob 需要支付以下費用:

    (190 + 10) * 21000 = 4,200,000 gwei
    --or--
    0.0042 PSC

Bob 的賬戶將會減少 1.0042 PSC

Alice 的賬戶將會增加 +1.0 PSC

扣掉 0.00399 PSC 的基本費用 礦工保留小費 +0.000210 PSC

任何智能合約交互也需要 Gas。

交易生命週期

一旦提交交易,就會發生以下情況:

  1. 一旦您發送交易,加密法生成交易哈希:0x97d99bc7729211111a21b12c933c949d4f31684f1d6954ff477d0477538ff017

  2. 然後將該交易轉播到網絡,並且與大量其他交易一起包含在一個集合中。

  3. 礦工必須選擇您的交易並將它包含在一個區塊中,以便驗證交易並認為它“成功”。

    • 如果網絡繁忙,礦工無法跟上,您可能會在這個階段等候。

  4. 您的交易將收到"確認"。確認的數量是自包含您交易的區塊以來創建的區塊數。這個數字越大,交易被網絡處理和承認的確定性就越強。

    • 最近的區塊可能會被重組,給人留下交易失敗的印象;但交易可能仍然有效,但包含在另一個區塊中。

    • 重組的概率隨著其後每一次挖掘的區塊而降低,即確認次數越多,交易就越不可改變。

拓展资源

Last updated