@sodax/wallet-sdk-core 1.3.1-beta → 1.4.0-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,6 +2073,23 @@ 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
  }});
2015
2094
  var moneyMarketConfig = {
2016
2095
  [SONIC_MAINNET_CHAIN_ID]: {
@@ -2787,6 +2866,104 @@ var StellarWalletProvider = class {
2787
2866
  );
2788
2867
  }
2789
2868
  };
2869
+ function isPrivateKeyStacksWalletConfig(config) {
2870
+ return "privateKey" in config;
2871
+ }
2872
+ function isBrowserExtensionStacksWalletConfig(config) {
2873
+ return "address" in config;
2874
+ }
2875
+ function isStacksPkWallet(wallet) {
2876
+ return wallet.type === "PRIVATE_KEY";
2877
+ }
2878
+ function toPostConditionModeName(mode) {
2879
+ if (mode === void 0) return void 0;
2880
+ return mode === transactions.PostConditionMode.Allow ? "allow" : "deny";
2881
+ }
2882
+ var StacksWalletProvider = class {
2883
+ network;
2884
+ wallet;
2885
+ constructor(config) {
2886
+ const mainnet2 = network.networkFrom("mainnet");
2887
+ this.network = config.endpoint ? { ...mainnet2, client: { ...mainnet2.client, baseUrl: config.endpoint } } : mainnet2;
2888
+ if (isPrivateKeyStacksWalletConfig(config)) {
2889
+ this.wallet = { type: "PRIVATE_KEY", privateKey: config.privateKey };
2890
+ } else if (isBrowserExtensionStacksWalletConfig(config)) {
2891
+ this.wallet = { type: "BROWSER_EXTENSION", address: config.address, provider: config.provider };
2892
+ } else {
2893
+ throw new Error("Invalid Stacks wallet configuration");
2894
+ }
2895
+ }
2896
+ async sendTransaction(txParams) {
2897
+ if (isStacksPkWallet(this.wallet)) {
2898
+ return this.sendTransactionWithPrivateKey(txParams);
2899
+ }
2900
+ return this.sendTransactionWithAdapter(txParams);
2901
+ }
2902
+ async sendTransactionWithPrivateKey(txParams) {
2903
+ const transaction = await transactions.makeContractCall({
2904
+ contractAddress: txParams.contractAddress,
2905
+ contractName: txParams.contractName,
2906
+ functionName: txParams.functionName,
2907
+ functionArgs: txParams.functionArgs,
2908
+ senderKey: this.wallet.privateKey,
2909
+ network: this.network,
2910
+ postConditionMode: txParams.postConditionMode,
2911
+ postConditions: txParams.postConditions
2912
+ });
2913
+ const result = await transactions.broadcastTransaction({
2914
+ network: this.network,
2915
+ transaction
2916
+ });
2917
+ return result.txid;
2918
+ }
2919
+ async sendTransactionWithAdapter(txParams) {
2920
+ const browserWallet = this.wallet;
2921
+ const contract = `${txParams.contractAddress}.${txParams.contractName}`;
2922
+ const params = {
2923
+ contract,
2924
+ functionName: txParams.functionName,
2925
+ functionArgs: txParams.functionArgs,
2926
+ network: "mainnet",
2927
+ postConditions: txParams.postConditions,
2928
+ postConditionMode: toPostConditionModeName(txParams.postConditionMode)
2929
+ };
2930
+ const result = browserWallet.provider ? await connect.request({ provider: browserWallet.provider }, "stx_callContract", params) : await connect.request("stx_callContract", params);
2931
+ if (!result.txid) {
2932
+ throw new Error("Transaction failed: no txid returned");
2933
+ }
2934
+ return result.txid;
2935
+ }
2936
+ async readContract(txParams) {
2937
+ return transactions.fetchCallReadOnlyFunction({
2938
+ contractAddress: txParams.contractAddress,
2939
+ contractName: txParams.contractName,
2940
+ functionName: txParams.functionName,
2941
+ functionArgs: txParams.functionArgs,
2942
+ network: this.network,
2943
+ senderAddress: await this.getWalletAddress()
2944
+ });
2945
+ }
2946
+ async getWalletAddress() {
2947
+ if (isStacksPkWallet(this.wallet)) {
2948
+ return transactions.getAddressFromPrivateKey(this.wallet.privateKey, this.network);
2949
+ }
2950
+ return this.wallet.address;
2951
+ }
2952
+ async getBalance(address) {
2953
+ const url = `${this.network.client.baseUrl}/extended/v1/address/${address}/balances`;
2954
+ try {
2955
+ const response = await fetch(url);
2956
+ if (!response.ok) {
2957
+ throw new Error(`Error fetching data: ${response.statusText}`);
2958
+ }
2959
+ const data = await response.json();
2960
+ return BigInt(data.stx.balance);
2961
+ } catch (error) {
2962
+ console.error("Error fetching STX balance:", error);
2963
+ return 0n;
2964
+ }
2965
+ }
2966
+ };
2790
2967
  bitcoin__namespace.initEccLib(ecc__namespace);
2791
2968
  var ECPair = ecpair.ECPairFactory(ecc__namespace);
