在發(fā)送比特幣交易時(shí),其費(fèi)用與其大小成比例。輸入和輸出越多,它就越貴。再加上未決交易的因素,交易費(fèi)用可能僅基于這兩個(gè)因素就會(huì)飆升。
創(chuàng)新互聯(lián)公司成立于2013年,我們提供高端網(wǎng)站建設(shè)、成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、網(wǎng)站定制、成都營銷網(wǎng)站建設(shè)、小程序設(shè)計(jì)、微信公眾號開發(fā)、成都網(wǎng)站營銷服務(wù),提供專業(yè)營銷思路、內(nèi)容策劃、視覺設(shè)計(jì)、程序開發(fā)來完成項(xiàng)目落地,為成都OPP膠袋企業(yè)提供源源不斷的流量和訂單咨詢。
對于以太坊,鑒于我們正在談?wù)搮f(xié)議中的編程語言,對于非常少的文本或代碼(在BTC中可能非常便宜的東西),可能對計(jì)算要求非常高。 讓我們來看看這個(gè)循環(huán),例如:
while (i++ < 1000) { j = j + i; }
這個(gè)循環(huán)意味著只要i小于1000,將其增加1然后將i和j相加并將結(jié)果寫入j ,然后再次執(zhí)行。如果i
為0,則此循環(huán)將執(zhí)行1000次,或者更多,如果它是負(fù)數(shù)。
為了以公平的方式支付這種計(jì)算成本,因?yàn)樗仨毩⒓丛谒械V工的機(jī)器上執(zhí)行,并且他們將資源和時(shí)間花在它上面,這里引入了gas的概念。gas用于支付EVM內(nèi)部所謂的智能合約(以太坊計(jì)劃)的執(zhí)行費(fèi)用。例如,上面的i+j
是一個(gè)求和運(yùn)算,每次執(zhí)行時(shí)需要3個(gè)gas,因此如果執(zhí)行1000次則需要3000個(gè)gas,因此如果執(zhí)行1000次則需要3000個(gè)gas。
為了正確解釋gas ,我們首先介紹EVM 。
EVM代表以太坊虛擬機(jī) 。但是什么是虛擬機(jī)呢?
虛擬機(jī)是在特定計(jì)算機(jī)上運(yùn)行的軟件,其包含完全封裝在主計(jì)算機(jī)內(nèi)的另一操作系統(tǒng)。例如,虛擬機(jī)允許您在Linux內(nèi)部運(yùn)行Windows,在Windows內(nèi)部運(yùn)行Windows,在macOS上運(yùn)行Windows,如下圖所示,或任何其他組合。
我們使用虛擬機(jī)將我們?nèi)粘J褂糜?jì)算機(jī)的環(huán)境與我們工作或編程的環(huán)境分開。這樣我們就可以防范病毒(它們無法破壞虛擬機(jī)并進(jìn)入主操作系統(tǒng)),有助于防止無限循環(huán)崩潰我們的主操作系統(tǒng),并保持硬盤驅(qū)動(dòng)器損壞,如臭名昭著的WannaCry勒索軟件。此外,VM允許我們在Linux上使用Windows游戲,或者允許我們輕松地在相同編程語言環(huán)境的不同版本中編程,而不會(huì)混淆它們。
以太坊虛擬機(jī)內(nèi)置于以太坊協(xié)議上運(yùn)行的軟件中。它執(zhí)行智能合約——以Solidity語言編寫的以太坊程序。EVM包含在以太坊網(wǎng)絡(luò)的完整節(jié)點(diǎn)中,在其中執(zhí)行這些以太坊用戶編寫的程序。
以太坊的任何礦工同時(shí)執(zhí)行智能合約代碼。這意味著以太坊程序(dapps - 去中心化應(yīng)用程序)同時(shí)在每個(gè)人的計(jì)算機(jī)上執(zhí)行(去中心化的)。
但是,這些程序的執(zhí)行并不是免費(fèi)的。礦工們用自己的電力,時(shí)間和硬件來做這件事。為了支付他們執(zhí)行計(jì)算機(jī)指令的努力(例如“將值5存儲(chǔ)到變量X中”),引入了gas的概念。
gas是計(jì)算機(jī)需要執(zhí)行的特定操作的成本單位,并且當(dāng)我們廣播包含以太坊程序以運(yùn)行dapp的交易時(shí),它執(zhí)行該指令。例如,總計(jì)兩個(gè)數(shù)字需要3個(gè)gas。乘以它們需要5個(gè)gas。將256位字存儲(chǔ)到區(qū)塊鏈中需要20000個(gè)gas,這意味著存儲(chǔ)1kb的數(shù)據(jù)需要640000個(gè)gas。
就像美元有美分一樣,以太也有自己的基本單位:wei。 如果我們將wei作為以太的基本單位,我們得到下面的定義表:
這就是在以太網(wǎng)單元之間的單位轉(zhuǎn)換。
根據(jù)這個(gè)信息網(wǎng)站,目前的天然氣平均價(jià)格是10GWei(10千兆wei)??吹?GWei是以太網(wǎng)的十億分之一,上述存儲(chǔ)1kb字的成本是640000*10,即640萬GWei。這相當(dāng)于0.0064eth,每個(gè)以450美元的價(jià)格,約為2.88美元。
從上表開始到文章的這個(gè)位置的文本大約是1kb。因此,將這一小段文本存儲(chǔ)到區(qū)塊鏈中實(shí)際上需要2.88美元。但是,這只是存儲(chǔ)成本!我們的智能合約也可能有一些邏輯,如求和或乘以然后存儲(chǔ)數(shù)字,或在特定的挖掘塊上激活的觸發(fā)器等。顯然,將數(shù)據(jù)存儲(chǔ)到區(qū)塊鏈本身是非常昂貴的。BigchainDB或IPFS中的存儲(chǔ)效果更好,而區(qū)塊鏈?zhǔn)侨痔幚砗万?yàn)證數(shù)據(jù)的更好解決方案。
為什么直接支付gas而不是ether的成本?
EVM可以執(zhí)行的所有可能操作的所有g(shù)as價(jià)格都在以太坊協(xié)議和我們連接到它的客戶端(程序)中進(jìn)行硬編碼,如Geth,Eth,Parity等。如果代碼在以太網(wǎng)中列出,那么每當(dāng)以太的價(jià)值波動(dòng)時(shí)我們就必須更新代碼,以便將計(jì)算工作的價(jià)格保持在正常范圍內(nèi)并保持系統(tǒng)可用,這顯然是不可持續(xù)的。
通過在成本之上添加這個(gè)gas層,并用GWei支付gas費(fèi)用,我們可以選擇改變交易中使用的gas量以及支付的金額。它完全在我們的控制之下,不會(huì)使系統(tǒng)失去平衡。
這引導(dǎo)我們進(jìn)入上一節(jié)。
gas限制是我們愿意花在交易上的最大gas量。我們用于廣播以太坊交易的大多數(shù)軟件都能夠自動(dòng)估算執(zhí)行功能所需的gas量。它通常會(huì)立即建議一個(gè)值。例如,簡單的貨幣A-> B交易通常只需要21000個(gè)gas。更復(fù)雜的那些稱為特定智能合約功能的可能會(huì)遇到數(shù)十萬甚至數(shù)百萬的gas。消耗的gas量稱為gas成本。
作為用戶,我們可以修改我們想要在交易上花費(fèi)的gas數(shù)量并減少它,但如果交易在執(zhí)行期間耗盡了gas,我們就會(huì)丟失我們發(fā)送的gas。它已被花費(fèi)并且交易被拒絕。另一方面,如果我們提供的gas量超過需要的數(shù)量,剩余部分將退還給我們。因此,發(fā)送比執(zhí)行交易所需的更多gas總是更好。
gas成本是每單位gas的GWei價(jià)格。
因此,以太坊交易的總成本實(shí)際上是必需gas的數(shù)量乘以GWei每gas單位的價(jià)格。這是我們支付的最高交易費(fèi)用; 任何額外的gas都會(huì)退還,因此費(fèi)用往往被高估。
我們來看一個(gè)例子。
在上圖中,我們正在執(zhí)行一項(xiàng)交易,由于其復(fù)雜性,估計(jì)它將需要135963gas。以25GWei的價(jià)格,我們支付的最高交易費(fèi)是1.57美元,這在查看我們發(fā)送的總金額時(shí)是微不足道的(0.38eth = 178美元)。如果我們將天然氣的價(jià)格提高到250GWei,那么交易成比例地變得更加昂貴:
較高的費(fèi)用可以有效地鼓勵(lì)礦工在隊(duì)列中的其他人之前處理我們的交易,從而加快執(zhí)行速度。如果我們不急,我們可以將gas價(jià)格保持在起始值,交易確認(rèn)不應(yīng)超過10分鐘。但如果我們匆忙并希望在幾秒鐘內(nèi)完成(例如,如果我們正在處理拍賣),那么很容易提高gas價(jià)格并犧牲一些錢來保證成功。
gas是以太坊虛擬機(jī)中每次計(jì)算操作所花費(fèi)的工作單位。這是以太幣,以太坊協(xié)議的代幣,并且每個(gè)計(jì)算操作都有不同的gas成本。gas價(jià)格(GWei或以太網(wǎng)的十億分之一)根據(jù)網(wǎng)絡(luò)擁塞和用戶對快速確認(rèn)的偏好而變化。
對于我們想要在以太坊網(wǎng)絡(luò)上部署的智能合約,兩個(gè)術(shù)語很重要:gas限制和gas價(jià)格。gas限制是我們愿意花在執(zhí)行交易上的最大gas量。實(shí)際需要的gas量(僅在交易執(zhí)行后才知道)稱為gas成本。gas價(jià)格是每單位gas的價(jià)格,以GWei(或以太網(wǎng)的十億分之一)表示。交易總成本將是gas成本和gas價(jià)格的乘積,而最高交易費(fèi)用將是gas限價(jià)減去gas價(jià)格的乘積。差額退還給交易的發(fā)件人以保持系統(tǒng)公平和可用。
======================================================================
分享一些比特幣、以太坊、EOS、Fabric等區(qū)塊鏈相關(guān)的交互式在線編程實(shí)戰(zhàn)教程:
- java比特幣開發(fā)教程,本課程面向初學(xué)者,內(nèi)容即涵蓋比特幣的核心概念,例如區(qū)塊鏈存儲(chǔ)、去中心化共識機(jī)制、密鑰與腳本、交易與UTXO等,同時(shí)也詳細(xì)講解如何在Java代碼中集成比特幣支持功能,例如創(chuàng)建地址、管理錢包、構(gòu)造裸交易等,是Java工程師不可多得的比特幣開發(fā)學(xué)習(xí)課程。
- php比特幣開發(fā)教程,本課程面向初學(xué)者,內(nèi)容即涵蓋比特幣的核心概念,例如區(qū)塊鏈存儲(chǔ)、去中心化共識機(jī)制、密鑰與腳本、交易與UTXO等,同時(shí)也詳細(xì)講解如何在Php代碼中集成比特幣支持功能,例如創(chuàng)建地址、管理錢包、構(gòu)造裸交易等,是Php工程師不可多得的比特幣開發(fā)學(xué)習(xí)課程。
- c#比特幣開發(fā)教程,本課程面向初學(xué)者,內(nèi)容即涵蓋比特幣的核心概念,例如區(qū)塊鏈存儲(chǔ)、去中心化共識機(jī)制、密鑰與腳本、交易與UTXO等,同時(shí)也詳細(xì)講解如何在C#代碼中集成比特幣支持功能,例如創(chuàng)建地址、管理錢包、構(gòu)造裸交易等,是C#工程師不可多得的比特幣開發(fā)學(xué)習(xí)課程。
- java以太坊開發(fā)教程,主要是針對java和android程序員進(jìn)行區(qū)塊鏈以太坊開發(fā)的web3j詳解。
- python以太坊,主要是針對python工程師使用web3.py進(jìn)行區(qū)塊鏈以太坊開發(fā)的詳解。
- php以太坊,主要是介紹使用php進(jìn)行智能合約開發(fā)交互,進(jìn)行賬號創(chuàng)建、交易、轉(zhuǎn)賬、代幣開發(fā)以及過濾器和交易等內(nèi)容。
- 以太坊入門教程,主要介紹智能合約與dapp應(yīng)用開發(fā),適合入門。
- 以太坊開發(fā)進(jìn)階教程,主要是介紹使用node.js、MongoDB、區(qū)塊鏈、ipfs實(shí)現(xiàn)去中心化電商DApp實(shí)戰(zhàn),適合進(jìn)階。
- ERC721以太坊通證實(shí)戰(zhàn),課程以一個(gè)數(shù)字藝術(shù)品創(chuàng)作與分享DApp的實(shí)戰(zhàn)開發(fā)為主線,深入講解以太坊非同質(zhì)化通證的概念、標(biāo)準(zhǔn)與開發(fā)方案。內(nèi)容包含ERC-721標(biāo)準(zhǔn)的自主實(shí)現(xiàn),講解OpenZeppelin合約代碼庫二次開發(fā),實(shí)戰(zhàn)項(xiàng)目采用Truffle,IPFS,實(shí)現(xiàn)了通證以及去中心化的通證交易所。
- C#以太坊,主要講解如何使用C#開發(fā)基于.Net的以太坊應(yīng)用,包括賬戶管理、狀態(tài)與交易、智能合約開發(fā)與交互、過濾器和交易等。
- EOS入門教程,本課程幫助你快速入門EOS區(qū)塊鏈去中心化應(yīng)用的開發(fā),內(nèi)容涵蓋EOS工具鏈、賬戶與錢包、發(fā)行代幣、智能合約開發(fā)與部署、使用代碼與智能合約交互等核心知識點(diǎn),最后綜合運(yùn)用各知識點(diǎn)完成一個(gè)便簽DApp的開發(fā)。
- 深入淺出玩轉(zhuǎn)EOS錢包開發(fā),本課程以手機(jī)EOS錢包的完整開發(fā)過程為主線,深入學(xué)習(xí)EOS區(qū)塊鏈應(yīng)用開發(fā),課程內(nèi)容即涵蓋賬戶、計(jì)算資源、智能合約、動(dòng)作與交易等EOS區(qū)塊鏈的核心概念,同時(shí)也講解如何使用eosjs和eosjs-ecc開發(fā)包訪問EOS區(qū)塊鏈,以及如何在React前端應(yīng)用中集成對EOS區(qū)塊鏈的支持。課程內(nèi)容深入淺出,非常適合前端工程師深入學(xué)習(xí)EOS區(qū)塊鏈應(yīng)用開發(fā)。
- Hyperledger Fabric 區(qū)塊鏈開發(fā)詳解,本課程面向初學(xué)者,內(nèi)容即包含Hyperledger Fabric的×××?xí)cMSP服務(wù)、權(quán)限策略、信道配置與啟動(dòng)、鏈碼通信接口等核心概念,也包含F(xiàn)abric網(wǎng)絡(luò)設(shè)計(jì)、nodejs鏈碼與應(yīng)用開發(fā)的操作實(shí)踐,是Nodejs工程師學(xué)習(xí)Fabric區(qū)塊鏈開發(fā)的最佳選擇。
- Hyperledger Fabric java 區(qū)塊鏈開發(fā)詳解,課程面向初學(xué)者,內(nèi)容即包含Hyperledger Fabric的×××?xí)cMSP服務(wù)、權(quán)限策略、信道配置與啟動(dòng)、鏈碼通信接口等核心概念,也包含F(xiàn)abric網(wǎng)絡(luò)設(shè)計(jì)、java鏈碼與應(yīng)用開發(fā)的操作實(shí)踐,是java工程師學(xué)習(xí)Fabric區(qū)塊鏈開發(fā)的最佳選擇。
- tendermint區(qū)塊鏈開發(fā)詳解,本課程適合希望使用tendermint進(jìn)行區(qū)塊鏈開發(fā)的工程師,課程內(nèi)容即包括tendermint應(yīng)用開發(fā)模型中的核心概念,例如ABCI接口、默克爾樹、多版本狀態(tài)庫等,也包括代幣發(fā)行等豐富的實(shí)操代碼,是go語言工程師快速入門區(qū)塊鏈開發(fā)的最佳選擇。
匯智網(wǎng)原創(chuàng)翻譯,轉(zhuǎn)載請標(biāo)明出處。這里是以太坊如何計(jì)算交易成本