obscuren 10 жил өмнө
parent
commit
f49e398ebe
1 өөрчлөгдсөн 63 нэмэгдсэн , 63 устгасан
  1. 63 63
      core/vm/gas.go

+ 63 - 63
core/vm/gas.go

@@ -38,7 +38,7 @@ func baseCheck(op OpCode, stack *stack, gas *big.Int) error {
 			return err
 		}
 
-		if r.stackPush && len(stack.data)-r.stackPop > int(params.StackLimit.Int64()) {
+		if r.stackPush > 0 && len(stack.data)-r.stackPop+r.stackPush > int(params.StackLimit.Int64())+1 {
 			return fmt.Errorf("stack limit reached %d (%d)", len(stack.data), params.StackLimit.Int64())
 		}
 
@@ -57,70 +57,70 @@ func toWordSize(size *big.Int) *big.Int {
 type req struct {
 	stackPop  int
 	gas       *big.Int
-	stackPush bool
+	stackPush int
 }
 
 var _baseCheck = map[OpCode]req{
 	// opcode  |  stack pop | gas price | stack push
-	ADD:          {2, GasFastestStep, true},
-	LT:           {2, GasFastestStep, true},
-	GT:           {2, GasFastestStep, true},
-	SLT:          {2, GasFastestStep, true},
-	SGT:          {2, GasFastestStep, true},
-	EQ:           {2, GasFastestStep, true},
-	ISZERO:       {1, GasFastestStep, true},
-	SUB:          {2, GasFastestStep, true},
-	AND:          {2, GasFastestStep, true},
-	OR:           {2, GasFastestStep, true},
-	XOR:          {2, GasFastestStep, true},
-	NOT:          {1, GasFastestStep, true},
-	BYTE:         {2, GasFastestStep, true},
-	CALLDATALOAD: {1, GasFastestStep, true},
-	CALLDATACOPY: {3, GasFastestStep, true},
-	MLOAD:        {1, GasFastestStep, true},
-	MSTORE:       {2, GasFastestStep, false},
-	MSTORE8:      {2, GasFastestStep, false},
-	CODECOPY:     {3, GasFastestStep, false},
-	MUL:          {2, GasFastStep, true},
-	DIV:          {2, GasFastStep, true},
-	SDIV:         {2, GasFastStep, true},
-	MOD:          {2, GasFastStep, true},
-	SMOD:         {2, GasFastStep, true},
-	SIGNEXTEND:   {2, GasFastStep, true},
-	ADDMOD:       {3, GasMidStep, true},
-	MULMOD:       {3, GasMidStep, true},
-	JUMP:         {1, GasMidStep, false},
-	JUMPI:        {2, GasSlowStep, false},
-	EXP:          {2, GasSlowStep, true},
-	ADDRESS:      {0, GasQuickStep, true},
-	ORIGIN:       {0, GasQuickStep, true},
-	CALLER:       {0, GasQuickStep, true},
-	CALLVALUE:    {0, GasQuickStep, true},
-	CODESIZE:     {0, GasQuickStep, true},
-	GASPRICE:     {0, GasQuickStep, true},
-	COINBASE:     {0, GasQuickStep, true},
-	TIMESTAMP:    {0, GasQuickStep, true},
-	NUMBER:       {0, GasQuickStep, true},
-	CALLDATASIZE: {0, GasQuickStep, true},
-	DIFFICULTY:   {0, GasQuickStep, true},
-	GASLIMIT:     {0, GasQuickStep, true},
-	POP:          {1, GasQuickStep, false},
-	PC:           {0, GasQuickStep, true},
-	MSIZE:        {0, GasQuickStep, true},
-	GAS:          {0, GasQuickStep, true},
-	BLOCKHASH:    {1, GasExtStep, true},
-	BALANCE:      {1, GasExtStep, true},
-	EXTCODESIZE:  {1, GasExtStep, true},
-	EXTCODECOPY:  {4, GasExtStep, false},
-	SLOAD:        {1, params.SloadGas, true},
-	SSTORE:       {2, Zero, false},
-	SHA3:         {2, params.Sha3Gas, true},
-	CREATE:       {3, params.CreateGas, true},
-	CALL:         {7, params.CallGas, true},
-	CALLCODE:     {7, params.CallGas, true},
-	JUMPDEST:     {0, params.JumpdestGas, false},
-	SUICIDE:      {1, Zero, false},
-	RETURN:       {2, Zero, false},
-	PUSH1:        {0, GasFastestStep, true},
-	DUP1:         {0, Zero, true},
+	ADD:          {2, GasFastestStep, 1},
+	LT:           {2, GasFastestStep, 1},
+	GT:           {2, GasFastestStep, 1},
+	SLT:          {2, GasFastestStep, 1},
+	SGT:          {2, GasFastestStep, 1},
+	EQ:           {2, GasFastestStep, 1},
+	ISZERO:       {1, GasFastestStep, 1},
+	SUB:          {2, GasFastestStep, 1},
+	AND:          {2, GasFastestStep, 1},
+	OR:           {2, GasFastestStep, 1},
+	XOR:          {2, GasFastestStep, 1},
+	NOT:          {1, GasFastestStep, 1},
+	BYTE:         {2, GasFastestStep, 1},
+	CALLDATALOAD: {1, GasFastestStep, 1},
+	CALLDATACOPY: {3, GasFastestStep, 1},
+	MLOAD:        {1, GasFastestStep, 1},
+	MSTORE:       {2, GasFastestStep, 0},
+	MSTORE8:      {2, GasFastestStep, 0},
+	CODECOPY:     {3, GasFastestStep, 0},
+	MUL:          {2, GasFastStep, 1},
+	DIV:          {2, GasFastStep, 1},
+	SDIV:         {2, GasFastStep, 1},
+	MOD:          {2, GasFastStep, 1},
+	SMOD:         {2, GasFastStep, 1},
+	SIGNEXTEND:   {2, GasFastStep, 1},
+	ADDMOD:       {3, GasMidStep, 1},
+	MULMOD:       {3, GasMidStep, 1},
+	JUMP:         {1, GasMidStep, 0},
+	JUMPI:        {2, GasSlowStep, 0},
+	EXP:          {2, GasSlowStep, 1},
+	ADDRESS:      {0, GasQuickStep, 1},
+	ORIGIN:       {0, GasQuickStep, 1},
+	CALLER:       {0, GasQuickStep, 1},
+	CALLVALUE:    {0, GasQuickStep, 1},
+	CODESIZE:     {0, GasQuickStep, 1},
+	GASPRICE:     {0, GasQuickStep, 1},
+	COINBASE:     {0, GasQuickStep, 1},
+	TIMESTAMP:    {0, GasQuickStep, 1},
+	NUMBER:       {0, GasQuickStep, 1},
+	CALLDATASIZE: {0, GasQuickStep, 1},
+	DIFFICULTY:   {0, GasQuickStep, 1},
+	GASLIMIT:     {0, GasQuickStep, 1},
+	POP:          {1, GasQuickStep, 0},
+	PC:           {0, GasQuickStep, 1},
+	MSIZE:        {0, GasQuickStep, 1},
+	GAS:          {0, GasQuickStep, 1},
+	BLOCKHASH:    {1, GasExtStep, 1},
+	BALANCE:      {1, GasExtStep, 1},
+	EXTCODESIZE:  {1, GasExtStep, 1},
+	EXTCODECOPY:  {4, GasExtStep, 0},
+	SLOAD:        {1, params.SloadGas, 1},
+	SSTORE:       {2, Zero, 0},
+	SHA3:         {2, params.Sha3Gas, 1},
+	CREATE:       {3, params.CreateGas, 1},
+	CALL:         {7, params.CallGas, 1},
+	CALLCODE:     {7, params.CallGas, 1},
+	JUMPDEST:     {0, params.JumpdestGas, 0},
+	SUICIDE:      {1, Zero, 0},
+	RETURN:       {2, Zero, 0},
+	PUSH1:        {0, GasFastestStep, 1},
+	DUP1:         {0, Zero, 1},
 }