code: func ApplyMessage(evm *vm.EVM, msg Message, gp *GasPool) ([]byte, uint64, bool, error) {
  	return NewStateTransition(evm, msg, gp).TransitionDb()
  }
docs: // ApplyMessage computes the new state by applying the given message
  // against the old state within the environment.
  //
  // ApplyMessage returns the bytes returned by any EVM execution (if it took place),
  // the gas used (which includes gas refunds) and an error if it failed. An error always
  // indicates a core error meaning that the message would always fail for that particular
  // state and would never be accepted within a block.