add pushtx to api
Previously the software assumed use of an internal private key for use in all broadcasted transactions. This addition lets nodes relay pre-signed transactions originating from sources other than the node itself.
This commit is contained in:
		
							parent
							
								
									6afc16399f
								
							
						
					
					
						commit
						7dacd7eb78
					
				| @ -225,6 +225,12 @@ func (self *JSPipe) Transact(key, toStr, valueStr, gasStr, gasPriceStr, codeStr | ||||
| 	return NewJSReciept(contractCreation, tx.CreationAddress(), tx.Hash(), keyPair.Address()), nil | ||||
| } | ||||
| 
 | ||||
| func (self *JSPipe) PushTx(txStr string) (*JSReceipt, error) { | ||||
|     tx := ethchain.NewTransactionFromBytes(ethutil.Hex2Bytes(txStr)) | ||||
|     self.obj.TxPool().QueueTransaction(tx) | ||||
|     return NewJSReciept(tx.CreatesContract(), tx.CreationAddress(), tx.Hash(), tx.Sender()), nil | ||||
| } | ||||
| 
 | ||||
| func (self *JSPipe) CompileMutan(code string) string { | ||||
| 	data, err := self.Pipe.CompileMutan(code) | ||||
| 	if err != nil { | ||||
|  | ||||
| @ -149,6 +149,15 @@ func (self *Pipe) Transact(key *ethcrypto.KeyPair, rec []byte, value, gas, price | ||||
| 	return tx.Hash(), nil | ||||
| } | ||||
| 
 | ||||
| func (self *Pipe) PushTx(tx *ethchain.Transaction) ([]byte, error) { | ||||
|     self.obj.TxPool().QueueTransaction(tx) | ||||
|     if tx.Recipient == nil { | ||||
|         logger.Infof("Contract addr %x", tx.CreationAddress()) | ||||
|         return tx.CreationAddress(), nil | ||||
|     } | ||||
|     return tx.Hash(), nil | ||||
| } | ||||
| 
 | ||||
| func (self *Pipe) CompileMutan(code string) ([]byte, error) { | ||||
| 	data, err := ethutil.Compile(code, false) | ||||
| 	if err != nil { | ||||
|  | ||||
| @ -145,6 +145,27 @@ func (p *EthereumApi) Create(args *NewTxArgs, reply *string) error { | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| type PushTxArgs struct { | ||||
|     Tx string | ||||
| } | ||||
| 
 | ||||
| func (a *PushTxArgs) requirementsPushTx() error { | ||||
|     if a.Tx == "" { | ||||
|         return NewErrorResponse("PushTx requires a 'tx' as argument") | ||||
|     } | ||||
|     return nil | ||||
| } | ||||
| 
 | ||||
| func (p *EthereumApi) PushTx(args *PushTxArgs, reply *string) error { | ||||
|     err := args.requirementsPushTx() | ||||
|     if err != nil { | ||||
|         return err | ||||
|     } | ||||
|     result, _ := p.pipe.PushTx(args.Tx) | ||||
|     *reply = NewSuccessRes(result) | ||||
|     return nil | ||||
| } | ||||
| 
 | ||||
| func (p *EthereumApi) GetKey(args interface{}, reply *string) error { | ||||
| 	*reply = NewSuccessRes(p.pipe.Key()) | ||||
| 	return nil | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user