The error is likely caused by the name of the class or directory. The class name of the gateway should be in camel-case format, while the directory name should be separated by underscores as described in the Programming Style Guide, following the gateway file structure. You can use the other gateways as reference.
i.e. The class name "CarrotPay" means the directory it is within should be "carrot_pay" @ /components/gateways/nonmerchant/carrot_pay/carrot_pay.php
Curious, are you a developer by trade? I ask because I have been tailoring my explanations assuming that you are familiar with object-oriented programming in PHP--classes, abstract methods, inheritance, etc., following the MVC design pattern that Blesta uses. If not, there is going to be a learning curve to overcome first.
In CarrotPay::buildProcess, you would create a view, set variables to the view, and return the view. Setting variables can be done by calling set on the View object by setting a name for it in the view (first parameter) and the value (as the second parameter).
e.g. (This is copied from the Payza gateway)
$fields = array();
$this->view = $this->makeView("process", "default", str_replace(ROOTWEBDIR, "", dirname(__FILE__) . DS));
Loader::loadHelpers($this, array("Form", "Html"));
//Sets sandbox or production URL based on "test_mode" parameter value.
$this->view->set("post_to", ($this->ifSet($this->meta['test_mode']) == "true" ? $this->payza_sandbox_url : $this->payza_url));
$this->view->set("fields", $fields);
return $this->view->fetch();
You would output the data in your view template under /components/gateways/nonmerchant/carrot_pay/view/default/process.pdt. The Form and Html helpers are used to simplify creating form fields and for outputting content html-safe.