Da2ce7:New Transaction
New Transaction is an proposal for a new extendable method of creating transactions.
Each new transaction is defined by a random txnumber that should be unique globally.
Advanced functions, such as transaction scripts, and importing and exporting can appropriately be done using the group of supporting functions.
Transaction life-cycle
Every New Transaction goes through the following steps. (not always in the same order)
Build
In this stage, a transaction is being built:
- Any feature of the transaction may be modified.
- Users can add, remove, any input, output or script.
Ready
In this stage, only certain features may be modified:
- Only inputs may be changed. (is this correct, or will past signatures be destroyed if we change them?)
- Any other attribute that doesn't effect the existing signatures.
Done
In this stage, the transaction is complete, and would be accepted by the network:
- User still can add inputs, however all the outputs have already been fulfilled, these new inputs will be counted as fees.
- After any change, a 'done' transaction gets automatically demoted to 'Ready' state.
Submitted
In this stage the transaction has been published to the bitcoin network and is in/or is awaiting to be included in a block.
Terms
txnumber is a random string given to every transaction for identification purposes.
pubkey is assumed to be owned by the client that preforms the 'readying' of the transition (build > ready states)
This entire processing is lazy! Bitcoin will automatically fill-out everything just as it dose at-the-moment with the readytransaction stage.
Please not this draft doesn't include all possible error responses.
commands:
/// make a new transaction (6 override)
newtransaction
newtransaction {name}
newtransaction {txuniqueid}
newtransaction {txuniqueid} {name}
newtransaction {txid}
newtransaction {txid} {name}
response {txtxuniqueid}
/// add an input to the transaction. (1 overrides)
addinput {txuniqueid} {txid} {index}
addinput {txuniqueid} {txid} {index} {comment}
response {txuniqueid} {iouniqueid}
/// add outputs to the transaction (6 overrides)
/// add fee to transaction
addoutput {txuniqueid} {amount} {forced|suggested|optional}
addoutput {txuniqueid} {amount} {forced|suggested|optional} {comment}
// add change address to transaction
addoutput {txuniqueid} {pubkey}
addoutput {txuniqueid} {pubkey} {comment}
// add send outputs
addoutput {txuniqueid} {address} {amount}
addoutput {txuniqueid} {address} {amount} {comment}
response {txuniqueid} {iouniqueid}
// add many send outputs
addoutputlist {txuniqueid} [{address},{amount}]
response {txuniqueid} [{iouniqueid}]
/// remove input or outpus (1 override)
remove {txuniqueid} {iouniqueid}
remove {txuniqueid} [{iouniqueid}]
response {txuniqueid} droped: {iouniqueid}
response {txuniqueid} droped: [{iouniqueid}]
/// prints out human readable information about the tranaction
shownewtransaction {txuniqueid} (1 override)
response {txuniqueid}
in: [{iouniqueid},{address},{amount},(comment)]
in total: {amount}
out: [{iouniqueid},{address},{amount},(comment)]
out total: {amount}
fee: {amount}
size: {readytxn bit}
state: {building:ready:done:submitted}
shownewtransaction {txid} (1 override)
response {txid}
in: [{txid},{address},{amount},(comment)]
in total: {amount}
out: [{address},{amount},(comment)]
out total: {amount}
fee: {amount}
size: {readytxn bit}
block: {block number}
/// demote a transaction (1 override)
demotetransaction {txuniqueid}
demotetransaction {txuniqueid} {build|ready|done}
response {txuniqueid} {building|ready|done}
/// exports a binary encoded transition (4 override)
exporttransaction {txuniqueid}
exporttransaction [txuniqueid]
exporttransaction {txid}
exporttransaction [txid]
response {binary data}
/// import binary encoded transition(s) (1 override)
inporttransaction {binary data}
inporttransaction [{binary data}]
response [{txuniqueid}]
/// check and complete build translation (1 override)
reddytransaction {txuniqueid}
reddytransaction [{txuniqueid}]
response [{txuniqueid}] {has made changes|no changes needed|not enough coins|invalid transaction}
/// sign ready transaction (6 override)
signtransaction {txuniqueid}
signtransaction [{txuniqueid}]
// calls reddytransaction before hand if needed
signtransaction -r {txuniqueid}
signtransaction -r [{txuniqueid}]
// sign a pre-signed/partial transaction (signs for owned private keys)
signtransaction -o {txuniqueid}
signtransaction -o [{txuniqueid}]
response [{txuniqueid},{done|failed}]
/// publish a done transaction to peers (2 override)
// submits all 'done' transactions
submittransaction -a
// submits a single 'done' transaction
submittransaction {txuniqueid}
// submits a list of 'done' transaction
submittransaction [{txuniqueid}]
response [{txuniqueid},{txid}]
/// complete transaction from any stage and publish it (1 override)
completeransaction {txuniqueid}
response {txuniqueid} {txid}
/// delete a transaction from local client
droptransaction {txuniqueid}
responce dropped: {txuniqueid}