CalcTest.ts 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. import {ethers, web3} from "hardhat";
  2. import fee from "../config/fee";
  3. import contracts from "../config/contracts";
  4. import logger from "../utils/logger";
  5. describe('Calc test', () => {
  6. let inAmount = 1e15.toString()
  7. it('Univ3 calc test', async () => {
  8. const CALC_ABI = require('../artifacts/contracts/Calc.sol/Calc.json').abi
  9. let calc = new web3.eth.Contract(CALC_ABI, contracts.CALC)
  10. await calc.methods.getQuoteHandleFee(contracts.WETH, inAmount, contracts.USDT, fee._30_per_10000).call().then(console.log)
  11. })
  12. it('Two points', () => {
  13. let value = 333333
  14. let low: number = 0
  15. let high: number = 1000000
  16. let prevLow: number = low
  17. let prevHigh: number = high
  18. let checkNumber = low
  19. function check(checkNumber: number) {
  20. function final_check(checkNumber: number) {
  21. return checkNumber <= value
  22. }
  23. // [,,,,,c(,,,,,,,)]
  24. let too_low = false
  25. for (let i = 1; i <= 10; i++) {
  26. too_low = too_low || (final_check(checkNumber + i))
  27. }
  28. if (too_low) return 'too_low'
  29. // [,,,,,(c,,,,,,,)]
  30. let too_high = true
  31. for (let i = 0; i < 10; i++) {
  32. too_high = too_high && (!final_check(checkNumber + i))
  33. }
  34. if (too_high) return 'too_high'
  35. return 'ok'
  36. }
  37. let count = 0
  38. while (true) {
  39. let checkRst = check(checkNumber)
  40. logger.debug(`[${low}, ${high}], c: ${checkNumber}, v: ${value}, ${checkRst}. [${++count}]`)
  41. if (checkRst == 'ok') {
  42. break
  43. } else {
  44. let tempHigh = high
  45. let tempLow = low
  46. if (checkNumber == low) {
  47. if (checkRst == 'too_high') {
  48. high = tempLow
  49. low = prevLow
  50. prevHigh = tempHigh
  51. prevLow = tempLow
  52. checkNumber = high
  53. } else if (checkRst == 'too_low') {
  54. low = low + Math.floor((high - low) / 2)
  55. prevLow = tempLow
  56. checkNumber = low
  57. }
  58. } else if (checkNumber == high) {
  59. if (checkRst == 'too_high') {
  60. high = low + Math.floor((high - low) / 2)
  61. prevHigh = tempHigh
  62. checkNumber = high
  63. } else if (checkRst == 'too_low') {
  64. low = tempHigh
  65. high = prevHigh
  66. prevHigh = tempHigh
  67. prevLow = tempLow
  68. checkNumber = low
  69. }
  70. }
  71. }
  72. }
  73. logger.debug(`Found value, is: ${checkNumber}`)
  74. })
  75. })