對於以太坊中gas的理解
交易的過程一般需要支付一定量的手續費(當然也可以選擇不支付)。礦工會優先打包交易手續費高的交易,如果沒有支付交易手續費,你的交易可能要等很久才會被打包。創建一筆交易的時候不需要顯式的指明支付多少交易手續費,它是根據你的 UTXO額 - 交易額 - 找零 來計算的。舉個栗子,A有一個10btc的UTXO(未花費的交易輸出)的支配權,它給B賬戶轉1BTC,那麼在創建交易的時候,需要指明交易額1btc,和找零8.995,那麼(10-8.995-1 = 0.005)就是這筆交易的手續費,會獎勵給打包包含這筆交易的區塊的礦工,如果沒有設置找零那麼多餘的9btc都會被當作交易手續費獎勵給礦工,雖然你的交易會很快的被打包,但是這可能不是你想要的…另外,比特幣沒有智能合約的功能
n以太坊中 cost = gasPrice * gasUsedngasUsed是由交易(或者是執行合約代碼)的計算量來決定的,戳這裡可以查看每一種操作所需要消耗的gas量,或者看下面這個簡表
n
step 1 Default amount of gas to pay for an execution cycle.nstop 0 Nothing paid for the SUICIDE operation.nsha3 20 Paid for a SHA3 operation.nsload 20 Paid for a SLOAD operation.nsstore 100 Paid for a normal SSTORE operation (doubled or waived sometimes).nbalance 20 Paid for a BALANCE operationncreate 100 Paid for a CREATE operationncall 20 Paid for a CALL operation.nmemory 1 Paid for every additional word when expanding memoryntxdata 5 Paid for every byte of data or code for a transactionntransaction 500 Paid for every transactionn
- 這樣可以鼓勵更加高效的合約代碼,減少不必要的計算,避免系統遭受攻擊,畢竟攻擊者要為他們消耗的資源付出一定的代價,包括帶寬,CPU,和存儲.gasPrice 是由交易的發起者來設置的,但是礦工可以選擇先打包那些gas價格高的交易,gas價格低的可能要等很久或者不會被打包
- 例如一筆交易:{ from:web3.eth.accounts[0], data:tokenCompiled.token.code, gas: 1000000 }, gas參數設置這個交易最多能使用多少gas。交易裡面還可以再加一個參數gasPrice,gasPrice可以自己設置,具體設置戳這裡,geth會默認設置一個大多數礦工可以接受的 gasPrice, 0.05e12 wei(當然這個值不是一直不變的,價格的演化可以戳這裡),可以調eth.gasPrice來查看當前的gasPrice
- 礦工在啟動geth的時候可以設置兩個參數--ask 和 --bid , --ask是設置一個最低的gas價格,低於這個價格的交易會被忽略,默認值是500000000000,--bid 設置gas價格競價,默認值是 500000000000
n
n
n
所以gasPrice還是受整個市場的供求關係,即礦工和交易(合約也是一種交易)發起者的博弈 來調控的
ngas和Ether有什麼關係ngas和Ether 是以太坊中兩種不同的計量單位,把它分開的目的是為了避免以太幣的價格波動進而影響gas價格的變化
推薦閱讀:
※從零開始搭建顯卡礦機
※好吧,掏心窩給你們講講炒幣邏輯
※入坑比特幣投資第一步——場外交易
※3月第二周產品進度
TAG:以太坊 |