@grvt/sdk 0.0.1-beta.1 → 0.0.1-beta.3
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/LICENSE +189 -189
- package/README.md +187 -142
- package/client/GrvtBaseClient.d.ts +6 -3
- package/client/GrvtBaseClient.js +51 -4
- package/client/GrvtBaseClient.js.map +1 -1
- package/client/GrvtClient.d.ts +28 -5
- package/client/GrvtClient.js +49 -8
- package/client/GrvtClient.js.map +1 -1
- package/client/GrvtWsClient.d.ts +4 -4
- package/client/GrvtWsClient.js.map +1 -1
- package/config/config.d.ts +4 -4
- package/config/config.js +12 -12
- package/config/config.js.map +1 -1
- package/contract/abi/GRVTBridgeProxy-abi.json +583 -0
- package/contract/abi/USDTL1-abi.json +671 -0
- package/contract/index.d.ts +3 -0
- package/contract/index.js +11 -0
- package/contract/index.js.map +1 -0
- package/index.d.ts +7 -1
- package/index.js +7 -1
- package/index.js.map +1 -1
- package/package.json +4 -4
- package/services/deposit.d.ts +14 -0
- package/services/deposit.js +71 -0
- package/services/deposit.js.map +1 -0
- package/signing/domain.d.ts +2 -2
- package/signing/domain.js.map +1 -1
- package/signing/signer.js.map +1 -1
- package/signing/transfer.d.ts +3 -3
- package/signing/transfer.js +16 -14
- package/signing/transfer.js.map +1 -1
- package/signing/utils.d.ts +11 -0
- package/signing/utils.js +21 -0
- package/signing/utils.js.map +1 -0
- package/signing/withdraw.d.ts +4 -0
- package/signing/withdraw.js +39 -0
- package/signing/withdraw.js.map +1 -0
- package/types/chain.d.ts +6 -0
- package/types/chain.js +11 -0
- package/types/chain.js.map +1 -0
- package/types/deposit.d.ts +35 -0
- package/types/deposit.js +3 -0
- package/types/deposit.js.map +1 -0
- package/types/transfer.d.ts +15 -0
- package/types/transfer.js +13 -0
- package/types/transfer.js.map +1 -0
- package/utils/chain.d.ts +8 -0
- package/utils/chain.js +49 -0
- package/utils/chain.js.map +1 -0
- package/utils/number.d.ts +8 -0
- package/utils/number.js +19 -0
- package/utils/number.js.map +1 -0
- package/signing/signature.d.ts +0 -10
- package/signing/signature.js +0 -16
- package/signing/signature.js.map +0 -1
package/index.js
CHANGED
|
@@ -14,10 +14,16 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("grvt"), exports);
|
|
17
|
+
__exportStar(require("@grvt/client"), exports);
|
|
18
18
|
__exportStar(require("./client/GrvtClient"), exports);
|
|
19
19
|
__exportStar(require("./client/GrvtWsClient"), exports);
|
|
20
20
|
__exportStar(require("./config/config"), exports);
|
|
21
|
+
__exportStar(require("./signing/transfer"), exports);
|
|
22
|
+
__exportStar(require("./signing/utils"), exports);
|
|
23
|
+
__exportStar(require("./signing/withdraw"), exports);
|
|
24
|
+
__exportStar(require("./types/chain"), exports);
|
|
25
|
+
__exportStar(require("./types/deposit"), exports);
|
|
26
|
+
__exportStar(require("./types/transfer"), exports);
|
|
21
27
|
// Re-export the main client class as default
|
|
22
28
|
const GrvtClient_1 = require("./client/GrvtClient");
|
|
23
29
|
exports.default = GrvtClient_1.GrvtClient;
|
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+CAA6B;AAC7B,sDAAoC;AACpC,wDAAsC;AACtC,kDAAgC;AAChC,qDAAmC;AACnC,kDAAgC;AAChC,qDAAmC;AACnC,gDAA8B;AAC9B,kDAAgC;AAChC,mDAAiC;AAEjC,6CAA6C;AAC7C,oDAAiD;AACjD,kBAAe,uBAAU,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@grvt/sdk",
|
|
3
|
-
"version": "0.0.1-beta.
|
|
3
|
+
"version": "0.0.1-beta.3",
|
|
4
4
|
"description": "TypeScript SDK for GRVT",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -15,8 +15,8 @@
|
|
|
15
15
|
"prerelease": "npm run build",
|
|
16
16
|
"release": "cd dist/ && npm publish --access public",
|
|
17
17
|
"link-local": "cp package.json dist/ && cd dist/ && npm link && cd ..",
|
|
18
|
-
"lint": "eslint --config eslint.config.js .",
|
|
19
|
-
"format": "prettier --write \"src/**/*.ts\"",
|
|
18
|
+
"lint": "npx eslint --config eslint.config.js .",
|
|
19
|
+
"format": "npx prettier --write \"src/**/*.ts\"",
|
|
20
20
|
"test:sdk": "ts-node -r dotenv/config tests/test.ts dotenv_config_path=./tests/.env",
|
|
21
21
|
"test:ws": "ts-node -r dotenv/config tests/ws.test.ts dotenv_config_path=./tests/.env"
|
|
22
22
|
},
|
|
@@ -43,10 +43,10 @@
|
|
|
43
43
|
"typescript": "^5.8.3"
|
|
44
44
|
},
|
|
45
45
|
"dependencies": {
|
|
46
|
+
"@grvt/client": "^1.4.2",
|
|
46
47
|
"@metamask/eth-sig-util": "^8.2.0",
|
|
47
48
|
"@types/ws": "^8.18.1",
|
|
48
49
|
"ethers": "^6.13.5",
|
|
49
|
-
"grvt": "^1.4.0-beta.0",
|
|
50
50
|
"set-cookie-parser": "^2.7.1",
|
|
51
51
|
"ws": "^8.18.1"
|
|
52
52
|
},
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { IDepositOptions } from '../types/deposit';
|
|
2
|
+
import { GrvtClient } from '../client/GrvtClient';
|
|
3
|
+
import { EGrvtEnvironment } from '../config/config';
|
|
4
|
+
export declare class DepositService {
|
|
5
|
+
private client;
|
|
6
|
+
private env;
|
|
7
|
+
constructor(client: GrvtClient, env: EGrvtEnvironment);
|
|
8
|
+
/**
|
|
9
|
+
* Deposit funds to the account using L1 bridge or direct transfer for Arbitrum
|
|
10
|
+
* @param options - Deposit options
|
|
11
|
+
* @returns Promise with deposit transaction hash
|
|
12
|
+
*/
|
|
13
|
+
deposit(options: IDepositOptions): Promise<string>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DepositService = void 0;
|
|
4
|
+
const ethers_1 = require("ethers");
|
|
5
|
+
const contract_1 = require("../contract");
|
|
6
|
+
const chain_1 = require("../utils/chain");
|
|
7
|
+
const number_1 = require("../utils/number");
|
|
8
|
+
const chain_2 = require("../types/chain");
|
|
9
|
+
class DepositService {
|
|
10
|
+
constructor(client, env) {
|
|
11
|
+
this.client = client;
|
|
12
|
+
this.env = env;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Deposit funds to the account using L1 bridge or direct transfer for Arbitrum
|
|
16
|
+
* @param options - Deposit options
|
|
17
|
+
* @returns Promise with deposit transaction hash
|
|
18
|
+
*/
|
|
19
|
+
async deposit(options) {
|
|
20
|
+
const { l1Sender, l2Receiver, amount, chainId } = options;
|
|
21
|
+
// Get RPC URL and token address based on chain
|
|
22
|
+
const rpcUrl = chain_1.ChainUtils.getRpcUrl(chainId);
|
|
23
|
+
if (!rpcUrl) {
|
|
24
|
+
throw new Error(`Unsupported chain ID: ${chainId}`);
|
|
25
|
+
}
|
|
26
|
+
// Create a new wallet instance for this deposit
|
|
27
|
+
const provider = new ethers_1.JsonRpcProvider(rpcUrl);
|
|
28
|
+
const wallet = new ethers_1.Wallet(options.privateKey, provider);
|
|
29
|
+
// Get token address based on chain
|
|
30
|
+
const l1TokenAddress = chain_1.ChainUtils.getL1TokenAddress(chainId);
|
|
31
|
+
if (!l1TokenAddress) {
|
|
32
|
+
throw new Error(`Unsupported chain ID: ${chainId}`);
|
|
33
|
+
}
|
|
34
|
+
// Create token contract instance
|
|
35
|
+
const l1TokenContract = new ethers_1.Contract(l1TokenAddress, contract_1.USDTL1Abi, wallet);
|
|
36
|
+
// Convert amount to bigint using the same approach as market
|
|
37
|
+
const requestAmount = number_1.NumberUtils.numberToBigIntCurrencyUSDT(amount);
|
|
38
|
+
// Handle deposit based on chain
|
|
39
|
+
if (chainId === chain_2.EChain.ARBITRUM_ONE || chainId === chain_2.EChain.ARBITRUM_SEPOLIA) {
|
|
40
|
+
// For Arbitrum: Direct USDT transfer
|
|
41
|
+
const transferTx = await l1TokenContract.transfer(l2Receiver, requestAmount);
|
|
42
|
+
const receipt = await transferTx.wait();
|
|
43
|
+
return receipt.hash;
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
// For ETH: Bridge deposit
|
|
47
|
+
const l1BridgeAddress = chain_1.ChainUtils.getL1BridgeAddress(this.env);
|
|
48
|
+
if (!l1BridgeAddress) {
|
|
49
|
+
throw new Error('Bridge address not configured');
|
|
50
|
+
}
|
|
51
|
+
// Create bridge contract instance
|
|
52
|
+
const l1BridgeContract = new ethers_1.Contract(l1BridgeAddress, contract_1.GRVTBridgeProxyAbi, wallet);
|
|
53
|
+
// Request deposit approval from API
|
|
54
|
+
const approvalResponse = await this.client.requestDepositApproval({
|
|
55
|
+
l1Sender,
|
|
56
|
+
l2Receiver,
|
|
57
|
+
l1Token: l1TokenAddress,
|
|
58
|
+
amount: requestAmount.toString(),
|
|
59
|
+
});
|
|
60
|
+
// Approve token spending
|
|
61
|
+
const approveTx = await l1TokenContract.approve(l1BridgeAddress, requestAmount);
|
|
62
|
+
await approveTx.wait();
|
|
63
|
+
// Execute deposit
|
|
64
|
+
const depositTx = await l1BridgeContract.deposit(l1Sender, l2Receiver, l1TokenAddress, requestAmount, approvalResponse.signature.v, approvalResponse.signature.r, approvalResponse.signature.s);
|
|
65
|
+
const receipt = await depositTx.wait();
|
|
66
|
+
return receipt.hash;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
exports.DepositService = DepositService;
|
|
71
|
+
//# sourceMappingURL=deposit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deposit.js","sourceRoot":"","sources":["../../src/services/deposit.ts"],"names":[],"mappings":"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"}
|
package/signing/domain.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { EGrvtEnvironment } from '../config/config';
|
|
2
2
|
import { EIP712DomainData } from './types';
|
|
3
|
-
export declare const getEIP712DomainData: (env:
|
|
3
|
+
export declare const getEIP712DomainData: (env: EGrvtEnvironment) => EIP712DomainData;
|
package/signing/domain.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"domain.js","sourceRoot":"","sources":["../../src/signing/domain.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"domain.js","sourceRoot":"","sources":["../../src/signing/domain.ts"],"names":[],"mappings":";;;AAAA,6CAA+D;AAGxD,MAAM,mBAAmB,GAAG,CAAC,GAAqB,EAAoB,EAAE;IAC7E,MAAM,OAAO,GAAG,kBAAS,CAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,wBAAwB,GAAG,EAAE,CAAC,CAAC;IACjD,CAAC;IACD,OAAO;QACL,IAAI,EAAE,eAAe;QACrB,OAAO,EAAE,GAAG;QACZ,OAAO;KACR,CAAC;AACJ,CAAC,CAAC;AAVW,QAAA,mBAAmB,uBAU9B"}
|
package/signing/signer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signer.js","sourceRoot":"","sources":["../../src/signing/signer.ts"],"names":[],"mappings":";;;AAAA,yDAA6E;AAM7E,MAAa,MAAM;IACjB,MAAM,CAAC,IAAI,CACT,UAAkB,EAClB,IAEC;QAED,OAAO,IAAA,4BAAa,EAAC;YACnB,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC;YAC7D,IAAI,EAAE,IAAW;YACjB,OAAO,EAAE,mCAAoB,CAAC,EAAE;SACjC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,SAAyC;
|
|
1
|
+
{"version":3,"file":"signer.js","sourceRoot":"","sources":["../../src/signing/signer.ts"],"names":[],"mappings":";;;AAAA,yDAA6E;AAM7E,MAAa,MAAM;IACjB,MAAM,CAAC,IAAI,CACT,UAAkB,EAClB,IAEC;QAED,OAAO,IAAA,4BAAa,EAAC;YACnB,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC;YAC7D,IAAI,EAAE,IAAW;YACjB,OAAO,EAAE,mCAAoB,CAAC,EAAE;SACjC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,SAAyC;QAKrD,MAAM,KAAK,GAAG,EAAE,CAAC;QACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7C,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACvD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC7B,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;QACD,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,IAAY,EAAE,EAAE,CACxD,CAAC,GAAG,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAC7C,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACX,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAY,EAAE,EAAE,CACzD,CAAC,GAAG,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAC7C,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACX,OAAO;YACL,CAAC,EAAE,KAAK,CAAC,EAAE;YACX,CAAC,EAAE,KAAK,CAAC,EAAE;YACX,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACtB,CAAC;IACJ,CAAC;CACF;AAtCD,wBAsCC"}
|
package/signing/transfer.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { EGrvtEnvironment } from '../config/config';
|
|
2
2
|
import { Wallet } from 'ethers';
|
|
3
|
-
import { IApiTransferRequest } from 'grvt';
|
|
4
|
-
export declare const signTransfer: (transfer: IApiTransferRequest, wallet: Wallet, env:
|
|
3
|
+
import { IApiTransferRequest, ISignature } from '@grvt/client';
|
|
4
|
+
export declare const signTransfer: (transfer: IApiTransferRequest, wallet: Wallet, env: EGrvtEnvironment, nonce?: number, expirationInHours?: number) => Promise<ISignature>;
|
package/signing/transfer.js
CHANGED
|
@@ -2,24 +2,23 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.signTransfer = void 0;
|
|
4
4
|
const domain_1 = require("./domain");
|
|
5
|
-
const
|
|
5
|
+
const utils_1 = require("./utils");
|
|
6
6
|
const signer_1 = require("./signer");
|
|
7
7
|
const types_1 = require("./types");
|
|
8
|
-
const
|
|
9
|
-
const signTransfer = async (transfer, wallet, env) => {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
}
|
|
8
|
+
const client_1 = require("@grvt/client");
|
|
9
|
+
const signTransfer = async (transfer, wallet, env, nonce, expirationInHours) => {
|
|
10
|
+
const signingNonce = nonce || (0, utils_1.GenerateNonce)();
|
|
11
|
+
const signingExpiration = (0, utils_1.GenerateExpiration)(expirationInHours);
|
|
13
12
|
const domain = (0, domain_1.getEIP712DomainData)(env);
|
|
14
13
|
const messageData = {
|
|
15
14
|
fromAccount: transfer.from_account_id || '',
|
|
16
15
|
fromSubAccount: transfer.from_sub_account_id || '',
|
|
17
16
|
toAccount: transfer.to_account_id || '',
|
|
18
17
|
toSubAccount: transfer.to_sub_account_id || '',
|
|
19
|
-
tokenCurrency: transfer.currency ? Object.keys(
|
|
18
|
+
tokenCurrency: transfer.currency ? Object.keys(client_1.ECurrency).indexOf(transfer.currency) + 1 : 0,
|
|
20
19
|
numTokens: transfer.num_tokens ? Math.floor(parseFloat(transfer.num_tokens) * 1e6) : 0,
|
|
21
|
-
nonce:
|
|
22
|
-
expiration:
|
|
20
|
+
nonce: signingNonce,
|
|
21
|
+
expiration: signingExpiration,
|
|
23
22
|
};
|
|
24
23
|
const signature = await signer_1.Signer.sign(wallet.privateKey, {
|
|
25
24
|
...types_1.Transfer,
|
|
@@ -27,11 +26,14 @@ const signTransfer = async (transfer, wallet, env) => {
|
|
|
27
26
|
message: messageData,
|
|
28
27
|
});
|
|
29
28
|
const { r, s, v } = signer_1.Signer.decode(signature);
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
29
|
+
return {
|
|
30
|
+
r: r,
|
|
31
|
+
s: s,
|
|
32
|
+
v: v,
|
|
33
|
+
signer: wallet.address,
|
|
34
|
+
nonce: signingNonce,
|
|
35
|
+
expiration: signingExpiration,
|
|
36
|
+
};
|
|
35
37
|
};
|
|
36
38
|
exports.signTransfer = signTransfer;
|
|
37
39
|
//# sourceMappingURL=transfer.js.map
|
package/signing/transfer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transfer.js","sourceRoot":"","sources":["../../src/signing/transfer.ts"],"names":[],"mappings":";;;AACA,qCAA+C;AAC/C,
|
|
1
|
+
{"version":3,"file":"transfer.js","sourceRoot":"","sources":["../../src/signing/transfer.ts"],"names":[],"mappings":";;;AACA,qCAA+C;AAC/C,mCAA4D;AAC5D,qCAAkC;AAClC,mCAAmC;AAEnC,yCAA0E;AAEnE,MAAM,YAAY,GAAG,KAAK,EAC/B,QAA6B,EAC7B,MAAc,EACd,GAAqB,EACrB,KAAc,EACd,iBAA0B,EACL,EAAE;IACvB,MAAM,YAAY,GAAG,KAAK,IAAI,IAAA,qBAAa,GAAE,CAAC;IAC9C,MAAM,iBAAiB,GAAG,IAAA,0BAAkB,EAAC,iBAAiB,CAAC,CAAC;IAChE,MAAM,MAAM,GAAG,IAAA,4BAAmB,EAAC,GAAG,CAAC,CAAC;IACxC,MAAM,WAAW,GAAG;QAClB,WAAW,EAAE,QAAQ,CAAC,eAAe,IAAI,EAAE;QAC3C,cAAc,EAAE,QAAQ,CAAC,mBAAmB,IAAI,EAAE;QAClD,SAAS,EAAE,QAAQ,CAAC,aAAa,IAAI,EAAE;QACvC,YAAY,EAAE,QAAQ,CAAC,iBAAiB,IAAI,EAAE;QAC9C,aAAa,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAS,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5F,SAAS,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACtF,KAAK,EAAE,YAAY;QACnB,UAAU,EAAE,iBAAiB;KAC9B,CAAC;IACF,MAAM,SAAS,GAAG,MAAM,eAAM,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;QACrD,GAAG,gBAAQ;QACX,MAAM;QACN,OAAO,EAAE,WAAW;KACrB,CAAC,CAAC;IACH,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,eAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAE7C,OAAO;QACL,CAAC,EAAE,CAAC;QACJ,CAAC,EAAE,CAAC;QACJ,CAAC,EAAE,CAAC;QACJ,MAAM,EAAE,MAAM,CAAC,OAAO;QACtB,KAAK,EAAE,YAAY;QACnB,UAAU,EAAE,iBAAiB;KAC9B,CAAC;AACJ,CAAC,CAAC;AAnCW,QAAA,YAAY,gBAmCvB"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generate a random nonce
|
|
3
|
+
* @returns A random nonce
|
|
4
|
+
*/
|
|
5
|
+
export declare function GenerateNonce(): number;
|
|
6
|
+
/**
|
|
7
|
+
* Generate an expiration time
|
|
8
|
+
* @param expirationInHours - The number of hours to set the expiration time to, default is 24 hours
|
|
9
|
+
* @returns The expiration time in nanoseconds
|
|
10
|
+
*/
|
|
11
|
+
export declare function GenerateExpiration(expirationInHours?: number): string;
|
package/signing/utils.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GenerateNonce = GenerateNonce;
|
|
4
|
+
exports.GenerateExpiration = GenerateExpiration;
|
|
5
|
+
/**
|
|
6
|
+
* Generate a random nonce
|
|
7
|
+
* @returns A random nonce
|
|
8
|
+
*/
|
|
9
|
+
function GenerateNonce() {
|
|
10
|
+
return Math.floor(Math.random() * 1e9);
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Generate an expiration time
|
|
14
|
+
* @param expirationInHours - The number of hours to set the expiration time to, default is 24 hours
|
|
15
|
+
* @returns The expiration time in nanoseconds
|
|
16
|
+
*/
|
|
17
|
+
function GenerateExpiration(expirationInHours = 24) {
|
|
18
|
+
const expirationTime = (Date.now() + expirationInHours * 60 * 60 * 1000) * 1e6;
|
|
19
|
+
return expirationTime.toString();
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/signing/utils.ts"],"names":[],"mappings":";;AAIA,sCAEC;AAOD,gDAGC;AAhBD;;;GAGG;AACH,SAAgB,aAAa;IAC3B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC;AACzC,CAAC;AAED;;;;GAIG;AACH,SAAgB,kBAAkB,CAAC,oBAA4B,EAAE;IAC/D,MAAM,cAAc,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,iBAAiB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IAC/E,OAAO,cAAc,CAAC,QAAQ,EAAE,CAAC;AACnC,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { EGrvtEnvironment } from '../config/config';
|
|
2
|
+
import { Wallet } from 'ethers';
|
|
3
|
+
import { IApiWithdrawalRequest, ISignature } from '@grvt/client';
|
|
4
|
+
export declare const signWithdrawal: (withdrawal: IApiWithdrawalRequest, wallet: Wallet, env: EGrvtEnvironment, nonce?: number, expirationInHours?: number) => Promise<ISignature>;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.signWithdrawal = void 0;
|
|
4
|
+
const domain_1 = require("./domain");
|
|
5
|
+
const utils_1 = require("./utils");
|
|
6
|
+
const signer_1 = require("./signer");
|
|
7
|
+
const types_1 = require("./types");
|
|
8
|
+
const client_1 = require("@grvt/client");
|
|
9
|
+
const signWithdrawal = async (withdrawal, wallet, env, nonce, expirationInHours) => {
|
|
10
|
+
const signingNonce = nonce || (0, utils_1.GenerateNonce)();
|
|
11
|
+
const signingExpiration = (0, utils_1.GenerateExpiration)(expirationInHours);
|
|
12
|
+
const domain = (0, domain_1.getEIP712DomainData)(env);
|
|
13
|
+
const messageData = {
|
|
14
|
+
fromAccount: withdrawal.from_account_id || '',
|
|
15
|
+
toEthAddress: withdrawal.to_eth_address || '',
|
|
16
|
+
tokenCurrency: withdrawal.currency
|
|
17
|
+
? Object.keys(client_1.ECurrency).indexOf(withdrawal.currency) + 1
|
|
18
|
+
: 0,
|
|
19
|
+
numTokens: withdrawal.num_tokens ? Math.floor(parseFloat(withdrawal.num_tokens) * 1e6) : 0,
|
|
20
|
+
nonce: signingNonce,
|
|
21
|
+
expiration: signingExpiration,
|
|
22
|
+
};
|
|
23
|
+
const signature = await signer_1.Signer.sign(wallet.privateKey, {
|
|
24
|
+
...types_1.Withdrawal,
|
|
25
|
+
domain,
|
|
26
|
+
message: messageData,
|
|
27
|
+
});
|
|
28
|
+
const { r, s, v } = signer_1.Signer.decode(signature);
|
|
29
|
+
return {
|
|
30
|
+
r: r,
|
|
31
|
+
s: s,
|
|
32
|
+
v: v,
|
|
33
|
+
signer: wallet.address,
|
|
34
|
+
nonce: signingNonce,
|
|
35
|
+
expiration: signingExpiration,
|
|
36
|
+
};
|
|
37
|
+
};
|
|
38
|
+
exports.signWithdrawal = signWithdrawal;
|
|
39
|
+
//# sourceMappingURL=withdraw.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"withdraw.js","sourceRoot":"","sources":["../../src/signing/withdraw.ts"],"names":[],"mappings":";;;AACA,qCAA+C;AAC/C,mCAA4D;AAC5D,qCAAkC;AAClC,mCAAqC;AAErC,yCAA4E;AAErE,MAAM,cAAc,GAAG,KAAK,EACjC,UAAiC,EACjC,MAAc,EACd,GAAqB,EACrB,KAAc,EACd,iBAA0B,EACL,EAAE;IACvB,MAAM,YAAY,GAAG,KAAK,IAAI,IAAA,qBAAa,GAAE,CAAC;IAC9C,MAAM,iBAAiB,GAAG,IAAA,0BAAkB,EAAC,iBAAiB,CAAC,CAAC;IAChE,MAAM,MAAM,GAAG,IAAA,4BAAmB,EAAC,GAAG,CAAC,CAAC;IAExC,MAAM,WAAW,GAAG;QAClB,WAAW,EAAE,UAAU,CAAC,eAAe,IAAI,EAAE;QAC7C,YAAY,EAAE,UAAU,CAAC,cAAc,IAAI,EAAE;QAC7C,aAAa,EAAE,UAAU,CAAC,QAAQ;YAChC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAS,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC;YACzD,CAAC,CAAC,CAAC;QACL,SAAS,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1F,KAAK,EAAE,YAAY;QACnB,UAAU,EAAE,iBAAiB;KAC9B,CAAC;IACF,MAAM,SAAS,GAAG,MAAM,eAAM,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;QACrD,GAAG,kBAAU;QACb,MAAM;QACN,OAAO,EAAE,WAAW;KACrB,CAAC,CAAC;IACH,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,eAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAE7C,OAAO;QACL,CAAC,EAAE,CAAC;QACJ,CAAC,EAAE,CAAC;QACJ,CAAC,EAAE,CAAC;QACJ,MAAM,EAAE,MAAM,CAAC,OAAO;QACtB,KAAK,EAAE,YAAY;QACnB,UAAU,EAAE,iBAAiB;KAC9B,CAAC;AACJ,CAAC,CAAC;AApCW,QAAA,cAAc,kBAoCzB"}
|
package/types/chain.d.ts
ADDED
package/types/chain.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EChain = void 0;
|
|
4
|
+
var EChain;
|
|
5
|
+
(function (EChain) {
|
|
6
|
+
EChain[EChain["ETH_MAINNET"] = 1] = "ETH_MAINNET";
|
|
7
|
+
EChain[EChain["ETH_SEPOLIA"] = 11155111] = "ETH_SEPOLIA";
|
|
8
|
+
EChain[EChain["ARBITRUM_ONE"] = 42161] = "ARBITRUM_ONE";
|
|
9
|
+
EChain[EChain["ARBITRUM_SEPOLIA"] = 421614] = "ARBITRUM_SEPOLIA";
|
|
10
|
+
})(EChain || (exports.EChain = EChain = {}));
|
|
11
|
+
//# sourceMappingURL=chain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chain.js","sourceRoot":"","sources":["../../src/types/chain.ts"],"names":[],"mappings":";;;AAAA,IAAY,MAKX;AALD,WAAY,MAAM;IAChB,iDAAe,CAAA;IACf,wDAAsB,CAAA;IACtB,uDAAoB,CAAA;IACpB,gEAAyB,CAAA;AAC3B,CAAC,EALW,MAAM,sBAAN,MAAM,QAKjB"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { EChain } from './chain';
|
|
2
|
+
export interface IApiDepositApprovalRequest {
|
|
3
|
+
l1Sender: string;
|
|
4
|
+
l2Receiver: string;
|
|
5
|
+
l1Token: string;
|
|
6
|
+
amount: string;
|
|
7
|
+
}
|
|
8
|
+
export interface IDepositSignature {
|
|
9
|
+
l1Sender: string;
|
|
10
|
+
l2Receiver: string;
|
|
11
|
+
l1Token: string;
|
|
12
|
+
amount: string;
|
|
13
|
+
deadline: string;
|
|
14
|
+
v: number;
|
|
15
|
+
r: string;
|
|
16
|
+
s: string;
|
|
17
|
+
}
|
|
18
|
+
export interface IDepositApprovalResponse {
|
|
19
|
+
signature: IDepositSignature;
|
|
20
|
+
}
|
|
21
|
+
export interface IDepositContractConfig {
|
|
22
|
+
l1TokenAddress: string;
|
|
23
|
+
l1BridgeAddress: string;
|
|
24
|
+
l1BridgeAbi: any[];
|
|
25
|
+
l1TokenAbi: any[];
|
|
26
|
+
chainId: number;
|
|
27
|
+
rpcUrl: string;
|
|
28
|
+
}
|
|
29
|
+
export interface IDepositOptions {
|
|
30
|
+
privateKey: string;
|
|
31
|
+
l1Sender: string;
|
|
32
|
+
l2Receiver: string;
|
|
33
|
+
amount: string;
|
|
34
|
+
chainId: EChain;
|
|
35
|
+
}
|
package/types/deposit.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deposit.js","sourceRoot":"","sources":["../../src/types/deposit.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export declare enum ETransferProvider {
|
|
2
|
+
RHINO = "rhino"
|
|
3
|
+
}
|
|
4
|
+
export declare enum ETransferDirection {
|
|
5
|
+
DEPOSIT = "deposit",
|
|
6
|
+
WITHDRAWAL = "withdrawal"
|
|
7
|
+
}
|
|
8
|
+
export interface ITransferMetadata {
|
|
9
|
+
provider: ETransferProvider;
|
|
10
|
+
direction: ETransferDirection;
|
|
11
|
+
chainid: string;
|
|
12
|
+
endpoint: string;
|
|
13
|
+
provider_tx_id?: string;
|
|
14
|
+
provider_ref_id?: string;
|
|
15
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ETransferDirection = exports.ETransferProvider = void 0;
|
|
4
|
+
var ETransferProvider;
|
|
5
|
+
(function (ETransferProvider) {
|
|
6
|
+
ETransferProvider["RHINO"] = "rhino";
|
|
7
|
+
})(ETransferProvider || (exports.ETransferProvider = ETransferProvider = {}));
|
|
8
|
+
var ETransferDirection;
|
|
9
|
+
(function (ETransferDirection) {
|
|
10
|
+
ETransferDirection["DEPOSIT"] = "deposit";
|
|
11
|
+
ETransferDirection["WITHDRAWAL"] = "withdrawal";
|
|
12
|
+
})(ETransferDirection || (exports.ETransferDirection = ETransferDirection = {}));
|
|
13
|
+
//# sourceMappingURL=transfer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transfer.js","sourceRoot":"","sources":["../../src/types/transfer.ts"],"names":[],"mappings":";;;AAAA,IAAY,iBAEX;AAFD,WAAY,iBAAiB;IAC3B,oCAAe,CAAA;AACjB,CAAC,EAFW,iBAAiB,iCAAjB,iBAAiB,QAE5B;AAED,IAAY,kBAGX;AAHD,WAAY,kBAAkB;IAC5B,yCAAmB,CAAA;IACnB,+CAAyB,CAAA;AAC3B,CAAC,EAHW,kBAAkB,kCAAlB,kBAAkB,QAG7B"}
|
package/utils/chain.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { EChain } from '../types/chain';
|
|
2
|
+
import { EGrvtEnvironment } from '../config/config';
|
|
3
|
+
export declare class ChainUtils {
|
|
4
|
+
static isArbitrum(chainId?: number | EChain): boolean;
|
|
5
|
+
static getL1TokenAddress(chainId: number | EChain): string | undefined;
|
|
6
|
+
static getL1BridgeAddress(env: EGrvtEnvironment): string;
|
|
7
|
+
static getRpcUrl(chainId: number | EChain): string | undefined;
|
|
8
|
+
}
|
package/utils/chain.js
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ChainUtils = void 0;
|
|
4
|
+
const chain_1 = require("../types/chain");
|
|
5
|
+
const config_1 = require("../config/config");
|
|
6
|
+
class ChainUtils {
|
|
7
|
+
static isArbitrum(chainId) {
|
|
8
|
+
return chainId === chain_1.EChain.ARBITRUM_ONE || chainId === chain_1.EChain.ARBITRUM_SEPOLIA;
|
|
9
|
+
}
|
|
10
|
+
static getL1TokenAddress(chainId) {
|
|
11
|
+
// Map of chain IDs to L1 token addresses
|
|
12
|
+
const l1TokenAddresses = {
|
|
13
|
+
// Mainnet
|
|
14
|
+
[chain_1.EChain.ETH_MAINNET]: '0xdac17f958d2ee523a2206206994597c13d831ec7', // USDT on Ethereum
|
|
15
|
+
[chain_1.EChain.ARBITRUM_ONE]: '0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9', // USDT on Arbitrum
|
|
16
|
+
// Testnet
|
|
17
|
+
[chain_1.EChain.ETH_SEPOLIA]: '0xfb122130c4d28860dbc050a8e024a71a558eb0c1', // USDT on Sepolia
|
|
18
|
+
[chain_1.EChain.ARBITRUM_SEPOLIA]: '0x0a8ca9a01e03b8076c3b9bfe304781a0acab9a34', // USDT on Arbitrum Sepolia
|
|
19
|
+
};
|
|
20
|
+
return l1TokenAddresses[chainId];
|
|
21
|
+
}
|
|
22
|
+
static getL1BridgeAddress(env) {
|
|
23
|
+
switch (env) {
|
|
24
|
+
case config_1.EGrvtEnvironment.DEV:
|
|
25
|
+
return '0xE256101E97e761Bd978f43F8bCd36Bb5ADEBEEDd';
|
|
26
|
+
case config_1.EGrvtEnvironment.STAGING:
|
|
27
|
+
return '0xbb1AE91Bd3Fd782D64624300abFb353517956BF6';
|
|
28
|
+
case config_1.EGrvtEnvironment.TESTNET:
|
|
29
|
+
return '0x6fdc38DB7a5850FEA2D62D879f99baa0546D1d09';
|
|
30
|
+
case config_1.EGrvtEnvironment.PRODUCTION:
|
|
31
|
+
return '0xE17aeD2fC55f4A876315376ffA49FE6358113a65';
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
// TODO: verify and update this
|
|
35
|
+
static getRpcUrl(chainId) {
|
|
36
|
+
// Map of chain IDs to RPC URLs
|
|
37
|
+
const rpcUrls = {
|
|
38
|
+
// Mainnet
|
|
39
|
+
[chain_1.EChain.ETH_MAINNET]: 'https://eth.llamarpc.com', // Ethereum
|
|
40
|
+
[chain_1.EChain.ARBITRUM_ONE]: 'https://arb1.arbitrum.io/rpc', // Arbitrum
|
|
41
|
+
// Testnet
|
|
42
|
+
[chain_1.EChain.ETH_SEPOLIA]: 'https://rpc.sepolia.org', // Sepolia
|
|
43
|
+
[chain_1.EChain.ARBITRUM_SEPOLIA]: 'https://sepolia-rollup.arbitrum.io/rpc', // Arbitrum Sepolia
|
|
44
|
+
};
|
|
45
|
+
return rpcUrls[chainId];
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
exports.ChainUtils = ChainUtils;
|
|
49
|
+
//# sourceMappingURL=chain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chain.js","sourceRoot":"","sources":["../../src/utils/chain.ts"],"names":[],"mappings":";;;AAAA,0CAAwC;AACxC,6CAAoD;AAEpD,MAAa,UAAU;IACrB,MAAM,CAAC,UAAU,CAAC,OAAyB;QACzC,OAAO,OAAO,KAAK,cAAM,CAAC,YAAY,IAAI,OAAO,KAAK,cAAM,CAAC,gBAAgB,CAAC;IAChF,CAAC;IAED,MAAM,CAAC,iBAAiB,CAAC,OAAwB;QAC/C,yCAAyC;QACzC,MAAM,gBAAgB,GAA2B;YAC/C,UAAU;YACV,CAAC,cAAM,CAAC,WAAW,CAAC,EAAE,4CAA4C,EAAE,mBAAmB;YACvF,CAAC,cAAM,CAAC,YAAY,CAAC,EAAE,4CAA4C,EAAE,mBAAmB;YACxF,UAAU;YACV,CAAC,cAAM,CAAC,WAAW,CAAC,EAAE,4CAA4C,EAAE,kBAAkB;YACtF,CAAC,cAAM,CAAC,gBAAgB,CAAC,EAAE,4CAA4C,EAAE,2BAA2B;SACrG,CAAC;QACF,OAAO,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;IAED,MAAM,CAAC,kBAAkB,CAAC,GAAqB;QAC7C,QAAQ,GAAG,EAAE,CAAC;YACZ,KAAK,yBAAgB,CAAC,GAAG;gBACvB,OAAO,4CAA4C,CAAC;YACtD,KAAK,yBAAgB,CAAC,OAAO;gBAC3B,OAAO,4CAA4C,CAAC;YACtD,KAAK,yBAAgB,CAAC,OAAO;gBAC3B,OAAO,4CAA4C,CAAC;YACtD,KAAK,yBAAgB,CAAC,UAAU;gBAC9B,OAAO,4CAA4C,CAAC;QACxD,CAAC;IACH,CAAC;IAED,+BAA+B;IAC/B,MAAM,CAAC,SAAS,CAAC,OAAwB;QACvC,+BAA+B;QAC/B,MAAM,OAAO,GAA2B;YACtC,UAAU;YACV,CAAC,cAAM,CAAC,WAAW,CAAC,EAAE,0BAA0B,EAAE,WAAW;YAC7D,CAAC,cAAM,CAAC,YAAY,CAAC,EAAE,8BAA8B,EAAE,WAAW;YAClE,UAAU;YACV,CAAC,cAAM,CAAC,WAAW,CAAC,EAAE,yBAAyB,EAAE,UAAU;YAC3D,CAAC,cAAM,CAAC,gBAAgB,CAAC,EAAE,wCAAwC,EAAE,mBAAmB;SACzF,CAAC;QACF,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1B,CAAC;CACF;AA5CD,gCA4CC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare class NumberUtils {
|
|
2
|
+
/**
|
|
3
|
+
* Convert a number string to bigint with proper decimal places for the given currency
|
|
4
|
+
* @param value - Number string to convert
|
|
5
|
+
* @returns BigInt value with proper decimal places
|
|
6
|
+
*/
|
|
7
|
+
static numberToBigIntCurrencyUSDT(value: string): bigint;
|
|
8
|
+
}
|
package/utils/number.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NumberUtils = void 0;
|
|
4
|
+
class NumberUtils {
|
|
5
|
+
/**
|
|
6
|
+
* Convert a number string to bigint with proper decimal places for the given currency
|
|
7
|
+
* @param value - Number string to convert
|
|
8
|
+
* @returns BigInt value with proper decimal places
|
|
9
|
+
*/
|
|
10
|
+
static numberToBigIntCurrencyUSDT(value) {
|
|
11
|
+
// USDT has 6 decimals
|
|
12
|
+
const decimals = 6;
|
|
13
|
+
const [whole, fraction = ''] = value.split('.');
|
|
14
|
+
const paddedFraction = fraction.padEnd(decimals, '0').slice(0, decimals);
|
|
15
|
+
return BigInt(whole + paddedFraction);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
exports.NumberUtils = NumberUtils;
|
|
19
|
+
//# sourceMappingURL=number.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"number.js","sourceRoot":"","sources":["../../src/utils/number.ts"],"names":[],"mappings":";;;AAAA,MAAa,WAAW;IACtB;;;;OAIG;IACH,MAAM,CAAC,0BAA0B,CAAC,KAAa;QAC7C,sBAAsB;QACtB,MAAM,QAAQ,GAAG,CAAC,CAAC;QACnB,MAAM,CAAC,KAAK,EAAE,QAAQ,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAChD,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;QACzE,OAAO,MAAM,CAAC,KAAK,GAAG,cAAc,CAAC,CAAC;IACxC,CAAC;CACF;AAbD,kCAaC"}
|
package/signing/signature.d.ts
DELETED
package/signing/signature.js
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.GenerateDefaultSignature = GenerateDefaultSignature;
|
|
4
|
-
function GenerateDefaultSignature(expirationInHours = 24) {
|
|
5
|
-
// Convert to nanoseconds
|
|
6
|
-
const expirationTime = (Date.now() + expirationInHours * 60 * 60 * 1000) * 1e6;
|
|
7
|
-
return {
|
|
8
|
-
signer: '',
|
|
9
|
-
r: '',
|
|
10
|
-
s: '',
|
|
11
|
-
v: 0,
|
|
12
|
-
expiration: expirationTime.toString(),
|
|
13
|
-
nonce: Math.floor(Math.random() * 1e9), // Generate a random nonce
|
|
14
|
-
};
|
|
15
|
-
}
|
|
16
|
-
//# sourceMappingURL=signature.js.map
|
package/signing/signature.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"signature.js","sourceRoot":"","sources":["../../src/signing/signature.ts"],"names":[],"mappings":";;AAWA,4DAYC;AAZD,SAAgB,wBAAwB,CAAC,oBAA4B,EAAE;IACrE,yBAAyB;IACzB,MAAM,cAAc,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,iBAAiB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IAE/E,OAAO;QACL,MAAM,EAAE,EAAE;QACV,CAAC,EAAE,EAAE;QACL,CAAC,EAAE,EAAE;QACL,CAAC,EAAE,CAAC;QACJ,UAAU,EAAE,cAAc,CAAC,QAAQ,EAAE;QACrC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,0BAA0B;KACnE,CAAC;AACJ,CAAC"}
|