@uniswap/sdk-core 7.6.0 → 7.7.0

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 (246) hide show
  1. package/dist/{addresses.d.ts → cjs/src/addresses.d.ts} +58 -58
  2. package/dist/cjs/src/addresses.js +433 -0
  3. package/dist/cjs/src/addresses.js.map +1 -0
  4. package/dist/cjs/src/addresses.test.d.ts +1 -0
  5. package/dist/cjs/src/addresses.test.js +41 -0
  6. package/dist/cjs/src/addresses.test.js.map +1 -0
  7. package/dist/{chains.d.ts → cjs/src/chains.d.ts} +44 -44
  8. package/dist/cjs/src/chains.js +79 -0
  9. package/dist/cjs/src/chains.js.map +1 -0
  10. package/dist/{constants.d.ts → cjs/src/constants.d.ts} +12 -12
  11. package/dist/cjs/src/constants.js +18 -0
  12. package/dist/cjs/src/constants.js.map +1 -0
  13. package/dist/{entities → cjs/src/entities}/baseCurrency.d.ts +49 -49
  14. package/dist/cjs/src/entities/baseCurrency.js +27 -0
  15. package/dist/cjs/src/entities/baseCurrency.js.map +1 -0
  16. package/dist/{entities → cjs/src/entities}/currency.d.ts +3 -3
  17. package/dist/cjs/src/entities/currency.js +3 -0
  18. package/dist/cjs/src/entities/currency.js.map +1 -0
  19. package/dist/cjs/src/entities/currency.test.d.ts +1 -0
  20. package/dist/cjs/src/entities/currency.test.js +27 -0
  21. package/dist/cjs/src/entities/currency.test.js.map +1 -0
  22. package/dist/{entities → cjs/src/entities}/ether.d.ts +13 -13
  23. package/dist/cjs/src/entities/ether.js +30 -0
  24. package/dist/cjs/src/entities/ether.js.map +1 -0
  25. package/dist/cjs/src/entities/ether.test.d.ts +1 -0
  26. package/dist/cjs/src/entities/ether.test.js +19 -0
  27. package/dist/cjs/src/entities/ether.test.js.map +1 -0
  28. package/dist/{entities → cjs/src/entities}/fractions/currencyAmount.d.ts +31 -31
  29. package/dist/cjs/src/entities/fractions/currencyAmount.js +72 -0
  30. package/dist/cjs/src/entities/fractions/currencyAmount.js.map +1 -0
  31. package/dist/cjs/src/entities/fractions/currencyAmount.test.d.ts +1 -0
  32. package/dist/cjs/src/entities/fractions/currencyAmount.test.js +99 -0
  33. package/dist/cjs/src/entities/fractions/currencyAmount.test.js.map +1 -0
  34. package/dist/{entities → cjs/src/entities}/fractions/fraction.d.ts +24 -24
  35. package/dist/cjs/src/entities/fractions/fraction.js +104 -0
  36. package/dist/cjs/src/entities/fractions/fraction.js.map +1 -0
  37. package/dist/cjs/src/entities/fractions/fraction.test.d.ts +1 -0
  38. package/dist/cjs/src/entities/fractions/fraction.test.js +86 -0
  39. package/dist/cjs/src/entities/fractions/fraction.test.js.map +1 -0
  40. package/dist/{entities → cjs/src/entities}/fractions/index.d.ts +4 -4
  41. package/dist/cjs/src/entities/fractions/index.js +12 -0
  42. package/dist/cjs/src/entities/fractions/index.js.map +1 -0
  43. package/dist/{entities → cjs/src/entities}/fractions/percent.d.ts +14 -14
  44. package/dist/cjs/src/entities/fractions/percent.js +43 -0
  45. package/dist/cjs/src/entities/fractions/percent.js.map +1 -0
  46. package/dist/cjs/src/entities/fractions/percent.test.d.ts +1 -0
  47. package/dist/cjs/src/entities/fractions/percent.test.js +53 -0
  48. package/dist/cjs/src/entities/fractions/percent.test.js.map +1 -0
  49. package/dist/{entities → cjs/src/entities}/fractions/price.d.ts +38 -38
  50. package/dist/cjs/src/entities/fractions/price.js +73 -0
  51. package/dist/cjs/src/entities/fractions/price.js.map +1 -0
  52. package/dist/cjs/src/entities/fractions/price.test.d.ts +1 -0
  53. package/dist/cjs/src/entities/fractions/price.test.js +58 -0
  54. package/dist/cjs/src/entities/fractions/price.test.js.map +1 -0
  55. package/dist/{entities → cjs/src/entities}/index.d.ts +6 -6
  56. package/dist/cjs/src/entities/index.js +10 -0
  57. package/dist/cjs/src/entities/index.js.map +1 -0
  58. package/dist/{entities → cjs/src/entities}/nativeCurrency.d.ts +8 -8
  59. package/dist/cjs/src/entities/nativeCurrency.js +16 -0
  60. package/dist/cjs/src/entities/nativeCurrency.js.map +1 -0
  61. package/dist/{entities → cjs/src/entities}/token.d.ts +48 -48
  62. package/dist/cjs/src/entities/token.js +69 -0
  63. package/dist/cjs/src/entities/token.js.map +1 -0
  64. package/dist/cjs/src/entities/token.test.d.ts +1 -0
  65. package/dist/cjs/src/entities/token.test.js +74 -0
  66. package/dist/cjs/src/entities/token.test.js.map +1 -0
  67. package/dist/{entities → cjs/src/entities}/weth9.d.ts +7 -7
  68. package/dist/cjs/src/entities/weth9.js +35 -0
  69. package/dist/cjs/src/entities/weth9.js.map +1 -0
  70. package/dist/{index.d.ts → cjs/src/index.d.ts} +5 -5
  71. package/dist/cjs/src/index.js +9 -0
  72. package/dist/cjs/src/index.js.map +1 -0
  73. package/dist/{utils → cjs/src/utils}/computePriceImpact.d.ts +8 -8
  74. package/dist/cjs/src/utils/computePriceImpact.js +18 -0
  75. package/dist/cjs/src/utils/computePriceImpact.js.map +1 -0
  76. package/dist/cjs/src/utils/computePriceImpact.test.d.ts +1 -0
  77. package/dist/cjs/src/utils/computePriceImpact.test.js +20 -0
  78. package/dist/cjs/src/utils/computePriceImpact.test.js.map +1 -0
  79. package/dist/{utils → cjs/src/utils}/computeZksyncCreate2Address.d.ts +2 -2
  80. package/dist/cjs/src/utils/computeZksyncCreate2Address.js +15 -0
  81. package/dist/cjs/src/utils/computeZksyncCreate2Address.js.map +1 -0
  82. package/dist/{utils → cjs/src/utils}/index.d.ts +5 -5
  83. package/dist/cjs/src/utils/index.js +14 -0
  84. package/dist/cjs/src/utils/index.js.map +1 -0
  85. package/dist/{utils → cjs/src/utils}/sortedInsert.d.ts +1 -1
  86. package/dist/cjs/src/utils/sortedInsert.js +38 -0
  87. package/dist/cjs/src/utils/sortedInsert.js.map +1 -0
  88. package/dist/cjs/src/utils/sortedInsert.test.d.ts +1 -0
  89. package/dist/cjs/src/utils/sortedInsert.test.js +60 -0
  90. package/dist/cjs/src/utils/sortedInsert.test.js.map +1 -0
  91. package/dist/{utils → cjs/src/utils}/sqrt.d.ts +7 -7
  92. package/dist/cjs/src/utils/sqrt.js +32 -0
  93. package/dist/cjs/src/utils/sqrt.js.map +1 -0
  94. package/dist/cjs/src/utils/sqrt.test.d.ts +1 -0
  95. package/dist/cjs/src/utils/sqrt.test.js +26 -0
  96. package/dist/cjs/src/utils/sqrt.test.js.map +1 -0
  97. package/dist/{utils → cjs/src/utils}/validateAndParseAddress.d.ts +10 -10
  98. package/dist/cjs/src/utils/validateAndParseAddress.js +31 -0
  99. package/dist/cjs/src/utils/validateAndParseAddress.js.map +1 -0
  100. package/dist/cjs/src/utils/validateAndParseAddress.test.d.ts +1 -0
  101. package/dist/cjs/src/utils/validateAndParseAddress.test.js +32 -0
  102. package/dist/cjs/src/utils/validateAndParseAddress.test.js.map +1 -0
  103. package/dist/esm/src/addresses.d.ts +58 -0
  104. package/dist/esm/src/addresses.js +429 -0
  105. package/dist/esm/src/addresses.js.map +1 -0
  106. package/dist/esm/src/addresses.test.d.ts +1 -0
  107. package/dist/esm/src/addresses.test.js +39 -0
  108. package/dist/esm/src/addresses.test.js.map +1 -0
  109. package/dist/esm/src/chains.d.ts +44 -0
  110. package/dist/esm/src/chains.js +76 -0
  111. package/dist/esm/src/chains.js.map +1 -0
  112. package/dist/esm/src/constants.d.ts +12 -0
  113. package/dist/esm/src/constants.js +14 -0
  114. package/dist/esm/src/constants.js.map +1 -0
  115. package/dist/esm/src/entities/baseCurrency.d.ts +49 -0
  116. package/dist/esm/src/entities/baseCurrency.js +22 -0
  117. package/dist/esm/src/entities/baseCurrency.js.map +1 -0
  118. package/dist/esm/src/entities/currency.d.ts +3 -0
  119. package/dist/esm/src/entities/currency.js +2 -0
  120. package/dist/esm/src/entities/currency.js.map +1 -0
  121. package/dist/esm/src/entities/currency.test.d.ts +1 -0
  122. package/dist/esm/src/entities/currency.test.js +25 -0
  123. package/dist/esm/src/entities/currency.test.js.map +1 -0
  124. package/dist/esm/src/entities/ether.d.ts +13 -0
  125. package/dist/esm/src/entities/ether.js +25 -0
  126. package/dist/esm/src/entities/ether.js.map +1 -0
  127. package/dist/esm/src/entities/ether.test.d.ts +1 -0
  128. package/dist/esm/src/entities/ether.test.js +17 -0
  129. package/dist/esm/src/entities/ether.test.js.map +1 -0
  130. package/dist/esm/src/entities/fractions/currencyAmount.d.ts +31 -0
  131. package/dist/esm/src/entities/fractions/currencyAmount.js +67 -0
  132. package/dist/esm/src/entities/fractions/currencyAmount.js.map +1 -0
  133. package/dist/esm/src/entities/fractions/currencyAmount.test.d.ts +1 -0
  134. package/dist/esm/src/entities/fractions/currencyAmount.test.js +96 -0
  135. package/dist/esm/src/entities/fractions/currencyAmount.test.js.map +1 -0
  136. package/dist/esm/src/entities/fractions/fraction.d.ts +24 -0
  137. package/dist/esm/src/entities/fractions/fraction.js +99 -0
  138. package/dist/esm/src/entities/fractions/fraction.js.map +1 -0
  139. package/dist/esm/src/entities/fractions/fraction.test.d.ts +1 -0
  140. package/dist/esm/src/entities/fractions/fraction.test.js +83 -0
  141. package/dist/esm/src/entities/fractions/fraction.test.js.map +1 -0
  142. package/dist/esm/src/entities/fractions/index.d.ts +4 -0
  143. package/dist/esm/src/entities/fractions/index.js +5 -0
  144. package/dist/esm/src/entities/fractions/index.js.map +1 -0
  145. package/dist/esm/src/entities/fractions/percent.d.ts +14 -0
  146. package/dist/esm/src/entities/fractions/percent.js +38 -0
  147. package/dist/esm/src/entities/fractions/percent.js.map +1 -0
  148. package/dist/esm/src/entities/fractions/percent.test.d.ts +1 -0
  149. package/dist/esm/src/entities/fractions/percent.test.js +51 -0
  150. package/dist/esm/src/entities/fractions/percent.test.js.map +1 -0
  151. package/dist/esm/src/entities/fractions/price.d.ts +38 -0
  152. package/dist/esm/src/entities/fractions/price.js +68 -0
  153. package/dist/esm/src/entities/fractions/price.js.map +1 -0
  154. package/dist/esm/src/entities/fractions/price.test.d.ts +1 -0
  155. package/dist/esm/src/entities/fractions/price.test.js +56 -0
  156. package/dist/esm/src/entities/fractions/price.test.js.map +1 -0
  157. package/dist/esm/src/entities/index.d.ts +6 -0
  158. package/dist/esm/src/entities/index.js +7 -0
  159. package/dist/esm/src/entities/index.js.map +1 -0
  160. package/dist/esm/src/entities/nativeCurrency.d.ts +8 -0
  161. package/dist/esm/src/entities/nativeCurrency.js +12 -0
  162. package/dist/esm/src/entities/nativeCurrency.js.map +1 -0
  163. package/dist/esm/src/entities/token.d.ts +48 -0
  164. package/dist/esm/src/entities/token.js +64 -0
  165. package/dist/esm/src/entities/token.js.map +1 -0
  166. package/dist/esm/src/entities/token.test.d.ts +1 -0
  167. package/dist/esm/src/entities/token.test.js +72 -0
  168. package/dist/esm/src/entities/token.test.js.map +1 -0
  169. package/dist/esm/src/entities/weth9.d.ts +7 -0
  170. package/dist/esm/src/entities/weth9.js +32 -0
  171. package/dist/esm/src/entities/weth9.js.map +1 -0
  172. package/dist/esm/src/index.d.ts +5 -0
  173. package/dist/esm/src/index.js +6 -0
  174. package/dist/esm/src/index.js.map +1 -0
  175. package/dist/esm/src/utils/computePriceImpact.d.ts +8 -0
  176. package/dist/esm/src/utils/computePriceImpact.js +14 -0
  177. package/dist/esm/src/utils/computePriceImpact.js.map +1 -0
  178. package/dist/esm/src/utils/computePriceImpact.test.d.ts +1 -0
  179. package/dist/esm/src/utils/computePriceImpact.test.js +18 -0
  180. package/dist/esm/src/utils/computePriceImpact.test.js.map +1 -0
  181. package/dist/esm/src/utils/computeZksyncCreate2Address.d.ts +2 -0
  182. package/dist/esm/src/utils/computeZksyncCreate2Address.js +11 -0
  183. package/dist/esm/src/utils/computeZksyncCreate2Address.js.map +1 -0
  184. package/dist/esm/src/utils/index.d.ts +5 -0
  185. package/dist/esm/src/utils/index.js +6 -0
  186. package/dist/esm/src/utils/index.js.map +1 -0
  187. package/dist/esm/src/utils/sortedInsert.d.ts +1 -0
  188. package/dist/esm/src/utils/sortedInsert.js +33 -0
  189. package/dist/esm/src/utils/sortedInsert.js.map +1 -0
  190. package/dist/esm/src/utils/sortedInsert.test.d.ts +1 -0
  191. package/dist/esm/src/utils/sortedInsert.test.js +58 -0
  192. package/dist/esm/src/utils/sortedInsert.test.js.map +1 -0
  193. package/dist/esm/src/utils/sqrt.d.ts +7 -0
  194. package/dist/esm/src/utils/sqrt.js +27 -0
  195. package/dist/esm/src/utils/sqrt.js.map +1 -0
  196. package/dist/esm/src/utils/sqrt.test.d.ts +1 -0
  197. package/dist/esm/src/utils/sqrt.test.js +23 -0
  198. package/dist/esm/src/utils/sqrt.test.js.map +1 -0
  199. package/dist/esm/src/utils/validateAndParseAddress.d.ts +10 -0
  200. package/dist/esm/src/utils/validateAndParseAddress.js +26 -0
  201. package/dist/esm/src/utils/validateAndParseAddress.js.map +1 -0
  202. package/dist/esm/src/utils/validateAndParseAddress.test.d.ts +1 -0
  203. package/dist/esm/src/utils/validateAndParseAddress.test.js +30 -0
  204. package/dist/esm/src/utils/validateAndParseAddress.test.js.map +1 -0
  205. package/dist/types/src/addresses.d.ts +58 -0
  206. package/dist/types/src/addresses.test.d.ts +1 -0
  207. package/dist/types/src/chains.d.ts +44 -0
  208. package/dist/types/src/constants.d.ts +12 -0
  209. package/dist/types/src/entities/baseCurrency.d.ts +49 -0
  210. package/dist/types/src/entities/currency.d.ts +3 -0
  211. package/dist/types/src/entities/currency.test.d.ts +1 -0
  212. package/dist/types/src/entities/ether.d.ts +13 -0
  213. package/dist/types/src/entities/ether.test.d.ts +1 -0
  214. package/dist/types/src/entities/fractions/currencyAmount.d.ts +31 -0
  215. package/dist/types/src/entities/fractions/currencyAmount.test.d.ts +1 -0
  216. package/dist/types/src/entities/fractions/fraction.d.ts +24 -0
  217. package/dist/types/src/entities/fractions/fraction.test.d.ts +1 -0
  218. package/dist/types/src/entities/fractions/index.d.ts +4 -0
  219. package/dist/types/src/entities/fractions/percent.d.ts +14 -0
  220. package/dist/types/src/entities/fractions/percent.test.d.ts +1 -0
  221. package/dist/types/src/entities/fractions/price.d.ts +38 -0
  222. package/dist/types/src/entities/fractions/price.test.d.ts +1 -0
  223. package/dist/types/src/entities/index.d.ts +6 -0
  224. package/dist/types/src/entities/nativeCurrency.d.ts +8 -0
  225. package/dist/types/src/entities/token.d.ts +48 -0
  226. package/dist/types/src/entities/token.test.d.ts +1 -0
  227. package/dist/types/src/entities/weth9.d.ts +7 -0
  228. package/dist/types/src/index.d.ts +5 -0
  229. package/dist/types/src/utils/computePriceImpact.d.ts +8 -0
  230. package/dist/types/src/utils/computePriceImpact.test.d.ts +1 -0
  231. package/dist/types/src/utils/computeZksyncCreate2Address.d.ts +2 -0
  232. package/dist/types/src/utils/index.d.ts +5 -0
  233. package/dist/types/src/utils/sortedInsert.d.ts +1 -0
  234. package/dist/types/src/utils/sortedInsert.test.d.ts +1 -0
  235. package/dist/types/src/utils/sqrt.d.ts +7 -0
  236. package/dist/types/src/utils/sqrt.test.d.ts +1 -0
  237. package/dist/types/src/utils/validateAndParseAddress.d.ts +10 -0
  238. package/dist/types/src/utils/validateAndParseAddress.test.d.ts +1 -0
  239. package/package.json +28 -10
  240. package/dist/index.js +0 -8
  241. package/dist/sdk-core.cjs.development.js +0 -1138
  242. package/dist/sdk-core.cjs.development.js.map +0 -1
  243. package/dist/sdk-core.cjs.production.min.js +0 -2
  244. package/dist/sdk-core.cjs.production.min.js.map +0 -1
  245. package/dist/sdk-core.esm.js +0 -1099
  246. package/dist/sdk-core.esm.js.map +0 -1
