Skip to content

Commit 6c1659b

Browse files
committed
feat(emulator): bump emulator (v0.21.0) and rootfs (v0.18.0). make it build
1 parent deb34e0 commit 6c1659b

15 files changed

Lines changed: 118 additions & 93 deletions

File tree

Dockerfile

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
# syntax=docker.io/docker/dockerfile:1
55

6-
ARG EMULATOR_VERSION=0.20.0
6+
ARG EMULATOR_VERSION=0.21.0-test5
77

88
# Build directories.
99
ARG GO_BUILD_PATH=/build/cartesi/go
@@ -29,8 +29,8 @@ RUN <<EOF
2929
ARCH=$(dpkg --print-architecture)
3030
wget -O /tmp/cartesi-machine-emulator.deb "https://github.com/cartesi/machine-emulator/releases/download/v${EMULATOR_VERSION}/machine-emulator_${ARCH}.deb"
3131
case "$ARCH" in
32-
amd64) echo "46b2f37b889091df3b89a8909467935f8dd4a1426eeb0491b6a346a12f0c341c /tmp/cartesi-machine-emulator.deb" | sha256sum --check ;;
33-
arm64) echo "27ea10571335ad174b75388e7de54a3d3434bd607554d8c0bdf6abca47ceae0d /tmp/cartesi-machine-emulator.deb" | sha256sum --check ;;
32+
amd64) echo "ab6e93c9bb7b9911c59a2ea8ed879f5f8d54b8c9cfa577534f7d3df2d87fdd5b /tmp/cartesi-machine-emulator.deb" | sha256sum --check ;;
33+
arm64) echo "aaae49bc9362e81c00f081e09ad5ad16c9916dd32d355ea016494b7d4e6cee26 /tmp/cartesi-machine-emulator.deb" | sha256sum --check ;;
3434
*) echo "unsupported architecture: $ARCH"; exit 1 ;;
3535
esac
3636
apt-get install -y --no-install-recommends /tmp/cartesi-machine-emulator.deb

