internal/ethapi, internal/web3ext: adds raw tx retrieval methods
This commit is contained in:
		
							parent
							
								
									c88e435724
								
							
						
					
					
						commit
						1a6682c21d
					
				| @ -699,6 +699,16 @@ func newRPCTransactionFromBlockIndex(b *types.Block, txIndex int) (*RPCTransacti | ||||
| 	return nil, nil | ||||
| } | ||||
| 
 | ||||
| // newRPCRawTransactionFromBlockIndex returns the bytes of a transaction given a block and a transaction index.
 | ||||
| func newRPCRawTransactionFromBlockIndex(b *types.Block, txIndex int) (rpc.HexBytes, error) { | ||||
| 	if txIndex >= 0 && txIndex < len(b.Transactions()) { | ||||
| 		tx := b.Transactions()[txIndex] | ||||
| 		return rlp.EncodeToBytes(tx) | ||||
| 	} | ||||
| 
 | ||||
| 	return nil, nil | ||||
| } | ||||
| 
 | ||||
| // newRPCTransaction returns a transaction that will serialize to the RPC representation.
 | ||||
| func newRPCTransaction(b *types.Block, txHash common.Hash) (*RPCTransaction, error) { | ||||
| 	for idx, tx := range b.Transactions() { | ||||
| @ -770,6 +780,22 @@ func (s *PublicTransactionPoolAPI) GetTransactionByBlockHashAndIndex(ctx context | ||||
| 	return nil, nil | ||||
| } | ||||
| 
 | ||||
| // GetRawTransactionByBlockNumberAndIndex returns the bytes of the transaction for the given block number and index.
 | ||||
| func (s *PublicTransactionPoolAPI) GetRawTransactionByBlockNumberAndIndex(ctx context.Context, blockNr rpc.BlockNumber, index rpc.HexNumber) (rpc.HexBytes, error) { | ||||
| 	if block, _ := s.b.BlockByNumber(ctx, blockNr); block != nil { | ||||
| 		return newRPCRawTransactionFromBlockIndex(block, index.Int()) | ||||
| 	} | ||||
| 	return nil, nil | ||||
| } | ||||
| 
 | ||||
| // GetRawTransactionByBlockHashAndIndex returns the bytes of the transaction for the given block hash and index.
 | ||||
| func (s *PublicTransactionPoolAPI) GetRawTransactionByBlockHashAndIndex(ctx context.Context, blockHash common.Hash, index rpc.HexNumber) (rpc.HexBytes, error) { | ||||
| 	if block, _ := s.b.GetBlock(ctx, blockHash); block != nil { | ||||
| 		return newRPCRawTransactionFromBlockIndex(block, index.Int()) | ||||
| 	} | ||||
| 	return nil, nil | ||||
| } | ||||
| 
 | ||||
| // GetTransactionCount returns the number of transactions the given address has sent for the given block number
 | ||||
| func (s *PublicTransactionPoolAPI) GetTransactionCount(ctx context.Context, address common.Address, blockNr rpc.BlockNumber) (*rpc.HexNumber, error) { | ||||
| 	state, _, err := s.b.StateAndHeaderByNumber(blockNr) | ||||
| @ -835,6 +861,21 @@ func (s *PublicTransactionPoolAPI) GetTransactionByHash(ctx context.Context, txH | ||||
| 	return nil, nil | ||||
| } | ||||
| 
 | ||||
| // GetRawTransactionByHash returns the bytes of the transaction for the given hash.
 | ||||
| func (s *PublicTransactionPoolAPI) GetRawTransactionByHash(ctx context.Context, txHash common.Hash) (rpc.HexBytes, error) { | ||||
| 	var tx *types.Transaction | ||||
| 	var err error | ||||
| 
 | ||||
| 	if tx, _, err = getTransaction(s.b.ChainDb(), s.b, txHash); err != nil { | ||||
| 		glog.V(logger.Debug).Infof("%v\n", err) | ||||
| 		return nil, nil | ||||
| 	} else if tx == nil { | ||||
| 		return nil, nil | ||||
| 	} | ||||
| 
 | ||||
| 	return rlp.EncodeToBytes(tx) | ||||
| } | ||||
| 
 | ||||
| // GetTransactionReceipt returns the transaction receipt for the given transaction hash.
 | ||||
| func (s *PublicTransactionPoolAPI) GetTransactionReceipt(txHash common.Hash) (map[string]interface{}, error) { | ||||
| 	receipt := core.GetReceipt(s.b.ChainDb(), txHash) | ||||
|  | ||||
| @ -468,6 +468,19 @@ web3._extend({ | ||||
| 			call: 'eth_submitTransaction', | ||||
| 			params: 1, | ||||
| 			inputFormatter: [web3._extend.formatters.inputTransactionFormatter] | ||||
| 		}), | ||||
| 		new web3._extend.Method({ | ||||
| 			name: 'getRawTransaction', | ||||
| 			call: 'eth_getRawTransactionByHash', | ||||
| 			params: 1 | ||||
| 		}), | ||||
| 		new web3._extend.Method({ | ||||
| 			name: 'getRawTransactionFromBlock', | ||||
| 			call: function(args) { | ||||
| 				return (web3._extend.utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getRawTransactionByBlockHashAndIndex' : 'eth_getRawTransactionByBlockNumberAndIndex'; | ||||
| 			}, | ||||
| 			params: 2, | ||||
| 			inputFormatter: [web3._extend.formatters.inputBlockNumberFormatter, web3._extend.utils.toHex] | ||||
| 		}) | ||||
| 	], | ||||
| 	properties: | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user