Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Quickstart

Ten minutes, no money, no wallet, no chain. At the end you will have a payout plan for a real repository and a ledger that proves it was not edited afterwards.

1. Describe the project

cd my-project
dedalo init --open-collective my-project

That writes a commented dedalo.toml at the repository root. It is meant to be committed: the file is the project’s funding policy, and it should be reviewed like any other change. See dedalo.toml for every key.

The three addresses under [wallets] are zeroed placeholders. Leave them for now — nothing in this chapter sends anything anywhere.

2. See what is unpaid

$ dedalo scan
4 merges since af3141b5

  9c2f1ab  feat(parser): streaming tokenizer          ada     +412 -38
  1de77c0  fix(cli): honour NO_COLOR                  bea      +11  -4
  4a0b93e  docs: rewrite the configuration chapter    cy       +96 -21
  7f10d55  feat(money): largest-remainder splits      ada     +180 -12

scan reads merge commits on the branch named in [git] branch, starting after the last settled commit. Nothing has been settled yet, so this is the whole history.

Note — nothing here reaches the network. Stages 1 to 3 of the pipeline read the repository and compute; only settlement has side effects.

3. Score them

$ dedalo contributors
HANDLE                      MERGES   POINTS    SHARE
ada <ada@example.com>            2   1,124    62.35%
cy <cy@example.com>              1     432    23.96%
bea <bea@example.com>            1     247    13.69%

Scores are milli-points, integers, computed from the rules in [attribution]: a flat score per merge, per-line scoring, a per-merge cap, and Co-authored-by: splitting. Same history, same numbers, every machine. See Attribution.

4. Price a round

$ dedalo plan --amount 1000
Round ded106bd7281  4 merges on main → 7f10d55
Gross 1000 USDC

PAYEE            KIND         WALLET           SHARE  AMOUNT
ada              contributor  0xAdA00000000…  51.44%  514.39
cy               contributor  0xCy000000000…  19.77%  197.71
bea              contributor  0xBeA00000000…  11.29%  112.90
treasury         treasury     0x2222222222…   15.00%     150
demo-collective  protocol     0x3333333333…    2.50%      25

The fee schedule comes off the top first, then the rest is split by weight. ded106bd7281 is the plan’s id: a hash over everything that determines the outcome. It excludes the timestamp on purpose, so re-running this command gives you the same id.

Try it. Then change one number in [attribution] and try again — the id moves, because the answer moved.

5. Simulate the settlement

$ dedalo settle --amount 1000
dry-run: 5 transfers, 1000 USDC, plan ded106bd7281
ok plan id matches its contents
ok transfers sum to the gross amount
ok no transfer to the zero address
nothing was broadcast

settle without --execute runs the whole settlement path against the dry-run backend: it re-verifies the plan and reports exactly what would move. The numbers are the ones a real settlement would use.

6. Check the record

$ dedalo verify
head dedc6ddbbef5415e6dcbf805b60affd83c49
ok 2 entries hash to their recorded ids
ok 1 settled plan present and self-consistent

.dedalo/ now holds a hash-chained ledger of what happened. Every entry names its parent and hashes over it, so editing an old one breaks every id after it. verify needs no network and no key — it is a check anyone with a clone can run, which is the whole point. See The ledger.

Every command takes --json

$ dedalo plan --amount 1000 --json | jq '.items[] | {handle, amount}'

The JSON shape is a contract, not incidental output: action.yml parses it and tests/cli.rs pins the fields it reads. See JSON output.

Next

  • Your first round — the same thing with real identities and a real decision about who gets paid.
  • The pipeline — what each stage is allowed to do.
  • In CI — where this belongs long term.