cmd/cartesi-rollups-machine-tool/main.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ func replayInputsBatch(ctx context.Context, opts replayOptions, tmp string, inpu
165165

166166
args := []string{
167167
"--quiet",
168-
"--no-rollback",
168+
"--no-revert",
169169
"--load=" + opts.Template,
170170
fmt.Sprintf("--cmio-advance-state=input:%s,input_index_begin:0,input_index_end:%d",
171171
filepath.Join(tmp, "input-%i.bin"), len(inputs)),
@@ -374,7 +374,7 @@ func generateMachineProof(
374374

375375
args := []string{
376376
"--quiet",
377-
"--no-rollback",
377+
"--no-revert",
378378
"--load=" + snapshot,
379379
fmt.Sprintf("--initial-proof=address:0x%x,log2_size:%d,filename:%s", address, log2Size, tmpPath),
380380
"--",

control.template

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ Homepage: https://docs.cartesi.io/cartesi-rollups/
55
Architecture: ARG_ARCH
66
Maintainer: Node Reference Unit <https://discord.com/channels/600597137524391947/1110564973115097179>
77
Provides: cartesi-rollups-node
8-
Depends: cartesi-machine-emulator (>= 0.20.0), cartesi-machine-emulator (<< 0.21.0)
8+
Depends: cartesi-machine-emulator (>= 0.21.0), cartesi-machine-emulator (<< 0.22.0)
99
Section: net
1010
Priority: optional
1111
Multi-Arch: no

pkg/emulator/emulator.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ package emulator
88

99
// #cgo LDFLAGS: -lcartesi -lcartesi_jsonrpc
1010
// #include <stdlib.h>
11-
// #include "cartesi-machine/jsonrpc-machine-c-api.h"
11+
// #include "cartesi-machine/cm-jsonrpc.h"
1212
import "C"
1313

1414
import (

pkg/emulator/machine.go

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ package emulator
88

99
// #include <stdlib.h>
1010
// #include <string.h>
11-
// #include "cartesi-machine/machine-c-api.h"
11+
// #include "cartesi-machine/cm.h"
1212
import "C"
1313

1414
import (
@@ -383,16 +383,22 @@ func (m *Machine) CollectMCycleRootHashes(mcycleEnd, mcyclePeriod, mcyclePhase u
383383
}
384384

385385
// collect_uarch_cycle_root_hashes
386-
func (m *Machine) CollectUarchCycleRootHashes(mcycleEnd uint64, log2BundleMcycleCount int32) ([]byte, error) {
386+
func (m *Machine) CollectUarchCycleRootHashes(mcycleEnd uint64, log2BundleUarchCycleCount int32, revertUarchTail string) ([]byte, error) {
387387
var err error
388388
var result []byte
389389

390390
m.callCAPI(func() {
391391
var cResult *C.char
392+
var revertUarchTailC *C.char
393+
if revertUarchTail != "" {
394+
revertUarchTailC = C.CString(revertUarchTail)
395+
defer C.free(unsafe.Pointer(revertUarchTailC))
396+
}
392397
err = newError(C.cm_collect_uarch_cycle_root_hashes(
393398
m.ptr,
394399
C.uint64_t(mcycleEnd),
395-
C.int32_t(log2BundleMcycleCount),
400+
C.int32_t(log2BundleUarchCycleCount),
401+
revertUarchTailC,
396402
&cResult))
397403
result = []byte(C.GoString(cResult))
398404
})
@@ -404,7 +410,7 @@ func (m *Machine) CollectUarchCycleRootHashes(mcycleEnd uint64, log2BundleMcycle
404410
}
405411

406412
// send_cmio_response
407-
func (m *Machine) SendCmioResponse(reason uint16, data []byte) error {
413+
func (m *Machine) SendCmioResponse(revertRootHash Hash, reason uint16, data []byte) error {
408414
var err error
409415

410416
m.callCAPI(func() {
@@ -413,9 +419,10 @@ func (m *Machine) SendCmioResponse(reason uint16, data []byte) error {
413419
if sizeData > 0 {
414420
ptrData = (*C.uint8_t)(unsafe.Pointer(&data[0]))
415421
}
416-
422+
//var cHash C.cm_hash = revertRootHash
417423
err = newError(C.cm_send_cmio_response(
418424
m.ptr,
425+
(*[32]C.uint8_t)(unsafe.Pointer(&revertRootHash)),
419426
C.uint16_t(reason),
420427
ptrData,
421428
sizeData,

pkg/emulator/remote.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
package emulator
88

99
// #include <stdlib.h>
10-
// #include "cartesi-machine/jsonrpc-machine-c-api.h"
10+
// #include "cartesi-machine/cm-jsonrpc.h"
1111
import "C"
1212

1313
import (

pkg/emulator/types.go

Lines changed: 58 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
package emulator
88

99
// #include <stdlib.h>
10-
// #include "cartesi-machine/jsonrpc-machine-c-api.h"
10+
// #include "cartesi-machine/cm-jsonrpc.h"
1111
import "C"
1212
import "fmt"
1313

@@ -18,18 +18,18 @@ import "fmt"
1818
type ErrorCode int32
1919

2020
const (
21-
ErrCodeOk ErrorCode = C.CM_ERROR_OK
22-
ErrCodeInvalidArgument ErrorCode = C.CM_ERROR_INVALID_ARGUMENT
23-
ErrCodeDomainError ErrorCode = C.CM_ERROR_DOMAIN_ERROR
24-
ErrCodeLengthError ErrorCode = C.CM_ERROR_LENGTH_ERROR
25-
ErrCodeOutOfRange ErrorCode = C.CM_ERROR_OUT_OF_RANGE
26-
ErrCodeLogicError ErrorCode = C.CM_ERROR_LOGIC_ERROR
27-
ErrCodeRuntimeError ErrorCode = C.CM_ERROR_RUNTIME_ERROR
28-
ErrCodeRangeError ErrorCode = C.CM_ERROR_RANGE_ERROR
29-
ErrCodeOverflowError ErrorCode = C.CM_ERROR_OVERFLOW_ERROR
30-
ErrCodeUnderflowError ErrorCode = C.CM_ERROR_UNDERFLOW_ERROR
31-
ErrCodeRegexError ErrorCode = C.CM_ERROR_REGEX_ERROR
32-
ErrCodeSystemError ErrorCode = C.CM_ERROR_SYSTEM_ERROR
21+
ErrCodeOk ErrorCode = C.CM_ERROR_OK
22+
ErrCodeInvalidArgument ErrorCode = C.CM_ERROR_INVALID_ARGUMENT
23+
ErrCodeDomainError ErrorCode = C.CM_ERROR_DOMAIN_ERROR
24+
ErrCodeLengthError ErrorCode = C.CM_ERROR_LENGTH_ERROR
25+
ErrCodeOutOfRange ErrorCode = C.CM_ERROR_OUT_OF_RANGE
26+
ErrCodeLogicError ErrorCode = C.CM_ERROR_LOGIC_ERROR
27+
ErrCodeRuntimeError ErrorCode = C.CM_ERROR_RUNTIME_ERROR
28+
ErrCodeRangeError ErrorCode = C.CM_ERROR_RANGE_ERROR
29+
ErrCodeOverflowError ErrorCode = C.CM_ERROR_OVERFLOW_ERROR
30+
ErrCodeUnderflowError ErrorCode = C.CM_ERROR_UNDERFLOW_ERROR
31+
//ErrCodeRegexError ErrorCode = C.CM_ERROR_REGEX_ERROR
32+
//ErrCodeSystemError ErrorCode = C.CM_ERROR_SYSTEM_ERROR
3333
ErrCodeBadTypeid ErrorCode = C.CM_ERROR_BAD_TYPEID
3434
ErrCodeBadCast ErrorCode = C.CM_ERROR_BAD_CAST
3535
ErrCodeBadAnyCast ErrorCode = C.CM_ERROR_BAD_ANY_CAST
@@ -123,23 +123,23 @@ type (
123123

124124
const (
125125
// type
126-
YieldAutomatic CmioYieldCommand = C.CM_CMIO_YIELD_COMMAND_AUTOMATIC
127-
YieldManual CmioYieldCommand = C.CM_CMIO_YIELD_COMMAND_MANUAL
126+
YieldAutomatic CmioYieldCommand = C.CM_HTIF_YIELD_CMD_AUTOMATIC
127+
YieldManual CmioYieldCommand = C.CM_HTIF_YIELD_CMD_MANUAL
128128

129129
// NOTE: these values do not form an enum (e.g., automatic-progress == manual-accepted).
130130

131131
// reason - request
132-
AutomaticYieldReasonProgress CmioYieldReason = C.CM_CMIO_YIELD_AUTOMATIC_REASON_PROGRESS
133-
AutomaticYieldReasonOutput CmioYieldReason = C.CM_CMIO_YIELD_AUTOMATIC_REASON_TX_OUTPUT
134-
AutomaticYieldReasonReport CmioYieldReason = C.CM_CMIO_YIELD_AUTOMATIC_REASON_TX_REPORT
132+
AutomaticYieldReasonProgress CmioYieldReason = C.CM_HTIF_YIELD_AUTOMATIC_REASON_PROGRESS
133+
AutomaticYieldReasonOutput CmioYieldReason = C.CM_HTIF_YIELD_AUTOMATIC_REASON_TX_OUTPUT
134+
AutomaticYieldReasonReport CmioYieldReason = C.CM_HTIF_YIELD_AUTOMATIC_REASON_TX_REPORT
135135

136-
ManualYieldReasonAccepted CmioYieldReason = C.CM_CMIO_YIELD_MANUAL_REASON_RX_ACCEPTED
137-
ManualYieldReasonRejected CmioYieldReason = C.CM_CMIO_YIELD_MANUAL_REASON_RX_REJECTED
138-
ManualYieldReasonException CmioYieldReason = C.CM_CMIO_YIELD_MANUAL_REASON_TX_EXCEPTION
136+
ManualYieldReasonAccepted CmioYieldReason = C.CM_HTIF_YIELD_MANUAL_REASON_RX_ACCEPTED
137+
ManualYieldReasonRejected CmioYieldReason = C.CM_HTIF_YIELD_MANUAL_REASON_RX_REJECTED
138+
ManualYieldReasonException CmioYieldReason = C.CM_HTIF_YIELD_MANUAL_REASON_TX_EXCEPTION
139139

140140
// reason - reply
141-
YieldReasonAdvanceState CmioYieldReason = C.CM_CMIO_YIELD_REASON_ADVANCE_STATE
142-
YieldReasonInspectState CmioYieldReason = C.CM_CMIO_YIELD_REASON_INSPECT_STATE
141+
YieldReasonAdvanceState CmioYieldReason = C.CM_HTIF_YIELD_REASON_ADVANCE_STATE
142+
YieldReasonInspectState CmioYieldReason = C.CM_HTIF_YIELD_REASON_INSPECT_STATE
143143
)
144144

145145
// cm_reg addresses/CSRs
@@ -257,41 +257,41 @@ const (
257257
REG_HTIF_ICONSOLE RegID = C.CM_REG_HTIF_ICONSOLE
258258
REG_HTIF_IYIELD RegID = C.CM_REG_HTIF_IYIELD
259259
// Microarchitecture registers
260-
REG_UARCH_X0 RegID = C.CM_REG_UARCH_X0
261-
REG_UARCH_X1 RegID = C.CM_REG_UARCH_X1
262-
REG_UARCH_X2 RegID = C.CM_REG_UARCH_X2
263-
REG_UARCH_X3 RegID = C.CM_REG_UARCH_X3
264-
REG_UARCH_X4 RegID = C.CM_REG_UARCH_X4
265-
REG_UARCH_X5 RegID = C.CM_REG_UARCH_X5
266-
REG_UARCH_X6 RegID = C.CM_REG_UARCH_X6
267-
REG_UARCH_X7 RegID = C.CM_REG_UARCH_X7
268-
REG_UARCH_X8 RegID = C.CM_REG_UARCH_X8
269-
REG_UARCH_X9 RegID = C.CM_REG_UARCH_X9
270-
REG_UARCH_X10 RegID = C.CM_REG_UARCH_X10
271-
REG_UARCH_X11 RegID = C.CM_REG_UARCH_X11
272-
REG_UARCH_X12 RegID = C.CM_REG_UARCH_X12
273-
REG_UARCH_X13 RegID = C.CM_REG_UARCH_X13
274-
REG_UARCH_X14 RegID = C.CM_REG_UARCH_X14
275-
REG_UARCH_X15 RegID = C.CM_REG_UARCH_X15
276-
REG_UARCH_X16 RegID = C.CM_REG_UARCH_X16
277-
REG_UARCH_X17 RegID = C.CM_REG_UARCH_X17
278-
REG_UARCH_X18 RegID = C.CM_REG_UARCH_X18
279-
REG_UARCH_X19 RegID = C.CM_REG_UARCH_X19
280-
REG_UARCH_X20 RegID = C.CM_REG_UARCH_X20
281-
REG_UARCH_X21 RegID = C.CM_REG_UARCH_X21
282-
REG_UARCH_X22 RegID = C.CM_REG_UARCH_X22
283-
REG_UARCH_X23 RegID = C.CM_REG_UARCH_X23
284-
REG_UARCH_X24 RegID = C.CM_REG_UARCH_X24
285-
REG_UARCH_X25 RegID = C.CM_REG_UARCH_X25
286-
REG_UARCH_X26 RegID = C.CM_REG_UARCH_X26
287-
REG_UARCH_X27 RegID = C.CM_REG_UARCH_X27
288-
REG_UARCH_X28 RegID = C.CM_REG_UARCH_X28
289-
REG_UARCH_X29 RegID = C.CM_REG_UARCH_X29
290-
REG_UARCH_X30 RegID = C.CM_REG_UARCH_X30
291-
REG_UARCH_X31 RegID = C.CM_REG_UARCH_X31
292-
REG_UARCH_PC RegID = C.CM_REG_UARCH_PC
293-
REG_UARCH_CYCLE RegID = C.CM_REG_UARCH_CYCLE
294-
REG_UARCH_HALT_FLAG RegID = C.CM_REG_UARCH_HALT_FLAG
260+
REG_UARCH_X0 RegID = C.CM_REG_UARCH_X0
261+
REG_UARCH_X1 RegID = C.CM_REG_UARCH_X1
262+
REG_UARCH_X2 RegID = C.CM_REG_UARCH_X2
263+
REG_UARCH_X3 RegID = C.CM_REG_UARCH_X3
264+
REG_UARCH_X4 RegID = C.CM_REG_UARCH_X4
265+
REG_UARCH_X5 RegID = C.CM_REG_UARCH_X5
266+
REG_UARCH_X6 RegID = C.CM_REG_UARCH_X6
267+
REG_UARCH_X7 RegID = C.CM_REG_UARCH_X7
268+
REG_UARCH_X8 RegID = C.CM_REG_UARCH_X8
269+
REG_UARCH_X9 RegID = C.CM_REG_UARCH_X9
270+
REG_UARCH_X10 RegID = C.CM_REG_UARCH_X10
271+
REG_UARCH_X11 RegID = C.CM_REG_UARCH_X11
272+
REG_UARCH_X12 RegID = C.CM_REG_UARCH_X12
273+
REG_UARCH_X13 RegID = C.CM_REG_UARCH_X13
274+
REG_UARCH_X14 RegID = C.CM_REG_UARCH_X14
275+
REG_UARCH_X15 RegID = C.CM_REG_UARCH_X15
276+
REG_UARCH_X16 RegID = C.CM_REG_UARCH_X16
277+
REG_UARCH_X17 RegID = C.CM_REG_UARCH_X17
278+
REG_UARCH_X18 RegID = C.CM_REG_UARCH_X18
279+
REG_UARCH_X19 RegID = C.CM_REG_UARCH_X19
280+
REG_UARCH_X20 RegID = C.CM_REG_UARCH_X20
281+
REG_UARCH_X21 RegID = C.CM_REG_UARCH_X21
282+
REG_UARCH_X22 RegID = C.CM_REG_UARCH_X22
283+
REG_UARCH_X23 RegID = C.CM_REG_UARCH_X23
284+
REG_UARCH_X24 RegID = C.CM_REG_UARCH_X24
285+
REG_UARCH_X25 RegID = C.CM_REG_UARCH_X25
286+
REG_UARCH_X26 RegID = C.CM_REG_UARCH_X26
287+
REG_UARCH_X27 RegID = C.CM_REG_UARCH_X27
288+
REG_UARCH_X28 RegID = C.CM_REG_UARCH_X28
289+
REG_UARCH_X29 RegID = C.CM_REG_UARCH_X29
290+
REG_UARCH_X30 RegID = C.CM_REG_UARCH_X30
291+
REG_UARCH_X31 RegID = C.CM_REG_UARCH_X31
292+
REG_UARCH_PC RegID = C.CM_REG_UARCH_PC
293+
REG_UARCH_CYCLE RegID = C.CM_REG_UARCH_CYCLE
294+
REG_UARCH_HALT RegID = C.CM_REG_UARCH_HALT
295295
// Views of registers
296296
REG_HTIF_TOHOST_DEV RegID = C.CM_REG_HTIF_TOHOST_DEV
297297
REG_HTIF_TOHOST_CMD RegID = C.CM_REG_HTIF_TOHOST_CMD

pkg/machine/backend.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ type Backend interface {
4141
IsAtManualYield(timeout time.Duration) (bool, error)
4242
ReadMCycle(timeout time.Duration) (uint64, error)
4343

44-
SendCmioResponse(reason uint16, data []byte, timeout time.Duration) error
44+
SendCmioResponse(revertRootHash Hash, reason uint16, data []byte, timeout time.Duration) error
4545
ReceiveCmioRequest(timeout time.Duration) (cmd uint8, reason uint16, data []byte, err error)
4646

4747
WriteMemory(address uint64, data []byte, timeout time.Duration) error

pkg/machine/backend_test.go

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,8 @@ func (m *MockBackend) ReadMCycle(timeout time.Duration) (uint64, error) {
4040
return args.Get(0).(uint64), args.Error(1)
4141
}
4242

43-
func (m *MockBackend) SendCmioResponse(reason uint16, data []byte, timeout time.Duration) error {
44-
args := m.Called(reason, data, timeout)
43+
func (m *MockBackend) SendCmioResponse(revertRootHash Hash, reason uint16, data []byte, timeout time.Duration) error {
44+
args := m.Called(revertRootHash, reason, data, timeout)
4545
return args.Error(0)
4646
}
4747

@@ -105,7 +105,8 @@ func randomFakeHash() Hash {
105105
// SetupAccepted configures the mock for a successful advance/inspect operation
106106
func (m *MockBackend) SetupAccepted(reqType requestType) {
107107
hash := randomFakeHash()
108-
m.On("SendCmioResponse", uint16(reqType), mock.Anything, mock.AnythingOfType("time.Duration")).Return(nil)
108+
m.On("GetRootHash", mock.AnythingOfType("time.Duration")).Return(hash, nil)
109+
m.On("SendCmioResponse", hash, uint16(reqType), mock.Anything, mock.AnythingOfType("time.Duration")).Return(nil)
109110
m.On("Run", mock.AnythingOfType("uint64"), mock.AnythingOfType("time.Duration")).Return(YieldedManually, nil)
110111
m.On("ReadMCycle", mock.AnythingOfType("time.Duration")).Return(uint64(0), nil)
111112
m.On("ReceiveCmioRequest", mock.AnythingOfType("time.Duration")).Return(
@@ -116,7 +117,8 @@ func (m *MockBackend) SetupAccepted(reqType requestType) {
116117
// SetupRejected configures the mock for a rejected advance/inspect operation
117118
func (m *MockBackend) SetupRejected(reqType requestType) {
118119
hash := randomFakeHash()
119-
m.On("SendCmioResponse", uint16(reqType), mock.Anything, mock.AnythingOfType("time.Duration")).Return(nil)
120+
m.On("GetRootHash", mock.AnythingOfType("time.Duration")).Return(hash, nil)
121+
m.On("SendCmioResponse", hash, uint16(reqType), mock.Anything, mock.AnythingOfType("time.Duration")).Return(nil)
120122
m.On("Run", mock.AnythingOfType("uint64"), mock.AnythingOfType("time.Duration")).Return(YieldedManually, nil)
121123
m.On("ReadMCycle", mock.AnythingOfType("time.Duration")).Return(uint64(0), nil)
122124
m.On("ReceiveCmioRequest", mock.AnythingOfType("time.Duration")).Return(
@@ -126,7 +128,9 @@ func (m *MockBackend) SetupRejected(reqType requestType) {
126128

127129
// SetupException configures the mock for an exception during advance/inspect
128130
func (m *MockBackend) SetupException(reqType requestType) {
129-
m.On("SendCmioResponse", uint16(reqType), mock.Anything, mock.AnythingOfType("time.Duration")).Return(nil)
131+
hash := randomFakeHash()
132+
m.On("GetRootHash", mock.AnythingOfType("time.Duration")).Return(hash, nil)
133+
m.On("SendCmioResponse", hash, uint16(reqType), mock.Anything, mock.AnythingOfType("time.Duration")).Return(nil)
130134
m.On("Run", mock.AnythingOfType("uint64"), mock.AnythingOfType("time.Duration")).Return(YieldedManually, nil)
131135
m.On("ReadMCycle", mock.AnythingOfType("time.Duration")).Return(uint64(0), nil)
132136
m.On("ReceiveCmioRequest", mock.AnythingOfType("time.Duration")).Return(

pkg/machine/implementation.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -357,7 +357,13 @@ func (m *machineImpl) process(
357357
return false, nil, nil, nil, 0, nil, ErrPayloadLengthLimitExceeded
358358
}
359359

360-
err := m.backend.SendCmioResponse(uint16(reqType), request, m.params.FastDeadline)
360+
// TODO: cache this?
361+
revertRootHash, err := m.backend.GetRootHash(m.params.LoadDeadline)
362+
if err != nil {
363+
return false, nil, nil, nil, 0, nil, err
364+
}
365+
366+
err = m.backend.SendCmioResponse(revertRootHash, uint16(reqType), request, m.params.FastDeadline)
361367
if err != nil {
362368
return false, nil, nil, nil, 0, nil, err
363369
}

0 commit comments

Comments
 (0)