Skip to content

Commit

Permalink
[move][adapter] Add more detailed error location information (#6329)
Browse files Browse the repository at this point in the history
- Adds module+function def+offset info for all execution errors
- Aborts gain function def+offset info
  • Loading branch information
tnowacki authored Nov 23, 2022
1 parent b43800e commit 760d8ef
Show file tree
Hide file tree
Showing 14 changed files with 181 additions and 53 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,5 @@ created: object(106), object(107)
written: object(105)

task 3 'run'. lines 34-34:
Error: Transaction Effects Status: Move Runtime Abort. Module: sui::dynamic_field, Status Code: 0
Execution Error: ExecutionError: ExecutionError { inner: ExecutionErrorInner { kind: MoveAbort(ModuleId { address: sui, name: Identifier("dynamic_field") }, 0), source: Some(VMError { major_status: ABORTED, sub_status: Some(0), message: Some("sui::dynamic_field::add at offset 40"), exec_state: Some(ExecutionState { stack_trace: [(Some(ModuleId { address: a, name: Identifier("m") }), FunctionDefinitionIndex(1), 4)] }), location: Module(ModuleId { address: sui, name: Identifier("dynamic_field") }), indices: [], offsets: [(FunctionDefinitionIndex(0), 40)] }) } }
Error: Transaction Effects Status: Move Runtime Abort. Location: sui::dynamic_field in function definition 0 at offset 40, Abort Code: 0
Execution Error: ExecutionError: ExecutionError { inner: ExecutionErrorInner { kind: MoveAbort(MoveLocation { module: ModuleId { address: sui, name: Identifier("dynamic_field") }, function: 0, instruction: 40 }, 0), source: Some(VMError { major_status: ABORTED, sub_status: Some(0), message: Some("sui::dynamic_field::add at offset 40"), exec_state: Some(ExecutionState { stack_trace: [(Some(ModuleId { address: a, name: Identifier("m") }), FunctionDefinitionIndex(1), 4)] }), location: Module(ModuleId { address: sui, name: Identifier("dynamic_field") }), indices: [], offsets: [(FunctionDefinitionIndex(0), 40)] }) } }
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,5 @@ created: object(106), object(107), object(108)
written: object(105)

task 3 'run'. lines 35-35:
Error: Transaction Effects Status: Move Runtime Abort. Module: sui::dynamic_field, Status Code: 0
Execution Error: ExecutionError: ExecutionError { inner: ExecutionErrorInner { kind: MoveAbort(ModuleId { address: sui, name: Identifier("dynamic_field") }, 0), source: Some(VMError { major_status: ABORTED, sub_status: Some(0), message: Some("sui::dynamic_field::add at offset 40"), exec_state: Some(ExecutionState { stack_trace: [(Some(ModuleId { address: sui, name: Identifier("dynamic_object_field") }), FunctionDefinitionIndex(0), 9), (Some(ModuleId { address: a, name: Identifier("m") }), FunctionDefinitionIndex(1), 6)] }), location: Module(ModuleId { address: sui, name: Identifier("dynamic_field") }), indices: [], offsets: [(FunctionDefinitionIndex(0), 40)] }) } }
Error: Transaction Effects Status: Move Runtime Abort. Location: sui::dynamic_field in function definition 0 at offset 40, Abort Code: 0
Execution Error: ExecutionError: ExecutionError { inner: ExecutionErrorInner { kind: MoveAbort(MoveLocation { module: ModuleId { address: sui, name: Identifier("dynamic_field") }, function: 0, instruction: 40 }, 0), source: Some(VMError { major_status: ABORTED, sub_status: Some(0), message: Some("sui::dynamic_field::add at offset 40"), exec_state: Some(ExecutionState { stack_trace: [(Some(ModuleId { address: sui, name: Identifier("dynamic_object_field") }), FunctionDefinitionIndex(0), 9), (Some(ModuleId { address: a, name: Identifier("m") }), FunctionDefinitionIndex(1), 6)] }), location: Module(ModuleId { address: sui, name: Identifier("dynamic_field") }), indices: [], offsets: [(FunctionDefinitionIndex(0), 40)] }) } }
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,9 @@ created: object(106), object(107)
written: object(105)

task 3 'run'. lines 38-38:
Error: Transaction Effects Status: Move Runtime Abort. Module: sui::dynamic_field, Status Code: 2
Execution Error: ExecutionError: ExecutionError { inner: ExecutionErrorInner { kind: MoveAbort(ModuleId { address: sui, name: Identifier("dynamic_field") }, 2), source: Some(VMError { major_status: ABORTED, sub_status: Some(2), message: None, exec_state: None, location: Module(ModuleId { address: sui, name: Identifier("dynamic_field") }), indices: [], offsets: [(FunctionDefinitionIndex(3), 0)] }) } }
Error: Transaction Effects Status: Move Runtime Abort. Location: sui::dynamic_field in function definition 3 at offset 0, Abort Code: 2
Execution Error: ExecutionError: ExecutionError { inner: ExecutionErrorInner { kind: MoveAbort(MoveLocation { module: ModuleId { address: sui, name: Identifier("dynamic_field") }, function: 3, instruction: 0 }, 2), source: Some(VMError { major_status: ABORTED, sub_status: Some(2), message: None, exec_state: None, location: Module(ModuleId { address: sui, name: Identifier("dynamic_field") }), indices: [], offsets: [(FunctionDefinitionIndex(3), 0)] }) } }

task 4 'run'. lines 40-40:
Error: Transaction Effects Status: Move Runtime Abort. Module: sui::dynamic_field, Status Code: 2
Execution Error: ExecutionError: ExecutionError { inner: ExecutionErrorInner { kind: MoveAbort(ModuleId { address: sui, name: Identifier("dynamic_field") }, 2), source: Some(VMError { major_status: ABORTED, sub_status: Some(2), message: None, exec_state: None, location: Module(ModuleId { address: sui, name: Identifier("dynamic_field") }), indices: [], offsets: [(FunctionDefinitionIndex(3), 0)] }) } }
Error: Transaction Effects Status: Move Runtime Abort. Location: sui::dynamic_field in function definition 3 at offset 0, Abort Code: 2
Execution Error: ExecutionError: ExecutionError { inner: ExecutionErrorInner { kind: MoveAbort(MoveLocation { module: ModuleId { address: sui, name: Identifier("dynamic_field") }, function: 3, instruction: 0 }, 2), source: Some(VMError { major_status: ABORTED, sub_status: Some(2), message: None, exec_state: None, location: Module(ModuleId { address: sui, name: Identifier("dynamic_field") }), indices: [], offsets: [(FunctionDefinitionIndex(3), 0)] }) } }
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,9 @@ created: object(106), object(107), object(108)
written: object(105)

task 3 'run'. lines 43-43:
Error: Transaction Effects Status: Move Runtime Abort. Module: sui::dynamic_field, Status Code: 2
Execution Error: ExecutionError: ExecutionError { inner: ExecutionErrorInner { kind: MoveAbort(ModuleId { address: sui, name: Identifier("dynamic_field") }, 2), source: Some(VMError { major_status: ABORTED, sub_status: Some(2), message: None, exec_state: None, location: Module(ModuleId { address: sui, name: Identifier("dynamic_field") }), indices: [], offsets: [(FunctionDefinitionIndex(3), 0)] }) } }
Error: Transaction Effects Status: Move Runtime Abort. Location: sui::dynamic_field in function definition 3 at offset 0, Abort Code: 2
Execution Error: ExecutionError: ExecutionError { inner: ExecutionErrorInner { kind: MoveAbort(MoveLocation { module: ModuleId { address: sui, name: Identifier("dynamic_field") }, function: 3, instruction: 0 }, 2), source: Some(VMError { major_status: ABORTED, sub_status: Some(2), message: None, exec_state: None, location: Module(ModuleId { address: sui, name: Identifier("dynamic_field") }), indices: [], offsets: [(FunctionDefinitionIndex(3), 0)] }) } }

task 4 'run'. lines 45-45:
Error: Transaction Effects Status: Move Runtime Abort. Module: sui::dynamic_field, Status Code: 2
Execution Error: ExecutionError: ExecutionError { inner: ExecutionErrorInner { kind: MoveAbort(ModuleId { address: sui, name: Identifier("dynamic_field") }, 2), source: Some(VMError { major_status: ABORTED, sub_status: Some(2), message: None, exec_state: None, location: Module(ModuleId { address: sui, name: Identifier("dynamic_field") }), indices: [], offsets: [(FunctionDefinitionIndex(3), 0)] }) } }
Error: Transaction Effects Status: Move Runtime Abort. Location: sui::dynamic_field in function definition 3 at offset 0, Abort Code: 2
Execution Error: ExecutionError: ExecutionError { inner: ExecutionErrorInner { kind: MoveAbort(MoveLocation { module: ModuleId { address: sui, name: Identifier("dynamic_field") }, function: 3, instruction: 0 }, 2), source: Some(VMError { major_status: ABORTED, sub_status: Some(2), message: None, exec_state: None, location: Module(ModuleId { address: sui, name: Identifier("dynamic_field") }), indices: [], offsets: [(FunctionDefinitionIndex(3), 0)] }) } }
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,5 @@ created: object(106), object(107)
written: object(105)

task 3 'run'. lines 35-35:
Error: Transaction Effects Status: Move Runtime Abort. Module: sui::dynamic_field, Status Code: 2
Execution Error: ExecutionError: ExecutionError { inner: ExecutionErrorInner { kind: MoveAbort(ModuleId { address: sui, name: Identifier("dynamic_field") }, 2), source: Some(VMError { major_status: ABORTED, sub_status: Some(2), message: None, exec_state: None, location: Module(ModuleId { address: sui, name: Identifier("dynamic_field") }), indices: [], offsets: [(FunctionDefinitionIndex(3), 0)] }) } }
Error: Transaction Effects Status: Move Runtime Abort. Location: sui::dynamic_field in function definition 3 at offset 0, Abort Code: 2
Execution Error: ExecutionError: ExecutionError { inner: ExecutionErrorInner { kind: MoveAbort(MoveLocation { module: ModuleId { address: sui, name: Identifier("dynamic_field") }, function: 3, instruction: 0 }, 2), source: Some(VMError { major_status: ABORTED, sub_status: Some(2), message: None, exec_state: None, location: Module(ModuleId { address: sui, name: Identifier("dynamic_field") }), indices: [], offsets: [(FunctionDefinitionIndex(3), 0)] }) } }
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,5 @@ created: object(106), object(107), object(108)
written: object(105)

task 3 'run'. lines 40-40:
Error: Transaction Effects Status: Move Runtime Abort. Module: sui::dynamic_field, Status Code: 2
Execution Error: ExecutionError: ExecutionError { inner: ExecutionErrorInner { kind: MoveAbort(ModuleId { address: sui, name: Identifier("dynamic_field") }, 2), source: Some(VMError { major_status: ABORTED, sub_status: Some(2), message: None, exec_state: None, location: Module(ModuleId { address: sui, name: Identifier("dynamic_field") }), indices: [], offsets: [(FunctionDefinitionIndex(11), 0)] }) } }
Error: Transaction Effects Status: Move Runtime Abort. Location: sui::dynamic_field in function definition 11 at offset 0, Abort Code: 2
Execution Error: ExecutionError: ExecutionError { inner: ExecutionErrorInner { kind: MoveAbort(MoveLocation { module: ModuleId { address: sui, name: Identifier("dynamic_field") }, function: 11, instruction: 0 }, 2), source: Some(VMError { major_status: ABORTED, sub_status: Some(2), message: None, exec_state: None, location: Module(ModuleId { address: sui, name: Identifier("dynamic_field") }), indices: [], offsets: [(FunctionDefinitionIndex(11), 0)] }) } }
Original file line number Diff line number Diff line change
Expand Up @@ -36,5 +36,5 @@ task 9 'run'. lines 83-83:
written: object(108), object(117)

task 10 'run'. lines 85-85:
Error: Transaction Effects Status: Move Runtime Abort. Module: sui::dynamic_field, Status Code: 1
Execution Error: ExecutionError: ExecutionError { inner: ExecutionErrorInner { kind: MoveAbort(ModuleId { address: sui, name: Identifier("dynamic_field") }, 1), source: Some(VMError { major_status: ABORTED, sub_status: Some(1), message: Some("sui::dynamic_field::field_ids at offset 18"), exec_state: Some(ExecutionState { stack_trace: [(Some(ModuleId { address: sui, name: Identifier("dynamic_object_field") }), FunctionDefinitionIndex(2), 10), (Some(ModuleId { address: a, name: Identifier("m") }), FunctionDefinitionIndex(7), 3)] }), location: Module(ModuleId { address: sui, name: Identifier("dynamic_field") }), indices: [], offsets: [(FunctionDefinitionIndex(6), 18)] }) } }
Error: Transaction Effects Status: Move Runtime Abort. Location: sui::dynamic_field in function definition 6 at offset 18, Abort Code: 1
Execution Error: ExecutionError: ExecutionError { inner: ExecutionErrorInner { kind: MoveAbort(MoveLocation { module: ModuleId { address: sui, name: Identifier("dynamic_field") }, function: 6, instruction: 18 }, 1), source: Some(VMError { major_status: ABORTED, sub_status: Some(1), message: Some("sui::dynamic_field::field_ids at offset 18"), exec_state: Some(ExecutionState { stack_trace: [(Some(ModuleId { address: sui, name: Identifier("dynamic_object_field") }), FunctionDefinitionIndex(2), 10), (Some(ModuleId { address: a, name: Identifier("m") }), FunctionDefinitionIndex(7), 3)] }), location: Module(ModuleId { address: sui, name: Identifier("dynamic_field") }), indices: [], offsets: [(FunctionDefinitionIndex(6), 18)] }) } }
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
processed 6 tasks

task 1 'publish'. lines 8-30:
created: object(103)
written: object(102)

task 2 'run'. lines 32-32:
Error: Transaction Effects Status: Move Runtime Abort. Location: test::m in function definition 0 at offset 1, Abort Code: 0
Execution Error: ExecutionError: ExecutionError { inner: ExecutionErrorInner { kind: MoveAbort(MoveLocation { module: ModuleId { address: test, name: Identifier("m") }, function: 0, instruction: 1 }, 0), source: Some(VMError { major_status: ABORTED, sub_status: Some(0), message: Some("test::m::abort_ at offset 1"), exec_state: Some(ExecutionState { stack_trace: [] }), location: Module(ModuleId { address: test, name: Identifier("m") }), indices: [], offsets: [(FunctionDefinitionIndex(0), 1)] }) } }

task 3 'run'. lines 34-34:
Error: Transaction Effects Status: Insufficient Gas.
Execution Error: ExecutionError: ExecutionError { inner: ExecutionErrorInner { kind: InsufficientGas, source: Some(VMError { major_status: OUT_OF_GAS, sub_status: None, message: None, exec_state: Some(ExecutionState { stack_trace: [] }), location: Module(ModuleId { address: test, name: Identifier("m") }), indices: [], offsets: [(FunctionDefinitionIndex(1), 0)] }) } }

task 4 'run'. lines 36-36:
Error: Transaction Effects Status: Move Primitive Runtime Error. Location: test::m in function definition 2 at offset 2. Arithmetic error, stack overflow, max value depth, etc.
Execution Error: ExecutionError: ExecutionError { inner: ExecutionErrorInner { kind: MovePrimitiveRuntimeError(Some(MoveLocation { module: ModuleId { address: test, name: Identifier("m") }, function: 2, instruction: 2 })), source: Some(VMError { major_status: ARITHMETIC_ERROR, sub_status: None, message: None, exec_state: Some(ExecutionState { stack_trace: [] }), location: Module(ModuleId { address: test, name: Identifier("m") }), indices: [], offsets: [(FunctionDefinitionIndex(2), 2)] }) } }

task 5 'run'. lines 38-38:
Error: Transaction Effects Status: Move Primitive Runtime Error. Location: test::m in function definition 3 at offset 4. Arithmetic error, stack overflow, max value depth, etc.
Execution Error: ExecutionError: ExecutionError { inner: ExecutionErrorInner { kind: MovePrimitiveRuntimeError(Some(MoveLocation { module: ModuleId { address: test, name: Identifier("m") }, function: 3, instruction: 4 })), source: Some(VMError { major_status: VECTOR_OPERATION_ERROR, sub_status: Some(1), message: None, exec_state: Some(ExecutionState { stack_trace: [] }), location: Module(ModuleId { address: test, name: Identifier("m") }), indices: [], offsets: [(FunctionDefinitionIndex(3), 4)] }) } }
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
// Copyright (c) Mysten Labs, Inc.
// SPDX-License-Identifier: Apache-2.0

// test location for execution errors

//# init --addresses test=0x0

//# publish

module test::m {
entry fun abort_() {
// should be offset 1
abort 0
}

entry fun loop_() {
// should be offset 0
loop {}
}

entry fun math() {
// should be offset 2
0 - 1;
}

entry fun vector_() {
// should be offset 4
std::vector::borrow(&vector[0], 1);
}
}

//# run test::m::abort_

//# run test::m::loop_ --gas-budget 100

//# run test::m::math

//# run test::m::vector_
12 changes: 6 additions & 6 deletions crates/sui-adapter-transactional-tests/tests/shared/upgrade.exp
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,13 @@ Version: 1
Contents: t::m::Obj {id: sui::object::UID {id: sui::object::ID {bytes: fake(109)}}}

task 4 'run'. lines 46-46:
Error: Transaction Effects Status: Move Runtime Abort. Module: sui::transfer, Status Code: 0
Execution Error: ExecutionError: ExecutionError { inner: ExecutionErrorInner { kind: MoveAbort(ModuleId { address: sui, name: Identifier("transfer") }, 0), source: Some(VMError { major_status: ABORTED, sub_status: Some(0), message: None, exec_state: None, location: Module(ModuleId { address: sui, name: Identifier("transfer") }), indices: [], offsets: [(FunctionDefinitionIndex(1), 0)] }) } }
Error: Transaction Effects Status: Move Runtime Abort. Location: sui::transfer in function definition 1 at offset 0, Abort Code: 0
Execution Error: ExecutionError: ExecutionError { inner: ExecutionErrorInner { kind: MoveAbort(MoveLocation { module: ModuleId { address: sui, name: Identifier("transfer") }, function: 1, instruction: 0 }, 0), source: Some(VMError { major_status: ABORTED, sub_status: Some(0), message: None, exec_state: None, location: Module(ModuleId { address: sui, name: Identifier("transfer") }), indices: [], offsets: [(FunctionDefinitionIndex(1), 0)] }) } }

task 5 'run'. lines 48-48:
Error: Transaction Effects Status: Move Runtime Abort. Module: sui::transfer, Status Code: 0
Execution Error: ExecutionError: ExecutionError { inner: ExecutionErrorInner { kind: MoveAbort(ModuleId { address: sui, name: Identifier("transfer") }, 0), source: Some(VMError { major_status: ABORTED, sub_status: Some(0), message: None, exec_state: None, location: Module(ModuleId { address: sui, name: Identifier("transfer") }), indices: [], offsets: [(FunctionDefinitionIndex(1), 0)] }) } }
Error: Transaction Effects Status: Move Runtime Abort. Location: sui::transfer in function definition 1 at offset 0, Abort Code: 0
Execution Error: ExecutionError: ExecutionError { inner: ExecutionErrorInner { kind: MoveAbort(MoveLocation { module: ModuleId { address: sui, name: Identifier("transfer") }, function: 1, instruction: 0 }, 0), source: Some(VMError { major_status: ABORTED, sub_status: Some(0), message: None, exec_state: None, location: Module(ModuleId { address: sui, name: Identifier("transfer") }), indices: [], offsets: [(FunctionDefinitionIndex(1), 0)] }) } }

task 6 'run'. lines 50-50:
Error: Transaction Effects Status: Move Runtime Abort. Module: sui::transfer, Status Code: 0
Execution Error: ExecutionError: ExecutionError { inner: ExecutionErrorInner { kind: MoveAbort(ModuleId { address: sui, name: Identifier("transfer") }, 0), source: Some(VMError { major_status: ABORTED, sub_status: Some(0), message: None, exec_state: None, location: Module(ModuleId { address: sui, name: Identifier("transfer") }), indices: [], offsets: [(FunctionDefinitionIndex(1), 0)] }) } }
Error: Transaction Effects Status: Move Runtime Abort. Location: sui::transfer in function definition 1 at offset 0, Abort Code: 0
Execution Error: ExecutionError: ExecutionError { inner: ExecutionErrorInner { kind: MoveAbort(MoveLocation { module: ModuleId { address: sui, name: Identifier("transfer") }, function: 1, instruction: 0 }, 0), source: Some(VMError { major_status: ABORTED, sub_status: Some(0), message: None, exec_state: None, location: Module(ModuleId { address: sui, name: Identifier("transfer") }), indices: [], offsets: [(FunctionDefinitionIndex(1), 0)] }) } }
13 changes: 11 additions & 2 deletions crates/sui-core/tests/staged/sui.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -224,11 +224,14 @@ ExecutionFailureStatus:
28:
SuiMoveVerificationError: UNIT
29:
MovePrimitiveRuntimeError: UNIT
MovePrimitiveRuntimeError:
NEWTYPE:
OPTION:
TYPENAME: MoveLocation
30:
MoveAbort:
TUPLE:
- TYPENAME: ModuleId
- TYPENAME: MoveLocation
- U64
31:
VMVerificationOrDeserializationError: UNIT
Expand Down Expand Up @@ -284,6 +287,12 @@ MoveFieldLayout:
TYPENAME: Identifier
- layout:
TYPENAME: MoveTypeLayout
MoveLocation:
STRUCT:
- module:
TYPENAME: ModuleId
- function: U16
- instruction: U16
MoveModulePublish:
STRUCT:
- modules:
Expand Down
Loading

0 comments on commit 760d8ef

Please sign in to comment.