12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- package extension
- import (
- "context"
- "github.com/ethereum/go-ethereum"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/ethclient"
- )
- type Client interface {
- SubscribeToLogs(query ethereum.FilterQuery) (<-chan types.Log, ethereum.Subscription, error)
- NextNonce(from common.Address) (uint64, error)
- TransactionByHash(hash common.Hash) (*types.Transaction, error)
- TransactionInBlock(blockHash common.Hash, txIndex uint) (*types.Transaction, error)
- Close()
- }
- type InProcessClient struct {
- client *ethclient.Client
- }
- func NewInProcessClient(client *ethclient.Client) *InProcessClient {
- return &InProcessClient{
- client: client,
- }
- }
- func (client *InProcessClient) SubscribeToLogs(query ethereum.FilterQuery) (<-chan types.Log, ethereum.Subscription, error) {
- retrievedLogsChan := make(chan types.Log)
- sub, err := client.client.SubscribeFilterLogs(context.Background(), query, retrievedLogsChan)
- return retrievedLogsChan, sub, err
- }
- func (client *InProcessClient) NextNonce(from common.Address) (uint64, error) {
- return client.client.PendingNonceAt(context.Background(), from)
- }
- func (client *InProcessClient) TransactionByHash(hash common.Hash) (*types.Transaction, error) {
- tx, _, err := client.client.TransactionByHash(context.Background(), hash)
- return tx, err
- }
- func (client *InProcessClient) TransactionInBlock(blockHash common.Hash, txIndex uint) (*types.Transaction, error) {
- tx, err := client.client.TransactionInBlock(context.Background(), blockHash, txIndex)
- if err != nil {
- return nil, err
- }
- // Fetch the underlying private tx if we got a Privacy Marker Transaction
- if tx.IsPrivacyMarker() {
- return client.client.GetPrivateTransaction(context.Background(), tx.Hash())
- }
- return tx, nil
- }
- func (client *InProcessClient) Close() {
- client.client.Close()
- }
|