MCPcopy Create free account
hub / github.com/CPChain/chain / Run

Method Run

tests/vm_test_util.go:81–115  ·  view source on GitHub ↗
(vmconfig vm.Config)

Source from the content-addressed store, hash-verified

79}
80
81func (t *VMTest) Run(vmconfig vm.Config) error {
82 statedb := MakePreState(database.NewMemDatabase(), t.json.Pre)
83 ret, gasRemaining, err := t.exec(statedb, vmconfig)
84
85 if t.json.GasRemaining == nil {
86 if err == nil {
87 return fmt.Errorf("gas unspecified (indicating an error), but VM returned no error")
88 }
89 if gasRemaining > 0 {
90 return fmt.Errorf("gas unspecified (indicating an error), but VM returned gas remaining > 0")
91 }
92 return nil
93 }
94 // Test declares gas, expecting outputs to match.
95 if !bytes.Equal(ret, t.json.Out) {
96 return fmt.Errorf("return data mismatch: got %x, want %x", ret, t.json.Out)
97 }
98 if gasRemaining != uint64(*t.json.GasRemaining) {
99 return fmt.Errorf("remaining gas %v, want %v", gasRemaining, *t.json.GasRemaining)
100 }
101 for addr, account := range t.json.Post {
102 for k, wantV := range account.Storage {
103 if haveV := statedb.GetState(addr, k); haveV != wantV {
104 return fmt.Errorf("wrong storage value at %x:\n got %x\n want %x", k, haveV, wantV)
105 }
106 }
107 }
108 // if root := statedb.IntermediateRoot(false); root != t.json.PostStateRoot {
109 // return fmt.Errorf("post state root mismatch, got %x, want %x", root, t.json.PostStateRoot)
110 // }
111 if logs := rlpHash(statedb.Logs()); logs != common.Hash(t.json.Logs) {
112 return fmt.Errorf("post state logs hash mismatch: got %x, want %x", logs, t.json.Logs)
113 }
114 return nil
115}
116
117func (t *VMTest) exec(statedb *state.StateDB, vmconfig vm.Config) ([]byte, uint64, error) {
118 evm := t.newEVM(statedb, vmconfig)

Callers

nothing calls this directly

Calls 7

execMethod · 0.95
MakePreStateFunction · 0.85
rlpHashFunction · 0.70
EqualMethod · 0.65
GetStateMethod · 0.65
HashMethod · 0.65
LogsMethod · 0.45

Tested by

no test coverage detected