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, ð.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] = ð.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 }