So, just thinking about how the different pieces will interact:

1. Someone will upload a ScriptInput to a participant. This is going to have a WalletID and an input to the wallet script.
2. The ScriptInput is going to be placed into a heartbeat and eventually make its way into a block (will take 2 compiles usually, the same way that bootstrapping takes 2 compiles)
3. When the processing gets to the ScriptInput, it's going to load the wallet connected to the WalletID. (If the script is on the wrong quorum, the script will be passed to the correct quorum. If the wallet does not exist, the script will be discarded).
4. Using the wallet, a scripting environment will need to be set up. This is going to include the input and the ScriptBlock, which is the interpreting script in the wallet. This is the part that I'm not sure about, who sets up the environment? Also in the environment will be the wallet's balance and potentially any settings on the script (such as max instructions per ScriptInput).
5. The wallet is going to start operating, feeding the input to the ScriptBlock.
6. This part doesn't need to be implemented for a while, but the wallet has N instructions to reject the script without being charged. If the wallet rejects the script, no cost is incurred and the wallet pays no balance. If the wallet makes a high level call (like Transfer() or AddSibling()) then the wallet is considered to have accepted the script, and will need to pay for every operation.

The important distinction between ScriptInput and ScriptBlock is that any random person can upload a ScriptInput and feed it to _any_ wallet as input. The only verification is done by the wallet ScriptBlock. (ScriptTape?). The simplest verification will assume that the first N bytes are a signature and the remaining bytes are the actual input, and then a call to siacrypto will be made to verify the signature. If the signature doesn't match the public key that stored in bytes X-Y in the ScriptBlock, then the ScriptInput will be rejected. As long as this can happen in N cost, the wallet is not charged for rejecting a script.

If the signature matches, then it processes the ScriptInput. The simplest version of this has the ScriptInput be it's own script entirely, and the wallet just runs whatever the input is as the new ScriptBlock. A more complex version might limit what can be done - for example you could have a wallet that can only spend X per block, and so it'll parse the input for transactions/expenses and reject any inputs that would put it over X per block.