synapsecns/sanguine

View on GitHub
agents/types/chain_gas.go

Summary

Maintainability
A
0 mins
Test Coverage
package types

import "math/big"

const (
    chainGasOffsetDomain  = 0
    chainGasOffsetGasData = 4
    chainGasSize          = 16
)

// ChainGas is the ChainGas interface.
type ChainGas interface {
    // GasData is the gas data for the chain.
    GasData() GasData
    // Domain is domain id of the chain.
    Domain() uint32
}

type chainGas struct {
    gasData GasData
    domain  uint32
}

// NewChainGas creates a new chaingas.
func NewChainGas(gasData GasData, domain uint32) ChainGas {
    return &chainGas{
        gasData: gasData,
        domain:  domain,
    }
}

func (g chainGas) GasData() GasData {
    return g.gasData
}

func (g chainGas) Domain() uint32 {
    return g.domain
}

// ChainGassesToSnapGas converts a slice of ChainGas to a slice of big.Int.
func ChainGassesToSnapGas(chainGasses []ChainGas) (snapGasses []*big.Int, err error) {
    snapGasses = make([]*big.Int, len(chainGasses))
    for i, cg := range chainGasses {
        snapGas, err := EncodeChainGas(cg)
        if err != nil {
            return nil, err
        }

        snapGasses[i] = new(big.Int).SetBytes(snapGas)
    }

    return snapGasses, nil
}

var _ ChainGas = chainGas{}