2792
2969
  var BitcoinWalletError = class extends Error {
@@ -9462,8 +9639,8 @@ var JsonRpcProvider = class {
9462
9639
  * Gets a light client execution proof for verifying execution outcomes
9463
9640
  * @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
9641
  */
9465
- async lightClientProof(request) {
9466
- return await this.sendJsonRpc("EXPERIMENTAL_light_client_proof", request);
9642
+ async lightClientProof(request2) {
9643
+ return await this.sendJsonRpc("EXPERIMENTAL_light_client_proof", request2);
9467
9644
  }
9468
9645
  /**
9469
9646
  * Returns the next light client block as far in the future as possible from the last known hash
@@ -9472,8 +9649,8 @@ var JsonRpcProvider = class {
9472
9649
  *
9473
9650
  * @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
9651
  */
9475
- async nextLightClientBlock(request) {
9476
- return await this.sendJsonRpc("next_light_client_block", request);
9652
+ async nextLightClientBlock(request2) {
9653
+ return await this.sendJsonRpc("next_light_client_block", request2);
9477
9654
  }
9478
9655
  /**
9479
9656
  * Gets access key changes for a given array of accountIds
@@ -9559,13 +9736,13 @@ var JsonRpcProvider = class {
9559
9736
  * @param params Parameters to the method
9560
9737
  */
9561
9738
  async sendJsonRpc(method, params) {
9562
- const request = {
9739
+ const request2 = {
9563
9740
  method,
9564
9741
  params,
9565
9742
  id: String(_nextId++),
9566
9743
  jsonrpc: "2.0"
9567
9744
  };
9568
- const response = await fetchJsonRpc(this.connection.url, request, this.connection.headers || {}, retryConfig(this.options.retries, this.options.backoff, this.options.wait));
9745
+ const response = await fetchJsonRpc(this.connection.url, request2, this.connection.headers || {}, retryConfig(this.options.retries, this.options.backoff, this.options.wait));
9569
9746
  if ("error" in response && typeof response.error !== "undefined") {
9570
9747
  throw parseRpcError(response.error);
9571
9748
  }
@@ -10468,6 +10645,8 @@ var Account = class {
10468
10645
  return token.transfer({ from: this, receiverId, amount });
10469
10646
  }
10470
10647
  };
10648
+
10649
+ // src/wallet-providers/NearWalletProvider.ts
10471
10650
  function isPrivateKeyNearWalletConfig(config) {
10472
10651
  return "rpcUrl" in config && "accountId" in config && "privateKey" in config;
10473
10652
  }
@@ -10506,10 +10685,6 @@ var NearWalletProvider = class {
10506
10685
  }
10507
10686
  throw new Error("Wallet not initialized");
10508
10687
  }
10509
- async getWalletAddressBytes() {
10510
- const address = await this.getWalletAddress();
10511
- return viem.toHex(Buffer.from(address, "utf-8"));
10512
- }
10513
10688
  async getRawTransaction(params) {
10514
10689
  const signerId = await this.getWalletAddress();
10515
10690
  return {
@@ -10586,6 +10761,7 @@ exports.IconWalletProvider = IconWalletProvider;
10586
10761
  exports.InjectiveWalletProvider = InjectiveWalletProvider;
10587
10762
  exports.NearWalletProvider = NearWalletProvider;
10588
10763
  exports.SolanaWalletProvider = SolanaWalletProvider;
10764
+ exports.StacksWalletProvider = StacksWalletProvider;
10589
10765
  exports.StellarWalletError = StellarWalletError;
10590
10766
  exports.StellarWalletProvider = StellarWalletProvider;
10591
10767
  exports.SuiWalletProvider = SuiWalletProvider;
@@ -10595,6 +10771,7 @@ exports.isBrowserExtensionEvmWalletConfig = isBrowserExtensionEvmWalletConfig;
10595
10771
  exports.isBrowserExtensionIconWalletConfig = isBrowserExtensionIconWalletConfig;
10596
10772
  exports.isBrowserExtensionInjectiveWalletConfig = isBrowserExtensionInjectiveWalletConfig;
10597
10773
  exports.isBrowserExtensionNearWalletConfig = isBrowserExtensionNearWalletConfig;
10774
+ exports.isBrowserExtensionStacksWalletConfig = isBrowserExtensionStacksWalletConfig;
10598
10775
  exports.isBrowserExtensionStellarWalletConfig = isBrowserExtensionStellarWalletConfig;
10599
10776
  exports.isBrowserExtensionSuiWallet = isBrowserExtensionSuiWallet;
10600
10777
  exports.isIconAddress = isIconAddress;
@@ -10606,6 +10783,7 @@ exports.isPkSuiWallet = isPkSuiWallet;
10606
10783
  exports.isPrivateKeyEvmWalletConfig = isPrivateKeyEvmWalletConfig;
10607
10784
  exports.isPrivateKeyIconWalletConfig = isPrivateKeyIconWalletConfig;
10608
10785
  exports.isPrivateKeyNearWalletConfig = isPrivateKeyNearWalletConfig;
10786
+ exports.isPrivateKeyStacksWalletConfig = isPrivateKeyStacksWalletConfig;
10609
10787
  exports.isPrivateKeyStellarWalletConfig = isPrivateKeyStellarWalletConfig;
10610
10788
  exports.isResponseAddressType = isResponseAddressType;
10611
10789
  exports.isResponseSigningType = isResponseSigningType;