@@ -0,0 +1,83 @@
1
+ import JSBI from 'jsbi';
2
+ import { Fraction } from './fraction';
3
+ describe('Fraction', () => {
4
+ describe('#quotient', () => {
5
+ it('floor division', () => {
6
+ expect(new Fraction(JSBI.BigInt(8), JSBI.BigInt(3)).quotient).toEqual(JSBI.BigInt(2)); // one below
7
+ expect(new Fraction(JSBI.BigInt(12), JSBI.BigInt(4)).quotient).toEqual(JSBI.BigInt(3)); // exact
8
+ expect(new Fraction(JSBI.BigInt(16), JSBI.BigInt(5)).quotient).toEqual(JSBI.BigInt(3)); // one above
9
+ });
10
+ });
11
+ describe('#remainder', () => {
12
+ it('returns fraction after divison', () => {
13
+ expect(new Fraction(JSBI.BigInt(8), JSBI.BigInt(3)).remainder).toEqual(new Fraction(JSBI.BigInt(2), JSBI.BigInt(3)));
14
+ expect(new Fraction(JSBI.BigInt(12), JSBI.BigInt(4)).remainder).toEqual(new Fraction(JSBI.BigInt(0), JSBI.BigInt(4)));
15
+ expect(new Fraction(JSBI.BigInt(16), JSBI.BigInt(5)).remainder).toEqual(new Fraction(JSBI.BigInt(1), JSBI.BigInt(5)));
16
+ });
17
+ });
18
+ describe('#invert', () => {
19
+ it('flips num and denom', () => {
20
+ expect(new Fraction(JSBI.BigInt(5), JSBI.BigInt(10)).invert().numerator).toEqual(JSBI.BigInt(10));
21
+ expect(new Fraction(JSBI.BigInt(5), JSBI.BigInt(10)).invert().denominator).toEqual(JSBI.BigInt(5));
22
+ });
23
+ });
24
+ describe('#add', () => {
25
+ it('multiples denoms and adds nums', () => {
26
+ expect(new Fraction(JSBI.BigInt(1), JSBI.BigInt(10)).add(new Fraction(JSBI.BigInt(4), JSBI.BigInt(12)))).toEqual(new Fraction(JSBI.BigInt(52), JSBI.BigInt(120)));
27
+ });
28
+ it('same denom', () => {
29
+ expect(new Fraction(JSBI.BigInt(1), JSBI.BigInt(5)).add(new Fraction(JSBI.BigInt(2), JSBI.BigInt(5)))).toEqual(new Fraction(JSBI.BigInt(3), JSBI.BigInt(5)));
30
+ });
31
+ });
32
+ describe('#subtract', () => {
33
+ it('multiples denoms and subtracts nums', () => {
34
+ expect(new Fraction(JSBI.BigInt(1), JSBI.BigInt(10)).subtract(new Fraction(JSBI.BigInt(4), JSBI.BigInt(12)))).toEqual(new Fraction(JSBI.BigInt(-28), JSBI.BigInt(120)));
35
+ });
36
+ it('same denom', () => {
37
+ expect(new Fraction(JSBI.BigInt(3), JSBI.BigInt(5)).subtract(new Fraction(JSBI.BigInt(2), JSBI.BigInt(5)))).toEqual(new Fraction(JSBI.BigInt(1), JSBI.BigInt(5)));
38
+ });
39
+ });
40
+ describe('#lessThan', () => {
41
+ it('correct', () => {
42
+ expect(new Fraction(JSBI.BigInt(1), JSBI.BigInt(10)).lessThan(new Fraction(JSBI.BigInt(4), JSBI.BigInt(12)))).toBe(true);
43
+ expect(new Fraction(JSBI.BigInt(1), JSBI.BigInt(3)).lessThan(new Fraction(JSBI.BigInt(4), JSBI.BigInt(12)))).toBe(false);
44
+ expect(new Fraction(JSBI.BigInt(5), JSBI.BigInt(12)).lessThan(new Fraction(JSBI.BigInt(4), JSBI.BigInt(12)))).toBe(false);
45
+ });
46
+ });
47
+ describe('#equalTo', () => {
48
+ it('correct', () => {
49
+ expect(new Fraction(JSBI.BigInt(1), JSBI.BigInt(10)).equalTo(new Fraction(JSBI.BigInt(4), JSBI.BigInt(12)))).toBe(false);
50
+ expect(new Fraction(JSBI.BigInt(1), JSBI.BigInt(3)).equalTo(new Fraction(JSBI.BigInt(4), JSBI.BigInt(12)))).toBe(true);
51
+ expect(new Fraction(JSBI.BigInt(5), JSBI.BigInt(12)).equalTo(new Fraction(JSBI.BigInt(4), JSBI.BigInt(12)))).toBe(false);
52
+ });
53
+ });
54
+ describe('#greaterThan', () => {
55
+ it('correct', () => {
56
+ expect(new Fraction(JSBI.BigInt(1), JSBI.BigInt(10)).greaterThan(new Fraction(JSBI.BigInt(4), JSBI.BigInt(12)))).toBe(false);
57
+ expect(new Fraction(JSBI.BigInt(1), JSBI.BigInt(3)).greaterThan(new Fraction(JSBI.BigInt(4), JSBI.BigInt(12)))).toBe(false);
58
+ expect(new Fraction(JSBI.BigInt(5), JSBI.BigInt(12)).greaterThan(new Fraction(JSBI.BigInt(4), JSBI.BigInt(12)))).toBe(true);
59
+ });
60
+ });
61
+ describe('#multiplty', () => {
62
+ it('correct', () => {
63
+ expect(new Fraction(JSBI.BigInt(1), JSBI.BigInt(10)).multiply(new Fraction(JSBI.BigInt(4), JSBI.BigInt(12)))).toEqual(new Fraction(JSBI.BigInt(4), JSBI.BigInt(120)));
64
+ expect(new Fraction(JSBI.BigInt(1), JSBI.BigInt(3)).multiply(new Fraction(JSBI.BigInt(4), JSBI.BigInt(12)))).toEqual(new Fraction(JSBI.BigInt(4), JSBI.BigInt(36)));
65
+ expect(new Fraction(JSBI.BigInt(5), JSBI.BigInt(12)).multiply(new Fraction(JSBI.BigInt(4), JSBI.BigInt(12)))).toEqual(new Fraction(JSBI.BigInt(20), JSBI.BigInt(144)));
66
+ });
67
+ });
68
+ describe('#divide', () => {
69
+ it('correct', () => {
70
+ expect(new Fraction(JSBI.BigInt(1), JSBI.BigInt(10)).divide(new Fraction(JSBI.BigInt(4), JSBI.BigInt(12)))).toEqual(new Fraction(JSBI.BigInt(12), JSBI.BigInt(40)));
71
+ expect(new Fraction(JSBI.BigInt(1), JSBI.BigInt(3)).divide(new Fraction(JSBI.BigInt(4), JSBI.BigInt(12)))).toEqual(new Fraction(JSBI.BigInt(12), JSBI.BigInt(12)));
72
+ expect(new Fraction(JSBI.BigInt(5), JSBI.BigInt(12)).divide(new Fraction(JSBI.BigInt(4), JSBI.BigInt(12)))).toEqual(new Fraction(JSBI.BigInt(60), JSBI.BigInt(48)));
73
+ });
74
+ });
75
+ describe('#asFraction', () => {
76
+ it('returns an equivalent but not the same reference fraction', () => {
77
+ const f = new Fraction(1, 2);
78
+ expect(f.asFraction).toEqual(f);
79
+ expect(f === f.asFraction).toEqual(false);
80
+ });
81
+ });
82
+ });
83
+ //# sourceMappingURL=fraction.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fraction.test.js","sourceRoot":"","sources":["../../../../../src/entities/fractions/fraction.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export { CurrencyAmount } from './currencyAmount';
2
+ export { Fraction } from './fraction';
3
+ export { Percent } from './percent';
4
+ export { Price } from './price';
@@ -0,0 +1,5 @@
1
+ export { CurrencyAmount } from './currencyAmount';
2
+ export { Fraction } from './fraction';
3
+ export { Percent } from './percent';
4
+ export { Price } from './price';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/entities/fractions/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA"}
@@ -0,0 +1,14 @@
1
+ import { BigintIsh, Rounding } from '../../constants';
2
+ import { Fraction } from './fraction';
3
+ export declare class Percent extends Fraction {
4
+ /**
5
+ * This boolean prevents a fraction from being interpreted as a Percent
6
+ */
7
+ readonly isPercent: true;
8
+ add(other: Fraction | BigintIsh): Percent;
9
+ subtract(other: Fraction | BigintIsh): Percent;
10
+ multiply(other: Fraction | BigintIsh): Percent;
11
+ divide(other: Fraction | BigintIsh): Percent;
12
+ toSignificant(significantDigits?: number, format?: object, rounding?: Rounding): string;
13
+ toFixed(decimalPlaces?: number, format?: object, rounding?: Rounding): string;
14
+ }
@@ -0,0 +1,38 @@
1
+ import JSBI from 'jsbi';
2
+ import { Fraction } from './fraction';
3
+ const ONE_HUNDRED = new Fraction(JSBI.BigInt(100));
4
+ /**
5
+ * Converts a fraction to a percent
6
+ * @param fraction the fraction to convert
7
+ */
8
+ function toPercent(fraction) {
9
+ return new Percent(fraction.numerator, fraction.denominator);
10
+ }
11
+ export class Percent extends Fraction {
12
+ constructor() {
13
+ super(...arguments);
14
+ /**
15
+ * This boolean prevents a fraction from being interpreted as a Percent
16
+ */
17
+ this.isPercent = true;
18
+ }
19
+ add(other) {
20
+ return toPercent(super.add(other));
21
+ }
22
+ subtract(other) {
23
+ return toPercent(super.subtract(other));
24
+ }
25
+ multiply(other) {
26
+ return toPercent(super.multiply(other));
27
+ }
28
+ divide(other) {
29
+ return toPercent(super.divide(other));
30
+ }
31
+ toSignificant(significantDigits = 5, format, rounding) {
32
+ return super.multiply(ONE_HUNDRED).toSignificant(significantDigits, format, rounding);
33
+ }
34
+ toFixed(decimalPlaces = 2, format, rounding) {
35
+ return super.multiply(ONE_HUNDRED).toFixed(decimalPlaces, format, rounding);
36
+ }
37
+ }
38
+ //# sourceMappingURL=percent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"percent.js","sourceRoot":"","sources":["../../../../../src/entities/fractions/percent.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAA;AAEvB,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,MAAM,WAAW,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;AAElD;;;GAGG;AACH,SAAS,SAAS,CAAC,QAAkB;IACnC,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAA;AAC9D,CAAC;AAED,MAAM,OAAO,OAAQ,SAAQ,QAAQ;IAArC;;QACE;;WAEG;QACa,cAAS,GAAS,IAAI,CAAA;IAyBxC,CAAC;IAvBC,GAAG,CAAC,KAA2B;QAC7B,OAAO,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAA;IACpC,CAAC;IAED,QAAQ,CAAC,KAA2B;QAClC,OAAO,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAA;IACzC,CAAC;IAED,QAAQ,CAAC,KAA2B;QAClC,OAAO,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAA;IACzC,CAAC;IAED,MAAM,CAAC,KAA2B;QAChC,OAAO,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;IACvC,CAAC;IAEM,aAAa,CAAC,oBAA4B,CAAC,EAAE,MAAe,EAAE,QAAmB;QACtF,OAAO,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,aAAa,CAAC,iBAAiB,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAA;IACvF,CAAC;IAEM,OAAO,CAAC,gBAAwB,CAAC,EAAE,MAAe,EAAE,QAAmB;QAC5E,OAAO,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAA;IAC7E,CAAC;CACF"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,51 @@
1
+ import { Percent } from './percent';
2
+ describe('Percent', () => {
3
+ describe('constructor', () => {
4
+ it('defaults to 1 denominator', () => {
5
+ expect(new Percent(1)).toEqual(new Percent(1, 1));
6
+ });
7
+ });
8
+ describe('#add', () => {
9
+ it('returns a percent', () => {
10
+ expect(new Percent(1, 100).add(new Percent(2, 100))).toEqual(new Percent(3, 100));
11
+ });
12
+ it('different denominators', () => {
13
+ expect(new Percent(1, 25).add(new Percent(2, 100))).toEqual(new Percent(150, 2500));
14
+ });
15
+ });
16
+ describe('#subtract', () => {
17
+ it('returns a percent', () => {
18
+ expect(new Percent(1, 100).subtract(new Percent(2, 100))).toEqual(new Percent(-1, 100));
19
+ });
20
+ it('different denominators', () => {
21
+ expect(new Percent(1, 25).subtract(new Percent(2, 100))).toEqual(new Percent(50, 2500));
22
+ });
23
+ });
24
+ describe('#multiply', () => {
25
+ it('returns a percent', () => {
26
+ expect(new Percent(1, 100).multiply(new Percent(2, 100))).toEqual(new Percent(2, 10000));
27
+ });
28
+ it('different denominators', () => {
29
+ expect(new Percent(1, 25).multiply(new Percent(2, 100))).toEqual(new Percent(2, 2500));
30
+ });
31
+ });
32
+ describe('#divide', () => {
33
+ it('returns a percent', () => {
34
+ expect(new Percent(1, 100).divide(new Percent(2, 100))).toEqual(new Percent(100, 200));
35
+ });
36
+ it('different denominators', () => {
37
+ expect(new Percent(1, 25).divide(new Percent(2, 100))).toEqual(new Percent(100, 50));
38
+ });
39
+ });
40
+ describe('#toSignificant', () => {
41
+ it('returns the value scaled by 100', () => {
42
+ expect(new Percent(154, 10000).toSignificant(3)).toEqual('1.54');
43
+ });
44
+ });
45
+ describe('#toFixed', () => {
46
+ it('returns the value scaled by 100', () => {
47
+ expect(new Percent(154, 10000).toFixed(2)).toEqual('1.54');
48
+ });
49
+ });
50
+ });
51
+ //# sourceMappingURL=percent.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"percent.test.js","sourceRoot":"","sources":["../../../../../src/entities/fractions/percent.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import { BigintIsh, Rounding } from '../../constants';
2
+ import { Currency } from '../currency';
3
+ import { Fraction } from './fraction';
4
+ import { CurrencyAmount } from './currencyAmount';
5
+ export declare class Price<TBase extends Currency, TQuote extends Currency> extends Fraction {
6
+ readonly baseCurrency: TBase;
7
+ readonly quoteCurrency: TQuote;
8
+ readonly scalar: Fraction;
9
+ /**
10
+ * Construct a price, either with the base and quote currency amount, or the
11
+ * @param args
12
+ */
13
+ constructor(...args: [TBase, TQuote, BigintIsh, BigintIsh] | [{
14
+ baseAmount: CurrencyAmount<TBase>;
15
+ quoteAmount: CurrencyAmount<TQuote>;
16
+ }]);
17
+ /**
18
+ * Flip the price, switching the base and quote currency
19
+ */
20
+ invert(): Price<TQuote, TBase>;
21
+ /**
22
+ * Multiply the price by another price, returning a new price. The other price must have the same base currency as this price's quote currency
23
+ * @param other the other price
24
+ */
25
+ multiply<TOtherQuote extends Currency>(other: Price<TQuote, TOtherQuote>): Price<TBase, TOtherQuote>;
26
+ /**
27
+ * Return the amount of quote currency corresponding to a given amount of the base currency
28
+ * @param currencyAmount the amount of base currency to quote against the price
29
+ */
30
+ quote(currencyAmount: CurrencyAmount<TBase>): CurrencyAmount<TQuote>;
31
+ /**
32
+ * Get the value scaled by decimals for formatting
33
+ * @private
34
+ */
35
+ private get adjustedForDecimals();
36
+ toSignificant(significantDigits?: number, format?: object, rounding?: Rounding): string;
37
+ toFixed(decimalPlaces?: number, format?: object, rounding?: Rounding): string;
38
+ }
@@ -0,0 +1,68 @@
1
+ import JSBI from 'jsbi';
2
+ import invariant from 'tiny-invariant';
3
+ import { Fraction } from './fraction';
4
+ import { CurrencyAmount } from './currencyAmount';
5
+ export class Price extends Fraction {
6
+ /**
7
+ * Construct a price, either with the base and quote currency amount, or the
8
+ * @param args
9
+ */
10
+ constructor(...args) {
11
+ let baseCurrency, quoteCurrency, denominator, numerator;
12
+ if (args.length === 4) {
13
+ ;
14
+ [baseCurrency, quoteCurrency, denominator, numerator] = args;
15
+ }
16
+ else {
17
+ const result = args[0].quoteAmount.divide(args[0].baseAmount);
18
+ [baseCurrency, quoteCurrency, denominator, numerator] = [
19
+ args[0].baseAmount.currency,
20
+ args[0].quoteAmount.currency,
21
+ result.denominator,
22
+ result.numerator,
23
+ ];
24
+ }
25
+ super(numerator, denominator);
26
+ this.baseCurrency = baseCurrency;
27
+ this.quoteCurrency = quoteCurrency;
28
+ this.scalar = new Fraction(JSBI.exponentiate(JSBI.BigInt(10), JSBI.BigInt(baseCurrency.decimals)), JSBI.exponentiate(JSBI.BigInt(10), JSBI.BigInt(quoteCurrency.decimals)));
29
+ }
30
+ /**
31
+ * Flip the price, switching the base and quote currency
32
+ */
33
+ invert() {
34
+ return new Price(this.quoteCurrency, this.baseCurrency, this.numerator, this.denominator);
35
+ }
36
+ /**
37
+ * Multiply the price by another price, returning a new price. The other price must have the same base currency as this price's quote currency
38
+ * @param other the other price
39
+ */
40
+ multiply(other) {
41
+ invariant(this.quoteCurrency.equals(other.baseCurrency), 'TOKEN');
42
+ const fraction = super.multiply(other);
43
+ return new Price(this.baseCurrency, other.quoteCurrency, fraction.denominator, fraction.numerator);
44
+ }
45
+ /**
46
+ * Return the amount of quote currency corresponding to a given amount of the base currency
47
+ * @param currencyAmount the amount of base currency to quote against the price
48
+ */
49
+ quote(currencyAmount) {
50
+ invariant(currencyAmount.currency.equals(this.baseCurrency), 'TOKEN');
51
+ const result = super.multiply(currencyAmount);
52
+ return CurrencyAmount.fromFractionalAmount(this.quoteCurrency, result.numerator, result.denominator);
53
+ }
54
+ /**
55
+ * Get the value scaled by decimals for formatting
56
+ * @private
57
+ */
58
+ get adjustedForDecimals() {
59
+ return super.multiply(this.scalar);
60
+ }
61
+ toSignificant(significantDigits = 6, format, rounding) {
62
+ return this.adjustedForDecimals.toSignificant(significantDigits, format, rounding);
63
+ }
64
+ toFixed(decimalPlaces = 4, format, rounding) {
65
+ return this.adjustedForDecimals.toFixed(decimalPlaces, format, rounding);
66
+ }
67
+ }
68
+ //# sourceMappingURL=price.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"price.js","sourceRoot":"","sources":["../../../../../src/entities/fractions/price.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,56 @@
1
+ import { Token } from '../token';
2
+ import { CurrencyAmount } from './currencyAmount';
3
+ import { Price } from './price';
4
+ describe('Price', () => {
5
+ const ADDRESS_ZERO = '0x0000000000000000000000000000000000000000';
6
+ const ADDRESS_ONE = '0x0000000000000000000000000000000000000001';
7
+ const t0 = new Token(1, ADDRESS_ZERO, 18);
8
+ const t0_6 = new Token(1, ADDRESS_ZERO, 6);
9
+ const t1 = new Token(1, ADDRESS_ONE, 18);
10
+ describe('#constructor', () => {
11
+ it('array format works', () => {
12
+ const price = new Price(t0, t1, 1, 54321);
13
+ expect(price.toSignificant(5)).toEqual('54321');
14
+ expect(price.baseCurrency.equals(t0));
15
+ expect(price.quoteCurrency.equals(t1));
16
+ });
17
+ it('object format works', () => {
18
+ const price = new Price({
19
+ baseAmount: CurrencyAmount.fromRawAmount(t0, 1),
20
+ quoteAmount: CurrencyAmount.fromRawAmount(t1, 54321),
21
+ });
22
+ expect(price.toSignificant(5)).toEqual('54321');
23
+ expect(price.baseCurrency.equals(t0));
24
+ expect(price.quoteCurrency.equals(t1));
25
+ });
26
+ });
27
+ describe('#quote', () => {
28
+ it('returns correct value', () => {
29
+ const price = new Price(t0, t1, 1, 5);
30
+ expect(price.quote(CurrencyAmount.fromRawAmount(t0, 10))).toEqual(CurrencyAmount.fromRawAmount(t1, 50));
31
+ });
32
+ });
33
+ describe('#toSignificant', () => {
34
+ it('no decimals', () => {
35
+ const p = new Price(t0, t1, 123, 456);
36
+ expect(p.toSignificant(4)).toEqual('3.707');
37
+ });
38
+ it('no decimals flip ratio', () => {
39
+ const p = new Price(t0, t1, 456, 123);
40
+ expect(p.toSignificant(4)).toEqual('0.2697');
41
+ });
42
+ it('with decimal difference', () => {
43
+ const p = new Price(t0_6, t1, 123, 456);
44
+ expect(p.toSignificant(4)).toEqual('0.000000000003707');
45
+ });
46
+ it('with decimal difference flipped', () => {
47
+ const p = new Price(t0_6, t1, 456, 123);
48
+ expect(p.toSignificant(4)).toEqual('0.0000000000002697');
49
+ });
50
+ it('with decimal difference flipped base quote flipped', () => {
51
+ const p = new Price(t1, t0_6, 456, 123);
52
+ expect(p.toSignificant(4)).toEqual('269700000000');
53
+ });
54
+ });
55
+ });
56
+ //# sourceMappingURL=price.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"price.test.js","sourceRoot":"","sources":["../../../../../src/entities/fractions/price.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAA;AAChC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAE/B,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;IACrB,MAAM,YAAY,GAAG,4CAA4C,CAAA;IACjE,MAAM,WAAW,GAAG,4CAA4C,CAAA;IAEhE,MAAM,EAAE,GAAG,IAAI,KAAK,CAAC,CAAC,EAAE,YAAY,EAAE,EAAE,CAAC,CAAA;IACzC,MAAM,IAAI,GAAG,IAAI,KAAK,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAA;IAC1C,MAAM,EAAE,GAAG,IAAI,KAAK,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,CAAC,CAAA;IAExC,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;QAC5B,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;YAC5B,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,CAAA;YACzC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;YAC/C,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAA;YACrC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAA;QACxC,CAAC,CAAC,CAAA;QACF,EAAE,CAAC,qBAAqB,EAAE,GAAG,EAAE;YAC7B,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC;gBACtB,UAAU,EAAE,cAAc,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC/C,WAAW,EAAE,cAAc,CAAC,aAAa,CAAC,EAAE,EAAE,KAAK,CAAC;aACrD,CAAC,CAAA;YACF,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;YAC/C,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAA;YACrC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAA;QACxC,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;QACtB,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;YAC/B,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;YACrC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;QACzG,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE;YACrB,MAAM,CAAC,GAAG,IAAI,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;YACrC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QAC7C,CAAC,CAAC,CAAA;QACF,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;YAChC,MAAM,CAAC,GAAG,IAAI,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;YACrC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;QAC9C,CAAC,CAAC,CAAA;QACF,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;YACjC,MAAM,CAAC,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;YACvC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAA;QACzD,CAAC,CAAC,CAAA;QACF,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;YACzC,MAAM,CAAC,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;YACvC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAA;QAC1D,CAAC,CAAC,CAAA;QACF,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;YAC5D,MAAM,CAAC,GAAG,IAAI,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;YACvC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;QACpD,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,6 @@
1
+ export * from './fractions';
2
+ export * from './currency';
3
+ export * from './ether';
4
+ export * from './nativeCurrency';
5
+ export * from './token';
6
+ export * from './weth9';
@@ -0,0 +1,7 @@
1
+ export * from './fractions';
2
+ export * from './currency';
3
+ export * from './ether';
4
+ export * from './nativeCurrency';
5
+ export * from './token';
6
+ export * from './weth9';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/entities/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAE3B,cAAc,YAAY,CAAA;AAC1B,cAAc,SAAS,CAAA;AACvB,cAAc,kBAAkB,CAAA;AAChC,cAAc,SAAS,CAAA;AACvB,cAAc,SAAS,CAAA"}
@@ -0,0 +1,8 @@
1
+ import { BaseCurrency } from './baseCurrency';
2
+ /**
3
+ * Represents the native currency of the chain on which it resides, e.g.
4
+ */
5
+ export declare abstract class NativeCurrency extends BaseCurrency {
6
+ readonly isNative: true;
7
+ readonly isToken: false;
8
+ }
@@ -0,0 +1,12 @@
1
+ import { BaseCurrency } from './baseCurrency';
2
+ /**
3
+ * Represents the native currency of the chain on which it resides, e.g.
4
+ */
5
+ export class NativeCurrency extends BaseCurrency {
6
+ constructor() {
7
+ super(...arguments);
8
+ this.isNative = true;
9
+ this.isToken = false;
10
+ }
11
+ }
12
+ //# sourceMappingURL=nativeCurrency.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nativeCurrency.js","sourceRoot":"","sources":["../../../../src/entities/nativeCurrency.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAE7C;;GAEG;AACH,MAAM,OAAgB,cAAe,SAAQ,YAAY;IAAzD;;QACkB,aAAQ,GAAS,IAAI,CAAA;QACrB,YAAO,GAAU,KAAK,CAAA;IACxC,CAAC;CAAA"}
@@ -0,0 +1,48 @@
1
+ import { BigNumber } from '@ethersproject/bignumber';
2
+ import { BaseCurrency } from './baseCurrency';
3
+ import { Currency } from './currency';
4
+ /**
5
+ * Represents an ERC20 token with a unique address and some metadata.
6
+ */
7
+ export declare class Token extends BaseCurrency {
8
+ readonly isNative: false;
9
+ readonly isToken: true;
10
+ /**
11
+ * The contract address on the chain on which this token lives
12
+ */
13
+ readonly address: string;
14
+ /**
15
+ * Relevant for fee-on-transfer (FOT) token taxes,
16
+ * Not every ERC20 token is FOT token, so this field is optional
17
+ */
18
+ readonly buyFeeBps?: BigNumber;
19
+ readonly sellFeeBps?: BigNumber;
20
+ /**
21
+ *
22
+ * @param chainId {@link BaseCurrency#chainId}
23
+ * @param address The contract address on the chain on which this token lives
24
+ * @param decimals {@link BaseCurrency#decimals}
25
+ * @param symbol {@link BaseCurrency#symbol}
26
+ * @param name {@link BaseCurrency#name}
27
+ * @param bypassChecksum If true it only checks for length === 42, startsWith 0x and contains only hex characters
28
+ * @param buyFeeBps Buy fee tax for FOT tokens, in basis points
29
+ * @param sellFeeBps Sell fee tax for FOT tokens, in basis points
30
+ */
31
+ constructor(chainId: number, address: string, decimals: number, symbol?: string, name?: string, bypassChecksum?: boolean, buyFeeBps?: BigNumber, sellFeeBps?: BigNumber);
32
+ /**
33
+ * Returns true if the two tokens are equivalent, i.e. have the same chainId and address.
34
+ * @param other other token to compare
35
+ */
36
+ equals(other: Currency): boolean;
37
+ /**
38
+ * Returns true if the address of this token sorts before the address of the other token
39
+ * @param other other token to compare
40
+ * @throws if the tokens have the same address
41
+ * @throws if the tokens are on different chains
42
+ */
43
+ sortsBefore(other: Token): boolean;
44
+ /**
45
+ * Return this token, which does not need to be wrapped
46
+ */
47
+ get wrapped(): Token;
48
+ }
@@ -0,0 +1,64 @@
1
+ import { BigNumber } from '@ethersproject/bignumber';
2
+ import invariant from 'tiny-invariant';
3
+ import { checkValidAddress, validateAndParseAddress } from '../utils/validateAndParseAddress';
4
+ import { BaseCurrency } from './baseCurrency';
5
+ /**
6
+ * Represents an ERC20 token with a unique address and some metadata.
7
+ */
8
+ export class Token extends BaseCurrency {
9
+ /**
10
+ *
11
+ * @param chainId {@link BaseCurrency#chainId}
12
+ * @param address The contract address on the chain on which this token lives
13
+ * @param decimals {@link BaseCurrency#decimals}
14
+ * @param symbol {@link BaseCurrency#symbol}
15
+ * @param name {@link BaseCurrency#name}
16
+ * @param bypassChecksum If true it only checks for length === 42, startsWith 0x and contains only hex characters
17
+ * @param buyFeeBps Buy fee tax for FOT tokens, in basis points
18
+ * @param sellFeeBps Sell fee tax for FOT tokens, in basis points
19
+ */
20
+ constructor(chainId, address, decimals, symbol, name, bypassChecksum, buyFeeBps, sellFeeBps) {
21
+ super(chainId, decimals, symbol, name);
22
+ this.isNative = false;
23
+ this.isToken = true;
24
+ if (bypassChecksum) {
25
+ this.address = checkValidAddress(address);
26
+ }
27
+ else {
28
+ this.address = validateAndParseAddress(address);
29
+ }
30
+ if (buyFeeBps) {
31
+ invariant(buyFeeBps.gte(BigNumber.from(0)), 'NON-NEGATIVE FOT FEES');
32
+ }
33
+ if (sellFeeBps) {
34
+ invariant(sellFeeBps.gte(BigNumber.from(0)), 'NON-NEGATIVE FOT FEES');
35
+ }
36
+ this.buyFeeBps = buyFeeBps;
37
+ this.sellFeeBps = sellFeeBps;
38
+ }
39
+ /**
40
+ * Returns true if the two tokens are equivalent, i.e. have the same chainId and address.
41
+ * @param other other token to compare
42
+ */
43
+ equals(other) {
44
+ return other.isToken && this.chainId === other.chainId && this.address.toLowerCase() === other.address.toLowerCase();
45
+ }
46
+ /**
47
+ * Returns true if the address of this token sorts before the address of the other token
48
+ * @param other other token to compare
49
+ * @throws if the tokens have the same address
50
+ * @throws if the tokens are on different chains
51
+ */
52
+ sortsBefore(other) {
53
+ invariant(this.chainId === other.chainId, 'CHAIN_IDS');
54
+ invariant(this.address.toLowerCase() !== other.address.toLowerCase(), 'ADDRESSES');
55
+ return this.address.toLowerCase() < other.address.toLowerCase();
56
+ }
57
+ /**
58
+ * Return this token, which does not need to be wrapped
59
+ */
60
+ get wrapped() {
61
+ return this;
62
+ }
63
+ }
64
+ //# sourceMappingURL=token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token.js","sourceRoot":"","sources":["../../../../src/entities/token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AACpD,OAAO,SAAS,MAAM,gBAAgB,CAAA;AACtC,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAA;AAC7F,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAG7C;;GAEG;AACH,MAAM,OAAO,KAAM,SAAQ,YAAY;IAgBrC;;;;;;;;;;OAUG;IACH,YACE,OAAe,EACf,OAAe,EACf,QAAgB,EAChB,MAAe,EACf,IAAa,EACb,cAAwB,EACxB,SAAqB,EACrB,UAAsB;QAEtB,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,CAAA;QApCxB,aAAQ,GAAU,KAAK,CAAA;QACvB,YAAO,GAAS,IAAI,CAAA;QAoClC,IAAI,cAAc,EAAE;YAClB,IAAI,CAAC,OAAO,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAA;SAC1C;aAAM;YACL,IAAI,CAAC,OAAO,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAA;SAChD;QACD,IAAI,SAAS,EAAE;YACb,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,uBAAuB,CAAC,CAAA;SACrE;QACD,IAAI,UAAU,EAAE;YACd,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,uBAAuB,CAAC,CAAA;SACtE;QACD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;QAC1B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;IAC9B,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,KAAe;QAC3B,OAAO,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,CAAA;IACtH,CAAC;IAED;;;;;OAKG;IACI,WAAW,CAAC,KAAY;QAC7B,SAAS,CAAC,IAAI,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO,EAAE,WAAW,CAAC,CAAA;QACtD,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,WAAW,CAAC,CAAA;QAClF,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,CAAA;IACjE,CAAC;IAED;;OAEG;IACH,IAAW,OAAO;QAChB,OAAO,IAAI,CAAA;IACb,CAAC;CACF"}
@@ -0,0 +1 @@
1
+ export {};