@clober/v2-sdk 0.0.1-b → 0.0.1-dev
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.
- package/dist/cjs/.graphclient/index.js +243 -0
- package/dist/cjs/.graphclient/index.js.map +1 -0
- package/dist/cjs/.graphclient/sources/clober-v2/introspectionSchema.js +14482 -0
- package/dist/cjs/.graphclient/sources/clober-v2/introspectionSchema.js.map +1 -0
- package/dist/cjs/.graphclient/sources/clober-v2/types.js +4 -0
- package/dist/cjs/.graphclient/sources/clober-v2/types.js.map +1 -0
- package/dist/cjs/abis/core/controller-abi.js +989 -0
- package/dist/cjs/abis/core/controller-abi.js.map +1 -0
- package/dist/cjs/abis/core/params-abi.js +62 -0
- package/dist/cjs/abis/core/params-abi.js.map +1 -0
- package/dist/cjs/apis/currency.js +87 -0
- package/dist/cjs/apis/currency.js.map +1 -0
- package/dist/cjs/apis/market.js +63 -0
- package/dist/cjs/apis/market.js.map +1 -0
- package/dist/cjs/apis/open-order.js +90 -0
- package/dist/cjs/apis/open-order.js.map +1 -0
- package/dist/cjs/approval.js +74 -0
- package/dist/cjs/approval.js.map +1 -0
- package/dist/cjs/call.js +545 -0
- package/dist/cjs/call.js.map +1 -0
- package/dist/cjs/constants/action.js +14 -0
- package/dist/cjs/constants/action.js.map +1 -0
- package/dist/cjs/constants/addresses.js +13 -0
- package/dist/cjs/constants/addresses.js.map +1 -0
- package/dist/cjs/constants/chain.js +13 -0
- package/dist/cjs/constants/chain.js.map +1 -0
- package/dist/cjs/constants/currency.js +12 -0
- package/dist/cjs/constants/currency.js.map +1 -0
- package/dist/cjs/constants/fee.js +7 -0
- package/dist/cjs/constants/fee.js.map +1 -0
- package/dist/cjs/constants/price.js +6 -0
- package/dist/cjs/constants/price.js.map +1 -0
- package/dist/cjs/constants/subgraph-url.js +8 -0
- package/dist/cjs/constants/subgraph-url.js.map +1 -0
- package/dist/cjs/index.js +22 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/model/book.js +130 -0
- package/dist/cjs/model/book.js.map +1 -0
- package/dist/cjs/model/currency.js +3 -0
- package/dist/cjs/model/currency.js.map +1 -0
- package/dist/cjs/model/depth.js +3 -0
- package/dist/cjs/model/depth.js.map +1 -0
- package/dist/cjs/model/fee-policy.js +42 -0
- package/dist/cjs/model/fee-policy.js.map +1 -0
- package/dist/cjs/model/market.js +215 -0
- package/dist/cjs/model/market.js.map +1 -0
- package/dist/cjs/model/open-order.js +3 -0
- package/dist/cjs/model/open-order.js.map +1 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/signature.js +178 -0
- package/dist/cjs/signature.js.map +1 -0
- package/dist/cjs/tsconfig.build.tsbuildinfo +1 -0
- package/dist/cjs/type.js +6 -0
- package/dist/cjs/type.js.map +1 -0
- package/dist/cjs/utils/approval.js +46 -0
- package/dist/cjs/utils/approval.js.map +1 -0
- package/dist/cjs/utils/book-id.js +25 -0
- package/dist/cjs/utils/book-id.js.map +1 -0
- package/dist/cjs/utils/build-transaction.js +31 -0
- package/dist/cjs/utils/build-transaction.js.map +1 -0
- package/dist/cjs/utils/decimals.js +17 -0
- package/dist/cjs/utils/decimals.js.map +1 -0
- package/dist/cjs/utils/market.js +53 -0
- package/dist/cjs/utils/market.js.map +1 -0
- package/dist/cjs/utils/math.js +83 -0
- package/dist/cjs/utils/math.js.map +1 -0
- package/dist/cjs/utils/prices.js +22 -0
- package/dist/cjs/utils/prices.js.map +1 -0
- package/dist/cjs/utils/tick.js +106 -0
- package/dist/cjs/utils/tick.js.map +1 -0
- package/dist/cjs/utils/time.js +9 -0
- package/dist/cjs/utils/time.js.map +1 -0
- package/dist/cjs/utils/unit.js +38 -0
- package/dist/cjs/utils/unit.js.map +1 -0
- package/dist/cjs/view.js +185 -0
- package/dist/cjs/view.js.map +1 -0
- package/dist/esm/.graphclient/index.js +233 -0
- package/dist/esm/.graphclient/index.js.map +1 -0
- package/dist/esm/.graphclient/sources/clober-v2/introspectionSchema.js +14480 -0
- package/dist/esm/.graphclient/sources/clober-v2/introspectionSchema.js.map +1 -0
- package/dist/esm/.graphclient/sources/clober-v2/types.js +3 -0
- package/dist/esm/.graphclient/sources/clober-v2/types.js.map +1 -0
- package/dist/esm/abis/core/controller-abi.js +986 -0
- package/dist/esm/abis/core/controller-abi.js.map +1 -0
- package/dist/esm/abis/core/params-abi.js +59 -0
- package/dist/esm/abis/core/params-abi.js.map +1 -0
- package/dist/esm/apis/currency.js +83 -0
- package/dist/esm/apis/currency.js.map +1 -0
- package/dist/esm/apis/market.js +59 -0
- package/dist/esm/apis/market.js.map +1 -0
- package/dist/esm/apis/open-order.js +85 -0
- package/dist/esm/apis/open-order.js.map +1 -0
- package/dist/esm/approval.js +70 -0
- package/dist/esm/approval.js.map +1 -0
- package/dist/esm/call.js +535 -0
- package/dist/esm/call.js.map +1 -0
- package/dist/esm/constants/action.js +11 -0
- package/dist/esm/constants/action.js.map +1 -0
- package/dist/esm/constants/addresses.js +10 -0
- package/dist/esm/constants/addresses.js.map +1 -0
- package/dist/esm/constants/chain.js +10 -0
- package/dist/esm/constants/chain.js.map +1 -0
- package/dist/esm/constants/currency.js +9 -0
- package/dist/esm/constants/currency.js.map +1 -0
- package/dist/esm/constants/fee.js +4 -0
- package/dist/esm/constants/fee.js.map +1 -0
- package/dist/esm/constants/price.js +3 -0
- package/dist/esm/constants/price.js.map +1 -0
- package/dist/esm/constants/subgraph-url.js +5 -0
- package/dist/esm/constants/subgraph-url.js.map +1 -0
- package/dist/esm/index.js +6 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/model/book.js +126 -0
- package/dist/esm/model/book.js.map +1 -0
- package/dist/esm/model/currency.js +2 -0
- package/dist/esm/model/currency.js.map +1 -0
- package/dist/esm/model/depth.js +2 -0
- package/dist/esm/model/depth.js.map +1 -0
- package/dist/esm/model/fee-policy.js +38 -0
- package/dist/esm/model/fee-policy.js.map +1 -0
- package/dist/esm/model/market.js +211 -0
- package/dist/esm/model/market.js.map +1 -0
- package/dist/esm/model/open-order.js +2 -0
- package/dist/esm/model/open-order.js.map +1 -0
- package/dist/esm/package.json +1 -0
- package/dist/esm/signature.js +174 -0
- package/dist/esm/signature.js.map +1 -0
- package/dist/esm/tsconfig.build.tsbuildinfo +1 -0
- package/dist/esm/type.js +2 -0
- package/dist/esm/type.js.map +1 -0
- package/dist/esm/utils/approval.js +42 -0
- package/dist/esm/utils/approval.js.map +1 -0
- package/{src/utils/book-id.ts → dist/esm/utils/book-id.js} +9 -19
- package/dist/esm/utils/book-id.js.map +1 -0
- package/dist/esm/utils/build-transaction.js +27 -0
- package/dist/esm/utils/build-transaction.js.map +1 -0
- package/dist/esm/utils/decimals.js +12 -0
- package/dist/esm/utils/decimals.js.map +1 -0
- package/dist/esm/utils/market.js +49 -0
- package/dist/esm/utils/market.js.map +1 -0
- package/dist/esm/utils/math.js +78 -0
- package/dist/esm/utils/math.js.map +1 -0
- package/dist/esm/utils/prices.js +17 -0
- package/dist/esm/utils/prices.js.map +1 -0
- package/dist/esm/utils/tick.js +100 -0
- package/dist/esm/utils/tick.js.map +1 -0
- package/dist/esm/utils/time.js +5 -0
- package/dist/esm/utils/time.js.map +1 -0
- package/dist/esm/utils/unit.js +34 -0
- package/dist/esm/utils/unit.js.map +1 -0
- package/dist/esm/view.js +177 -0
- package/dist/esm/view.js.map +1 -0
- package/dist/types/.graphclient/index.d.ts +1281 -0
- package/dist/types/.graphclient/index.d.ts.map +1 -0
- package/dist/types/.graphclient/sources/clober-v2/introspectionSchema.d.ts +3 -0
- package/dist/types/.graphclient/sources/clober-v2/introspectionSchema.d.ts.map +1 -0
- package/dist/types/.graphclient/sources/clober-v2/types.d.ts +984 -0
- package/dist/types/.graphclient/sources/clober-v2/types.d.ts.map +1 -0
- package/dist/types/abis/core/controller-abi.d.ts +757 -0
- package/dist/types/abis/core/controller-abi.d.ts.map +1 -0
- package/dist/types/abis/core/params-abi.d.ts +21 -0
- package/dist/types/abis/core/params-abi.d.ts.map +1 -0
- package/dist/types/apis/currency.d.ts +4 -0
- package/dist/types/apis/currency.d.ts.map +1 -0
- package/dist/types/apis/market.d.ts +4 -0
- package/dist/types/apis/market.d.ts.map +1 -0
- package/dist/types/apis/open-order.d.ts +5 -0
- package/dist/types/apis/open-order.d.ts.map +1 -0
- package/dist/types/approval.d.ts +32 -0
- package/dist/types/approval.d.ts.map +1 -0
- package/dist/types/call.d.ts +234 -0
- package/dist/types/call.d.ts.map +1 -0
- package/dist/types/constants/action.d.ts +10 -0
- package/dist/types/constants/action.d.ts.map +1 -0
- package/dist/types/constants/addresses.d.ts +9 -0
- package/dist/types/constants/addresses.d.ts.map +1 -0
- package/dist/types/constants/chain.d.ts +9 -0
- package/dist/types/constants/chain.d.ts.map +1 -0
- package/dist/types/constants/currency.d.ts +8 -0
- package/dist/types/constants/currency.d.ts.map +1 -0
- package/dist/types/constants/fee.d.ts +4 -0
- package/dist/types/constants/fee.d.ts.map +1 -0
- package/dist/types/constants/price.d.ts +3 -0
- package/dist/types/constants/price.d.ts.map +1 -0
- package/dist/types/constants/subgraph-url.d.ts +5 -0
- package/dist/types/constants/subgraph-url.d.ts.map +1 -0
- package/dist/types/index.d.ts +6 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/model/book.d.ts +31 -0
- package/dist/types/model/book.d.ts.map +1 -0
- package/dist/types/model/currency.d.ts +7 -0
- package/dist/types/model/currency.d.ts.map +1 -0
- package/dist/types/model/depth.d.ts +11 -0
- package/dist/types/model/depth.d.ts.map +1 -0
- package/dist/types/model/fee-policy.d.ts +15 -0
- package/dist/types/model/fee-policy.d.ts.map +1 -0
- package/dist/types/model/market.d.ts +44 -0
- package/dist/types/model/market.d.ts.map +1 -0
- package/dist/types/model/open-order.d.ts +28 -0
- package/dist/types/model/open-order.d.ts.map +1 -0
- package/dist/types/signature.d.ts +40 -0
- package/dist/types/signature.d.ts.map +1 -0
- package/dist/types/type.d.ts +34 -0
- package/dist/types/type.d.ts.map +1 -0
- package/dist/types/utils/approval.d.ts +3 -0
- package/dist/types/utils/approval.d.ts.map +1 -0
- package/dist/types/utils/book-id.d.ts +2 -0
- package/dist/types/utils/book-id.d.ts.map +1 -0
- package/dist/types/utils/build-transaction.d.ts +5 -0
- package/dist/types/utils/build-transaction.d.ts.map +1 -0
- package/dist/types/utils/decimals.d.ts +3 -0
- package/dist/types/utils/decimals.d.ts.map +1 -0
- package/dist/types/utils/market.d.ts +7 -0
- package/dist/types/utils/market.d.ts.map +1 -0
- package/dist/types/utils/math.d.ts +3 -0
- package/dist/types/utils/math.d.ts.map +1 -0
- package/dist/types/utils/prices.d.ts +3 -0
- package/dist/types/utils/prices.d.ts.map +1 -0
- package/dist/types/utils/tick.d.ts +4 -0
- package/dist/types/utils/tick.d.ts.map +1 -0
- package/dist/types/utils/time.d.ts +2 -0
- package/dist/types/utils/time.d.ts.map +1 -0
- package/dist/types/utils/unit.d.ts +4 -0
- package/dist/types/utils/unit.d.ts.map +1 -0
- package/dist/types/view.d.ts +129 -0
- package/dist/types/view.d.ts.map +1 -0
- package/package.json +14 -6
- package/.eslintignore +0 -1
- package/.eslintrc.yaml +0 -34
- package/.github/workflows/ci.yaml +0 -88
- package/.github/workflows/deployer.yaml +0 -19
- package/.nvmrc +0 -1
- package/.prettierignore +0 -6
- package/.prettierrc +0 -7
- package/src/.graphclient/index.ts +0 -1695
- package/src/.graphclient/schema.graphql +0 -1116
- package/src/.graphclient/sources/clober-v2/introspectionSchema.ts +0 -14481
- package/src/.graphclient/sources/clober-v2/schema.graphql +0 -1116
- package/src/.graphclient/sources/clober-v2/types.ts +0 -1133
- package/src/.graphclientrc.yml +0 -12
- package/src/abis/core/controller-abi.ts +0 -985
- package/src/abis/core/params-abi.ts +0 -59
- package/src/apis/currency.ts +0 -92
- package/src/apis/graphql/books.graphql +0 -25
- package/src/apis/graphql/open-order.graphql +0 -29
- package/src/apis/graphql/open-orders.graphql +0 -29
- package/src/apis/market.ts +0 -85
- package/src/apis/open-order.ts +0 -145
- package/src/approval.ts +0 -82
- package/src/call.ts +0 -705
- package/src/constants/action.ts +0 -9
- package/src/constants/addresses.ts +0 -17
- package/src/constants/chain.ts +0 -12
- package/src/constants/currency.ts +0 -15
- package/src/constants/fee.ts +0 -4
- package/src/constants/price.ts +0 -3
- package/src/constants/subgraph-url.ts +0 -8
- package/src/index.ts +0 -5
- package/src/model/book.ts +0 -166
- package/src/model/currency.ts +0 -6
- package/src/model/depth.ts +0 -11
- package/src/model/fee-policy.ts +0 -51
- package/src/model/market.ts +0 -320
- package/src/model/open-order.ts +0 -16
- package/src/signature.ts +0 -196
- package/src/type.ts +0 -38
- package/src/utils/approval.ts +0 -48
- package/src/utils/build-transaction.ts +0 -39
- package/src/utils/decimals.ts +0 -22
- package/src/utils/market.ts +0 -74
- package/src/utils/math.ts +0 -117
- package/src/utils/prices.ts +0 -29
- package/src/utils/tick.ts +0 -104
- package/src/utils/time.ts +0 -6
- package/src/utils/unit.ts +0 -43
- package/src/view.ts +0 -258
- package/test/book-id.test.ts +0 -101
- package/test/fee-policy.test.ts +0 -228
- package/test/get-expected-input.test.ts +0 -206
- package/test/get-expected-output.test.ts +0 -206
- package/test/limit-order.test.ts +0 -279
- package/test/market-order.test.ts +0 -245
- package/test/market.test.ts +0 -68
- package/test/math.test.ts +0 -91
- package/test/open-order.test.ts +0 -112
- package/test/open.test.ts +0 -15
- package/test/tick.test.ts +0 -230
- package/test/tsconfig.json +0 -12
- package/test/utils/chain.ts +0 -12
- package/test/utils/constants.ts +0 -25
- package/test/utils/currency.ts +0 -44
- package/test/utils/depth.ts +0 -148
- package/test/utils/test-chain.ts +0 -26
- package/test/vitest.config.ts +0 -15
- package/tsconfig.base.json +0 -37
- package/tsconfig.build.json +0 -9
- package/tsconfig.json +0 -9
package/src/signature.ts
DELETED
|
@@ -1,196 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
createPublicClient,
|
|
3
|
-
HDAccount,
|
|
4
|
-
hexToSignature,
|
|
5
|
-
http,
|
|
6
|
-
parseUnits,
|
|
7
|
-
PrivateKeyAccount,
|
|
8
|
-
verifyTypedData,
|
|
9
|
-
zeroHash,
|
|
10
|
-
} from 'viem'
|
|
11
|
-
|
|
12
|
-
import { CHAIN_IDS, CHAIN_MAP } from './constants/chain'
|
|
13
|
-
import { getDeadlineTimestampInSeconds } from './utils/time'
|
|
14
|
-
import { CONTRACT_ADDRESSES } from './constants/addresses'
|
|
15
|
-
import { fetchCurrency } from './apis/currency'
|
|
16
|
-
import { PermitSignature } from './type'
|
|
17
|
-
|
|
18
|
-
const _abi = [
|
|
19
|
-
{
|
|
20
|
-
inputs: [],
|
|
21
|
-
name: 'version',
|
|
22
|
-
outputs: [
|
|
23
|
-
{
|
|
24
|
-
internalType: 'string',
|
|
25
|
-
name: '',
|
|
26
|
-
type: 'string',
|
|
27
|
-
},
|
|
28
|
-
],
|
|
29
|
-
stateMutability: 'view',
|
|
30
|
-
type: 'function',
|
|
31
|
-
},
|
|
32
|
-
{
|
|
33
|
-
inputs: [
|
|
34
|
-
{
|
|
35
|
-
internalType: 'address',
|
|
36
|
-
name: 'owner',
|
|
37
|
-
type: 'address',
|
|
38
|
-
},
|
|
39
|
-
],
|
|
40
|
-
name: 'nonces',
|
|
41
|
-
outputs: [
|
|
42
|
-
{
|
|
43
|
-
internalType: 'uint256',
|
|
44
|
-
name: '',
|
|
45
|
-
type: 'uint256',
|
|
46
|
-
},
|
|
47
|
-
],
|
|
48
|
-
stateMutability: 'view',
|
|
49
|
-
type: 'function',
|
|
50
|
-
},
|
|
51
|
-
{
|
|
52
|
-
inputs: [],
|
|
53
|
-
name: 'name',
|
|
54
|
-
outputs: [
|
|
55
|
-
{
|
|
56
|
-
internalType: 'string',
|
|
57
|
-
name: '',
|
|
58
|
-
type: 'string',
|
|
59
|
-
},
|
|
60
|
-
],
|
|
61
|
-
stateMutability: 'view',
|
|
62
|
-
type: 'function',
|
|
63
|
-
},
|
|
64
|
-
] as const
|
|
65
|
-
|
|
66
|
-
/**
|
|
67
|
-
* Signs an ERC20 permit using EIP-712 encoding.
|
|
68
|
-
*
|
|
69
|
-
* @param {CHAIN_IDS} chainId The chain ID.
|
|
70
|
-
* @param {HDAccount | PrivateKeyAccount} account The Ethereum account used for signing using
|
|
71
|
-
* [viem - Local Accounts (Private Key, Mnemonic, etc)](https://viem.sh/docs/accounts/local#local-accounts-private-key-mnemonic-etc).
|
|
72
|
-
* @param {`0x${string}`} token The ERC20 token address.
|
|
73
|
-
* @param {string} amount The amount of tokens to permit.
|
|
74
|
-
* @param options
|
|
75
|
-
* @param options.rpcUrl The RPC URL of the blockchain.
|
|
76
|
-
* @returns {Promise<PermitSignature>} Promise resolving to the permit signature.
|
|
77
|
-
* @example
|
|
78
|
-
* import { signERC20Permit } from '@clober/v2-sdk'
|
|
79
|
-
* import { privateKeyToAccount } from 'viem/accounts'
|
|
80
|
-
*
|
|
81
|
-
* const { deadline, r, s, v } = await signERC20Permit(
|
|
82
|
-
* 421614,
|
|
83
|
-
* privateKeyToAccount('0x...')
|
|
84
|
-
* '0x00bfd44e79fb7f6dd5887a9426c8ef85a0cd23e0',
|
|
85
|
-
* '1000.123', // spend 1000.123 USDC
|
|
86
|
-
* )
|
|
87
|
-
*
|
|
88
|
-
* @example
|
|
89
|
-
* import { signERC20Permit } from '@clober/v2-sdk'
|
|
90
|
-
* import { mnemonicToAccount } from 'viem/accounts'
|
|
91
|
-
*
|
|
92
|
-
* const { deadline, r, s, v } = await signERC20Permit(
|
|
93
|
-
* 421614,
|
|
94
|
-
* mnemonicToAccount('legal ...')
|
|
95
|
-
* '0x00bfd44e79fb7f6dd5887a9426c8ef85a0cd23e0',
|
|
96
|
-
* '1000.123', // spend 1000.123 USDC
|
|
97
|
-
* )
|
|
98
|
-
*/
|
|
99
|
-
export const signERC20Permit = async (
|
|
100
|
-
chainId: CHAIN_IDS,
|
|
101
|
-
account: HDAccount | PrivateKeyAccount,
|
|
102
|
-
token: `0x${string}`,
|
|
103
|
-
amount: string,
|
|
104
|
-
options?: {
|
|
105
|
-
rpcUrl: string
|
|
106
|
-
},
|
|
107
|
-
): Promise<PermitSignature> => {
|
|
108
|
-
const currency = await fetchCurrency(chainId, token, options?.rpcUrl)
|
|
109
|
-
const spender = CONTRACT_ADDRESSES[chainId]!.Controller
|
|
110
|
-
const publicClient = createPublicClient({
|
|
111
|
-
chain: CHAIN_MAP[chainId],
|
|
112
|
-
transport: options?.rpcUrl ? http(options.rpcUrl) : http(),
|
|
113
|
-
})
|
|
114
|
-
const value = parseUnits(amount, currency.decimals)
|
|
115
|
-
const [{ result: nonce }, { result: version }, { result: name }] =
|
|
116
|
-
await publicClient.multicall({
|
|
117
|
-
allowFailure: true,
|
|
118
|
-
contracts: [
|
|
119
|
-
{
|
|
120
|
-
address: token,
|
|
121
|
-
abi: _abi,
|
|
122
|
-
functionName: 'nonces',
|
|
123
|
-
args: [account.address],
|
|
124
|
-
},
|
|
125
|
-
{
|
|
126
|
-
address: token,
|
|
127
|
-
abi: _abi,
|
|
128
|
-
functionName: 'version',
|
|
129
|
-
},
|
|
130
|
-
{
|
|
131
|
-
address: token,
|
|
132
|
-
abi: _abi,
|
|
133
|
-
functionName: 'name',
|
|
134
|
-
},
|
|
135
|
-
],
|
|
136
|
-
})
|
|
137
|
-
|
|
138
|
-
if (nonce === undefined || !name) {
|
|
139
|
-
return {
|
|
140
|
-
r: zeroHash,
|
|
141
|
-
s: zeroHash,
|
|
142
|
-
v: 0,
|
|
143
|
-
deadline: 0n,
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
const deadline = getDeadlineTimestampInSeconds()
|
|
147
|
-
const data = {
|
|
148
|
-
domain: {
|
|
149
|
-
name: name,
|
|
150
|
-
version: (version || '1').toString(),
|
|
151
|
-
chainId: BigInt(chainId),
|
|
152
|
-
verifyingContract: currency.address,
|
|
153
|
-
},
|
|
154
|
-
message: {
|
|
155
|
-
owner: account.address,
|
|
156
|
-
spender,
|
|
157
|
-
value,
|
|
158
|
-
nonce,
|
|
159
|
-
deadline,
|
|
160
|
-
},
|
|
161
|
-
primaryType: 'Permit',
|
|
162
|
-
types: {
|
|
163
|
-
Permit: [
|
|
164
|
-
{ name: 'owner', type: 'address' },
|
|
165
|
-
{ name: 'spender', type: 'address' },
|
|
166
|
-
{ name: 'value', type: 'uint256' },
|
|
167
|
-
{ name: 'nonce', type: 'uint256' },
|
|
168
|
-
{ name: 'deadline', type: 'uint256' },
|
|
169
|
-
],
|
|
170
|
-
EIP712Domain: [
|
|
171
|
-
{ name: 'name', type: 'string' },
|
|
172
|
-
{ name: 'version', type: 'string' },
|
|
173
|
-
{ name: 'chainId', type: 'uint256' },
|
|
174
|
-
{ name: 'verifyingContract', type: 'address' },
|
|
175
|
-
],
|
|
176
|
-
},
|
|
177
|
-
} as const
|
|
178
|
-
const signature = await account.signTypedData({
|
|
179
|
-
...data,
|
|
180
|
-
})
|
|
181
|
-
const valid = await verifyTypedData({
|
|
182
|
-
...data,
|
|
183
|
-
signature,
|
|
184
|
-
address: account.address,
|
|
185
|
-
})
|
|
186
|
-
if (!valid) {
|
|
187
|
-
throw new Error('Invalid signature')
|
|
188
|
-
}
|
|
189
|
-
const { v, s, r } = hexToSignature(signature)
|
|
190
|
-
return {
|
|
191
|
-
v: Number(v),
|
|
192
|
-
s,
|
|
193
|
-
r,
|
|
194
|
-
deadline,
|
|
195
|
-
}
|
|
196
|
-
}
|
package/src/type.ts
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { Account } from 'viem'
|
|
2
|
-
|
|
3
|
-
import { CHAIN_IDS } from './constants/chain'
|
|
4
|
-
import { Currency } from './model/currency'
|
|
5
|
-
import { Depth } from './model/depth'
|
|
6
|
-
|
|
7
|
-
export { CHAIN_IDS } from './constants/chain'
|
|
8
|
-
export { Currency } from './model/currency'
|
|
9
|
-
export { Depth } from './model/depth'
|
|
10
|
-
export { OpenOrder } from './model/open-order'
|
|
11
|
-
|
|
12
|
-
export type Market = {
|
|
13
|
-
chainId: CHAIN_IDS
|
|
14
|
-
quote: Currency
|
|
15
|
-
base: Currency
|
|
16
|
-
makerFee: number
|
|
17
|
-
takerFee: number
|
|
18
|
-
bids: Depth[]
|
|
19
|
-
bidBookOpen: boolean
|
|
20
|
-
asks: Depth[]
|
|
21
|
-
askBookOpen: boolean
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
export type Transaction = {
|
|
25
|
-
data: `0x${string}`
|
|
26
|
-
gas: bigint
|
|
27
|
-
gasPrice: bigint
|
|
28
|
-
value: bigint
|
|
29
|
-
to: `0x${string}`
|
|
30
|
-
from: `0x${string}` | Account | undefined
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
export type PermitSignature = {
|
|
34
|
-
deadline: bigint
|
|
35
|
-
v: number
|
|
36
|
-
r: `0x${string}`
|
|
37
|
-
s: `0x${string}`
|
|
38
|
-
}
|
package/src/utils/approval.ts
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { createPublicClient, http } from 'viem'
|
|
2
|
-
|
|
3
|
-
import { CHAIN_IDS, CHAIN_MAP } from '../constants/chain'
|
|
4
|
-
import { CONTRACT_ADDRESSES } from '../constants/addresses'
|
|
5
|
-
|
|
6
|
-
const _abi = [
|
|
7
|
-
{
|
|
8
|
-
inputs: [
|
|
9
|
-
{
|
|
10
|
-
internalType: 'address',
|
|
11
|
-
name: 'owner',
|
|
12
|
-
type: 'address',
|
|
13
|
-
},
|
|
14
|
-
{
|
|
15
|
-
internalType: 'address',
|
|
16
|
-
name: 'operator',
|
|
17
|
-
type: 'address',
|
|
18
|
-
},
|
|
19
|
-
],
|
|
20
|
-
name: 'isApprovedForAll',
|
|
21
|
-
outputs: [
|
|
22
|
-
{
|
|
23
|
-
internalType: 'bool',
|
|
24
|
-
name: '',
|
|
25
|
-
type: 'bool',
|
|
26
|
-
},
|
|
27
|
-
],
|
|
28
|
-
stateMutability: 'view',
|
|
29
|
-
type: 'function',
|
|
30
|
-
},
|
|
31
|
-
] as const
|
|
32
|
-
|
|
33
|
-
export async function fetchIsApprovedForAll(
|
|
34
|
-
chainId: CHAIN_IDS,
|
|
35
|
-
owner: `0x${string}`,
|
|
36
|
-
rpcUrl?: string,
|
|
37
|
-
): Promise<boolean> {
|
|
38
|
-
const publicClient = createPublicClient({
|
|
39
|
-
chain: CHAIN_MAP[chainId],
|
|
40
|
-
transport: rpcUrl ? http(rpcUrl) : http(),
|
|
41
|
-
})
|
|
42
|
-
return publicClient.readContract({
|
|
43
|
-
address: CONTRACT_ADDRESSES[chainId]!.BookManager,
|
|
44
|
-
abi: _abi,
|
|
45
|
-
functionName: 'isApprovedForAll',
|
|
46
|
-
args: [owner, CONTRACT_ADDRESSES[chainId]!.Controller],
|
|
47
|
-
})
|
|
48
|
-
}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
createPublicClient,
|
|
3
|
-
encodeFunctionData,
|
|
4
|
-
http,
|
|
5
|
-
SimulateContractParameters,
|
|
6
|
-
WriteContractParameters,
|
|
7
|
-
} from 'viem'
|
|
8
|
-
|
|
9
|
-
import { CHAIN_IDS, CHAIN_MAP } from '../constants/chain'
|
|
10
|
-
import { Transaction } from '../type'
|
|
11
|
-
|
|
12
|
-
export const buildTransaction = async (
|
|
13
|
-
chainId: CHAIN_IDS,
|
|
14
|
-
args: WriteContractParameters | SimulateContractParameters,
|
|
15
|
-
rpcUrl?: string,
|
|
16
|
-
): Promise<Transaction> => {
|
|
17
|
-
const publicClient = createPublicClient({
|
|
18
|
-
chain: CHAIN_MAP[chainId],
|
|
19
|
-
transport: rpcUrl ? http(rpcUrl) : http(),
|
|
20
|
-
})
|
|
21
|
-
const data = encodeFunctionData(args)
|
|
22
|
-
const [gas, gasPrice] = await Promise.all([
|
|
23
|
-
publicClient.estimateGas({
|
|
24
|
-
account: args.account,
|
|
25
|
-
data,
|
|
26
|
-
to: args.address,
|
|
27
|
-
value: args.value || 0n,
|
|
28
|
-
}),
|
|
29
|
-
publicClient.getGasPrice(),
|
|
30
|
-
])
|
|
31
|
-
return {
|
|
32
|
-
gas,
|
|
33
|
-
gasPrice,
|
|
34
|
-
data,
|
|
35
|
-
value: args.value || 0n,
|
|
36
|
-
to: args.address,
|
|
37
|
-
from: args.account,
|
|
38
|
-
}
|
|
39
|
-
}
|
package/src/utils/decimals.ts
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { PRICE_PRECISION } from '../constants/price'
|
|
2
|
-
|
|
3
|
-
import { divide } from './math'
|
|
4
|
-
import { toPrice } from './tick'
|
|
5
|
-
|
|
6
|
-
export const baseToQuote = (
|
|
7
|
-
tick: bigint,
|
|
8
|
-
base: bigint,
|
|
9
|
-
roundingUp: boolean,
|
|
10
|
-
): bigint => {
|
|
11
|
-
const y = 1n << PRICE_PRECISION
|
|
12
|
-
return divide(base * toPrice(tick), y, roundingUp)
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
export const quoteToBase = (
|
|
16
|
-
tick: bigint,
|
|
17
|
-
quote: bigint,
|
|
18
|
-
roundingUp: boolean,
|
|
19
|
-
): bigint => {
|
|
20
|
-
const x = quote << PRICE_PRECISION
|
|
21
|
-
return divide(x, toPrice(tick), roundingUp)
|
|
22
|
-
}
|
package/src/utils/market.ts
DELETED
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
import { getAddress, isAddressEqual, zeroAddress } from 'viem'
|
|
2
|
-
|
|
3
|
-
import { STABLE_COIN_ADDRESSES, WETH_ADDRESSES } from '../constants/currency'
|
|
4
|
-
import { CHAIN_IDS } from '../constants/chain'
|
|
5
|
-
|
|
6
|
-
export const getMarketId = (
|
|
7
|
-
chainId: CHAIN_IDS,
|
|
8
|
-
tokenAddresses: `0x${string}`[],
|
|
9
|
-
): {
|
|
10
|
-
baseTokenAddress: `0x${string}`
|
|
11
|
-
quoteTokenAddress: `0x${string}`
|
|
12
|
-
marketId: string
|
|
13
|
-
} => {
|
|
14
|
-
if (tokenAddresses.length !== 2) {
|
|
15
|
-
throw new Error('Invalid token pair')
|
|
16
|
-
}
|
|
17
|
-
tokenAddresses = tokenAddresses.map((address) => getAddress(address))
|
|
18
|
-
|
|
19
|
-
// include stable coin
|
|
20
|
-
const stable = tokenAddresses.find((address) => {
|
|
21
|
-
return STABLE_COIN_ADDRESSES[chainId]!.map((addresses) =>
|
|
22
|
-
getAddress(addresses),
|
|
23
|
-
).some((addresses) => addresses.includes(address))
|
|
24
|
-
})
|
|
25
|
-
if (stable) {
|
|
26
|
-
const other = tokenAddresses.find(
|
|
27
|
-
(address) => !isAddressEqual(address, stable),
|
|
28
|
-
)!
|
|
29
|
-
return {
|
|
30
|
-
marketId: `${other}/${stable}`,
|
|
31
|
-
quoteTokenAddress: stable,
|
|
32
|
-
baseTokenAddress: other,
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
// include eth
|
|
37
|
-
const eth = tokenAddresses.find((address) =>
|
|
38
|
-
isAddressEqual(address, zeroAddress),
|
|
39
|
-
)
|
|
40
|
-
if (eth) {
|
|
41
|
-
const other = tokenAddresses.find(
|
|
42
|
-
(address) => !isAddressEqual(address, zeroAddress),
|
|
43
|
-
)!
|
|
44
|
-
return {
|
|
45
|
-
marketId: `${other}/${eth}`,
|
|
46
|
-
quoteTokenAddress: eth,
|
|
47
|
-
baseTokenAddress: other,
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
// include weth
|
|
52
|
-
const weth = tokenAddresses.find((address) => {
|
|
53
|
-
return WETH_ADDRESSES[chainId]!.map((addresses) =>
|
|
54
|
-
getAddress(addresses),
|
|
55
|
-
).some((addresses) => addresses.includes(address))
|
|
56
|
-
})
|
|
57
|
-
if (weth) {
|
|
58
|
-
const other = tokenAddresses.find(
|
|
59
|
-
(address) => !isAddressEqual(address, weth),
|
|
60
|
-
)!
|
|
61
|
-
return {
|
|
62
|
-
marketId: `${other}/${weth}`,
|
|
63
|
-
quoteTokenAddress: weth,
|
|
64
|
-
baseTokenAddress: other,
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
const _tokens = tokenAddresses.sort((a, b) => a.localeCompare(b))
|
|
69
|
-
return {
|
|
70
|
-
marketId: `${_tokens[0]}/${_tokens[1]}`,
|
|
71
|
-
quoteTokenAddress: _tokens[0]!,
|
|
72
|
-
baseTokenAddress: _tokens[1]!,
|
|
73
|
-
}
|
|
74
|
-
}
|
package/src/utils/math.ts
DELETED
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
export const divide = (x: bigint, y: bigint, roundUp: boolean): bigint => {
|
|
2
|
-
if (roundUp) {
|
|
3
|
-
if (x === 0n) {
|
|
4
|
-
return 0n
|
|
5
|
-
} else {
|
|
6
|
-
return (x - 1n) / y + 1n
|
|
7
|
-
}
|
|
8
|
-
} else {
|
|
9
|
-
return x / y
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export const lnWad = (x: bigint): bigint => {
|
|
14
|
-
const or = (a: bigint, b: bigint) => a | b
|
|
15
|
-
const xor = (a: bigint, b: bigint) => a ^ b
|
|
16
|
-
const and = (a: bigint, b: bigint) => a & b
|
|
17
|
-
const add = (a: bigint, b: bigint) => a + b
|
|
18
|
-
const sub = (a: bigint, b: bigint) => a - b
|
|
19
|
-
const mul = (a: bigint, b: bigint) => a * b
|
|
20
|
-
const sdiv = (a: bigint, b: bigint) => a / b
|
|
21
|
-
const lt = (a: bigint, b: bigint) => (a < b ? 1n : 0n)
|
|
22
|
-
const shl = (x: bigint, y: bigint) => y << x
|
|
23
|
-
const shr = (x: bigint, y: bigint) => y >> x
|
|
24
|
-
const sar = (x: bigint, y: bigint) => y >> x
|
|
25
|
-
const byte = (i: bigint, x: bigint) => (x >> (248n - i * 8n)) & 0xffn
|
|
26
|
-
|
|
27
|
-
// We want to convert `x` from `10**18` fixed point to `2**96` fixed point.
|
|
28
|
-
// We do this by multiplying by `2**96 / 10**18`. But since
|
|
29
|
-
// `ln(x * C) = ln(x) + ln(C)`, we can simply do nothing here
|
|
30
|
-
// and add `ln(2**96 / 10**18)` at the end.
|
|
31
|
-
|
|
32
|
-
// Compute `k = log2(x) - 96`, `r = 159 - k = 255 - log2(x) = 255 ^ log2(x)`.
|
|
33
|
-
let r = shl(7n, lt(0xffffffffffffffffffffffffffffffffn, x))
|
|
34
|
-
r = or(r, shl(6n, lt(0xffffffffffffffffn, shr(r, x))))
|
|
35
|
-
r = or(r, shl(5n, lt(0xffffffffn, shr(r, x))))
|
|
36
|
-
r = or(r, shl(4n, lt(0xffffn, shr(r, x))))
|
|
37
|
-
r = or(r, shl(3n, lt(0xffn, shr(r, x))))
|
|
38
|
-
// forgefmt: disable-next-item
|
|
39
|
-
r = xor(
|
|
40
|
-
r,
|
|
41
|
-
byte(
|
|
42
|
-
and(0x1fn, shr(shr(r, x), 0x8421084210842108cc6318c6db6d54ben)),
|
|
43
|
-
0xf8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffffn,
|
|
44
|
-
),
|
|
45
|
-
)
|
|
46
|
-
|
|
47
|
-
// Reduce range of x to (1, 2) * 2**96
|
|
48
|
-
// ln(2^k * x) = k * ln(2) + ln(x)
|
|
49
|
-
x = shr(159n, shl(r, x))
|
|
50
|
-
|
|
51
|
-
// Evaluate using a (8, 8)-term rational approximation.
|
|
52
|
-
// `p` is made monic, we will multiply by a scale factor later.
|
|
53
|
-
// forgefmt: disable-next-item
|
|
54
|
-
let p = sub(
|
|
55
|
-
// This heavily nested expression is to avoid stack-too-deep for via-ir.
|
|
56
|
-
sar(
|
|
57
|
-
96n,
|
|
58
|
-
mul(
|
|
59
|
-
add(
|
|
60
|
-
43456485725739037958740375743393n,
|
|
61
|
-
sar(
|
|
62
|
-
96n,
|
|
63
|
-
mul(
|
|
64
|
-
add(
|
|
65
|
-
24828157081833163892658089445524n,
|
|
66
|
-
sar(96n, mul(add(3273285459638523848632254066296n, x), x)),
|
|
67
|
-
),
|
|
68
|
-
x,
|
|
69
|
-
),
|
|
70
|
-
),
|
|
71
|
-
),
|
|
72
|
-
x,
|
|
73
|
-
),
|
|
74
|
-
),
|
|
75
|
-
11111509109440967052023855526967n,
|
|
76
|
-
)
|
|
77
|
-
p = sub(sar(96n, mul(p, x)), 45023709667254063763336534515857n)
|
|
78
|
-
p = sub(sar(96n, mul(p, x)), 14706773417378608786704636184526n)
|
|
79
|
-
p = sub(mul(p, x), shl(96n, 795164235651350426258249787498n))
|
|
80
|
-
// We leave `p` in `2**192` basis so we don't need to scale it back up for the division.
|
|
81
|
-
|
|
82
|
-
// `q` is monic by convention.
|
|
83
|
-
let q = add(5573035233440673466300451813936n, x)
|
|
84
|
-
q = add(71694874799317883764090561454958n, sar(96n, mul(x, q)))
|
|
85
|
-
q = add(283447036172924575727196451306956n, sar(96n, mul(x, q)))
|
|
86
|
-
q = add(401686690394027663651624208769553n, sar(96n, mul(x, q)))
|
|
87
|
-
q = add(204048457590392012362485061816622n, sar(96n, mul(x, q)))
|
|
88
|
-
q = add(31853899698501571402653359427138n, sar(96n, mul(x, q)))
|
|
89
|
-
q = add(909429971244387300277376558375n, sar(96n, mul(x, q)))
|
|
90
|
-
|
|
91
|
-
// `p / q` is in the range `(0, 0.125) * 2**96`.
|
|
92
|
-
|
|
93
|
-
// Finalization, we need to:
|
|
94
|
-
// - Multiply by the scale factor `s = 5.549…`.
|
|
95
|
-
// - Add `ln(2**96 / 10**18)`.
|
|
96
|
-
// - Add `k * ln(2)`.
|
|
97
|
-
// - Multiply by `10**18 / 2**96 = 5**18 >> 78`.
|
|
98
|
-
|
|
99
|
-
// The q polynomial is known not to have zeros in the domain.
|
|
100
|
-
// No scaling required because p is already `2**96` too large.
|
|
101
|
-
p = sdiv(p, q)
|
|
102
|
-
// Multiply by the scaling factor: `s * 5**18 * 2**96`, base is now `5**18 * 2**192`.
|
|
103
|
-
p = mul(1677202110996718588342820967067443963516166n, p)
|
|
104
|
-
// Add `ln(2) * k * 5**18 * 2**192`.
|
|
105
|
-
// forgefmt: disable-next-item
|
|
106
|
-
p = add(
|
|
107
|
-
mul(
|
|
108
|
-
16597577552685614221487285958193947469193820559219878177908093499208371n,
|
|
109
|
-
sub(159n, r),
|
|
110
|
-
),
|
|
111
|
-
p,
|
|
112
|
-
)
|
|
113
|
-
// Base conversion: mul `2**96 / (5**18 * 2**192)`.
|
|
114
|
-
r = sdiv(p, 302231454903657293676544000000000000000000n)
|
|
115
|
-
|
|
116
|
-
return r
|
|
117
|
-
}
|
package/src/utils/prices.ts
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import BigNumber from 'bignumber.js'
|
|
2
|
-
|
|
3
|
-
import { PRICE_PRECISION } from '../constants/price'
|
|
4
|
-
|
|
5
|
-
export const formatPrice = (
|
|
6
|
-
price: bigint,
|
|
7
|
-
quoteDecimals: number,
|
|
8
|
-
baseDecimals: number,
|
|
9
|
-
): number => {
|
|
10
|
-
return new BigNumber(price.toString())
|
|
11
|
-
.div(new BigNumber(2).pow(PRICE_PRECISION.toString()))
|
|
12
|
-
.times(new BigNumber(10).pow(baseDecimals))
|
|
13
|
-
.div(new BigNumber(10).pow(quoteDecimals))
|
|
14
|
-
.toNumber()
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export const parsePrice = (
|
|
18
|
-
price: number,
|
|
19
|
-
quoteDecimals: number,
|
|
20
|
-
baseDecimals: number,
|
|
21
|
-
): bigint => {
|
|
22
|
-
const value = new BigNumber(price)
|
|
23
|
-
.times(new BigNumber(2).pow(PRICE_PRECISION.toString()))
|
|
24
|
-
.times(new BigNumber(10).pow(quoteDecimals))
|
|
25
|
-
.div(new BigNumber(10).pow(baseDecimals))
|
|
26
|
-
return BigInt(
|
|
27
|
-
value.isInteger() ? value.toFixed() : value.integerValue().toFixed(),
|
|
28
|
-
)
|
|
29
|
-
}
|
package/src/utils/tick.ts
DELETED
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
import { PRICE_PRECISION } from '../constants/price'
|
|
2
|
-
|
|
3
|
-
import { lnWad } from './math'
|
|
4
|
-
|
|
5
|
-
const _R0 = 0xfff97272373d413259a46990n
|
|
6
|
-
const _R1 = 0xfff2e50f5f656932ef12357cn
|
|
7
|
-
const _R2 = 0xffe5caca7e10e4e61c3624ean
|
|
8
|
-
const _R3 = 0xffcb9843d60f6159c9db5883n
|
|
9
|
-
const _R4 = 0xff973b41fa98c081472e6896n
|
|
10
|
-
const _R5 = 0xff2ea16466c96a3843ec78b3n
|
|
11
|
-
const _R6 = 0xfe5dee046a99a2a811c461f1n
|
|
12
|
-
const _R7 = 0xfcbe86c7900a88aedcffc83bn
|
|
13
|
-
const _R8 = 0xf987a7253ac413176f2b074cn
|
|
14
|
-
const _R9 = 0xf3392b0822b70005940c7a39n
|
|
15
|
-
const _R10 = 0xe7159475a2c29b7443b29c7fn
|
|
16
|
-
const _R11 = 0xd097f3bdfd2022b8845ad8f7n
|
|
17
|
-
const _R12 = 0xa9f746462d870fdf8a65dc1fn
|
|
18
|
-
const _R13 = 0x70d869a156d2a1b890bb3df6n
|
|
19
|
-
const _R14 = 0x31be135f97d08fd981231505n
|
|
20
|
-
const _R15 = 0x9aa508b5b7a84e1c677de54n
|
|
21
|
-
const _R16 = 0x5d6af8dedb81196699c329n
|
|
22
|
-
const _R17 = 0x2216e584f5fa1ea92604n
|
|
23
|
-
const _R18 = 0x48a170391f7dc42n
|
|
24
|
-
|
|
25
|
-
export const invertPrice = (price: bigint): bigint => {
|
|
26
|
-
return price ? (1n << (PRICE_PRECISION * 2n)) / price : 0n
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export const fromPrice = (price: bigint): bigint => {
|
|
30
|
-
const tick = (lnWad(price) * 42951820407860n) / 2n ** 128n
|
|
31
|
-
if (toPrice(tick) > price) {
|
|
32
|
-
return tick - 1n
|
|
33
|
-
}
|
|
34
|
-
return tick
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
export const toPrice = (tick: bigint): bigint => {
|
|
38
|
-
const absTick = tick < 0n ? -tick : tick
|
|
39
|
-
let price = 0n
|
|
40
|
-
if ((absTick & 0x1n) !== 0n) {
|
|
41
|
-
price = _R0
|
|
42
|
-
} else {
|
|
43
|
-
price = 1n << PRICE_PRECISION
|
|
44
|
-
}
|
|
45
|
-
if ((absTick & 0x2n) != 0n) {
|
|
46
|
-
price = (price * _R1) >> PRICE_PRECISION
|
|
47
|
-
}
|
|
48
|
-
if ((absTick & 0x4n) != 0n) {
|
|
49
|
-
price = (price * _R2) >> PRICE_PRECISION
|
|
50
|
-
}
|
|
51
|
-
if ((absTick & 0x8n) != 0n) {
|
|
52
|
-
price = (price * _R3) >> PRICE_PRECISION
|
|
53
|
-
}
|
|
54
|
-
if ((absTick & 0x10n) != 0n) {
|
|
55
|
-
price = (price * _R4) >> PRICE_PRECISION
|
|
56
|
-
}
|
|
57
|
-
if ((absTick & 0x20n) != 0n) {
|
|
58
|
-
price = (price * _R5) >> PRICE_PRECISION
|
|
59
|
-
}
|
|
60
|
-
if ((absTick & 0x40n) != 0n) {
|
|
61
|
-
price = (price * _R6) >> PRICE_PRECISION
|
|
62
|
-
}
|
|
63
|
-
if ((absTick & 0x80n) != 0n) {
|
|
64
|
-
price = (price * _R7) >> PRICE_PRECISION
|
|
65
|
-
}
|
|
66
|
-
if ((absTick & 0x100n) != 0n) {
|
|
67
|
-
price = (price * _R8) >> PRICE_PRECISION
|
|
68
|
-
}
|
|
69
|
-
if ((absTick & 0x200n) != 0n) {
|
|
70
|
-
price = (price * _R9) >> PRICE_PRECISION
|
|
71
|
-
}
|
|
72
|
-
if ((absTick & 0x400n) != 0n) {
|
|
73
|
-
price = (price * _R10) >> PRICE_PRECISION
|
|
74
|
-
}
|
|
75
|
-
if ((absTick & 0x800n) != 0n) {
|
|
76
|
-
price = (price * _R11) >> PRICE_PRECISION
|
|
77
|
-
}
|
|
78
|
-
if ((absTick & 0x1000n) != 0n) {
|
|
79
|
-
price = (price * _R12) >> PRICE_PRECISION
|
|
80
|
-
}
|
|
81
|
-
if ((absTick & 0x2000n) != 0n) {
|
|
82
|
-
price = (price * _R13) >> PRICE_PRECISION
|
|
83
|
-
}
|
|
84
|
-
if ((absTick & 0x4000n) != 0n) {
|
|
85
|
-
price = (price * _R14) >> PRICE_PRECISION
|
|
86
|
-
}
|
|
87
|
-
if ((absTick & 0x8000n) != 0n) {
|
|
88
|
-
price = (price * _R15) >> PRICE_PRECISION
|
|
89
|
-
}
|
|
90
|
-
if ((absTick & 0x10000n) != 0n) {
|
|
91
|
-
price = (price * _R16) >> PRICE_PRECISION
|
|
92
|
-
}
|
|
93
|
-
if ((absTick & 0x20000n) != 0n) {
|
|
94
|
-
price = (price * _R17) >> PRICE_PRECISION
|
|
95
|
-
}
|
|
96
|
-
if ((absTick & 0x40000n) != 0n) {
|
|
97
|
-
price = (price * _R18) >> PRICE_PRECISION
|
|
98
|
-
}
|
|
99
|
-
if (tick > 0n) {
|
|
100
|
-
price = 0x1000000000000000000000000000000000000000000000000n / price
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
return price
|
|
104
|
-
}
|