Concepts
Arms and jobs
The two words you need.
Arm
An arm is an ordinary wallet that takes part in a firing. It does not change address, it keeps its history, and it keeps working as a normal wallet afterwards. Use fresh wallets for new arms: a fresh wallet has nonce 0 and no past.
Job
| Field | Meaning |
|---|---|
wallet | The arm's address. |
calls[] | What the arm will do: target, ETH value, calldata, in order. |
deadline | Unix time after which the arm refuses to act. |
signature | The arm's key signature over those exact calls, its current nonce and the deadline. |
One arm, several calls
An arm can run several calls in one job, for example approve and swap. They run in order and succeed or fail together. If one fails the arm reverts and keeps its nonce.
Who the target sees
The wallet makes the calls, so the target sees msg.sender = wallet. A launchpad curve records eight different buyers. The coordinator never appears as the buyer.
Funding
Each arm holds what it will spend: ETH for a buy, or tokens for a sell. It needs no gas money, because the sponsor pays the gas of the whole transaction.