Docs at https://rainprotocol.github.io/rain.flow
V3 compatible contracts are still found in the monorepo at
https://github.com/rainprotocol/rain-protocol
The contracts in this repo are targetting V4 (see below).
The main changes in V4 replace previewFlow with stackToFlow which is a more
generalised version of the same basic idea. By allowing any stack to be passed
to the flow contract, the reader can simulate flows based on differen callers,
state, time, etc.
V4 also targets a newer interpreter interface than V3, notably the native parsing
functionality that works off a single bytes for the Rain bytecode rather than
the bytes[] that older interpreters expected.
V2 was deprecated to remove native flows entirely from the V3+ interface.
This is because flow implementations are likely to want to implement Multicall
like functionality, such as that provided by Open Zeppelin.
Multicall based on delegate call preserves the msg.sender which is great for
allowing EOA wallets like Metamask to flow under their own identity, but is a
critical security issue when reading msg.value (e.g. to allow native flows).
https://samczsun.com/two-rights-might-make-a-wrong/
V1 was deprecated because the SignedContext struct that it relies on was
deprecated upstream. SignedContext was replaced with SignedContextV1 which
was a minor change, reordering fields only for more efficient processing.