Da2ce7:New Transaction

From Bitcoin Wiki
Revision as of 19:47, 25 July 2011 by Da2ce7 (talk | contribs)
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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 {unique_id}
 newtransaction {unique_id} {name}
 
 newtransaction {txid}
 newtransaction {txid} {name}
 
 response {unique_id}


 /// add an input to the transaction. (1 overrides)
 addinput {unique_id} {txid} {index}
 addinput {unique_id} {txid} {index} {comment}
 
 response {unique_id} {inid}


 /// add outputs to the transaction (6 overrides)
 /// add fee to transaction
 addoutput {unique_id} {amount} {forced|suggested|optional}
 addoutput {unique_id} {amount} {forced|suggested|optional} {comment}
 
 // add change address to transaction
 addoutput {unique_id} {pubkey}
 addoutput {unique_id} {pubkey} {comment}
 
 // add send outputs
 addoutput {unique_id} {address} {amount}
 addoutput {unique_id} {address} {amount} {comment}
 
 response  {unique_id} {outid}
 
 // add many send outputs
 addoutputlist {unique_id} [{address},{amount}]
 
 response {unique_id}  [{outid}]


 /// remove input or outpus (1 override)
 remove {unique_id} {unique_id}
 remove {unique_id} [{unique_id}]
 
 response {unique_id} droped: {unique_id}
 response {unique_id} droped: [{unique_id}]


 /// prints out human readable information about the tranaction
 shownewtransaction {unique_id} (1 override)
 
 response {unique_id}
           in: [{unique_id},{address},{amount},(comment)]
           in total: {amount}
           out: [{unique_id},{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 {unique_id}
 demotetransaction {unique_id} {build|ready|done}
 
 response {unique_id} {building|ready|done}


 /// exports a binary encoded transition (4 override)
 exporttransaction {unique_id}
 exporttransaction [unique_id]
 exporttransaction {txid}
 exporttransaction [txid]
 
 response {binary data}


 /// import binary encoded transition(s) (1 override)
 inporttransaction {binary data}
 inporttransaction [{binary data}]
 
 response [{unique_id}]


 /// check and complete build translation (1 override)
 reddytransaction {unique_id}
 reddytransaction [{unique_id}]
 
 response [{unique_id}] {has made changes|no changes needed|not enough coins|invalid transaction}


 /// sign ready transaction (6 override)
 signtransaction {unique_id}
 signtransaction [{unique_id}]
 
 // calls reddytransaction before hand if needed
 signtransaction -r {unique_id}
 signtransaction -r [{unique_id}]
 
 // sign a pre-signed/partial transaction (signs for owned private keys)
 signtransaction -o {unique_id}
 signtransaction -o [{unique_id}]
 
 response [{unique_id},{done|failed}]


 /// publish a done transaction to peers (2 override)
 // submits all 'done'  transactions
 submittransaction -a
 
 // submits a single  'done'  transaction
 submittransaction {unique_id}
 
 //  submits a list of 'done'  transaction
 submittransaction [{unique_id}]
 
 response [{unique_id},{txid}]


 /// complete transaction from any stage and publish it (1 override)
 completeransaction {unique_id}
 
 response {unique_id} {txid}


 /// delete a transaction from local client
 droptransaction {unique_id}
 
 responce dropped: {unique_id}