فهرست منبع

core/vm, params: EIP160: EXP reprice

Jeffrey Wilcke 9 سال پیش
والد
کامیت
779ddb1832
2فایلهای تغییر یافته به همراه6 افزوده شده و 9 حذف شده
  1. 2 1
      core/vm/vm.go
  2. 4 8
      params/gas_table.go

+ 2 - 1
core/vm/vm.go

@@ -313,7 +313,8 @@ func calculateGasAndSize(gasTable params.GasTable, env Environment, contract *Co
 
 		quadMemGas(mem, newMemSize, gas)
 	case EXP:
-		gas.Add(gas, new(big.Int).Mul(big.NewInt(int64(len(stack.data[stack.len()-2].Bytes()))), params.ExpByteGas))
+		expByteLen := int64((stack.data[stack.len()-2].BitLen() + 7) / 8)
+		gas.Add(gas, new(big.Int).Mul(big.NewInt(expByteLen), gasTable.ExpByte))
 	case SSTORE:
 		err := stack.require(2)
 		if err != nil {

+ 4 - 8
params/gas_table.go

@@ -26,9 +26,7 @@ type GasTable struct {
 	Calls       *big.Int
 	Suicide     *big.Int
 
-	Exp        *big.Int
-	ExpOneByte *big.Int
-	Exp256     *big.Int
+	ExpByte *big.Int
 
 	// CreateBySuicide occurs when the
 	// refunded account is one that does
@@ -48,7 +46,7 @@ var (
 		SLoad:       big.NewInt(50),
 		Calls:       big.NewInt(40),
 		Suicide:     big.NewInt(0),
-		Exp:         big.NewInt(20),
+		ExpByte:     big.NewInt(10),
 
 		// explicitly set to nil to indicate
 		// this rule does not apply to homestead.
@@ -66,7 +64,7 @@ var (
 		SLoad:       big.NewInt(200),
 		Calls:       big.NewInt(700),
 		Suicide:     big.NewInt(5000),
-		Exp:         big.NewInt(20),
+		ExpByte:     big.NewInt(10),
 
 		CreateBySuicide: big.NewInt(25000),
 	}
@@ -78,9 +76,7 @@ var (
 		SLoad:       big.NewInt(200),
 		Calls:       big.NewInt(700),
 		Suicide:     big.NewInt(5000),
-		Exp:         big.NewInt(80),
-		ExpOneByte:  big.NewInt(160),
-		Exp256:      big.NewInt(2640),
+		ExpByte:     big.NewInt(50),
 
 		CreateBySuicide: big.NewInt(25000),
 	}