decred.org/dcrdex@v1.0.5/server/asset/polygon/polygon.go (about)

     1  // This code is available on the terms of the project LICENSE.md file,
     2  // also available online at https://blueoakcouncil.org/license/1.0.0.
     3  
     4  package polygon
     5  
     6  import (
     7  	"fmt"
     8  	"time"
     9  
    10  	"decred.org/dcrdex/dex"
    11  	dexpolygon "decred.org/dcrdex/dex/networks/polygon"
    12  	"decred.org/dcrdex/server/asset"
    13  	"decred.org/dcrdex/server/asset/eth"
    14  )
    15  
    16  var registeredTokens = make(map[uint32]*eth.VersionedToken)
    17  
    18  func registerToken(assetID uint32, ver uint32) {
    19  	token, exists := dexpolygon.Tokens[assetID]
    20  	if !exists {
    21  		panic(fmt.Sprintf("no token constructor for asset ID %d", assetID))
    22  	}
    23  	asset.RegisterToken(assetID, &eth.TokenDriver{
    24  		DriverBase: eth.DriverBase{
    25  			Ver: ver,
    26  			UI:  token.UnitInfo,
    27  			Nam: token.Name,
    28  		},
    29  		Token: token.Token,
    30  	})
    31  	registeredTokens[assetID] = &eth.VersionedToken{
    32  		Token: token,
    33  		Ver:   ver,
    34  	}
    35  }
    36  
    37  func init() {
    38  	asset.Register(BipID, &Driver{eth.Driver{
    39  		DriverBase: eth.DriverBase{
    40  			Ver: version,
    41  			UI:  dexpolygon.UnitInfo,
    42  			Nam: "Polygon",
    43  		},
    44  	}})
    45  
    46  	registerToken(usdcID, 0)
    47  	registerToken(usdtID, 0)
    48  	registerToken(wethTokenID, 0)
    49  	registerToken(wbtcTokenID, 0)
    50  
    51  	if blockPollIntervalStr != "" {
    52  		blockPollInterval, _ = time.ParseDuration(blockPollIntervalStr)
    53  		if blockPollInterval < time.Second {
    54  			panic(fmt.Sprintf("invalid value for blockPollIntervalStr: %q", blockPollIntervalStr))
    55  		}
    56  	}
    57  }
    58  
    59  const (
    60  	BipID              = 966
    61  	ethContractVersion = 0
    62  	version            = 0
    63  )
    64  
    65  var (
    66  	usdcID, _      = dex.BipSymbolID("usdc.polygon")
    67  	usdtID, _      = dex.BipSymbolID("usdt.polygon")
    68  	wethTokenID, _ = dex.BipSymbolID("weth.polygon")
    69  	wbtcTokenID, _ = dex.BipSymbolID("wbtc.polygon")
    70  
    71  	// blockPollInterval is the delay between calls to bestBlockHash to check
    72  	// for new blocks. Modify at compile time via blockPollIntervalStr:
    73  	// go build -tags lgpl -ldflags "-X 'decred.org/dcrdex/server/asset/polygon.blockPollIntervalStr=10s'"
    74  	blockPollInterval    = time.Second
    75  	blockPollIntervalStr string
    76  )
    77  
    78  type Driver struct {
    79  	eth.Driver
    80  }
    81  
    82  // Setup creates the ETH backend. Start the backend with its Run method.
    83  func (d *Driver) Setup(cfg *asset.BackendConfig) (asset.Backend, error) {
    84  	var chainID uint64
    85  	switch cfg.Net {
    86  	case dex.Mainnet:
    87  		chainID = dexpolygon.BorMainnetChainConfig.ChainID.Uint64()
    88  	case dex.Testnet:
    89  		chainID = dexpolygon.AmoyChainConfig.ChainID.Uint64()
    90  	default:
    91  		chainID = 90001
    92  	}
    93  
    94  	return eth.NewEVMBackend(cfg, chainID, dexpolygon.ContractAddresses, registeredTokens)
    95  }