|
|
@ -597,7 +597,7 @@ func (s *PublicBlockChainAPI) rpcOutputBlock(b *types.Block, inclTx bool, fullTx |
|
|
|
"gasUsed": rpc.NewHexNumber(head.GasUsed), |
|
|
|
"gasUsed": rpc.NewHexNumber(head.GasUsed), |
|
|
|
"timestamp": rpc.NewHexNumber(head.Time), |
|
|
|
"timestamp": rpc.NewHexNumber(head.Time), |
|
|
|
"transactionsRoot": head.TxHash, |
|
|
|
"transactionsRoot": head.TxHash, |
|
|
|
"receiptsRoot": head.ReceiptHash, |
|
|
|
"receiptsRoot": head.ReceiptHash, |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if inclTx { |
|
|
|
if inclTx { |
|
|
@ -699,6 +699,16 @@ func newRPCTransactionFromBlockIndex(b *types.Block, txIndex int) (*RPCTransacti |
|
|
|
return nil, nil |
|
|
|
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.
|
|
|
|
// newRPCTransaction returns a transaction that will serialize to the RPC representation.
|
|
|
|
func newRPCTransaction(b *types.Block, txHash common.Hash) (*RPCTransaction, error) { |
|
|
|
func newRPCTransaction(b *types.Block, txHash common.Hash) (*RPCTransaction, error) { |
|
|
|
for idx, tx := range b.Transactions() { |
|
|
|
for idx, tx := range b.Transactions() { |
|
|
@ -770,6 +780,22 @@ func (s *PublicTransactionPoolAPI) GetTransactionByBlockHashAndIndex(ctx context |
|
|
|
return nil, nil |
|
|
|
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
|
|
|
|
// 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) { |
|
|
|
func (s *PublicTransactionPoolAPI) GetTransactionCount(ctx context.Context, address common.Address, blockNr rpc.BlockNumber) (*rpc.HexNumber, error) { |
|
|
|
state, _, err := s.b.StateAndHeaderByNumber(blockNr) |
|
|
|
state, _, err := s.b.StateAndHeaderByNumber(blockNr) |
|
|
@ -835,6 +861,21 @@ func (s *PublicTransactionPoolAPI) GetTransactionByHash(ctx context.Context, txH |
|
|
|
return nil, nil |
|
|
|
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.
|
|
|
|
// GetTransactionReceipt returns the transaction receipt for the given transaction hash.
|
|
|
|
func (s *PublicTransactionPoolAPI) GetTransactionReceipt(txHash common.Hash) (map[string]interface{}, error) { |
|
|
|
func (s *PublicTransactionPoolAPI) GetTransactionReceipt(txHash common.Hash) (map[string]interface{}, error) { |
|
|
|
receipt := core.GetReceipt(s.b.ChainDb(), txHash) |
|
|
|
receipt := core.GetReceipt(s.b.ChainDb(), txHash) |
|
|
|