@@ -10,7 +10,7 @@ import (
10
10
"errors"
11
11
12
12
"github.com/ava-labs/avalanchego/ids"
13
- "github.com/bytecodealliance/wasmtime-go/v14 "
13
+ "github.com/bytecodealliance/wasmtime-go/v25 "
14
14
15
15
"github.com/ava-labs/hypersdk/codec"
16
16
)
@@ -63,21 +63,36 @@ type CallInfo struct {
63
63
}
64
64
65
65
func (c * CallInfo ) RemainingFuel () uint64 {
66
- remaining := c .Fuel
67
- usedFuel , fuelEnabled := c .inst .store .FuelConsumed ()
68
- if fuelEnabled {
69
- remaining -= usedFuel
66
+ remaining , err := c .inst .store .GetFuel ()
67
+ if err != nil {
68
+ return c .Fuel
70
69
}
70
+
71
71
return remaining
72
72
}
73
73
74
74
func (c * CallInfo ) AddFuel (fuel uint64 ) {
75
75
// only errors if fuel isn't enable, which it always will be
76
- _ = c .inst .store .AddFuel (fuel )
76
+ remaining , err := c .inst .store .GetFuel ()
77
+ if err != nil {
78
+ return
79
+ }
80
+
81
+ _ = c .inst .store .SetFuel (remaining + fuel )
77
82
}
78
83
79
84
func (c * CallInfo ) ConsumeFuel (fuel uint64 ) error {
80
- _ , err := c .inst .store .ConsumeFuel (fuel )
85
+ remaining , err := c .inst .store .GetFuel ()
86
+ if err != nil {
87
+ return err
88
+ }
89
+
90
+ if remaining < fuel {
91
+ return errors .New ("out of fuel" )
92
+ }
93
+
94
+ err = c .inst .store .SetFuel (remaining - fuel )
95
+
81
96
return err
82
97
}
83
98
@@ -88,7 +103,12 @@ type ContractInstance struct {
88
103
}
89
104
90
105
func (p * ContractInstance ) call (ctx context.Context , callInfo * CallInfo ) ([]byte , error ) {
91
- if err := p .store .AddFuel (callInfo .Fuel ); err != nil {
106
+ remaining , err := p .store .GetFuel ()
107
+ if err != nil {
108
+ return nil , err
109
+ }
110
+
111
+ if err := p .store .SetFuel (remaining + callInfo .Fuel ); err != nil {
92
112
return nil , err
93
113
}
94
114
0 commit comments