@sodax/wallet-sdk-core 1.3.1-beta → 1.4.1-beta

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/README.md CHANGED
@@ -30,4 +30,7 @@ The package includes wallet provider implementations for:
30
30
  - Sui ✅
31
31
  - Stellar ✅
32
32
  - ICON ✅
33
- - Injective ✅
33
+ - Injective ✅
34
+ - Near ✅
35
+ - Stacks ✅
36
+ - Bitcoin ✅
package/dist/index.cjs CHANGED
@@ -11,6 +11,9 @@ var sdkTs = require('@injectivelabs/sdk-ts');
11
11
  var splToken = require('@solana/spl-token');
12
12
  var web3_js = require('@solana/web3.js');
13
13
  var stellarSdk = require('@stellar/stellar-sdk');
14
+ var network = require('@stacks/network');
15
+ var transactions = require('@stacks/transactions');
16
+ var connect = require('@stacks/connect');
14
17
  var bitcoin = require('bitcoinjs-lib');
15
18
  var ecc = require('@bitcoinerlab/secp256k1');
16
19
  var ecpair = require('ecpair');
@@ -65,6 +68,7 @@ var ETHEREUM_MAINNET_CHAIN_ID = "ethereum";
65
68
  var BITCOIN_MAINNET_CHAIN_ID = "bitcoin";
66
69
  var REDBELLY_MAINNET_CHAIN_ID = "redbelly";
67
70
  var KAIA_MAINNET_CHAIN_ID = "0x2019.kaia";
