@pioneer-platform/uniswap-client 0.0.29 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/package.json +16 -25
  3. package/tsconfig.json +28 -8
  4. package/LICENSE +0 -674
  5. package/lib/constants/chainInfo.d.ts +0 -47
  6. package/lib/constants/chainInfo.js +0 -251
  7. package/lib/constants/chains.d.ts +0 -46
  8. package/lib/constants/chains.js +0 -137
  9. package/lib/constants/chains.test.d.ts +0 -1
  10. package/lib/constants/chains.test.js +0 -26
  11. package/lib/constants/governance.d.ts +0 -8
  12. package/lib/constants/governance.js +0 -24
  13. package/lib/constants/lists.d.ts +0 -12
  14. package/lib/constants/lists.js +0 -64
  15. package/lib/constants/localCurrencies.d.ts +0 -6
  16. package/lib/constants/localCurrencies.js +0 -94
  17. package/lib/constants/localCurrencyIcons.d.ts +0 -18
  18. package/lib/constants/localCurrencyIcons.js +0 -298
  19. package/lib/constants/locales.d.ts +0 -6
  20. package/lib/constants/locales.js +0 -71
  21. package/lib/constants/misc.d.ts +0 -17
  22. package/lib/constants/misc.js +0 -31
  23. package/lib/constants/networks.d.ts +0 -21
  24. package/lib/constants/networks.js +0 -170
  25. package/lib/constants/proposals/index.d.ts +0 -5
  26. package/lib/constants/proposals/index.js +0 -8
  27. package/lib/constants/proposals/polygon_proposal_title.d.ts +0 -1
  28. package/lib/constants/proposals/polygon_proposal_title.js +0 -4
  29. package/lib/constants/proposals/uniswap_grants_proposal_description.d.ts +0 -1
  30. package/lib/constants/proposals/uniswap_grants_proposal_description.js +0 -4
  31. package/lib/constants/providers.d.ts +0 -19
  32. package/lib/constants/providers.js +0 -33
  33. package/lib/constants/routing.d.ts +0 -16
  34. package/lib/constants/routing.js +0 -123
  35. package/lib/constants/routing.test.d.ts +0 -1
  36. package/lib/constants/routing.test.js +0 -32
  37. package/lib/constants/supportArticles.d.ts +0 -13
  38. package/lib/constants/supportArticles.js +0 -17
  39. package/lib/constants/tokenLists/broken.tokenlist.json +0 -22
  40. package/lib/constants/tokenLogoLookup.d.ts +0 -8
  41. package/lib/constants/tokenLogoLookup.js +0 -48
  42. package/lib/constants/tokenSafety.js +0 -129
  43. package/lib/constants/tokenSafetyLookup.d.ts +0 -18
  44. package/lib/constants/tokenSafetyLookup.js +0 -66
  45. package/lib/constants/tokenSaftey.test.d.ts +0 -1
  46. package/lib/constants/tokenSaftey.test.js +0 -31
  47. package/lib/constants/tokens.d.ts +0 -70
  48. package/lib/constants/tokens.js +0 -289
  49. package/lib/index.d.ts +0 -1
  50. package/lib/index.js +0 -1045
  51. package/lib/routing/clientSideSmartOrderRouter.d.ts +0 -5
  52. package/lib/routing/clientSideSmartOrderRouter.js +0 -151
  53. package/lib/routing/gas.d.ts +0 -5
  54. package/lib/routing/gas.js +0 -158
  55. package/lib/routing/types.d.ts +0 -393
  56. package/lib/routing/types.js +0 -424
  57. package/lib/routing/utils.d.ts +0 -28
  58. package/lib/routing/utils.js +0 -319
  59. package/lib/rpc/AppJsonRpcProvider.d.ts +0 -44
  60. package/lib/rpc/AppJsonRpcProvider.js +0 -183
  61. package/lib/rpc/ConfiguredJsonRpcProvider.d.ts +0 -8
  62. package/lib/rpc/ConfiguredJsonRpcProvider.js +0 -35
  63. package/lib/utils/contracts/getContract.d.ts +0 -3
  64. package/lib/utils/contracts/getContract.js +0 -29
  65. package/lib/utils/transformSwapRouteToGetQuoteResult.d.ts +0 -4
  66. package/lib/utils/transformSwapRouteToGetQuoteResult.js +0 -116
  67. package/lib/utils/uniswapData.d.ts +0 -21
  68. package/lib/utils/uniswapData.js +0 -217
