decred.org/dcrdex@v1.0.5/dex/networks/polygon/params.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  	"decred.org/dcrdex/dex"
     8  	dexeth "decred.org/dcrdex/dex/networks/eth"
     9  	"github.com/ethereum/go-ethereum/common"
    10  )
    11  
    12  const (
    13  	PolygonBipID = 966
    14  )
    15  
    16  var (
    17  	UnitInfo = dex.UnitInfo{
    18  		AtomicUnit: "gwei",
    19  		Conventional: dex.Denomination{
    20  			Unit:             "POL",
    21  			ConversionFactor: 1e9,
    22  		},
    23  		Alternatives: []dex.Denomination{
    24  			{
    25  				Unit:             "Szabos",
    26  				ConversionFactor: 1e6,
    27  			},
    28  			{
    29  				Unit:             "Finneys",
    30  				ConversionFactor: 1e3,
    31  			},
    32  		},
    33  		FeeRateDenom: "gas",
    34  	}
    35  
    36  	// First swap used 134434 gas Recommended Gases.Swap = 174764
    37  	//   4 additional swaps averaged 112609 gas each. Recommended Gases.SwapAdd = 146391
    38  	//   [134434 247061 359676 472279 584870]
    39  	// First redeem used 60454 gas. Recommended Gases.Redeem = 78590
    40  	//   4 additional redeems averaged 31623 gas each. recommended Gases.RedeemAdd = 41109
    41  	//   [60454 92095 123724 155329 186946]
    42  	// Average of 5 refunds: 42707. Recommended Gases.Refund = 55519
    43  	//   [42700 42712 42712 42712 42700]
    44  	v0Gases = &dexeth.Gases{
    45  		Swap:      174_000, // 134_482 https://polygonscan.com/tx/0xd568d6c832d0a96dee25212e7b08643ba395459b5b0df20d99463ec0fbca575f
    46  		SwapAdd:   146_000,
    47  		Redeem:    78_000, // 60_466 https://polygonscan.com/tx/0xf671574a711b4bc31daa1431dcf029818d6b5eb2276f4205ff17f58b66d85605
    48  		RedeemAdd: 41_000,
    49  		Refund:    55_000,
    50  	}
    51  
    52  	VersionedGases = map[uint32]*dexeth.Gases{
    53  		0: v0Gases,
    54  	}
    55  
    56  	ContractAddresses = map[uint32]map[dex.Network]common.Address{
    57  		0: {
    58  			dex.Mainnet: common.HexToAddress("0xd45e648D97Beb2ee0045E5e91d1C2C751Cd0Bc00"), // txid: 0xbb7d09fb3832b35fbbed641453a90f217a2736cf1419848887dfee2dbb14187e
    59  			dex.Testnet: common.HexToAddress("0x73bc803A2604b2c58B8680c3CE1b14489842EF16"), // txid: 0x88f656a8e432fdd50f33e67bdc39a66d24f663e33792bfab16b033dd2c609a99
    60  			dex.Simnet:  common.HexToAddress(""),                                           // Filled in by MaybeReadSimnetAddrs
    61  		},
    62  	}
    63  
    64  	MultiBalanceAddresses = map[dex.Network]common.Address{
    65  		dex.Mainnet: common.HexToAddress("0x23d8203d8E3c839F359bcC85BFB71cf0d707EDF0"), // tx: 0xc593222106c700b153977fdf290f8d9656610cd2dd88522724e85b3f7fd600cf
    66  		dex.Testnet: common.HexToAddress("0xa958d5B8a3a29E3f5f41742Fbb939A0dd93EB418"), // tx 0x692cf15b145cb45c0098bedf8a55d067b1ac994973bb62000c046b8453d8b624
    67  	}
    68  
    69  	usdcTokenID, _ = dex.BipSymbolID("usdc.polygon")
    70  	usdtTokenID, _ = dex.BipSymbolID("usdt.polygon")
    71  	wethTokenID, _ = dex.BipSymbolID("weth.polygon")
    72  	wbtcTokenID, _ = dex.BipSymbolID("wbtc.polygon")
    73  
    74  	Tokens = map[uint32]*dexeth.Token{
    75  		usdcTokenID: TokenUSDC,
    76  		usdtTokenID: TokenUSDT,
    77  		wethTokenID: TokenWETH,
    78  		wbtcTokenID: TokenWBTC,
    79  	}
    80  
    81  	TokenUSDC = &dexeth.Token{
    82  		EVMFactor: new(int64),
    83  		Token: &dex.Token{
    84  			ParentID: PolygonBipID,
    85  			Name:     "USDC",
    86  			UnitInfo: dex.UnitInfo{
    87  				AtomicUnit: "µUSD",
    88  				Conventional: dex.Denomination{
    89  					Unit:             "USDC",
    90  					ConversionFactor: 1e6,
    91  				},
    92  				Alternatives: []dex.Denomination{
    93  					{
    94  						Unit:             "cents",
    95  						ConversionFactor: 1e2,
    96  					},
    97  				},
    98  				FeeRateDenom: "gas",
    99  			},
   100  		},
   101  		NetTokens: map[dex.Network]*dexeth.NetToken{
   102  			dex.Mainnet: {
   103  				Address: common.HexToAddress("0x3c499c542cef5e3811e1192ce70d8cc03d5c3359"), // https://polygonscan.com/address/0x3c499c542cef5e3811e1192ce70d8cc03d5c3359
   104  				SwapContracts: map[uint32]*dexeth.SwapContract{
   105  					0: {
   106  						// deploy tx: https://polygonscan.com/tx/0x6e8b2a7f1f81ff8c4638937ff1f75474211b5e6c7418899f6c935ad823cdbdca
   107  						// swap contract: https://polygonscan.com/address/0x1C152f7f91E03BcA4B0000Be9f694A62A9548e7B
   108  						Address: common.HexToAddress("0x1C152f7f91E03BcA4B0000Be9f694A62A9548e7B"),
   109  						Gas: dexeth.Gases{
   110  							// First swap used 187856 gas Recommended Gases.Swap = 244212
   111  							// 	2 additional swaps averaged 112591 gas each. Recommended Gases.SwapAdd = 146368
   112  							// 	[187856 300435 413038]
   113  							Swap:    244_212,
   114  							SwapAdd: 146_368,
   115  							// First redeem used 79024 gas. Recommended Gases.Redeem = 102731
   116  							// 	2 additional redeems averaged 31623 gas each. recommended Gases.RedeemAdd = 41109
   117  							// 	[79024 110641 142270]
   118  							Redeem:    102_731,
   119  							RedeemAdd: 41_109,
   120  							// Average of 3 refunds: 64298. Recommended Gases.Refund = 83587
   121  							// 	[64302 64290 64302]
   122  							Refund: 83_587,
   123  							// Average of 2 approvals: 60166. Recommended Gases.Approve = 78215
   124  							// 	[60166 60166]
   125  							Approve: 78_215,
   126  							// Average of 1 transfers: 65500. Recommended Gases.Transfer = 85150
   127  							// 	[65500]
   128  							Transfer: 85_150,
   129  						},
   130  					},
   131  				},
   132  			},
   133  			dex.Testnet: {
   134  				Address: common.HexToAddress("0x41E94Eb019C0762f9Bfcf9Fb1E58725BfB0e7582"), // https://amoy.polygonscan.com/address/0x41E94Eb019C0762f9Bfcf9Fb1E58725BfB0e7582#readContract
   135  				SwapContracts: map[uint32]*dexeth.SwapContract{
   136  					0: {
   137  						// deploy tx: https://amoy.polygonscan.com/tx/0x61315c5cf90fdf2cd4a89d04cce6496c9ee7a2ecc18dbc5f76e4baacc80bda5e
   138  						// swap contract: https://amoy.polygonscan.com/address/0xca70D818ffff2Cd235Ab90b4fec3e6394014D294
   139  						Address: common.HexToAddress("0xca70D818ffff2Cd235Ab90b4fec3e6394014D294"),
   140  						Gas: dexeth.Gases{
   141  							// First swap used 187982 gas Recommended Gases.Swap = 244376
   142  							// 	4 additional swaps averaged 112591 gas each. Recommended Gases.SwapAdd = 146368
   143  							// 	[187982 300573 413152 525755 638346]
   144  							Swap:    244_376,
   145  							SwapAdd: 146_368,
   146  							// First redeem used 77229 gas. Recommended Gases.Redeem = 100397
   147  							// 	4 additional redeems averaged 31629 gas each. recommended Gases.RedeemAdd = 41117
   148  							// 	[77229 108858 140475 172105 203746]
   149  							Redeem:    100_397,
   150  							RedeemAdd: 41_117,
   151  							// Average of 5 refunds: 69660. Recommended Gases.Refund = 90558
   152  							// 	[69663 69663 69651 69663 69663]
   153  							Refund: 90_558, // On Amaoy recommended was actually 79067
   154  							// Average of 2 approvals: 58634. Recommended Gases.Approve = 76224
   155  							// 	[58634 58634]
   156  							Approve: 76_224,
   157  							// Average of 1 transfers: 63705. Recommended Gases.Transfer = 82816
   158  							// 	[63705]
   159  							Transfer: 82_816,
   160  						},
   161  					},
   162  				},
   163  			},
   164  			dex.Simnet: {
   165  				Address: common.Address{},
   166  				SwapContracts: map[uint32]*dexeth.SwapContract{
   167  					0: {
   168  						Address: common.Address{}, // Set in MaybeReadSimnetAddrs
   169  						Gas: dexeth.Gases{
   170  							Swap:      223_163,
   171  							SwapAdd:   146_399,
   172  							Redeem:    82_121,
   173  							RedeemAdd: 41_113,
   174  							Refund:    62_527,
   175  							Approve:   58_180,
   176  							Transfer:  64_539,
   177  						},
   178  					},
   179  				},
   180  			},
   181  		},
   182  	}
   183  
   184  	TokenUSDT = &dexeth.Token{
   185  		EVMFactor: new(int64),
   186  		Token: &dex.Token{
   187  			ParentID: PolygonBipID,
   188  			Name:     "Tether",
   189  			UnitInfo: dex.UnitInfo{
   190  				AtomicUnit: "microUSD",
   191  				Conventional: dex.Denomination{
   192  					Unit:             "USDT",
   193  					ConversionFactor: 1e6,
   194  				},
   195  			},
   196  		},
   197  		NetTokens: map[dex.Network]*dexeth.NetToken{
   198  			dex.Mainnet: {
   199  				Address: common.HexToAddress("0xc2132D05D31c914a87C6611C10748AEb04B58e8F"), // https://polygonscan.com/address/0xc2132D05D31c914a87C6611C10748AEb04B58e8F
   200  				SwapContracts: map[uint32]*dexeth.SwapContract{
   201  					0: {
   202  						// swap contract: https://polygonscan.com/address/0x97a53fEF7854f4CB846F2eaCCf847229F1E10e4f
   203  						Address: common.HexToAddress("0x97a53fEF7854f4CB846F2eaCCf847229F1E10e4f"),
   204  						// Results from client's GetGasEstimates.
   205  						//
   206  						// First swap used 181278 gas Recommended Gases.Swap = 235661
   207  						//   4 additional swaps averaged 112591 gas each. Recommended Gases.SwapAdd = 146368
   208  						//   [181278 293869 406448 519051 631642]
   209  						// First redeem used 70794 gas. Recommended Gases.Redeem = 92032
   210  						//   4 additional redeems averaged 31629 gas each. recommended Gases.RedeemAdd = 41117
   211  						//   [70794 102411 134028 165670 197311]
   212  						// Average of 5 refunds: 63123. Recommended Gases.Refund = 82059
   213  						//   [63126 63126 63114 63126 63126]
   214  						// Average of 2 approvals: 52072. Recommended Gases.Approve = 67693
   215  						//   [52072 52072]
   216  						// Average of 1 transfers: 57270. Recommended Gases.Transfer = 74451
   217  						//   [57270]
   218  						Gas: dexeth.Gases{
   219  							Swap:      235_661,
   220  							SwapAdd:   146_368,
   221  							Redeem:    122_032,
   222  							RedeemAdd: 61_117,
   223  							Refund:    82_059,
   224  							Approve:   67_693,
   225  							Transfer:  74_451,
   226  						},
   227  					},
   228  				},
   229  			},
   230  			dex.Simnet: {
   231  				Address: common.Address{},
   232  				SwapContracts: map[uint32]*dexeth.SwapContract{
   233  					0: {
   234  						Address: common.Address{}, // Set in MaybeReadSimnetAddrs
   235  						Gas: dexeth.Gases{
   236  							Swap:      223_163,
   237  							SwapAdd:   146_399,
   238  							Redeem:    82_121,
   239  							RedeemAdd: 41_113,
   240  							Refund:    62_527,
   241  							Approve:   58_180,
   242  							Transfer:  64_539,
   243  						},
   244  					},
   245  				},
   246  			},
   247  		},
   248  	}
   249  
   250  	// TokenWETH is for Wrapped ETH.
   251  	TokenWETH = &dexeth.Token{
   252  		Token: &dex.Token{
   253  			ParentID: PolygonBipID,
   254  			Name:     "Wrapped Ether",
   255  			UnitInfo: dex.UnitInfo{
   256  				AtomicUnit: "gwei",
   257  				Conventional: dex.Denomination{
   258  					Unit:             "WETH",
   259  					ConversionFactor: 1e9,
   260  				},
   261  				Alternatives: []dex.Denomination{
   262  					{
   263  						Unit:             "Szabos",
   264  						ConversionFactor: 1e6,
   265  					},
   266  					{
   267  						Unit:             "Finneys",
   268  						ConversionFactor: 1e3,
   269  					},
   270  				},
   271  				FeeRateDenom: "gas",
   272  			},
   273  		},
   274  		NetTokens: map[dex.Network]*dexeth.NetToken{
   275  			dex.Mainnet: {
   276  				Address: common.HexToAddress("0x7ceb23fd6bc0add59e62ac25578270cff1b9f619"), // https://polygonscan.com/token/0x7ceb23fd6bc0add59e62ac25578270cff1b9f619
   277  				SwapContracts: map[uint32]*dexeth.SwapContract{
   278  					0: {
   279  						// deploy tx: https://polygonscan.com/tx/0xc569774add0a9f41eace3ff6289eafd4c17fbcaafcf8b7758e0a5c4d74dcf307
   280  						// swap contract: https://polygonscan.com/address/0x878dF60d47Afa9C665dFaDCB6BF4e303C080032f
   281  						Address: common.HexToAddress("0x878dF60d47Afa9C665dFaDCB6BF4e303C080032f"),
   282  						Gas: dexeth.Gases{
   283  							// First swap used 158846 gas Recommended Gases.Swap = 206499
   284  							// 	4 additional swaps averaged 112618 gas each. Recommended Gases.SwapAdd = 146403
   285  							// 	[158846 271461 384064 496691 609318]
   286  							Swap:    206_499,
   287  							SwapAdd: 146_403,
   288  							// First redeem used 70222 gas. Recommended Gases.Redeem = 91288
   289  							// 	4 additional redeems averaged 31629 gas each. recommended Gases.RedeemAdd = 41117
   290  							// 	[70222 101851 133468 165110 196739]
   291  							// Observed an 87,334 in the wild, so bumping this
   292  							// a bit.
   293  							Redeem:    104_800,
   294  							RedeemAdd: 41_117,
   295  							// Average of 5 refunds: 50354. Recommended Gases.Refund = 65460
   296  							// 	[50350 50362 50338 50362 50362]
   297  							Refund: 65_460,
   298  							// 	[46712 26812]
   299  							Approve: 56_054,
   300  							// Average of 1 transfers: 51910. Recommended Gases.Transfer = 67483
   301  							// 	[51910]
   302  							Transfer: 67_483,
   303  						},
   304  					},
   305  				},
   306  			},
   307  		},
   308  	}
   309  
   310  	// TokenWBTC is for Wrapped BTC.
   311  	TokenWBTC = &dexeth.Token{
   312  		EVMFactor: new(int64),
   313  		Token: &dex.Token{
   314  			ParentID: PolygonBipID,
   315  			Name:     "Wrapped Bitcoin",
   316  			UnitInfo: dex.UnitInfo{
   317  				AtomicUnit: "Sats",
   318  				Conventional: dex.Denomination{
   319  					Unit:             "WBTC",
   320  					ConversionFactor: 1e8,
   321  				},
   322  				Alternatives: []dex.Denomination{
   323  					{
   324  						Unit:             "mWBTC",
   325  						ConversionFactor: 1e5,
   326  					},
   327  					{
   328  						Unit:             "µWBTC",
   329  						ConversionFactor: 1e2,
   330  					},
   331  				},
   332  				FeeRateDenom: "gas",
   333  			},
   334  		},
   335  		NetTokens: map[dex.Network]*dexeth.NetToken{
   336  			dex.Mainnet: {
   337  				Address: common.HexToAddress("0x1bfd67037b42cf73acf2047067bd4f2c47d9bfd6"), // https://polygonscan.com/token/0x1bfd67037b42cf73acf2047067bd4f2c47d9bfd6
   338  				SwapContracts: map[uint32]*dexeth.SwapContract{
   339  					0: {
   340  						// deploy tx: https://polygonscan.com/tx/0xcd84a1fa2f890d5fc1fcb0dde6c5a3bb50d9b25927ec5666b96b5ad3d6902b0a
   341  						// swap contract: https://polygonscan.com/address/0x625B7Ecd21B25b0808c4221dA281CD3A82f8b797
   342  						Address: common.HexToAddress("0x625B7Ecd21B25b0808c4221dA281CD3A82f8b797"),
   343  						Gas: dexeth.Gases{
   344  							// First swap used 181278 gas Recommended Gases.Swap = 235661
   345  							// 	4 additional swaps averaged 112591 gas each. Recommended Gases.SwapAdd = 146368
   346  							// 	[181278 293857 406460 519039 631642]
   347  							Swap:    235_661,
   348  							SwapAdd: 146_368,
   349  							// First redeem used 70794 gas. Recommended Gases.Redeem = 92032
   350  							// 	4 additional redeems averaged 31629 gas each. recommended Gases.RedeemAdd = 41117
   351  							// 	[70794 102399 134052 165646 197311]
   352  							// Values around 92k were observed in the wild, so
   353  							// this limit has been bumped up from the
   354  							// recommendation.
   355  							Redeem:    110_032,
   356  							RedeemAdd: 41_117,
   357  							// Average of 5 refunds: 63126. Recommended Gases.Refund = 82063
   358  							// 	[63126 63126 63126 63126 63126]
   359  							Refund: 82_063,
   360  							// Average of 2 approvals: 52072. Recommended Gases.Approve = 67693
   361  							// 	[52072 52072]
   362  							Approve: 67_693,
   363  							// Average of 1 transfers: 57270. Recommended Gases.Transfer = 74451
   364  							// 	[57270]
   365  							Transfer: 74_451,
   366  						},
   367  					},
   368  				},
   369  			},
   370  		},
   371  	}
   372  )
   373  
   374  // MaybeReadSimnetAddrs attempts to read the info files generated by the eth
   375  // simnet harness to populate swap contract and token addresses in
   376  // ContractAddresses and Tokens.
   377  func MaybeReadSimnetAddrs() {
   378  	dexeth.MaybeReadSimnetAddrsDir("polygon", ContractAddresses, MultiBalanceAddresses, Tokens[usdcTokenID].NetTokens[dex.Simnet], Tokens[usdtTokenID].NetTokens[dex.Simnet])
   379  }