Orbs single-nominator

CertiKCode version: not recorded (see the report)

CertiK reviewed Orbs (Orbs single-nominator) on 21 Dec 2022: 6 findings, 0 critical; 5 marked fixed, 1 acknowledged.

No open critical findings
Open the reportOpen Orbs’s security record

Report hosted on skynet.certik.com.

Trustblock does not review code.

Findings6

Statuses are the security firm’s own, from its report.

SeverityOpenAcknowledgedFixed
Critical000
High000
Medium000
Low015
Low`end_parse()` Is MissingFixed

`get_data()` contains 2 fields: `owner_address` and `validator_address`. The function `load_data()` reads all of them, however, it does not ensure that the slice is empty after that.

Low`OP::NEW_STAKE` message construction can be improFixed

```cpp=127 send_msg(elector_address(), stake_amount, begin_cell().store_uint(op, 32).store_uint(query_id, 64).store_slice(msg).end_cell(), BOUNCEABLE, MODE::SEND_MODE_REMAINING_AMOUNT); ;; bounceable, validator pays gas fees ``` The message sent to `elector-code` is built directly as the function argument. This decreases the code readability. `op` sent to `elector-code` must be `OP::NEW_STAKE`. But `op` sent to `single-nominator` can be any. Passing `op` as an argument decreases the code maintainability.

LowMessages from unknown senders with unrecognized pFixed

`recv_internal()` explicitly accepts the messages with empty `in_msg_body`. However, the messages with non-empty `in_msg_body` or from unauthorized senders are also implicitly accepted. This can lead to accidental errors.

LowRange check exception is thrown if `amount` is neFixed

```cpp=86 amount = min(amount, my_balance - msg_value - MIN_TON_FOR_STORAGE); ``` In case the contract's balance is less than `MIN_TON_FOR_STORAGE`, the `amount` can become negative. That will lead to a range check exception during `send_raw_message()`.

LowSimple transfer is accepted before `load_data()`Fixed

In `recv_internal()` `load_data()` is performed after accepting of empty and bounced messages. In case the contract was initialized with incorrect initial state, it can still accept the stakes. `load_data()` validates the storage is in correct format.

Contracts in scope

No deployed address is recorded for this audit.

The report names a repository or files. Open the report to see its scope.

Part of Orbs’s security record

Orbs
Audits1 audit by 1 firmLast audit Dec 2022, by CertiK.
Critical findingsNo open critical findingsIn 1 report.
Open Orbs’s security record

Security firm

CertiK

1,044 projects reviewed · 1,375 reports · latest May 2025

See CertiK’s audits

Something wrong on this page? A missing report, a wrong date, a finding that was fixed since. Tell us and we check it against its source.

Tell us