Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Base Support #1150

Open
wants to merge 14 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 11 additions & 11 deletions api/worker.go
Original file line number Diff line number Diff line change
Expand Up @@ -622,25 +622,25 @@ func (w *Worker) GetTransactionFromMempoolTx(mempoolTx *bchain.MempoolTx) (*Tx,
return r, nil
}

func (w *Worker) GetContractInfo(contract string, typeFromContext bchain.TokenStandardName) (*bchain.ContractInfo, bool, error) {
func (w *Worker) GetContractInfo(contract string, standardFromContext bchain.TokenStandardName) (*bchain.ContractInfo, bool, error) {
cd, err := w.chainParser.GetAddrDescFromAddress(contract)
if err != nil {
return nil, false, err
}
return w.getContractDescriptorInfo(cd, typeFromContext)
return w.getContractDescriptorInfo(cd, standardFromContext)
}

func (w *Worker) getContractDescriptorInfo(cd bchain.AddressDescriptor, typeFromContext bchain.TokenStandardName) (*bchain.ContractInfo, bool, error) {
func (w *Worker) getContractDescriptorInfo(cd bchain.AddressDescriptor, standardFromContext bchain.TokenStandardName) (*bchain.ContractInfo, bool, error) {
var err error
validContract := true
contractInfo, err := w.db.GetContractInfo(cd, typeFromContext)
contractInfo, err := w.db.GetContractInfo(cd, standardFromContext)
if err != nil {
return nil, false, err
}
if contractInfo == nil {
// log warning only if the contract should have been known from processing of the internal data
if eth.ProcessInternalTransactions {
glog.Warningf("Contract %v %v not found in DB", cd, typeFromContext)
glog.Warningf("Contract %v %v not found in DB", cd, standardFromContext)
}
contractInfo, err = w.chain.GetContractInfo(cd)
if err != nil {
Expand All @@ -655,9 +655,9 @@ func (w *Worker) getContractDescriptorInfo(cd bchain.AddressDescriptor, typeFrom

validContract = false
} else {
if typeFromContext != bchain.UnknownTokenStandard && contractInfo.Standard == bchain.UnknownTokenStandard {
contractInfo.Standard = typeFromContext
contractInfo.Type = typeFromContext
if standardFromContext != bchain.UnknownTokenStandard && contractInfo.Standard == bchain.UnknownTokenStandard {
contractInfo.Standard = standardFromContext
contractInfo.Type = standardFromContext
}
if err = w.db.StoreContractInfo(contractInfo); err != nil {
glog.Errorf("StoreContractInfo error %v, contract %v", err, cd)
Expand All @@ -683,9 +683,9 @@ func (w *Worker) getContractDescriptorInfo(cd bchain.AddressDescriptor, typeFrom
contractInfo.Decimals = blockchainContractInfo.Decimals
}
if contractInfo.Standard == bchain.UnhandledTokenStandard {
glog.Infof("Contract %v %v [%s] handled", cd, typeFromContext, contractInfo.Name)
contractInfo.Standard = typeFromContext
contractInfo.Type = typeFromContext
glog.Infof("Contract %v %v [%s] handled", cd, standardFromContext, contractInfo.Name)
contractInfo.Standard = standardFromContext
contractInfo.Type = standardFromContext
}
if err = w.db.StoreContractInfo(contractInfo); err != nil {
glog.Errorf("StoreContractInfo error %v, contract %v", err, cd)
Expand Down
73 changes: 73 additions & 0 deletions bchain/coins/base/baserpc.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
package base

import (
"context"
"encoding/json"

"github.com/golang/glog"
"github.com/juju/errors"
"github.com/trezor/blockbook/bchain"
"github.com/trezor/blockbook/bchain/coins/eth"
)

const (
// MainNet is production network
MainNet eth.Network = 8453
)

// BaseRPC is an interface to JSON-RPC base service.
type BaseRPC struct {
*eth.EthereumRPC
}

// NewBaseRPC returns new BaseRPC instance.
func NewBaseRPC(config json.RawMessage, pushHandler func(bchain.NotificationType)) (bchain.BlockChain, error) {
c, err := eth.NewEthereumRPC(config, pushHandler)
if err != nil {
return nil, err
}

s := &BaseRPC{
EthereumRPC: c.(*eth.EthereumRPC),
}

return s, nil
}

// Initialize base rpc interface
func (b *BaseRPC) Initialize() error {
b.OpenRPC = eth.OpenRPC

rc, ec, err := b.OpenRPC(b.ChainConfig.RPCURL)
if err != nil {
return err
}

// set chain specific
b.Client = ec
b.RPC = rc
b.MainNetChainID = MainNet
b.NewBlock = eth.NewEthereumNewBlock()
b.NewTx = eth.NewEthereumNewTx()

ctx, cancel := context.WithTimeout(context.Background(), b.Timeout)
defer cancel()

id, err := b.Client.NetworkID(ctx)
if err != nil {
return err
}

// parameters for getInfo request
switch eth.Network(id.Uint64()) {
case MainNet:
b.Testnet = false
b.Network = "livenet"
default:
return errors.Errorf("Unknown network id %v", id)
}

glog.Info("rpc: block chain ", b.Network)

return nil
}
3 changes: 3 additions & 0 deletions bchain/coins/blockchain.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import (
"github.com/trezor/blockbook/bchain"
"github.com/trezor/blockbook/bchain/coins/arbitrum"
"github.com/trezor/blockbook/bchain/coins/avalanche"
"github.com/trezor/blockbook/bchain/coins/base"
"github.com/trezor/blockbook/bchain/coins/bch"
"github.com/trezor/blockbook/bchain/coins/bellcoin"
"github.com/trezor/blockbook/bchain/coins/bitcore"
Expand Down Expand Up @@ -147,6 +148,8 @@ func init() {
BlockChainFactories["Arbitrum Archive"] = arbitrum.NewArbitrumRPC
BlockChainFactories["Arbitrum Nova"] = arbitrum.NewArbitrumRPC
BlockChainFactories["Arbitrum Nova Archive"] = arbitrum.NewArbitrumRPC
BlockChainFactories["Base"] = base.NewBaseRPC
BlockChainFactories["Base Archive"] = base.NewBaseRPC
}

// NewBlockChain creates bchain.BlockChain and bchain.Mempool for the coin passed by the parameter coin
Expand Down
4 changes: 2 additions & 2 deletions bchain/coins/bsc/bscrpc.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ const (
// MainNet is production network
MainNet eth.Network = 56

// bsc token type names
// bsc token standard names
BEP20TokenStandard bchain.TokenStandardName = "BEP20"
BEP721TokenStandard bchain.TokenStandardName = "BEP721"
BEP1155TokenStandard bchain.TokenStandardName = "BEP1155"
Expand All @@ -32,7 +32,7 @@ func NewBNBSmartChainRPC(config json.RawMessage, pushHandler func(bchain.Notific
return nil, err
}

// overwrite EthereumTokenTypeMap with bsc specific token type names
// overwrite EthereumTokenStandardMap with bsc specific token standard names
bchain.EthereumTokenStandardMap = []bchain.TokenStandardName{BEP20TokenStandard, BEP721TokenStandard, BEP1155TokenStandard}

s := &BNBSmartChainRPC{
Expand Down
Loading