Add full monorepo: virtual-banker, backend, frontend, docs, scripts, deployment
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
71
backend/chain/adapters/evm.go
Normal file
71
backend/chain/adapters/evm.go
Normal file
@@ -0,0 +1,71 @@
|
||||
package adapters
|
||||
|
||||
import (
|
||||
"context"
|
||||
"math/big"
|
||||
|
||||
"github.com/ethereum/go-ethereum/common"
|
||||
"github.com/ethereum/go-ethereum/core/types"
|
||||
"github.com/ethereum/go-ethereum/ethclient"
|
||||
)
|
||||
|
||||
// EVMAdapter implements ChainAdapter for EVM-compatible chains
|
||||
type EVMAdapter struct {
|
||||
client *ethclient.Client
|
||||
chainID int64
|
||||
}
|
||||
|
||||
// NewEVMAdapter creates a new EVM chain adapter
|
||||
func NewEVMAdapter(client *ethclient.Client, chainID int64) *EVMAdapter {
|
||||
return &EVMAdapter{
|
||||
client: client,
|
||||
chainID: chainID,
|
||||
}
|
||||
}
|
||||
|
||||
// ChainAdapter defines the interface for chain adapters
|
||||
type ChainAdapter interface {
|
||||
GetBlockByNumber(ctx context.Context, number int64) (*types.Block, error)
|
||||
GetTransaction(ctx context.Context, hash common.Hash) (*types.Transaction, bool, error)
|
||||
GetTransactionReceipt(ctx context.Context, hash common.Hash) (*types.Receipt, error)
|
||||
GetCode(ctx context.Context, address common.Address) ([]byte, error)
|
||||
GetBalance(ctx context.Context, address common.Address) (*big.Int, error)
|
||||
GetGasPrice(ctx context.Context) (*big.Int, error)
|
||||
ChainID() int64
|
||||
}
|
||||
|
||||
// GetBlockByNumber gets a block by number
|
||||
func (e *EVMAdapter) GetBlockByNumber(ctx context.Context, number int64) (*types.Block, error) {
|
||||
return e.client.BlockByNumber(ctx, big.NewInt(number))
|
||||
}
|
||||
|
||||
// GetTransaction gets a transaction by hash
|
||||
func (e *EVMAdapter) GetTransaction(ctx context.Context, hash common.Hash) (*types.Transaction, bool, error) {
|
||||
return e.client.TransactionByHash(ctx, hash)
|
||||
}
|
||||
|
||||
// GetTransactionReceipt gets a transaction receipt
|
||||
func (e *EVMAdapter) GetTransactionReceipt(ctx context.Context, hash common.Hash) (*types.Receipt, error) {
|
||||
return e.client.TransactionReceipt(ctx, hash)
|
||||
}
|
||||
|
||||
// GetCode gets contract code
|
||||
func (e *EVMAdapter) GetCode(ctx context.Context, address common.Address) ([]byte, error) {
|
||||
return e.client.CodeAt(ctx, address, nil)
|
||||
}
|
||||
|
||||
// GetBalance gets account balance
|
||||
func (e *EVMAdapter) GetBalance(ctx context.Context, address common.Address) (*big.Int, error) {
|
||||
return e.client.BalanceAt(ctx, address, nil)
|
||||
}
|
||||
|
||||
// GetGasPrice gets current gas price
|
||||
func (e *EVMAdapter) GetGasPrice(ctx context.Context) (*big.Int, error) {
|
||||
return e.client.SuggestGasPrice(ctx)
|
||||
}
|
||||
|
||||
// ChainID returns the chain ID
|
||||
func (e *EVMAdapter) ChainID() int64 {
|
||||
return e.chainID
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user