github.com/0xPolygon/supernets2-node@v0.0.0-20230711153321-2fe574524eaa/jsonrpc/client/zkevm.go (about)

     1  package client
     2  
     3  import (
     4  	"context"
     5  	"encoding/json"
     6  	"fmt"
     7  	"math/big"
     8  
     9  	"github.com/0xPolygon/supernets2-node/hex"
    10  	"github.com/0xPolygon/supernets2-node/jsonrpc/types"
    11  )
    12  
    13  // BatchNumber returns the latest batch number
    14  func (c *Client) BatchNumber(ctx context.Context) (uint64, error) {
    15  	response, err := JSONRPCCall(c.url, "zkevm_batchNumber")
    16  	if err != nil {
    17  		return 0, err
    18  	}
    19  
    20  	if response.Error != nil {
    21  		return 0, fmt.Errorf("%v %v", response.Error.Code, response.Error.Message)
    22  	}
    23  
    24  	var result string
    25  	err = json.Unmarshal(response.Result, &result)
    26  	if err != nil {
    27  		return 0, err
    28  	}
    29  
    30  	bigBatchNumber := hex.DecodeBig(result)
    31  	batchNumber := bigBatchNumber.Uint64()
    32  
    33  	return batchNumber, nil
    34  }
    35  
    36  // BatchByNumber returns a batch from the current canonical chain. If number is nil, the
    37  // latest known batch is returned.
    38  func (c *Client) BatchByNumber(ctx context.Context, number *big.Int) (*types.Batch, error) {
    39  	response, err := JSONRPCCall(c.url, "zkevm_getBatchByNumber", types.ToBatchNumArg(number), true)
    40  	if err != nil {
    41  		return nil, err
    42  	}
    43  
    44  	if response.Error != nil {
    45  		return nil, fmt.Errorf("%v %v", response.Error.Code, response.Error.Message)
    46  	}
    47  
    48  	var result *types.Batch
    49  	err = json.Unmarshal(response.Result, &result)
    50  	if err != nil {
    51  		return nil, err
    52  	}
    53  
    54  	return result, nil
    55  }