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 | 	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 { | func (self *JSPipe) CompileMutan(code string) string { | ||||||
| 	data, err := self.Pipe.CompileMutan(code) | 	data, err := self.Pipe.CompileMutan(code) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
|  | |||||||
| @ -149,6 +149,15 @@ func (self *Pipe) Transact(key *ethcrypto.KeyPair, rec []byte, value, gas, price | |||||||
| 	return tx.Hash(), nil | 	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) { | func (self *Pipe) CompileMutan(code string) ([]byte, error) { | ||||||
| 	data, err := ethutil.Compile(code, false) | 	data, err := ethutil.Compile(code, false) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
|  | |||||||
| @ -145,6 +145,27 @@ func (p *EthereumApi) Create(args *NewTxArgs, reply *string) error { | |||||||
| 	return nil | 	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 { | func (p *EthereumApi) GetKey(args interface{}, reply *string) error { | ||||||
| 	*reply = NewSuccessRes(p.pipe.Key()) | 	*reply = NewSuccessRes(p.pipe.Key()) | ||||||
| 	return nil | 	return nil | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user