+GRANT SELECT ON vend_requests TO vendserver;
+
+CREATE OR REPLACE FUNCTION vend_success(integer) RETURNS void AS
+ 'UPDATE vend_requests SET request_handled = true WHERE request_id = $1'
+ LANGUAGE SQL EXTERNAL SECURITY DEFINER;
+REVOKE ALL ON FUNCTION valid_vend_slot(varchar(2)) FROM public;
+GRANT EXECUTE ON FUNCTION vend_success(integer) TO vendserver;
+
+CREATE OR REPLACE FUNCTION vend_failed(integer) RETURNS void AS
+ '
+ BEGIN
+ UPDATE vend_requests SET request_handled = true WHERE request_id = $1;
+ PERFORM refund($1);
+ END;
+ '
+ LANGUAGE plpgsql EXTERNAL SECURITY DEFINER;
+REVOKE ALL ON FUNCTION valid_vend_slot(varchar(2)) FROM public;
+GRANT EXECUTE ON FUNCTION vend_failed(integer) TO vendserver;