@@ -1,116 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.transformSwapRouteToGetQuoteResult = void 0;
4
- var router_sdk_1 = require("@uniswap/router-sdk");
5
- var sdk_core_1 = require("@uniswap/sdk-core");
6
- // This file is lazy-loaded, so the import of smart-order-router is intentional.
7
- // eslint-disable-next-line @typescript-eslint/no-restricted-imports
8
- var smart_order_router_1 = require("@uniswap/smart-order-router");
9
- var v3_sdk_1 = require("@uniswap/v3-sdk");
10
- var types_1 = require("../routing/types");
11
- // from routing-api (https://github.com/Uniswap/routing-api/blob/main/lib/handlers/quote/quote.ts#L243-L311)
12
- function transformSwapRouteToGetQuoteResult(tradeType, amount, _a) {
13
- var quote = _a.quote, quoteGasAdjusted = _a.quoteGasAdjusted, route = _a.route, estimatedGasUsed = _a.estimatedGasUsed, estimatedGasUsedQuoteToken = _a.estimatedGasUsedQuoteToken, estimatedGasUsedUSD = _a.estimatedGasUsedUSD, gasPriceWei = _a.gasPriceWei, methodParameters = _a.methodParameters, blockNumber = _a.blockNumber;
14
- var routeResponse = [];
15
- for (var _i = 0, route_1 = route; _i < route_1.length; _i++) {
16
- var subRoute = route_1[_i];
17
- var amount_1 = subRoute.amount, quote_1 = subRoute.quote, tokenPath = subRoute.tokenPath;
18
- var pools = subRoute.protocol === router_sdk_1.Protocol.V2 ? subRoute.route.pairs : subRoute.route.pools;
19
- var curRoute = [];
20
- for (var i = 0; i < pools.length; i++) {
21
- var nextPool = pools[i];
22
- var tokenIn = tokenPath[i];
23
- var tokenOut = tokenPath[i + 1];
24
- var edgeAmountIn = undefined;
25
- if (i === 0) {
26
- edgeAmountIn = tradeType === sdk_core_1.TradeType.EXACT_INPUT ? amount_1.quotient.toString() : quote_1.quotient.toString();
27
- }
28
- var edgeAmountOut = undefined;
29
- if (i === pools.length - 1) {
30
- edgeAmountOut = tradeType === sdk_core_1.TradeType.EXACT_INPUT ? quote_1.quotient.toString() : amount_1.quotient.toString();
31
- }
32
- if (nextPool instanceof v3_sdk_1.Pool) {
33
- curRoute.push({
34
- type: 'v3-pool',
35
- tokenIn: {
36
- chainId: tokenIn.chainId,
37
- decimals: tokenIn.decimals,
38
- address: tokenIn.address,
39
- symbol: tokenIn.symbol,
40
- },
41
- tokenOut: {
42
- chainId: tokenOut.chainId,
43
- decimals: tokenOut.decimals,
44
- address: tokenOut.address,
45
- symbol: tokenOut.symbol,
46
- },
47
- fee: nextPool.fee.toString(),
48
- liquidity: nextPool.liquidity.toString(),
49
- sqrtRatioX96: nextPool.sqrtRatioX96.toString(),
50
- tickCurrent: nextPool.tickCurrent.toString(),
51
- amountIn: edgeAmountIn,
52
- amountOut: edgeAmountOut,
53
- });
54
- }
55
- else {
56
- var reserve0 = nextPool.reserve0;
57
- var reserve1 = nextPool.reserve1;
58
- curRoute.push({
59
- type: 'v2-pool',
60
- tokenIn: {
61
- chainId: tokenIn.chainId,
62
- decimals: tokenIn.decimals,
63
- address: tokenIn.address,
64
- symbol: tokenIn.symbol,
65
- },
66
- tokenOut: {
67
- chainId: tokenOut.chainId,
68
- decimals: tokenOut.decimals,
69
- address: tokenOut.address,
70
- symbol: tokenOut.symbol,
71
- },
72
- reserve0: {
73
- token: {
74
- chainId: reserve0.currency.wrapped.chainId,
75
- decimals: reserve0.currency.wrapped.decimals,
76
- address: reserve0.currency.wrapped.address,
77
- symbol: reserve0.currency.wrapped.symbol,
78
- },
79
- quotient: reserve0.quotient.toString(),
80
- },
81
- reserve1: {
82
- token: {
83
- chainId: reserve1.currency.wrapped.chainId,
84
- decimals: reserve1.currency.wrapped.decimals,
85
- address: reserve1.currency.wrapped.address,
86
- symbol: reserve1.currency.wrapped.symbol,
87
- },
88
- quotient: reserve1.quotient.toString(),
89
- },
90
- amountIn: edgeAmountIn,
91
- amountOut: edgeAmountOut,
92
- });
93
- }
94
- }
95
- routeResponse.push(curRoute);
96
- }
97
- var result = {
98
- methodParameters: methodParameters,
99
- blockNumber: blockNumber.toString(),
100
- amount: amount.quotient.toString(),
101
- amountDecimals: amount.toExact(),
102
- quote: quote.quotient.toString(),
103
- quoteDecimals: quote.toExact(),
104
- quoteGasAdjusted: quoteGasAdjusted.quotient.toString(),
105
- quoteGasAdjustedDecimals: quoteGasAdjusted.toExact(),
106
- gasUseEstimateQuote: estimatedGasUsedQuoteToken.quotient.toString(),
107
- gasUseEstimateQuoteDecimals: estimatedGasUsedQuoteToken.toExact(),
108
- gasUseEstimate: estimatedGasUsed.toString(),
109
- gasUseEstimateUSD: estimatedGasUsedUSD.toExact(),
110
- gasPriceWei: gasPriceWei.toString(),
111
- route: routeResponse,
112
- routeString: (0, smart_order_router_1.routeAmountsToString)(route),
113
- };
114
- return { state: types_1.QuoteState.SUCCESS, data: { routing: types_1.URAQuoteType.CLASSIC, quote: result, allQuotes: [] } };
115
- }
116
- exports.transformSwapRouteToGetQuoteResult = transformSwapRouteToGetQuoteResult;
@@ -1,21 +0,0 @@
1
- import { MixedRouteTrade, Trade as RouterTrade } from '@uniswap/router-sdk';
2
- import { Trade as V2Trade, Pair } from '@uniswap/v2-sdk';
3
- import { Trade as V3Trade, Pool, FeeAmount } from '@uniswap/v3-sdk';
4
- import { TradeType, Ether, Token, Currency } from '@uniswap/sdk-core';
5
- export declare const ETHER: Ether;
6
- export declare const WETH: Token;
7
- export declare const DAI: Token;
8
- export declare const USDC: Token;
9
- export declare const FEE_AMOUNT = FeeAmount.MEDIUM;
10
- type UniswapPools = {
11
- WETH_USDC_V2: Pair;
12
- USDC_DAI_V2: Pair;
13
- WETH_USDC_V3: Pool;
14
- WETH_USDC_V3_LOW_FEE: Pool;
15
- USDC_DAI_V3: Pool;
16
- };
17
- export declare function getUniswapPools(forkBlock?: number): Promise<UniswapPools>;
18
- export declare function getPair(tokenA: Token, tokenB: Token, blockNumber: number): Promise<Pair>;
19
- export declare function getPool(tokenA: Token, tokenB: Token, feeAmount: FeeAmount, blockNumber: number): Promise<Pool>;
20
- export declare function buildTrade(trades: (V2Trade<Currency, Currency, TradeType> | V3Trade<Currency, Currency, TradeType> | MixedRouteTrade<Currency, Currency, TradeType>)[]): RouterTrade<Currency, Currency, TradeType>;
21
- export {};
@@ -1,217 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __generator = (this && this.__generator) || function (thisArg, body) {
12
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
- function verb(n) { return function (v) { return step([n, v]); }; }
15
- function step(op) {
16
- if (f) throw new TypeError("Generator is already executing.");
17
- while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
- if (y = 0, t) op = [op[0] & 2, t.value];
20
- switch (op[0]) {
21
- case 0: case 1: t = op; break;
22
- case 4: _.label++; return { value: op[1], done: false };
23
- case 5: _.label++; y = op[1]; op = [0]; continue;
24
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
- default:
26
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
- if (t[2]) _.ops.pop();
31
- _.trys.pop(); continue;
32
- }
33
- op = body.call(thisArg, _);
34
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
- }
37
- };
38
- var __importDefault = (this && this.__importDefault) || function (mod) {
39
- return (mod && mod.__esModule) ? mod : { "default": mod };
40
- };
41
- Object.defineProperty(exports, "__esModule", { value: true });
42
- exports.buildTrade = exports.getPool = exports.getPair = exports.getUniswapPools = exports.FEE_AMOUNT = exports.USDC = exports.DAI = exports.WETH = exports.ETHER = void 0;
43
- var jsbi_1 = __importDefault(require("jsbi"));
44
- var ethers_1 = require("ethers");
45
- var router_sdk_1 = require("@uniswap/router-sdk");
46
- var v2_sdk_1 = require("@uniswap/v2-sdk");
47
- var v3_sdk_1 = require("@uniswap/v3-sdk");
48
- // import { SwapOptions } from '../../src'
49
- var sdk_core_1 = require("@uniswap/sdk-core");
50
- var UniswapV3Pool_json_1 = __importDefault(require("@uniswap/v3-core/artifacts/contracts/UniswapV3Pool.sol/UniswapV3Pool.json"));
51
- // import { TEST_RECIPIENT_ADDRESS } from './addresses'
52
- var V2_FACTORY = '0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f';
53
- var V2_ABI = [
54
- {
55
- constant: true,
56
- inputs: [],
57
- name: 'getReserves',
58
- outputs: [
59
- {
60
- internalType: 'uint112',
61
- name: 'reserve0',
62
- type: 'uint112',
63
- },
64
- {
65
- internalType: 'uint112',
66
- name: 'reserve1',
67
- type: 'uint112',
68
- },
69
- {
70
- internalType: 'uint32',
71
- name: 'blockTimestampLast',
72
- type: 'uint32',
73
- },
74
- ],
75
- payable: false,
76
- stateMutability: 'view',
77
- type: 'function',
78
- },
79
- ];
80
- var FORK_BLOCK = 16075500;
81
- exports.ETHER = sdk_core_1.Ether.onChain(1);
82
- exports.WETH = new sdk_core_1.Token(1, '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', 18, 'WETH', 'Wrapped Ether');
83
- exports.DAI = new sdk_core_1.Token(1, '0x6B175474E89094C44Da98b954EedeAC495271d0F', 18, 'DAI', 'dai');
84
- exports.USDC = new sdk_core_1.Token(1, '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', 6, 'USDC', 'USD Coin');
85
- exports.FEE_AMOUNT = v3_sdk_1.FeeAmount.MEDIUM;
86
- function getUniswapPools(forkBlock) {
87
- return __awaiter(this, void 0, void 0, function () {
88
- var fork, WETH_USDC_V2, USDC_DAI_V2, WETH_USDC_V3, WETH_USDC_V3_LOW_FEE, USDC_DAI_V3;
89
- return __generator(this, function (_a) {
90
- switch (_a.label) {
91
- case 0:
92
- fork = forkBlock !== null && forkBlock !== void 0 ? forkBlock : FORK_BLOCK;
93
- return [4 /*yield*/, getPair(exports.WETH, exports.USDC, fork)];
94
- case 1:
95
- WETH_USDC_V2 = _a.sent();
96
- return [4 /*yield*/, getPair(exports.USDC, exports.DAI, fork)];
97
- case 2:
98
- USDC_DAI_V2 = _a.sent();
99
- return [4 /*yield*/, getPool(exports.WETH, exports.USDC, exports.FEE_AMOUNT, fork)];
100
- case 3:
101
- WETH_USDC_V3 = _a.sent();
102
- return [4 /*yield*/, getPool(exports.WETH, exports.USDC, v3_sdk_1.FeeAmount.LOW, fork)];
103
- case 4:
104
- WETH_USDC_V3_LOW_FEE = _a.sent();
105
- return [4 /*yield*/, getPool(exports.USDC, exports.DAI, v3_sdk_1.FeeAmount.LOW, fork)];
106
- case 5:
107
- USDC_DAI_V3 = _a.sent();
108
- return [2 /*return*/, {
109
- WETH_USDC_V2: WETH_USDC_V2,
110
- USDC_DAI_V2: USDC_DAI_V2,
111
- WETH_USDC_V3: WETH_USDC_V3,
112
- WETH_USDC_V3_LOW_FEE: WETH_USDC_V3_LOW_FEE,
113
- USDC_DAI_V3: USDC_DAI_V3,
114
- }];
115
- }
116
- });
117
- });
118
- }
119
- exports.getUniswapPools = getUniswapPools;
120
- function getProvider() {
121
- return new ethers_1.ethers.providers.JsonRpcProvider(process.env['FORK_URL']);
122
- }
123
- function getPair(tokenA, tokenB, blockNumber) {
124
- return __awaiter(this, void 0, void 0, function () {
125
- var pairAddress, contract, _a, reserve0, reserve1, _b, token0, token1;
126
- return __generator(this, function (_c) {
127
- switch (_c.label) {
128
- case 0:
129
- pairAddress = (0, v2_sdk_1.computePairAddress)({ factoryAddress: V2_FACTORY, tokenA: tokenA, tokenB: tokenB });
130
- contract = new ethers_1.ethers.Contract(pairAddress, V2_ABI, getProvider());
131
- return [4 /*yield*/, contract.getReserves({ blockTag: blockNumber })];
132
- case 1:
133
- _a = _c.sent(), reserve0 = _a.reserve0, reserve1 = _a.reserve1;
134
- _b = tokenA.sortsBefore(tokenB) ? [tokenA, tokenB] : [tokenB, tokenA] // does safety checks
135
- , token0 = _b[0], token1 = _b[1];
136
- return [2 /*return*/, new v2_sdk_1.Pair(sdk_core_1.CurrencyAmount.fromRawAmount(token0, reserve0), sdk_core_1.CurrencyAmount.fromRawAmount(token1, reserve1))];
137
- }
138
- });
139
- });
140
- }
141
- exports.getPair = getPair;
142
- function getPool(tokenA, tokenB, feeAmount, blockNumber) {
143
- return __awaiter(this, void 0, void 0, function () {
144
- var _a, token0, token1, poolAddress, contract, liquidity, _b, sqrtPriceX96, tick;
145
- return __generator(this, function (_c) {
146
- switch (_c.label) {
147
- case 0:
148
- _a = tokenA.sortsBefore(tokenB) ? [tokenA, tokenB] : [tokenB, tokenA] // does safety checks
149
- , token0 = _a[0], token1 = _a[1];
150
- poolAddress = v3_sdk_1.Pool.getAddress(token0, token1, feeAmount);
151
- contract = new ethers_1.ethers.Contract(poolAddress, UniswapV3Pool_json_1.default.abi, getProvider());
152
- return [4 /*yield*/, contract.liquidity({ blockTag: blockNumber })];
153
- case 1:
154
- liquidity = _c.sent();
155
- return [4 /*yield*/, contract.slot0({ blockTag: blockNumber })];
156
- case 2:
157
- _b = _c.sent(), sqrtPriceX96 = _b.sqrtPriceX96, tick = _b.tick;
158
- liquidity = jsbi_1.default.BigInt(liquidity.toString());
159
- sqrtPriceX96 = jsbi_1.default.BigInt(sqrtPriceX96.toString());
160
- return [2 /*return*/, new v3_sdk_1.Pool(token0, token1, feeAmount, sqrtPriceX96, liquidity, tick, [
161
- {
162
- index: (0, v3_sdk_1.nearestUsableTick)(v3_sdk_1.TickMath.MIN_TICK, v3_sdk_1.TICK_SPACINGS[feeAmount]),
163
- liquidityNet: liquidity,
164
- liquidityGross: liquidity,
165
- },
166
- {
167
- index: (0, v3_sdk_1.nearestUsableTick)(v3_sdk_1.TickMath.MAX_TICK, v3_sdk_1.TICK_SPACINGS[feeAmount]),
168
- liquidityNet: jsbi_1.default.multiply(liquidity, jsbi_1.default.BigInt('-1')),
169
- liquidityGross: liquidity,
170
- },
171
- ])];
172
- }
173
- });
174
- });
175
- }
176
- exports.getPool = getPool;
177
- // use some sane defaults
178
- // export function swapOptions(options: Partial<SwapOptions>): SwapOptions {
179
- // // If theres a fee this counts as "slippage" for the amount out, so take it into account
180
- // let slippageTolerance = new Percent(5, 100)
181
- // if (!!options.fee) slippageTolerance = slippageTolerance.add(options.fee.fee)
182
- // return Object.assign(
183
- // {
184
- // slippageTolerance,
185
- // recipient: TEST_RECIPIENT_ADDRESS,
186
- // },
187
- // options
188
- // )
189
- // }
190
- // alternative constructor to create from protocol-specific sdks
191
- function buildTrade(trades) {
192
- return new router_sdk_1.Trade({
193
- v2Routes: trades
194
- .filter(function (trade) { return trade instanceof v2_sdk_1.Trade; })
195
- .map(function (trade) { return ({
196
- routev2: trade.route,
197
- inputAmount: trade.inputAmount,
198
- outputAmount: trade.outputAmount,
199
- }); }),
200
- v3Routes: trades
201
- .filter(function (trade) { return trade instanceof v3_sdk_1.Trade; })
202
- .map(function (trade) { return ({
203
- routev3: trade.route,
204
- inputAmount: trade.inputAmount,
205
- outputAmount: trade.outputAmount,
206
- }); }),
207
- mixedRoutes: trades
208
- .filter(function (trade) { return trade instanceof router_sdk_1.MixedRouteTrade; })
209
- .map(function (trade) { return ({
210
- mixedRoute: trade.route,
211
- inputAmount: trade.inputAmount,
212
- outputAmount: trade.outputAmount,
213
- }); }),
214
- tradeType: trades[0].tradeType,
215
- });
216
- }
217
- exports.buildTrade = buildTrade;