@@ -12,7 +12,6 @@ import (
1212 jsoncdc "github.com/onflow/cadence/encoding/json"
1313 "github.com/rs/zerolog"
1414
15- "github.com/onflow/flow-go/engine/execution/state/delta"
1615 "github.com/onflow/flow-go/fvm"
1716 "github.com/onflow/flow-go/fvm/derived"
1817 "github.com/onflow/flow-go/fvm/state"
@@ -105,7 +104,10 @@ func (e *QueryExecutor) ExecuteScript(
105104 blockHeader * flow.Header ,
106105 derivedBlockData * derived.DerivedBlockData ,
107106 snapshot state.StorageSnapshot ,
108- ) ([]byte , error ) {
107+ ) (
108+ encodedValue []byte ,
109+ err error ,
110+ ) {
109111
110112 startedAt := time .Now ()
111113 memAllocBefore := debug .GetHeapAllocsBytes ()
@@ -128,67 +130,64 @@ func (e *QueryExecutor) ExecuteScript(
128130 requestCtx , cancel := context .WithTimeout (ctx , e .config .ExecutionTimeLimit )
129131 defer cancel ()
130132
131- scriptInContext := fvm .NewScriptWithContextAndArgs (script , requestCtx , arguments ... )
132- blockCtx := fvm .NewContextFromParent (
133- e .vmCtx ,
134- fvm .WithBlockHeader (blockHeader ),
135- fvm .WithDerivedBlockData (derivedBlockData ))
136-
137- err := func () (err error ) {
138-
139- start := time .Now ()
140-
141- defer func () {
142-
143- prepareLog := func () * zerolog.Event {
144-
145- args := make ([]string , 0 , len (arguments ))
146- for _ , a := range arguments {
147- args = append (args , hex .EncodeToString (a ))
148- }
149- return e .logger .Error ().
150- Hex ("script_hex" , script ).
151- Str ("args" , strings .Join (args , "," ))
152- }
153-
154- elapsed := time .Since (start )
155-
156- if r := recover (); r != nil {
157- prepareLog ().
158- Interface ("recovered" , r ).
159- Msg ("script execution caused runtime panic" )
160-
161- err = fmt .Errorf ("cadence runtime error: %s" , r )
162- return
133+ defer func () {
134+ prepareLog := func () * zerolog.Event {
135+ args := make ([]string , 0 , len (arguments ))
136+ for _ , a := range arguments {
137+ args = append (args , hex .EncodeToString (a ))
163138 }
164- if elapsed >= e .config .LogTimeThreshold {
165- prepareLog ().
166- Dur ("duration" , elapsed ).
167- Msg ("script execution exceeded threshold" )
168- }
169- }()
170-
171- view := delta .NewDeltaView (snapshot )
172- return e .vm .Run (blockCtx , scriptInContext , view )
139+ return e .logger .Error ().
140+ Hex ("script_hex" , script ).
141+ Str ("args" , strings .Join (args , "," ))
142+ }
143+
144+ elapsed := time .Since (startedAt )
145+
146+ if r := recover (); r != nil {
147+ prepareLog ().
148+ Interface ("recovered" , r ).
149+ Msg ("script execution caused runtime panic" )
150+
151+ err = fmt .Errorf ("cadence runtime error: %s" , r )
152+ return
153+ }
154+ if elapsed >= e .config .LogTimeThreshold {
155+ prepareLog ().
156+ Dur ("duration" , elapsed ).
157+ Msg ("script execution exceeded threshold" )
158+ }
173159 }()
160+
161+ var output fvm.ProcedureOutput
162+ _ , output , err = e .vm .RunV2 (
163+ fvm .NewContextFromParent (
164+ e .vmCtx ,
165+ fvm .WithBlockHeader (blockHeader ),
166+ fvm .WithDerivedBlockData (derivedBlockData )),
167+ fvm .NewScriptWithContextAndArgs (script , requestCtx , arguments ... ),
168+ snapshot )
174169 if err != nil {
175170 return nil , fmt .Errorf ("failed to execute script (internal error): %w" , err )
176171 }
177172
178- if scriptInContext .Err != nil {
173+ if output .Err != nil {
179174 return nil , fmt .Errorf ("failed to execute script at block (%s): %s" ,
180175 blockHeader .ID (),
181- summarizeLog (scriptInContext .Err .Error (),
176+ summarizeLog (output .Err .Error (),
182177 e .config .MaxErrorMessageSize ))
183178 }
184179
185- encodedValue , err : = jsoncdc .Encode (scriptInContext .Value )
180+ encodedValue , err = jsoncdc .Encode (output .Value )
186181 if err != nil {
187182 return nil , fmt .Errorf ("failed to encode runtime value: %w" , err )
188183 }
189184
190185 memAllocAfter := debug .GetHeapAllocsBytes ()
191- e .metrics .ExecutionScriptExecuted (time .Since (startedAt ), scriptInContext .GasUsed , memAllocAfter - memAllocBefore , scriptInContext .MemoryEstimate )
186+ e .metrics .ExecutionScriptExecuted (
187+ time .Since (startedAt ),
188+ output .ComputationUsed ,
189+ memAllocAfter - memAllocBefore ,
190+ output .MemoryEstimate )
192191
193192 return encodedValue , nil
194193}
@@ -221,7 +220,6 @@ func (e *QueryExecutor) GetAccount(
221220 fvm .WithDerivedBlockData (
222221 e .derivedChainData .NewDerivedBlockDataForScript (blockHeader .ID ())))
223222
224- delta .NewDeltaView (snapshot )
225223 account , err := e .vm .GetAccount (
226224 blockCtx ,
227225 address ,
0 commit comments