btc-wallet 0.3.5 → 0.3.6
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/config.d.ts +2 -1
- package/dist/core/btcUtils.d.ts +14 -5
- package/dist/core/btcWalletSelectorContext.d.ts +2 -2
- package/dist/index.js +185 -126
- package/dist/index.js.map +4 -4
- package/dist/utils/nearUtils.d.ts +7 -0
- package/esm/index.js +184 -125
- package/esm/index.js.map +4 -4
- package/package.json +1 -1
package/dist/config.d.ts
CHANGED
package/dist/core/btcUtils.d.ts
CHANGED
@@ -3,14 +3,23 @@ export declare function getBtcBalance(): Promise<{
|
|
3
3
|
rawBalance: any;
|
4
4
|
balance: number;
|
5
5
|
}>;
|
6
|
-
export declare function sendBitcoin(address: string, amount:
|
7
|
-
interface
|
8
|
-
|
9
|
-
|
6
|
+
export declare function sendBitcoin(address: string, amount: number, feeRate: number): Promise<string>;
|
7
|
+
interface ExecuteBTCDepositAndActionParams {
|
8
|
+
action: {
|
9
|
+
receiver_id: string;
|
10
|
+
amount: string;
|
11
|
+
msg: string;
|
12
|
+
};
|
10
13
|
/** fee rate, if not provided, will use the recommended fee rate from the btc node */
|
11
14
|
feeRate?: number;
|
12
15
|
/** is dev environment */
|
13
16
|
isDev?: boolean;
|
14
17
|
}
|
15
|
-
export declare function
|
18
|
+
export declare function executeBTCDepositAndAction({ action, feeRate, isDev, }: ExecuteBTCDepositAndActionParams): Promise<{
|
19
|
+
result: string;
|
20
|
+
error?: undefined;
|
21
|
+
} | {
|
22
|
+
result: string;
|
23
|
+
error: any;
|
24
|
+
}>;
|
16
25
|
export {};
|
@@ -4,10 +4,10 @@ export declare function BtcWalletSelectorContextProvider({ children, }: {
|
|
4
4
|
autoConnect?: boolean;
|
5
5
|
}): import("react/jsx-runtime").JSX.Element;
|
6
6
|
export declare function useBtcWalletSelector(): {
|
7
|
-
login: () => Promise<string
|
7
|
+
login: () => Promise<string>;
|
8
8
|
autoConnect: () => Promise<void>;
|
9
9
|
logout: () => void;
|
10
|
-
account: string
|
10
|
+
account: string;
|
11
11
|
getPublicKey: () => any;
|
12
12
|
signMessage: (msg: string) => any;
|
13
13
|
getContext: () => any;
|
package/dist/index.js
CHANGED
@@ -90,7 +90,7 @@ __export(src_exports, {
|
|
90
90
|
UnisatConnector: () => UnisatConnector,
|
91
91
|
WizzConnector: () => WizzConnector,
|
92
92
|
XverseConnector: () => XverseConnector,
|
93
|
-
|
93
|
+
executeBTCDepositAndAction: () => executeBTCDepositAndAction,
|
94
94
|
getBtcBalance: () => getBtcBalance,
|
95
95
|
getBtcGasPrice: () => getBtcGasPrice,
|
96
96
|
getVersion: () => getVersion,
|
@@ -2497,7 +2497,7 @@ function useBtcWalletSelector() {
|
|
2497
2497
|
publicKey.current = res;
|
2498
2498
|
});
|
2499
2499
|
}
|
2500
|
-
}, [provider]);
|
2500
|
+
}, [getPublicKey, provider]);
|
2501
2501
|
(0, import_react11.useEffect)(() => {
|
2502
2502
|
signMessageFn.current = signMessage;
|
2503
2503
|
}, [signMessage]);
|
@@ -2519,18 +2519,15 @@ function useBtcWalletSelector() {
|
|
2519
2519
|
connector.removeListener("accountsChanged", fn);
|
2520
2520
|
}
|
2521
2521
|
};
|
2522
|
-
}, [connector]);
|
2522
|
+
}, [connector, context, getPublicKey]);
|
2523
2523
|
const hook = (0, import_react11.useMemo)(() => {
|
2524
2524
|
return {
|
2525
2525
|
login: () => __async(this, null, function* () {
|
2526
|
-
const account = accounts
|
2527
|
-
if (account) {
|
2528
|
-
|
2529
|
-
}
|
2530
|
-
if (openConnectModal) {
|
2531
|
-
yield openConnectModal();
|
2526
|
+
const account = accounts == null ? void 0 : accounts[0];
|
2527
|
+
if (!account) {
|
2528
|
+
openConnectModal == null ? void 0 : openConnectModal();
|
2532
2529
|
}
|
2533
|
-
return
|
2530
|
+
return account;
|
2534
2531
|
}),
|
2535
2532
|
autoConnect: () => __async(this, null, function* () {
|
2536
2533
|
requestDirectAccount(connectorRef.current).catch((e) => {
|
@@ -2538,13 +2535,13 @@ function useBtcWalletSelector() {
|
|
2538
2535
|
});
|
2539
2536
|
}),
|
2540
2537
|
logout: () => {
|
2541
|
-
const accountId = accounts
|
2538
|
+
const accountId = accounts == null ? void 0 : accounts[0];
|
2542
2539
|
if (!accountId)
|
2543
2540
|
return;
|
2544
2541
|
disconnect == null ? void 0 : disconnect();
|
2545
2542
|
context.emit("btcLogOut");
|
2546
2543
|
},
|
2547
|
-
account: accounts
|
2544
|
+
account: accounts == null ? void 0 : accounts[0],
|
2548
2545
|
getPublicKey: () => {
|
2549
2546
|
return publicKey.current;
|
2550
2547
|
},
|
@@ -2570,7 +2567,7 @@ function useBtcWalletSelector() {
|
|
2570
2567
|
}
|
2571
2568
|
|
2572
2569
|
// src/core/setupBTCWallet.ts
|
2573
|
-
var
|
2570
|
+
var import_near_api_js2 = require("near-api-js");
|
2574
2571
|
var import_transactions = require("@near-js/transactions");
|
2575
2572
|
var import_key_pair = require("near-api-js/lib/utils/key_pair");
|
2576
2573
|
var import_transaction = require("near-api-js/lib/transaction");
|
@@ -2725,20 +2722,23 @@ function removeWalletButton() {
|
|
2725
2722
|
var walletConfig = {
|
2726
2723
|
dev: {
|
2727
2724
|
base_url: "https://api.dev.satoshibridge.top",
|
2728
|
-
token: "
|
2729
|
-
|
2725
|
+
token: "nbtc-dev.testnet",
|
2726
|
+
accountContractId: "acc-dev.testnet",
|
2727
|
+
bridgeContractId: "brg-dev.testnet",
|
2730
2728
|
walletUrl: "https://wallet-dev.satoshibridge.top"
|
2731
2729
|
},
|
2732
2730
|
testnet: {
|
2733
2731
|
base_url: "https://api.testnet.satoshibridge.top",
|
2734
2732
|
token: "nbtc2-nsp.testnet",
|
2735
|
-
|
2733
|
+
accountContractId: "dev2-nsp.testnet",
|
2734
|
+
bridgeContractId: "brg2-nsp.testnet",
|
2736
2735
|
walletUrl: "https://wallet-test.satoshibridge.top"
|
2737
2736
|
},
|
2738
2737
|
mainnet: {
|
2739
2738
|
base_url: "https://api.mainnet.satoshibridge.top",
|
2740
2739
|
token: "",
|
2741
|
-
|
2740
|
+
accountContractId: "",
|
2741
|
+
bridgeContractId: "",
|
2742
2742
|
walletUrl: "https://wallet.satoshibridge.top"
|
2743
2743
|
}
|
2744
2744
|
};
|
@@ -2750,8 +2750,8 @@ var nearRpcUrls = {
|
|
2750
2750
|
"https://near.drpc.org"
|
2751
2751
|
],
|
2752
2752
|
testnet: [
|
2753
|
-
"https://near-testnet.lava.build",
|
2754
2753
|
"https://rpc.testnet.near.org",
|
2754
|
+
"https://near-testnet.lava.build",
|
2755
2755
|
"https://near-testnet.drpc.org"
|
2756
2756
|
]
|
2757
2757
|
};
|
@@ -2830,6 +2830,58 @@ function request(url, options) {
|
|
2830
2830
|
});
|
2831
2831
|
}
|
2832
2832
|
|
2833
|
+
// src/utils/nearUtils.ts
|
2834
|
+
var import_near_api_js = require("near-api-js");
|
2835
|
+
function nearCallFunction(contractId, methodName, args, options) {
|
2836
|
+
return __async(this, null, function* () {
|
2837
|
+
const nearProvider = (options == null ? void 0 : options.provider) || new import_near_api_js.providers.FailoverRpcProvider(
|
2838
|
+
nearRpcUrls[options == null ? void 0 : options.network].map(
|
2839
|
+
(url) => new import_near_api_js.providers.JsonRpcProvider({ url })
|
2840
|
+
)
|
2841
|
+
);
|
2842
|
+
const res = yield nearProvider.query({
|
2843
|
+
request_type: "call_function",
|
2844
|
+
account_id: contractId,
|
2845
|
+
method_name: methodName,
|
2846
|
+
args_base64: Buffer.from(JSON.stringify(args)).toString("base64"),
|
2847
|
+
finality: "final"
|
2848
|
+
});
|
2849
|
+
return JSON.parse(Buffer.from(res.result).toString());
|
2850
|
+
});
|
2851
|
+
}
|
2852
|
+
function pollTransactionStatuses(network, hashes) {
|
2853
|
+
return __async(this, null, function* () {
|
2854
|
+
const provider = new import_near_api_js.providers.FailoverRpcProvider(
|
2855
|
+
Object.values(nearRpcUrls[network]).map(
|
2856
|
+
(url) => new import_near_api_js.providers.JsonRpcProvider({ url })
|
2857
|
+
)
|
2858
|
+
);
|
2859
|
+
const maxAttempts = 3;
|
2860
|
+
const pollStatus = (hash) => __async(this, null, function* () {
|
2861
|
+
let attempt = 0;
|
2862
|
+
while (attempt < maxAttempts) {
|
2863
|
+
attempt++;
|
2864
|
+
try {
|
2865
|
+
const result = yield provider.txStatus(hash, "unused", "FINAL");
|
2866
|
+
if (result && result.status) {
|
2867
|
+
console.log(`Transaction ${hash} result:`, result);
|
2868
|
+
return result;
|
2869
|
+
}
|
2870
|
+
} catch (error) {
|
2871
|
+
console.error(`Failed to fetch transaction status for ${hash}: ${error.message}`);
|
2872
|
+
}
|
2873
|
+
if (attempt === maxAttempts) {
|
2874
|
+
throw new Error(`Transaction not found after max attempts: ${hash}`);
|
2875
|
+
}
|
2876
|
+
yield delay(1e4);
|
2877
|
+
console.log(`RPC request failed for ${hash}, retrying ${maxAttempts - attempt} more times`);
|
2878
|
+
}
|
2879
|
+
});
|
2880
|
+
const results = yield Promise.all(hashes.map((hash) => pollStatus(hash)));
|
2881
|
+
return results;
|
2882
|
+
});
|
2883
|
+
}
|
2884
|
+
|
2833
2885
|
// src/core/setupBTCWallet.ts
|
2834
2886
|
var { transfer, functionCall } = import_transactions.actionCreators;
|
2835
2887
|
var state = {
|
@@ -2927,28 +2979,23 @@ var BTCWallet = (_0) => __async(void 0, [_0], function* ({
|
|
2927
2979
|
}
|
2928
2980
|
}), 500);
|
2929
2981
|
}
|
2930
|
-
function
|
2931
|
-
return __async(this,
|
2932
|
-
|
2933
|
-
request_type: "call_function",
|
2934
|
-
account_id: currentConfig.contractId,
|
2935
|
-
method_name: method,
|
2936
|
-
args_base64: Buffer.from(JSON.stringify(args)).toString("base64"),
|
2937
|
-
finality: "optimistic"
|
2938
|
-
});
|
2939
|
-
return JSON.parse(Buffer.from(res.result).toString());
|
2982
|
+
function nearCall2(contractId, methodName, args) {
|
2983
|
+
return __async(this, null, function* () {
|
2984
|
+
return nearCallFunction(contractId, methodName, args, { provider });
|
2940
2985
|
});
|
2941
2986
|
}
|
2942
2987
|
function getNearAccountByBtcPublicKey(btcPublicKey) {
|
2943
2988
|
return __async(this, null, function* () {
|
2944
|
-
const nearTempAddress = yield
|
2945
|
-
|
2946
|
-
|
2947
|
-
|
2948
|
-
|
2949
|
-
|
2950
|
-
|
2951
|
-
|
2989
|
+
const nearTempAddress = yield nearCall2(
|
2990
|
+
currentConfig.accountContractId,
|
2991
|
+
"get_chain_signature_near_account_id",
|
2992
|
+
{ btc_public_key: btcPublicKey }
|
2993
|
+
);
|
2994
|
+
const nearTempPublicKey = yield nearCall2(
|
2995
|
+
currentConfig.accountContractId,
|
2996
|
+
"get_chain_signature_near_account_public_key",
|
2997
|
+
{ btc_public_key: btcPublicKey }
|
2998
|
+
);
|
2952
2999
|
state.saveAccount(nearTempAddress);
|
2953
3000
|
state.savePublicKey(nearTempPublicKey);
|
2954
3001
|
state.saveBtcPublicKey(btcPublicKey);
|
@@ -3048,11 +3095,14 @@ var BTCWallet = (_0) => __async(void 0, [_0], function* ({
|
|
3048
3095
|
nonce: BigInt(rawAccessKey.nonce || 0)
|
3049
3096
|
});
|
3050
3097
|
const publicKeyFormat = import_key_pair.PublicKey.from(publicKey);
|
3051
|
-
const
|
3098
|
+
const { result_data: nearNonceFromApi } = yield getNearNonceFromApi(
|
3099
|
+
currentConfig.base_url,
|
3100
|
+
accountId
|
3101
|
+
);
|
3052
3102
|
const newTransactions = params.transactions.map((transaction, index) => {
|
3053
3103
|
let nearNonceNumber = accessKey.nonce + BigInt(1);
|
3054
|
-
if (
|
3055
|
-
nearNonceNumber = BigInt(
|
3104
|
+
if (nearNonceFromApi) {
|
3105
|
+
nearNonceNumber = BigInt(nearNonceFromApi) > nearNonceNumber ? BigInt(nearNonceFromApi) : nearNonceNumber;
|
3056
3106
|
}
|
3057
3107
|
const newActions = transaction.actions.map((action) => {
|
3058
3108
|
switch (action.type) {
|
@@ -3067,7 +3117,7 @@ var BTCWallet = (_0) => __async(void 0, [_0], function* ({
|
|
3067
3117
|
return transfer(BigInt(action.params.deposit));
|
3068
3118
|
}
|
3069
3119
|
}).filter(Boolean);
|
3070
|
-
const _transaction =
|
3120
|
+
const _transaction = import_near_api_js2.transactions.createTransaction(
|
3071
3121
|
accountId,
|
3072
3122
|
publicKeyFormat,
|
3073
3123
|
transaction.receiverId,
|
@@ -3084,20 +3134,34 @@ var BTCWallet = (_0) => __async(void 0, [_0], function* ({
|
|
3084
3134
|
const hash = import_bs58.default.encode(new Uint8Array(import_js_sha256.sha256.array(txBytes)));
|
3085
3135
|
return { txBytes, txHex, hash };
|
3086
3136
|
});
|
3087
|
-
const accountInfo = yield
|
3088
|
-
|
3089
|
-
|
3090
|
-
|
3091
|
-
|
3092
|
-
const
|
3137
|
+
const accountInfo = yield nearCall2(
|
3138
|
+
currentConfig.accountContractId,
|
3139
|
+
"get_account",
|
3140
|
+
{ account_id: accountId }
|
3141
|
+
);
|
3142
|
+
const { result_data: nonceFromApi } = yield getNonceFromApi(
|
3143
|
+
currentConfig.base_url,
|
3144
|
+
accountId
|
3145
|
+
);
|
3146
|
+
const nonce = Number(nonceFromApi) > Number(accountInfo.nonce) ? String(nonceFromApi) : String(accountInfo.nonce);
|
3093
3147
|
const intention = {
|
3094
3148
|
chain_id: "397",
|
3095
3149
|
csna: accountId,
|
3096
3150
|
near_transactions: newTransactions.map((t) => t.txHex),
|
3097
3151
|
gas_token: currentConfig.token,
|
3098
3152
|
gas_limit: "3000",
|
3153
|
+
use_near_pay_gas: false,
|
3099
3154
|
nonce
|
3100
3155
|
};
|
3156
|
+
const nearAccount = yield provider.query({
|
3157
|
+
request_type: "view_account",
|
3158
|
+
account_id: accountId,
|
3159
|
+
finality: "final"
|
3160
|
+
});
|
3161
|
+
const availableBalance = parseFloat(nearAccount.amount) / __pow(10, 24);
|
3162
|
+
if (availableBalance > 0.2) {
|
3163
|
+
intention.use_near_pay_gas = true;
|
3164
|
+
}
|
3101
3165
|
const strIntention = JSON.stringify(intention);
|
3102
3166
|
const signature = yield btcContext.signMessage(strIntention);
|
3103
3167
|
const result = yield uploadBTCTx(currentConfig.base_url, {
|
@@ -3182,41 +3246,8 @@ function toHex(originalString) {
|
|
3182
3246
|
hexString = hexString.replace(/(^0+)/g, "");
|
3183
3247
|
return hexString;
|
3184
3248
|
}
|
3185
|
-
function pollTransactionStatuses(network, hashes) {
|
3186
|
-
return __async(this, null, function* () {
|
3187
|
-
const provider = new import_near_api_js.providers.FailoverRpcProvider(
|
3188
|
-
Object.values(nearRpcUrls[network]).map(
|
3189
|
-
(url) => new import_near_api_js.providers.JsonRpcProvider({ url })
|
3190
|
-
)
|
3191
|
-
);
|
3192
|
-
const maxAttempts = 3;
|
3193
|
-
const pollStatus = (hash) => __async(this, null, function* () {
|
3194
|
-
let attempt = 0;
|
3195
|
-
while (attempt < maxAttempts) {
|
3196
|
-
attempt++;
|
3197
|
-
try {
|
3198
|
-
const result = yield provider.txStatus(hash, "unused", "FINAL");
|
3199
|
-
if (result && result.status) {
|
3200
|
-
console.log(`Transaction ${hash} result:`, result);
|
3201
|
-
return result;
|
3202
|
-
}
|
3203
|
-
} catch (error) {
|
3204
|
-
console.error(`Failed to fetch transaction status for ${hash}: ${error.message}`);
|
3205
|
-
}
|
3206
|
-
if (attempt === maxAttempts) {
|
3207
|
-
throw new Error(`Transaction not found after max attempts: ${hash}`);
|
3208
|
-
}
|
3209
|
-
yield delay(1e4);
|
3210
|
-
console.log(`RPC request failed for ${hash}, retrying ${maxAttempts - attempt} more times`);
|
3211
|
-
}
|
3212
|
-
});
|
3213
|
-
const results = yield Promise.all(hashes.map((hash) => pollStatus(hash)));
|
3214
|
-
return results;
|
3215
|
-
});
|
3216
|
-
}
|
3217
3249
|
|
3218
3250
|
// src/core/btcUtils.ts
|
3219
|
-
var import_near_api_js2 = require("near-api-js");
|
3220
3251
|
var import_big = __toESM(require("big.js"), 1);
|
3221
3252
|
function getBtcProvider() {
|
3222
3253
|
if (typeof window === "undefined" || !window.btcContext) {
|
@@ -3237,55 +3268,39 @@ function getBtcRpcUrl() {
|
|
3237
3268
|
return btcRpcUrls[network];
|
3238
3269
|
});
|
3239
3270
|
}
|
3240
|
-
function
|
3271
|
+
function nearCall(contractId, methodName, args) {
|
3241
3272
|
return __async(this, null, function* () {
|
3242
3273
|
const network = yield getNetwork();
|
3243
|
-
|
3244
|
-
nearRpcUrls[network].map(
|
3245
|
-
(url) => new import_near_api_js2.providers.JsonRpcProvider({ url })
|
3246
|
-
)
|
3247
|
-
);
|
3248
|
-
const res = yield nearProvider.query({
|
3249
|
-
request_type: "call_function",
|
3250
|
-
account_id: contractId,
|
3251
|
-
method_name: methodName,
|
3252
|
-
args_base64: Buffer.from(JSON.stringify(args)).toString("base64"),
|
3253
|
-
finality: "optimistic"
|
3254
|
-
});
|
3255
|
-
return JSON.parse(Buffer.from(res.result).toString());
|
3256
|
-
});
|
3257
|
-
}
|
3258
|
-
function getDepositAddress(btcPublicKey, contractId) {
|
3259
|
-
return __async(this, null, function* () {
|
3260
|
-
const res = yield nearViewMethod(contractId, "get_user_dapp_deposit_address", {
|
3261
|
-
deposit_type: {
|
3262
|
-
BtcPublicKey: { btc_public_key: btcPublicKey, dapp_operation: "Burrowland->Supply" }
|
3263
|
-
}
|
3264
|
-
});
|
3265
|
-
return res;
|
3274
|
+
return nearCallFunction(contractId, methodName, args, { network });
|
3266
3275
|
});
|
3267
3276
|
}
|
3268
3277
|
function receiveDepositMsg(_0, _1) {
|
3269
3278
|
return __async(this, arguments, function* (baseUrl, {
|
3270
3279
|
btcPublicKey,
|
3271
3280
|
txHash,
|
3272
|
-
depositType = 1
|
3281
|
+
depositType = 1,
|
3282
|
+
postActions,
|
3283
|
+
extraMsg
|
3273
3284
|
}) {
|
3274
3285
|
const res = yield request(`${baseUrl}/v1/receiveDepositMsg`, {
|
3275
3286
|
method: "POST",
|
3276
|
-
body: { btcPublicKey, txHash, depositType }
|
3287
|
+
body: { btcPublicKey, txHash, depositType, postActions, extraMsg }
|
3277
3288
|
});
|
3289
|
+
console.log("receiveDepositMsg resp:", res);
|
3278
3290
|
return res;
|
3279
3291
|
});
|
3280
3292
|
}
|
3281
3293
|
function checkTransactionStatus(baseUrl, txHash) {
|
3282
3294
|
return __async(this, null, function* () {
|
3283
|
-
const res = yield request(
|
3284
|
-
|
3285
|
-
|
3286
|
-
|
3287
|
-
|
3288
|
-
|
3295
|
+
const res = yield request(
|
3296
|
+
`${baseUrl}/v1/bridgeFromTx?fromTxHash=${txHash}&fromChainId=1`,
|
3297
|
+
{
|
3298
|
+
timeout: 6e4,
|
3299
|
+
pollingInterval: 5e3,
|
3300
|
+
maxPollingAttempts: 10,
|
3301
|
+
shouldStopPolling: (res2) => res2.result_code === 0
|
3302
|
+
}
|
3303
|
+
);
|
3289
3304
|
return res;
|
3290
3305
|
});
|
3291
3306
|
}
|
@@ -3304,7 +3319,6 @@ function getBtcGasPrice() {
|
|
3304
3319
|
}
|
3305
3320
|
function getBtcBalance() {
|
3306
3321
|
return __async(this, null, function* () {
|
3307
|
-
var _a;
|
3308
3322
|
const { account } = yield retryOperation(getBtcProvider, (res2) => !!res2.account);
|
3309
3323
|
if (!account) {
|
3310
3324
|
console.error("BTC Account is not available.");
|
@@ -3312,10 +3326,7 @@ function getBtcBalance() {
|
|
3312
3326
|
}
|
3313
3327
|
const btcRpcUrl = yield getBtcRpcUrl();
|
3314
3328
|
const res = yield fetch(`${btcRpcUrl}/address/${account}/utxo`).then((res2) => res2.json());
|
3315
|
-
const rawBalance =
|
3316
|
-
var _a2;
|
3317
|
-
return (_a2 = item == null ? void 0 : item.status) == null ? void 0 : _a2.confirmed;
|
3318
|
-
})) == null ? void 0 : _a.reduce((acc, cur) => acc + cur.value, 0);
|
3329
|
+
const rawBalance = res == null ? void 0 : res.reduce((acc, cur) => acc + cur.value, 0);
|
3319
3330
|
const balance = rawBalance / __pow(10, 8);
|
3320
3331
|
return { rawBalance, balance };
|
3321
3332
|
});
|
@@ -3323,14 +3334,13 @@ function getBtcBalance() {
|
|
3323
3334
|
function sendBitcoin(address, amount, feeRate) {
|
3324
3335
|
return __async(this, null, function* () {
|
3325
3336
|
const { sendBitcoin: sendBitcoin2 } = getBtcProvider();
|
3326
|
-
const
|
3327
|
-
const txHash = yield sendBitcoin2(address, satoshis, { feeRate });
|
3337
|
+
const txHash = yield sendBitcoin2(address, amount, { feeRate });
|
3328
3338
|
return txHash;
|
3329
3339
|
});
|
3330
3340
|
}
|
3331
|
-
function
|
3341
|
+
function executeBTCDepositAndAction(_0) {
|
3332
3342
|
return __async(this, arguments, function* ({
|
3333
|
-
|
3343
|
+
action,
|
3334
3344
|
feeRate,
|
3335
3345
|
isDev = false
|
3336
3346
|
}) {
|
@@ -3339,26 +3349,75 @@ function executeBurrowSupply(_0) {
|
|
3339
3349
|
const network = yield getNetwork();
|
3340
3350
|
const config = walletConfig[isDev ? "dev" : network];
|
3341
3351
|
const btcPublicKey = yield getPublicKey();
|
3352
|
+
const _action = Object.assign({}, action);
|
3342
3353
|
if (!btcPublicKey) {
|
3343
3354
|
throw new Error("BTC Public Key is not available.");
|
3344
3355
|
}
|
3345
|
-
|
3356
|
+
if (!_action.receiver_id) {
|
3357
|
+
throw new Error("action.receiver_id is required");
|
3358
|
+
}
|
3359
|
+
if (!_action.amount || !new import_big.default(_action.amount || 0).gt(0)) {
|
3360
|
+
throw new Error("action.amount is required and must be greater than 0");
|
3361
|
+
}
|
3362
|
+
const csna = yield nearCall(
|
3363
|
+
config.accountContractId,
|
3364
|
+
"get_chain_signature_near_account_id",
|
3365
|
+
{
|
3366
|
+
btc_public_key: btcPublicKey
|
3367
|
+
}
|
3368
|
+
);
|
3369
|
+
_action.amount = new import_big.default(_action.amount).toString();
|
3370
|
+
_action.gas = new import_big.default(100).mul(__pow(10, 12)).toFixed(0);
|
3371
|
+
const depositMsg = {
|
3372
|
+
recipient_id: csna,
|
3373
|
+
post_actions: [_action]
|
3374
|
+
};
|
3375
|
+
const registerRes = yield nearCall(action.receiver_id, "storage_balance_of", {
|
3376
|
+
account_id: csna
|
3377
|
+
});
|
3378
|
+
if (!(registerRes == null ? void 0 : registerRes.available)) {
|
3379
|
+
const storageDepositMsg = {
|
3380
|
+
storage_deposit_msg: {
|
3381
|
+
contract_id: action.receiver_id,
|
3382
|
+
deposit: new import_big.default(0.25).mul(__pow(10, 24)).toFixed(0),
|
3383
|
+
registration_only: true
|
3384
|
+
},
|
3385
|
+
btc_public_key: btcPublicKey
|
3386
|
+
};
|
3387
|
+
depositMsg.extra_msg = JSON.stringify(storageDepositMsg);
|
3388
|
+
}
|
3389
|
+
console.log("depositMsg", depositMsg);
|
3390
|
+
const userDepositAddress = yield nearCall(
|
3391
|
+
config.bridgeContractId,
|
3392
|
+
"get_user_deposit_address",
|
3393
|
+
{ deposit_msg: depositMsg }
|
3394
|
+
);
|
3395
|
+
console.log("userDepositAddress", userDepositAddress);
|
3346
3396
|
const _feeRate = feeRate || (yield getBtcGasPrice());
|
3347
|
-
|
3348
|
-
|
3349
|
-
|
3350
|
-
|
3397
|
+
const txHash = yield sendBitcoin(
|
3398
|
+
userDepositAddress,
|
3399
|
+
new import_big.default(action.amount).toNumber(),
|
3400
|
+
_feeRate
|
3401
|
+
);
|
3402
|
+
yield receiveDepositMsg(config.base_url, {
|
3403
|
+
btcPublicKey,
|
3404
|
+
txHash,
|
3405
|
+
postActions: JSON.stringify(depositMsg.post_actions),
|
3406
|
+
extraMsg: depositMsg.extra_msg || ""
|
3407
|
+
});
|
3351
3408
|
const checkTransactionStatusRes = yield checkTransactionStatus(config.base_url, txHash);
|
3352
3409
|
console.log("checkTransactionStatus resp:", checkTransactionStatusRes);
|
3410
|
+
return checkTransactionStatusRes.result_code === 0 ? { result: "success" } : { result: "failed", error: checkTransactionStatusRes.result_message };
|
3353
3411
|
} catch (error) {
|
3354
3412
|
console.error("Error executing Bridge+BurrowSupply:", error);
|
3413
|
+
return { result: "failed", error: error.message };
|
3355
3414
|
}
|
3356
3415
|
});
|
3357
3416
|
}
|
3358
3417
|
|
3359
3418
|
// src/index.ts
|
3360
3419
|
var getVersion = () => {
|
3361
|
-
return "0.3.
|
3420
|
+
return "0.3.6";
|
3362
3421
|
};
|
3363
3422
|
if (typeof window !== "undefined") {
|
3364
3423
|
window.__PARTICLE_BTC_CONNECT_VERSION = getVersion();
|