Преглед на файлове

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
 }