# Thoughts on intents, partial transactions, solvers, etc. ## This is in the context of Sudoku We assume the puzzle is given and available to all parties. The dealer can construct a spend note. ``` let spend_note = Note( application_vp = xan_token_vk, value=1, user=?, note_data=(), ...) ``` In this case, it seems to make sense that the value matches and is equal to 1 (though I believe this approach leads to some inconsistencies). How do I encode the condition "I only spend 1 XAN if someone gives me a solution to the puzzle"? Does this happen inside or outside of Taiga? The condition above seems to be expressible in another note ``` let sudoku_spend_note = Note( application_vp=sudoku_vk, value=?, user=?, note_data=????, ... ) ``` `note_data` represents the data we pass to the VP (i.e. private and public inputs). Whereas finding the right user (counterparty) is a task of the solver, and the value can be anything in this case, how do we fill `note_data`? Does the dealer need to know already the solution? This doesn't make sense. I guess we can leave it empty. It's clear the "want" and "have" are qualitatively different. I need to have the right data for the "have" to be able to spend it, but not for the "want". Looking at the documentation, ![](https://i.imgur.com/bRXcyFJ.png) we see that the "want" is expressed more simply as a VP. This `intent_circuit` has always the same structure, no matter the data, and the data depends on the context (in this case, the data inside the "if" clause is a sudoku note addressed to the dealer, and the data inside the "then" clause is a intent note of value -1). How do we bind these notes? ``` let intent_sudoku_note = Note( application_vp=intent_circuit, value=1, user=?, note_data=[] ) ``` Later on, once the solver does their work of finding counterparties, this note will be able to read the other notes involved in the same transaction and verify that the other notes satisfy this exact intent circuit. The details of how to do this are not still clear to me.