|
| 1 | +--- |
| 2 | +"@evolution-sdk/devnet": patch |
| 3 | +"@evolution-sdk/evolution": patch |
| 4 | +--- |
| 5 | + |
| 6 | +Add deferred redeemer construction for dynamic index resolution |
| 7 | + |
| 8 | +**RedeemerBuilder module** (`RedeemerBuilder.ts`): |
| 9 | +- `IndexedInput` type: `{ index: number, utxo: UTxO }` - provides the final sorted index and original UTxO after coin selection |
| 10 | +- Three modes for redeemer construction: |
| 11 | + - `Static`: Direct Data value when index not needed |
| 12 | + - `Self`: Per-input function `(input: IndexedInput) => Data` for single UTxO index |
| 13 | + - `Batch`: Multi-input function `(inputs: IndexedInput[]) => Data` for stake validator coordinator pattern |
| 14 | +- Type guards: `isSelfFn`, `isBatchBuilder`, `isStaticData` |
| 15 | +- Internal types: `DeferredRedeemer`, `toDeferredRedeemer` |
| 16 | + |
| 17 | +**Evaluation phase updates**: |
| 18 | +- Add `resolveDeferredRedeemers` to convert deferred redeemers after coin selection |
| 19 | +- Build `refToIndex` and `refToUtxo` mappings from sorted inputs |
| 20 | +- Invoke Self/Batch callbacks with resolved `IndexedInput` objects |
| 21 | + |
| 22 | +**Operations updates**: |
| 23 | +- `collectFrom` and `mintTokens` now accept `RedeemerArg` (Data | SelfRedeemerFn | BatchRedeemerBuilder) |
| 24 | +- Store deferred redeemers in `state.deferredRedeemers` for later resolution |
| 25 | + |
| 26 | +**Test coverage** (`TxBuilder.RedeemerBuilder.test.ts`): |
| 27 | +- Tests for all three modes with mint_multi_validator.ak spec |
| 28 | + |
| 29 | +**Architecture docs** (`redeemer-indexing.mdx`): |
| 30 | +- Document the circular dependency problem and deferred construction solution |
| 31 | +- Explain stake validator coordinator pattern with O(1) index lookup |
0 commit comments