Skip to main content

Multicall

Overview

Multicall executes multiple calls as a single transaction. If one call fails, the entire operation is aborted. Use it to prevent leaving your system in an inconsistent state.

Usage example

Before you run protostar multicall, you need to create an account in order to sign the transaction. If you want to deploy contract within a multicall, you need to declare it first.

Then, create a toml file containing calls defined as array of tables. In that file, you can use contract address of a contract to be deployed by using references ($DEPLOY_CALL_ID). References can be used in contract-address and inputs attributes as demonstrated in the example below.

calls.toml
[[call]]
type = "deploy"
class-hash = 0xDEADBEEF
inputs = []
id = "my_contract"

[[call]]
type = "invoke"
contract-address = "$my_contract"
function = "increase_balance"
inputs = [42]

Protostar supports two types of calls — deploy and invoke, which take similar arguments to deploy command and invoke command.

protostar.toml
[project]
protostar-version = "0.8.1"

[multicall]
account-address = 0x...
gateway-url = "http://127.0.0.1:5050"
chain-id = 1536727068981429685321
max-fee = "auto"
Calling multicall
export PROTOSTAR_ACCOUNT_PRIVATE_KEY 0x...
protostar multicall calls.toml
Protostar shows transaction hash and addresses of deployed contracts
Multicall has been sent.
transaction hash: 0x...
my_contract : 0x...