瀏覽代碼

core: optimize IntrinsicGas

Felix Lange 10 年之前
父節點
當前提交
0b22ad99c1
共有 1 個文件被更改,包括 12 次插入5 次删除
  1. 12 5
      core/state_transition.go

+ 12 - 5
core/state_transition.go

@@ -77,12 +77,19 @@ func MessageGasValue(msg Message) *big.Int {
 // with the given data.
 func IntrinsicGas(data []byte) *big.Int {
 	igas := new(big.Int).Set(params.TxGas)
-	for _, byt := range data {
-		if byt != 0 {
-			igas.Add(igas, params.TxDataNonZeroGas)
-		} else {
-			igas.Add(igas, params.TxDataZeroGas)
+	if len(data) > 0 {
+		var nz int64
+		for _, byt := range data {
+			if byt != 0 {
+				nz++
+			}
 		}
+		m := big.NewInt(nz)
+		m.Mul(m, params.TxDataNonZeroGas)
+		igas.Add(igas, m)
+		m.SetInt64(int64(len(data)) - nz)
+		m.Mul(m, params.TxDataZeroGas)
+		igas.Add(igas, m)
 	}
 	return igas
 }