71
+ var STACKS_MAINNET_CHAIN_ID = "stacks";
68
72
  var baseChainInfo = {
69
73
  [SONIC_MAINNET_CHAIN_ID]: {
70
74
  name: "Sonic",
@@ -179,6 +183,12 @@ var baseChainInfo = {
179
183
  id: KAIA_MAINNET_CHAIN_ID,
180
184
  type: "EVM",
181
185
  chainId: 8217
186
+ },
187
+ [STACKS_MAINNET_CHAIN_ID]: {
188
+ name: "Stacks",
189
+ id: STACKS_MAINNET_CHAIN_ID,
190
+ type: "STACKS",
191
+ chainId: "stacks"
182
192
  }
183
193
  };
184
194
  var SodaTokens = {
@@ -335,6 +345,13 @@ var SodaTokens = {
335
345
  decimals: 18,
336
346
  address: "0xD7d41b5f803b6A40F8A6eAa34E459A4564e39891",
337
347
  xChainId: SONIC_MAINNET_CHAIN_ID
348
+ },
349
+ sodaSTX: {
350
+ symbol: "sodaSTX",
351
+ name: "Soda STX",
352
+ decimals: 18,
353
+ address: "0x1Fbe5229e9d189F26bEE77E5bFa24309FdA90483",
354
+ xChainId: SONIC_MAINNET_CHAIN_ID
338
355
  }
339
356
  };
340
357
  var SodaTokensAsHubAssets = Object.values(SodaTokens).reduce((acc, token) => {
@@ -414,7 +431,6 @@ var spokeChainConfig = {
414
431
  assetManager: "AnCCJjheynmGqPp6Vgat9DTirGKD4CtQzP8cwTYV8qKH",
415
432
  connection: "GxS8i6D9qQjbSeniD487CnomUxU2pXt6V8P96T6MkUXB",
416
433
  rateLimit: "2Vyy3A3Teju2EMCkdnappEeWqBXyAaF5V2WsrU4hDtsk",
417
- testToken: "3Q2HS3png7fLaYerqCun3zw8rnBZo2Ksvdg6RHTyM4Ns",
418
434
  xTokenManager: ""
419
435
  },
420
436
  chain: baseChainInfo[SOLANA_MAINNET_CHAIN_ID],
@@ -995,7 +1011,6 @@ var spokeChainConfig = {
995
1011
  assetManager: "inj1dg6tm62uup53wn2kn97caeqfwt0sukx3qjk8rw",
996
1012
  connection: "inj1eexvfglsptxwfj9hft96xcnsdrvr7d7dalcm8w",
997
1013
  rateLimit: "inj1x8p2h56edcdrm9tzx7a7zkwe0l334klgrxpqyk",
998
- testToken: "",
999
1014
  xTokenManager: ""
1000
1015
  },
1001
1016
  chain: baseChainInfo[INJECTIVE_MAINNET_CHAIN_ID],
@@ -1087,8 +1102,7 @@ var spokeChainConfig = {
1087
1102
  connection: "CDFQDDPUPAM3XPGORHDOEFRNLMKOH3N3X6XTXNLSXJQXIU3RVCM3OPEP",
1088
1103
  assetManager: "CCGF33A4CO6D3BXFEKPXVCFCZBK76I3AQOZK6KIKRPAWAZR3632WHCJ3",
1089
1104
  xTokenManager: "",
1090
- rateLimit: "CB6G3ULISTTBPXUN3BI6ADHQGWJEN7BPQINHL45TCB6TDFM5QWU24HAY",
1091
- testToken: ""
1105
+ rateLimit: "CB6G3ULISTTBPXUN3BI6ADHQGWJEN7BPQINHL45TCB6TDFM5QWU24HAY"
1092
1106
  },
1093
1107
  trustlineConfigs: [
1094
1108
  {
@@ -1156,8 +1170,7 @@ var spokeChainConfig = {
1156
1170
  assetManagerConfigId: "0xcb7346339340b7f8dea40fcafb70721dc2fcfa7e8626a89fd954d46c1f928b61",
1157
1171
  originalAssetManager: "0xa17a409164d1676db71b411ab50813ba2c7dd547d2df538c699049566f1ff922::asset_manager::0xcb7346339340b7f8dea40fcafb70721dc2fcfa7e8626a89fd954d46c1f928b61",
1158
1172
  xTokenManager: "",
1159
- rateLimit: "",
1160
- testToken: ""
1173
+ rateLimit: ""
1161
1174
  },
1162
1175
  supportedTokens: {
1163
1176
  SUI: {
@@ -1585,6 +1598,55 @@ var spokeChainConfig = {
1585
1598
  xChainId: REDBELLY_MAINNET_CHAIN_ID
1586
1599
  }
1587
1600
  }
1601
+ },
1602
+ [STACKS_MAINNET_CHAIN_ID]: {
1603
+ addresses: {
1604
+ assetManager: "SP3031RGK734636C8KGW2Y76TEQBTVX59Q472EQH0.asset-manager-state",
1605
+ connection: "SP3031RGK734636C8KGW2Y76TEQBTVX59Q472EQH0.connection-v3",
1606
+ rateLimit: "SP3031RGK734636C8KGW2Y76TEQBTVX59Q472EQH0.rate-limit-state",
1607
+ xTokenManager: ""
1608
+ },
1609
+ chain: baseChainInfo[STACKS_MAINNET_CHAIN_ID],
1610
+ nativeToken: "ST000000000000000000002AMW42H.nativetoken",
1611
+ bnUSD: "SP3031RGK734636C8KGW2Y76TEQBTVX59Q472EQH0.bnusd",
1612
+ supportedTokens: {
1613
+ STX: {
1614
+ symbol: "STX",
1615
+ name: "Stacks",
1616
+ decimals: 6,
1617
+ address: "ST000000000000000000002AMW42H.nativetoken",
1618
+ xChainId: STACKS_MAINNET_CHAIN_ID
1619
+ },
1620
+ bnUSD: {
1621
+ symbol: "bnUSD",
1622
+ name: "bnUSD",
1623
+ decimals: 6,
1624
+ address: "SP3031RGK734636C8KGW2Y76TEQBTVX59Q472EQH0.bnusd",
1625
+ xChainId: STACKS_MAINNET_CHAIN_ID
1626
+ },
1627
+ SODA: {
1628
+ symbol: "SODA",
1629
+ name: "SODAX",
1630
+ decimals: 6,
1631
+ address: "SP3031RGK734636C8KGW2Y76TEQBTVX59Q472EQH0.soda",
1632
+ xChainId: STACKS_MAINNET_CHAIN_ID
1633
+ },
1634
+ sBTC: {
1635
+ symbol: "sBTC",
1636
+ name: "sBTC",
1637
+ decimals: 8,
1638
+ address: "SM3VDXK3WZZSA84XXFKAFAF15NNZX32CTSG82JFQ4.sbtc-token",
1639
+ xChainId: STACKS_MAINNET_CHAIN_ID
1640
+ },
1641
+ USDC: {
1642
+ symbol: "USDC",
1643
+ name: "USD Coin",
1644
+ decimals: 6,
1645
+ address: "SP120SBRBQJ00MCWS7TM5R8WJNTTKD5K0HFRC2CNE.usdcx",
1646
+ xChainId: STACKS_MAINNET_CHAIN_ID
1647
+ }
1648
+ },
1649
+ rpcUrl: "https://api.mainnet.hiro.so"
1588
1650
  }
1589
1651
  };
1590
1652
  ({
@@ -2011,7 +2073,35 @@ var spokeChainConfig = {
2011
2073
  [spokeChainConfig[REDBELLY_MAINNET_CHAIN_ID].supportedTokens.rPOL.address]: {
2012
2074
  vault: SodaTokens.sodaPOL.address
2013
2075
  }
2076
+ },
2077
+ [STACKS_MAINNET_CHAIN_ID]: {
2078
+ [spokeChainConfig[STACKS_MAINNET_CHAIN_ID].nativeToken]: {
2079
+ vault: SodaTokens.sodaSTX.address
2080
+ },
2081
+ [spokeChainConfig[STACKS_MAINNET_CHAIN_ID].bnUSD]: {
2082
+ vault: SodaTokens.bnUSD.address
2083
+ },
2084
+ [spokeChainConfig[STACKS_MAINNET_CHAIN_ID].supportedTokens.SODA.address]: {
2085
+ vault: SodaTokens.sodaSODA.address
2086
+ },
2087
+ [spokeChainConfig[STACKS_MAINNET_CHAIN_ID].supportedTokens.sBTC.address]: {
2088
+ vault: SodaTokens.sodaBTC.address
2089
+ },
2090
+ [spokeChainConfig[STACKS_MAINNET_CHAIN_ID].supportedTokens.USDC.address]: {
2091
+ vault: SodaTokens.sodaUSDC.address
2092
+ }
2014
2093
  }});
2094
+ ({
2095
+ [SONIC_MAINNET_CHAIN_ID]: [
2096
+ spokeChainConfig[SONIC_MAINNET_CHAIN_ID].supportedTokens.S,
2097
+ spokeChainConfig[SONIC_MAINNET_CHAIN_ID].supportedTokens.WETH,
2098
+ spokeChainConfig[SONIC_MAINNET_CHAIN_ID].supportedTokens.USDC,
2099
+ spokeChainConfig[SONIC_MAINNET_CHAIN_ID].supportedTokens.USDT,
2100
+ spokeChainConfig[SONIC_MAINNET_CHAIN_ID].supportedTokens.wS,
2101
+ spokeChainConfig[SONIC_MAINNET_CHAIN_ID].supportedTokens.SODA,
2102
+ spokeChainConfig[SONIC_MAINNET_CHAIN_ID].supportedTokens.bnUSD,
2103
+ ...Object.values(SodaTokens)
2104
+ ]});
2015
2105
  var moneyMarketConfig = {
2016
2106
  [SONIC_MAINNET_CHAIN_ID]: {
2017
2107
  lendingPool: "0x553434896D39F867761859D0FE7189d2Af70514E",
@@ -2787,6 +2877,104 @@ var StellarWalletProvider = class {
2787
2877
  );
2788
2878
  }
2789
2879
  };
2880
+ function isPrivateKeyStacksWalletConfig(config) {
2881
+ return "privateKey" in config;
2882
+ }
2883
+ function isBrowserExtensionStacksWalletConfig(config) {
2884
+ return "address" in config;
2885
+ }
2886
+ function isStacksPkWallet(wallet) {
2887
+ return wallet.type === "PRIVATE_KEY";
2888
+ }
2889
+ function toPostConditionModeName(mode) {
2890
+ if (mode === void 0) return void 0;
2891
+ return mode === transactions.PostConditionMode.Allow ? "allow" : "deny";
2892
+ }
2893
+ var StacksWalletProvider = class {
2894
+ network;
2895
+ wallet;
2896
+ constructor(config) {
2897
+ const mainnet2 = network.networkFrom("mainnet");
2898
+ this.network = config.endpoint ? { ...mainnet2, client: { ...mainnet2.client, baseUrl: config.endpoint } } : mainnet2;
2899
+ if (isPrivateKeyStacksWalletConfig(config)) {
2900
+ this.wallet = { type: "PRIVATE_KEY", privateKey: config.privateKey };
2901
+ } else if (isBrowserExtensionStacksWalletConfig(config)) {
2902
+ this.wallet = { type: "BROWSER_EXTENSION", address: config.address, provider: config.provider };
2903
+ } else {
2904
+ throw new Error("Invalid Stacks wallet configuration");
2905
+ }
2906
+ }
2907
+ async sendTransaction(txParams) {
2908
+ if (isStacksPkWallet(this.wallet)) {
2909
+ return this.sendTransactionWithPrivateKey(txParams);
2910
+ }
2911
+ return this.sendTransactionWithAdapter(txParams);
2912
+ }
2913
+ async sendTransactionWithPrivateKey(txParams) {
2914
+ const transaction = await transactions.makeContractCall({
2915
+ contractAddress: txParams.contractAddress,
2916
+ contractName: txParams.contractName,
2917
+ functionName: txParams.functionName,
2918
+ functionArgs: txParams.functionArgs,
2919
+ senderKey: this.wallet.privateKey,
2920
+ network: this.network,
2921
+ postConditionMode: txParams.postConditionMode,
2922
+ postConditions: txParams.postConditions
2923
+ });
2924
+ const result = await transactions.broadcastTransaction({
2925
+ network: this.network,
2926
+ transaction
2927
+ });
2928
+ return result.txid;
2929
+ }
2930
+ async sendTransactionWithAdapter(txParams) {
2931
+ const browserWallet = this.wallet;
2932
+ const contract = `${txParams.contractAddress}.${txParams.contractName}`;
2933
+ const params = {
2934
+ contract,
2935
+ functionName: txParams.functionName,
2936
+ functionArgs: txParams.functionArgs,
2937
+ network: "mainnet",
2938
+ postConditions: txParams.postConditions,
2939
+ postConditionMode: toPostConditionModeName(txParams.postConditionMode)
2940
+ };
2941
+ const result = browserWallet.provider ? await connect.request({ provider: browserWallet.provider }, "stx_callContract", params) : await connect.request("stx_callContract", params);
2942
+ if (!result.txid) {
2943
+ throw new Error("Transaction failed: no txid returned");
2944
+ }
2945
+ return result.txid;
2946
+ }
2947
+ async readContract(txParams) {
2948
+ return transactions.fetchCallReadOnlyFunction({
2949
+ contractAddress: txParams.contractAddress,
2950
+ contractName: txParams.contractName,
2951
+ functionName: txParams.functionName,
2952
+ functionArgs: txParams.functionArgs,
2953
+ network: this.network,
2954
+ senderAddress: await this.getWalletAddress()
2955
+ });
2956
+ }
2957
+ async getWalletAddress() {
2958
+ if (isStacksPkWallet(this.wallet)) {
2959
+ return transactions.getAddressFromPrivateKey(this.wallet.privateKey, this.network);
2960
+ }
2961
+ return this.wallet.address;
2962
+ }
2963
+ async getBalance(address) {
2964
+ const url = `${this.network.client.baseUrl}/extended/v1/address/${address}/balances`;
2965
+ try {
2966
+ const response = await fetch(url);
2967
+ if (!response.ok) {
2968
+ throw new Error(`Error fetching data: ${response.statusText}`);
2969
+ }
2970
+ const data = await response.json();
2971
+ return BigInt(data.stx.balance);
2972
+ } catch (error) {
2973
+ console.error("Error fetching STX balance:", error);
2974
+ return 0n;
2975
+ }
2976
+ }
2977
+ };
2790
2978
  bitcoin__namespace.initEccLib(ecc__namespace);
2791
2979
  var ECPair = ecpair.ECPairFactory(ecc__namespace);
2792
2980
  var BitcoinWalletError = class extends Error {
@@ -9462,8 +9650,8 @@ var JsonRpcProvider = class {
9462
9650
  * Gets a light client execution proof for verifying execution outcomes
9463
9651
  * @see [https://github.com/nearprotocol/NEPs/blob/master/specs/ChainSpec/LightClient.md#light-client-proof](https://github.com/nearprotocol/NEPs/blob/master/specs/ChainSpec/LightClient.md#light-client-proof)
9464
9652
  */
9465
- async lightClientProof(request) {
9466
- return await this.sendJsonRpc("EXPERIMENTAL_light_client_proof", request);
9653
+ async lightClientProof(request2) {
9654
+ return await this.sendJsonRpc("EXPERIMENTAL_light_client_proof", request2);
9467
9655
  }
9468
9656
  /**
9469
9657
  * Returns the next light client block as far in the future as possible from the last known hash
@@ -9472,8 +9660,8 @@ var JsonRpcProvider = class {
9472
9660
  *
9473
9661
  * @see [https://github.com/near/NEPs/blob/master/specs/ChainSpec/LightClient.md#light-client-block](https://github.com/near/NEPs/blob/master/specs/ChainSpec/LightClient.md#light-client-block)
9474
9662
  */
9475
- async nextLightClientBlock(request) {
9476
- return await this.sendJsonRpc("next_light_client_block", request);
9663
+ async nextLightClientBlock(request2) {
9664
+ return await this.sendJsonRpc("next_light_client_block", request2);
9477
9665
  }
9478
9666
  /**
9479
9667
  * Gets access key changes for a given array of accountIds
@@ -9559,13 +9747,13 @@ var JsonRpcProvider = class {
9559
9747
  * @param params Parameters to the method
9560
9748
  */
9561
9749
  async sendJsonRpc(method, params) {
9562
- const request = {
9750
+ const request2 = {
9563
9751
  method,
9564
9752
  params,
9565
9753
  id: String(_nextId++),
9566
9754
  jsonrpc: "2.0"
9567
9755
  };
9568
- const response = await fetchJsonRpc(this.connection.url, request, this.connection.headers || {}, retryConfig(this.options.retries, this.options.backoff, this.options.wait));
9756
+ const response = await fetchJsonRpc(this.connection.url, request2, this.connection.headers || {}, retryConfig(this.options.retries, this.options.backoff, this.options.wait));
9569
9757
  if ("error" in response && typeof response.error !== "undefined") {
9570
9758
  throw parseRpcError(response.error);
9571
9759
  }
@@ -10468,6 +10656,8 @@ var Account = class {
10468
10656
  return token.transfer({ from: this, receiverId, amount });
10469
10657
  }
10470
10658
  };
10659
+
10660
+ // src/wallet-providers/NearWalletProvider.ts
10471
10661
  function isPrivateKeyNearWalletConfig(config) {
10472
10662
  return "rpcUrl" in config && "accountId" in config && "privateKey" in config;
10473
10663
  }
@@ -10506,10 +10696,6 @@ var NearWalletProvider = class {
10506
10696
  }
10507
10697
  throw new Error("Wallet not initialized");
10508
10698
  }
10509
- async getWalletAddressBytes() {
10510
- const address = await this.getWalletAddress();
10511
- return viem.toHex(Buffer.from(address, "utf-8"));
10512
- }
10513
10699
  async getRawTransaction(params) {
10514
10700
  const signerId = await this.getWalletAddress();
10515
10701
  return {
@@ -10586,6 +10772,7 @@ exports.IconWalletProvider = IconWalletProvider;
10586
10772
  exports.InjectiveWalletProvider = InjectiveWalletProvider;
10587
10773
  exports.NearWalletProvider = NearWalletProvider;
10588
10774
  exports.SolanaWalletProvider = SolanaWalletProvider;
10775
+ exports.StacksWalletProvider = StacksWalletProvider;
10589
10776
  exports.StellarWalletError = StellarWalletError;
10590
10777
  exports.StellarWalletProvider = StellarWalletProvider;
10591
10778
  exports.SuiWalletProvider = SuiWalletProvider;
@@ -10595,6 +10782,7 @@ exports.isBrowserExtensionEvmWalletConfig = isBrowserExtensionEvmWalletConfig;
10595
10782
  exports.isBrowserExtensionIconWalletConfig = isBrowserExtensionIconWalletConfig;
10596
10783
  exports.isBrowserExtensionInjectiveWalletConfig = isBrowserExtensionInjectiveWalletConfig;
10597
10784
  exports.isBrowserExtensionNearWalletConfig = isBrowserExtensionNearWalletConfig;
10785
+ exports.isBrowserExtensionStacksWalletConfig = isBrowserExtensionStacksWalletConfig;
10598
10786
  exports.isBrowserExtensionStellarWalletConfig = isBrowserExtensionStellarWalletConfig;
10599
10787
  exports.isBrowserExtensionSuiWallet = isBrowserExtensionSuiWallet;
10600
10788
  exports.isIconAddress = isIconAddress;
@@ -10606,6 +10794,7 @@ exports.isPkSuiWallet = isPkSuiWallet;
10606
10794
  exports.isPrivateKeyEvmWalletConfig = isPrivateKeyEvmWalletConfig;
10607
10795
  exports.isPrivateKeyIconWalletConfig = isPrivateKeyIconWalletConfig;
10608
10796
  exports.isPrivateKeyNearWalletConfig = isPrivateKeyNearWalletConfig;
10797
+ exports.isPrivateKeyStacksWalletConfig = isPrivateKeyStacksWalletConfig;
10609
10798
  exports.isPrivateKeyStellarWalletConfig = isPrivateKeyStellarWalletConfig;
10610
10799
  exports.isResponseAddressType = isResponseAddressType;
10611
10800
  exports.isResponseSigningType = isResponseSigningType;