# Calling a smart contract function

Contracts can be called by their address. There are various pieces of data one can/should pass to a contract call in order to make it succeed.

The general syntax of a contract call is executed as follows:

```
docker run --rm qanplatform/qvmctl call \
    -m $RAM_BYTES \
    -t $TIMEOUT_MILLISEC \
    -r $DB_READ_SLOTS \
    -w $DB_WRITE_SLOTS_COUNT \
    --privkey $PRIVKEY_PATH \
    $CONTRACT_ADDR
    $ARG1 $ARG2 $ARGN
```

The arguments prepended with a **$** sign mean the following:

* $RAM\_BYTES: How much RAM the contract needs to execute the requested operation successfully
* $TIMEOUT\_MILLISEC: How much time the contract needs to execute the requested operation successfully
* $DB\_READ\_SLOTS: The Database fields to be read and passed to the execution environment, separated by commas
* $DB\_WRITE\_SLOTS\_COUNT: How many database fields this operation will write to after successful execution
* $PRIVKEY\_PATH: Path to a file which contains the private key for a wallet which has enough funds to execute the call
* $CONTRACT\_ADDR: Address of the smart contract to be called
* $ARG{N}: Arguments passed to the smart contract binary during execution
