@reown/appkit-solana-react-native 0.0.0-feat-siwx-20250923204044 → 0.0.0-feat-siwx-20250924182536

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.
@@ -9,6 +9,7 @@ var _helpers = require("./helpers");
9
9
  var _web = require("@solana/web3.js");
10
10
  var _bs = _interopRequireDefault(require("bs58"));
11
11
  var _createSendTransaction = require("./utils/createSendTransaction");
12
+ var _createSPLTokenTransaction = require("./utils/createSPLTokenTransaction");
12
13
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
13
14
  class SolanaAdapter extends _appkitCommonReactNative.SolanaBaseAdapter {
14
15
  static supportedNamespace = 'solana';
@@ -80,10 +81,23 @@ class SolanaAdapter extends _appkitCommonReactNative.SolanaBaseAdapter {
80
81
  throw new Error('SolanaAdapter:signTransaction - provider is undefined');
81
82
  }
82
83
  try {
83
- // Serialize transaction to base64 (following WalletConnect standard)
84
- const serializedTransaction = Buffer.from(new Uint8Array(transaction.serialize({
85
- verifySignatures: false
86
- }))).toString('base64');
84
+ // Check if this is a deeplink provider (Phantom/Solflare)
85
+ const isDeeplinkProvider = this.connector.type === 'phantom' || this.connector.type === 'solflare';
86
+
87
+ // Serialize transaction based on provider type
88
+ let serializedTransaction;
89
+ if (isDeeplinkProvider) {
90
+ // Deeplink providers (Phantom/Solflare) expect base58
91
+ const transactionBytes = new Uint8Array(transaction.serialize({
92
+ verifySignatures: false
93
+ }));
94
+ serializedTransaction = _bs.default.encode(transactionBytes);
95
+ } else {
96
+ // WalletConnect providers expect base64 (following WalletConnect standard)
97
+ serializedTransaction = Buffer.from(new Uint8Array(transaction.serialize({
98
+ verifySignatures: false
99
+ }))).toString('base64');
100
+ }
87
101
  const result = await provider.request({
88
102
  method: 'solana_signTransaction',
89
103
  params: {
@@ -103,7 +117,19 @@ class SolanaAdapter extends _appkitCommonReactNative.SolanaBaseAdapter {
103
117
  }
104
118
  if ('transaction' in result && result.transaction) {
105
119
  // New response format - deserialize the signed transaction
106
- const decodedTransaction = Buffer.from(result.transaction, 'base64');
120
+ let decodedTransaction;
121
+ if (isDeeplinkProvider) {
122
+ // Deeplink providers return base58 encoded transactions
123
+ try {
124
+ const decodedBytes = _bs.default.decode(result.transaction);
125
+ decodedTransaction = Buffer.from(decodedBytes);
126
+ } catch (error) {
127
+ throw new Error('Failed to decode base58 transaction from deeplink provider');
128
+ }
129
+ } else {
130
+ // WalletConnect providers return base64 encoded transactions
131
+ decodedTransaction = Buffer.from(result.transaction, 'base64');
132
+ }
107
133
  if (transaction instanceof _web.VersionedTransaction) {
108
134
  return _web.VersionedTransaction.deserialize(new Uint8Array(decodedTransaction));
109
135
  }
@@ -123,7 +149,8 @@ class SolanaAdapter extends _appkitCommonReactNative.SolanaBaseAdapter {
123
149
  toAddress,
124
150
  amount,
125
151
  network,
126
- rpcUrl
152
+ rpcUrl,
153
+ tokenMint
127
154
  } = data;
128
155
  if (!this.connector) {
129
156
  throw new Error('SolanaAdapter:sendTransaction - no active connector');
@@ -156,11 +183,17 @@ class SolanaAdapter extends _appkitCommonReactNative.SolanaBaseAdapter {
156
183
 
157
184
  // Create connection
158
185
  const connection = new _web.Connection(connectionRpcUrl, 'confirmed');
159
- const transaction = await (0, _createSendTransaction.createSendTransaction)({
186
+ const transaction = tokenMint ? await (0, _createSPLTokenTransaction.createSPLTokenTransaction)({
187
+ connection,
188
+ fromAddress,
189
+ toAddress,
190
+ amount,
191
+ tokenMint
192
+ }) : await (0, _createSendTransaction.createSendTransaction)({
160
193
  connection,
161
194
  fromAddress,
162
195
  toAddress,
163
- value: amount
196
+ amount
164
197
  });
165
198
 
166
199
  // Sign the transaction
@@ -1 +1 @@
1
- {"version":3,"names":["_appkitCommonReactNative","require","_helpers","_web","_bs","_interopRequireDefault","_createSendTransaction","e","__esModule","default","SolanaAdapter","SolanaBaseAdapter","supportedNamespace","constructor","adapterType","getBalance","params","network","address","tokens","connector","Error","balanceAddress","getAccounts","find","account","includes","id","toString","amount","symbol","rpcUrl","rpcUrls","http","base58Address","split","token","caipNetworkId","balance","getSolanaTokenBalance","getSolanaNativeBalance","emit","error","signTransaction","transaction","provider","getProvider","serializedTransaction","Buffer","from","Uint8Array","serialize","verifySignatures","result","request","method","pubkey","signature","decoded","base58","decode","Transaction","feePayer","addSignature","decodedTransaction","VersionedTransaction","deserialize","message","sendTransaction","data","fromAddress","toAddress","connectionRpcUrl","connection","Connection","createSendTransaction","value","signedTransaction","sendRawTransaction","skipPreflight","preflightCommitment","signMessage","chainId","chain","getSupportedNamespace","undefined","encodedMessage","TextEncoder","encode","switchNetwork","switchError","namespaces","getNamespaces","accounts","disconnect","exports"],"sourceRoot":"../../src","sources":["adapter.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_appkitCommonReactNative","require","_helpers","_web","_bs","_interopRequireDefault","_createSendTransaction","_createSPLTokenTransaction","e","__esModule","default","SolanaAdapter","SolanaBaseAdapter","supportedNamespace","constructor","adapterType","getBalance","params","network","address","tokens","connector","Error","balanceAddress","getAccounts","find","account","includes","id","toString","amount","symbol","rpcUrl","rpcUrls","http","base58Address","split","token","caipNetworkId","balance","getSolanaTokenBalance","getSolanaNativeBalance","emit","error","signTransaction","transaction","provider","getProvider","isDeeplinkProvider","type","serializedTransaction","transactionBytes","Uint8Array","serialize","verifySignatures","base58","encode","Buffer","from","result","request","method","pubkey","signature","decoded","decode","Transaction","feePayer","addSignature","decodedTransaction","decodedBytes","VersionedTransaction","deserialize","message","sendTransaction","data","fromAddress","toAddress","tokenMint","connectionRpcUrl","connection","Connection","createSPLTokenTransaction","createSendTransaction","signedTransaction","sendRawTransaction","skipPreflight","preflightCommitment","signMessage","chainId","chain","getSupportedNamespace","undefined","encodedMessage","TextEncoder","switchNetwork","switchError","namespaces","getNamespaces","accounts","disconnect","exports"],"sourceRoot":"../../src","sources":["adapter.ts"],"mappings":";;;;;;AAAA,IAAAA,wBAAA,GAAAC,OAAA;AAQA,IAAAC,QAAA,GAAAD,OAAA;AACA,IAAAE,IAAA,GAAAF,OAAA;AACA,IAAAG,GAAA,GAAAC,sBAAA,CAAAJ,OAAA;AACA,IAAAK,sBAAA,GAAAL,OAAA;AACA,IAAAM,0BAAA,GAAAN,OAAA;AAA8E,SAAAI,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAWvE,MAAMG,aAAa,SAASC,0CAAiB,CAAC;EACnD,OAAeC,kBAAkB,GAAmB,QAAQ;EAE5DC,WAAWA,CAAA,EAAG;IACZ,KAAK,CAAC;MACJD,kBAAkB,EAAEF,aAAa,CAACE,kBAAkB;MACpDE,WAAW,EAAE;IACf,CAAC,CAAC;EACJ;EAEA,MAAMC,UAAUA,CAACC,MAAwB,EAA+B;IACtE,MAAM;MAAEC,OAAO;MAAEC,OAAO;MAAEC;IAAO,CAAC,GAAGH,MAAM;IAE3C,IAAI,CAAC,IAAI,CAACI,SAAS,EAAE,MAAM,IAAIC,KAAK,CAAC,qBAAqB,CAAC;IAC3D,IAAI,CAACJ,OAAO,EAAE,MAAM,IAAII,KAAK,CAAC,qBAAqB,CAAC;IAEpD,MAAMC,cAAc,GAClBJ,OAAO,IAAI,IAAI,CAACK,WAAW,CAAC,CAAC,EAAEC,IAAI,CAACC,OAAO,IAAIA,OAAO,CAACC,QAAQ,CAACT,OAAO,CAACU,EAAE,CAACC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAEzF,IAAI,CAACN,cAAc,EAAE;MACnB,OAAO;QAAEO,MAAM,EAAE,MAAM;QAAEC,MAAM,EAAE;MAAM,CAAC;IAC1C;IAEA,IAAI;MACF,MAAMC,MAAM,GAAGd,OAAO,CAACe,OAAO,EAAEvB,OAAO,EAAEwB,IAAI,GAAG,CAAC,CAAC;MAClD,IAAI,CAACF,MAAM,EAAE,MAAM,IAAIV,KAAK,CAAC,sBAAsB,CAAC;MAEpD,MAAMa,aAAa,GAAGZ,cAAc,CAACa,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;MAElD,IAAI,CAACD,aAAa,EAAE,MAAM,IAAIb,KAAK,CAAC,yBAAyB,CAAC;MAE9D,MAAMe,KAAK,GAAGnB,OAAO,EAAEoB,aAAa,IAAIlB,MAAM,GAAGF,OAAO,CAACoB,aAAa,CAAC,EAAEnB,OAAO;MAChF,IAAIoB,OAAO;MAEX,IAAIF,KAAK,EAAE;QACT,MAAM;UAAEP,MAAM;UAAEC;QAAO,CAAC,GAAG,MAAM,IAAAS,8BAAqB,EAACR,MAAM,EAAEG,aAAa,EAAEE,KAAK,CAAC;QACpFE,OAAO,GAAG;UACRT,MAAM;UACNC;QACF,CAAC;MACH,CAAC,MAAM;QACL,MAAMD,MAAM,GAAG,MAAM,IAAAW,+BAAsB,EAACT,MAAM,EAAEG,aAAa,CAAC;QAClEI,OAAO,GAAG;UACRT,MAAM,EAAEA,MAAM,CAACD,QAAQ,CAAC,CAAC;UACzBE,MAAM,EAAE;QACV,CAAC;MACH;MAEA,IAAI,CAACW,IAAI,CAAC,gBAAgB,EAAE;QAAEvB,OAAO,EAAEI,cAAc;QAAEgB;MAAQ,CAAC,CAAC;MAEjE,OAAOA,OAAO;IAChB,CAAC,CAAC,OAAOI,KAAK,EAAE;MACd,OAAO;QAAEb,MAAM,EAAE,MAAM;QAAEC,MAAM,EAAE;MAAM,CAAC;IAC1C;EACF;EAEA,MAAMa,eAAeA,CACnBC,WAAc,EACd3B,OAAuB,EACX;IACZ,IAAI,CAAC,IAAI,CAACG,SAAS,EAAE;MACnB,MAAM,IAAIC,KAAK,CAAC,qDAAqD,CAAC;IACxE;IAEA,IAAI,CAACJ,OAAO,EAAE;MACZ,MAAM,IAAII,KAAK,CAAC,sDAAsD,CAAC;IACzE;IAEA,MAAMwB,QAAQ,GAAG,IAAI,CAACzB,SAAS,CAAC0B,WAAW,CAAC,QAAQ,CAAC;IACrD,IAAI,CAACD,QAAQ,EAAE;MACb,MAAM,IAAIxB,KAAK,CAAC,uDAAuD,CAAC;IAC1E;IAEA,IAAI;MACF;MACA,MAAM0B,kBAAkB,GACtB,IAAI,CAAC3B,SAAS,CAAC4B,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC5B,SAAS,CAAC4B,IAAI,KAAK,UAAU;;MAEzE;MACA,IAAIC,qBAA6B;MACjC,IAAIF,kBAAkB,EAAE;QACtB;QACA,MAAMG,gBAAgB,GAAG,IAAIC,UAAU,CAACP,WAAW,CAACQ,SAAS,CAAC;UAAEC,gBAAgB,EAAE;QAAM,CAAC,CAAC,CAAC;QAC3FJ,qBAAqB,GAAGK,WAAM,CAACC,MAAM,CAACL,gBAAgB,CAAC;MACzD,CAAC,MAAM;QACL;QACAD,qBAAqB,GAAGO,MAAM,CAACC,IAAI,CACjC,IAAIN,UAAU,CAACP,WAAW,CAACQ,SAAS,CAAC;UAAEC,gBAAgB,EAAE;QAAM,CAAC,CAAC,CACnE,CAAC,CAACzB,QAAQ,CAAC,QAAQ,CAAC;MACtB;MAEA,MAAM8B,MAAM,GAAI,MAAMb,QAAQ,CAACc,OAAO,CACpC;QACEC,MAAM,EAAE,wBAAwB;QAChC5C,MAAM,EAAE;UACN4B,WAAW,EAAEK,qBAAqB;UAClCY,MAAM,EAAE,IAAI,CAACtC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,EAAEY,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI;QACpD;MACF,CAAC,EACDlB,OAAO,CAACoB,aACV,CAAkD;;MAElD;MACA,IAAI,WAAW,IAAIqB,MAAM,IAAIA,MAAM,CAACI,SAAS,EAAE;QAC7C;QACA,MAAMC,OAAO,GAAGT,WAAM,CAACU,MAAM,CAACN,MAAM,CAACI,SAAS,CAAC;QAC/C,IAAIlB,WAAW,YAAYqB,gBAAW,IAAIrB,WAAW,CAACsB,QAAQ,EAAE;UAC9DtB,WAAW,CAACuB,YAAY,CACtBvB,WAAW,CAACsB,QAAQ,EACpBV,MAAM,CAACC,IAAI,CAACM,OAAO,CACrB,CAAC;QACH;QAEA,OAAOnB,WAAW;MACpB;MAEA,IAAI,aAAa,IAAIc,MAAM,IAAIA,MAAM,CAACd,WAAW,EAAE;QACjD;QACA,IAAIwB,kBAA0B;QAE9B,IAAIrB,kBAAkB,EAAE;UACtB;UACA,IAAI;YACF,MAAMsB,YAAY,GAAGf,WAAM,CAACU,MAAM,CAACN,MAAM,CAACd,WAAW,CAAC;YACtDwB,kBAAkB,GAAGZ,MAAM,CAACC,IAAI,CAACY,YAAY,CAAC;UAChD,CAAC,CAAC,OAAO3B,KAAK,EAAE;YACd,MAAM,IAAIrB,KAAK,CAAC,4DAA4D,CAAC;UAC/E;QACF,CAAC,MAAM;UACL;UACA+C,kBAAkB,GAAGZ,MAAM,CAACC,IAAI,CAACC,MAAM,CAACd,WAAW,EAAE,QAAQ,CAAC;QAChE;QAEA,IAAIA,WAAW,YAAY0B,yBAAoB,EAAE;UAC/C,OAAOA,yBAAoB,CAACC,WAAW,CAAC,IAAIpB,UAAU,CAACiB,kBAAkB,CAAC,CAAC;QAC7E;QAEA,OAAOH,gBAAW,CAACR,IAAI,CAACW,kBAAkB,CAAC;MAC7C;MAEA,MAAM,IAAI/C,KAAK,CAAC,yDAAyD,CAAC;IAC5E,CAAC,CAAC,OAAOqB,KAAK,EAAE;MACd,IAAIA,KAAK,YAAYrB,KAAK,EAAE;QAC1B,MAAM,IAAIA,KAAK,CAAC,mCAAmCqB,KAAK,CAAC8B,OAAO,EAAE,CAAC;MACrE;MACA,MAAM,IAAInD,KAAK,CAAC,wDAAwD,CAAC;IAC3E;EACF;EAEA,MAAMoD,eAAeA,CAACC,IAA2B,EAA0B;IACzE,MAAM;MAAEC,WAAW;MAAEC,SAAS;MAAE/C,MAAM;MAAEZ,OAAO;MAAEc,MAAM;MAAE8C;IAAU,CAAC,GAAGH,IAAI;IAE3E,IAAI,CAAC,IAAI,CAACtD,SAAS,EAAE;MACnB,MAAM,IAAIC,KAAK,CAAC,qDAAqD,CAAC;IACxE;IAEA,MAAMwB,QAAQ,GAAG,IAAI,CAACzB,SAAS,CAAC0B,WAAW,CAAC,QAAQ,CAAC;IACrD,IAAI,CAACD,QAAQ,EAAE;MACb,MAAM,IAAIxB,KAAK,CAAC,uDAAuD,CAAC;IAC1E;IAEA,IAAI,CAACJ,OAAO,EAAE;MACZ,MAAM,IAAII,KAAK,CAAC,sDAAsD,CAAC;IACzE;IAEA,IAAI,CAACsD,WAAW,EAAE;MAChB,MAAM,IAAItD,KAAK,CAAC,0DAA0D,CAAC;IAC7E;IAEA,IAAI,CAACuD,SAAS,EAAE;MACd,MAAM,IAAIvD,KAAK,CAAC,wDAAwD,CAAC;IAC3E;IAEA,IAAI,CAACQ,MAAM,IAAIA,MAAM,IAAI,CAAC,EAAE;MAC1B,MAAM,IAAIR,KAAK,CAAC,+DAA+D,CAAC;IAClF;IAEA,IAAI;MACF;MACA,IAAIyD,gBAAgB,GAAG/C,MAAM;MAC7B,IAAI,CAAC+C,gBAAgB,IAAI7D,OAAO,EAAE;QAChC6D,gBAAgB,GAAG7D,OAAO,CAACe,OAAO,EAAEvB,OAAO,EAAEwB,IAAI,GAAG,CAAC,CAAC;MACxD;MACA,IAAI,CAAC6C,gBAAgB,EAAE;QACrB,MAAM,IAAIzD,KAAK,CAAC,sDAAsD,CAAC;MACzE;;MAEA;MACA,MAAM0D,UAAU,GAAG,IAAIC,eAAU,CAACF,gBAAgB,EAAE,WAAW,CAAC;MAEhE,MAAMlC,WAAW,GAAGiC,SAAS,GACzB,MAAM,IAAAI,oDAAyB,EAAC;QAC9BF,UAAU;QACVJ,WAAW;QACXC,SAAS;QACT/C,MAAM;QACNgD;MACF,CAAC,CAAC,GACF,MAAM,IAAAK,4CAAqB,EAAC;QAC1BH,UAAU;QACVJ,WAAW;QACXC,SAAS;QACT/C;MACF,CAAC,CAAC;;MAEN;MACA,MAAMsD,iBAAiB,GAAG,MAAM,IAAI,CAACxC,eAAe,CAACC,WAAW,EAAE3B,OAAO,CAAC;;MAE1E;MACA,MAAM6C,SAAS,GAAG,MAAMiB,UAAU,CAACK,kBAAkB,CAACD,iBAAiB,CAAC/B,SAAS,CAAC,CAAC,EAAE;QACnFiC,aAAa,EAAE,KAAK;QACpBC,mBAAmB,EAAE;MACvB,CAAC,CAAC;MAEF,IAAI,CAACxB,SAAS,EAAE;QACd,MAAM,IAAIzC,KAAK,CAAC,uDAAuD,CAAC;MAC1E;MAEA,OAAOyC,SAAS;IAClB,CAAC,CAAC,OAAOpB,KAAK,EAAE;MACd,IAAIA,KAAK,YAAYrB,KAAK,EAAE;QAC1B,MAAM,IAAIA,KAAK,CAAC,mCAAmCqB,KAAK,CAAC8B,OAAO,EAAE,CAAC;MACrE;MACA,MAAM,IAAInD,KAAK,CAAC,wDAAwD,CAAC;IAC3E;EACF;EAEA,MAAekE,WAAWA,CAACrE,OAAe,EAAEsD,OAAe,EAAEgB,OAAgB,EAAmB;IAC9F,IAAI;MACF,IAAI,CAAC,IAAI,CAACpE,SAAS,EAAE;QACnB,MAAM,IAAIC,KAAK,CAAC,iDAAiD,CAAC;MACpE;MAEA,MAAMwB,QAAQ,GAAG,IAAI,CAACzB,SAAS,CAAC0B,WAAW,CAAC,QAAQ,CAAC;MACrD,IAAI,CAACD,QAAQ,EAAE;QACb,MAAM,IAAIxB,KAAK,CAAC,mDAAmD,CAAC;MACtE;MAEA,MAAMoE,KAAK,GAAGD,OAAO,GAAG,GAAG,IAAI,CAACE,qBAAqB,CAAC,CAAC,IAAIF,OAAO,EAAE,GAAGG,SAAS;MAEhF,MAAMC,cAAc,GAAG,IAAIC,WAAW,CAAC,CAAC,CAACtC,MAAM,CAACiB,OAAO,CAAC;MACxD,MAAMxD,MAAM,GAAG;QACbwD,OAAO,EAAElB,WAAM,CAACC,MAAM,CAACqC,cAAc,CAAC;QACtC/B,MAAM,EAAE3C;QACR;QACA;MACF,CAAC;MACD,MAAM;QAAE4C;MAAU,CAAC,GAAI,MAAMjB,QAAQ,CAACc,OAAO,CAC3C;QAAEC,MAAM,EAAE,oBAAoB;QAAE5C;MAAO,CAAC,EACxCyE,KACF,CAEC;MAED,OAAO3B,SAAS;IAClB,CAAC,CAAC,OAAOpB,KAAK,EAAE;MACd,MAAMA,KAAK;IACb;EACF;EAEA,MAAMoD,aAAaA,CAAC7E,OAAsB,EAAiB;IACzD,IAAI,CAAC,IAAI,CAACG,SAAS,EAAE,MAAM,IAAIC,KAAK,CAAC,qBAAqB,CAAC;IAE3D,MAAMwB,QAAQ,GAAG,IAAI,CAACzB,SAAS,CAAC0B,WAAW,CAAC,QAAQ,CAAC;IACrD,IAAI,CAACD,QAAQ,EAAE,MAAM,IAAIxB,KAAK,CAAC,oBAAoB,CAAC;IAEpD,IAAI;MACF,MAAM,IAAI,CAACD,SAAS,CAAC0E,aAAa,CAAC7E,OAAO,CAAC;MAE3C;IACF,CAAC,CAAC,OAAO8E,WAAgB,EAAE;MACzB,MAAMA,WAAW;IACnB;EACF;EAEAxE,WAAWA,CAAA,EAA8B;IACvC,IAAI,CAAC,IAAI,CAACH,SAAS,EAAE,MAAM,IAAIC,KAAK,CAAC,qBAAqB,CAAC;IAC3D,MAAM2E,UAAU,GAAG,IAAI,CAAC5E,SAAS,CAAC6E,aAAa,CAAC,CAAC;IAEjD,OAAOD,UAAU,CAAC,IAAI,CAACN,qBAAqB,CAAC,CAAC,CAAC,EAAEQ,QAAQ;EAC3D;EAEAC,UAAUA,CAAA,EAAkB;IAC1B,IAAI,CAAC,IAAI,CAAC/E,SAAS,EAAE,MAAM,IAAIC,KAAK,CAAC,qBAAqB,CAAC;IAE3D,OAAO,IAAI,CAACD,SAAS,CAAC+E,UAAU,CAAC,CAAC;EACpC;EAEAT,qBAAqBA,CAAA,EAAmB;IACtC,OAAOhF,aAAa,CAACE,kBAAkB;EACzC;AACF;AAACwF,OAAA,CAAA1F,aAAA,GAAAA,aAAA","ignoreList":[]}
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createSPLTokenTransaction = createSPLTokenTransaction;
7
+ var _splToken = require("@solana/spl-token");
8
+ var _web = require("@solana/web3.js");
9
+ const SPL_COMPUTE_BUDGET_CONSTANTS = {
10
+ UNIT_PRICE_MICRO_LAMPORTS: 1000000,
11
+ UNIT_LIMIT_TRANSFER_ONLY: 300000,
12
+ UNIT_LIMIT_WITH_ATA_CREATION: 400000
13
+ };
14
+ async function getMintOwnerProgramId(connection, mint) {
15
+ const info = await connection.getAccountInfo(mint);
16
+ if (!info) {
17
+ throw new Error('Mint account not found');
18
+ }
19
+ if (info.owner.equals(_splToken.TOKEN_PROGRAM_ID)) {
20
+ return _splToken.TOKEN_PROGRAM_ID;
21
+ }
22
+ if (info.owner.equals(_splToken.TOKEN_2022_PROGRAM_ID)) {
23
+ return _splToken.TOKEN_2022_PROGRAM_ID;
24
+ }
25
+ throw new Error('Unknown mint owner program');
26
+ }
27
+ async function createSPLTokenTransaction({
28
+ fromAddress,
29
+ toAddress,
30
+ amount,
31
+ tokenMint,
32
+ connection
33
+ }) {
34
+ if (!fromAddress) {
35
+ throw new Error('No public key found');
36
+ }
37
+ if (amount <= 0) {
38
+ throw new Error('Amount must be greater than 0');
39
+ }
40
+ try {
41
+ const fromPubkey = new _web.PublicKey(fromAddress);
42
+ const toPubkey = new _web.PublicKey(toAddress);
43
+ const mintPubkey = new _web.PublicKey(tokenMint);
44
+ const programId = await getMintOwnerProgramId(connection, mintPubkey);
45
+ const mintInfo = await (0, _splToken.getMint)(connection, mintPubkey, undefined, programId);
46
+ const decimals = mintInfo.decimals;
47
+ if (decimals < 0) {
48
+ throw new Error('Invalid token decimals');
49
+ }
50
+ const tokenAmount = Math.floor(amount * 10 ** decimals);
51
+ const fromTokenAccount = (0, _splToken.getAssociatedTokenAddressSync)(mintPubkey, fromPubkey, false, programId);
52
+ const toTokenAccount = (0, _splToken.getAssociatedTokenAddressSync)(mintPubkey, toPubkey, false, programId);
53
+ try {
54
+ const fromAccount = await (0, _splToken.getAccount)(connection, fromTokenAccount, undefined, programId);
55
+ if (fromAccount.amount < BigInt(tokenAmount)) {
56
+ throw new Error('Insufficient token balance');
57
+ }
58
+ } catch (error) {
59
+ if (error instanceof _splToken.TokenAccountNotFoundError) {
60
+ throw new Error('Sender does not have a token account for this mint');
61
+ }
62
+ throw error;
63
+ }
64
+ let shouldCreateATA = false;
65
+ try {
66
+ await (0, _splToken.getAccount)(connection, toTokenAccount, undefined, programId);
67
+ } catch (error) {
68
+ if (error instanceof _splToken.TokenAccountNotFoundError) {
69
+ shouldCreateATA = true;
70
+ } else {
71
+ throw error;
72
+ }
73
+ }
74
+ const instructions = [];
75
+ const computeUnitLimit = shouldCreateATA ? SPL_COMPUTE_BUDGET_CONSTANTS.UNIT_LIMIT_WITH_ATA_CREATION : SPL_COMPUTE_BUDGET_CONSTANTS.UNIT_LIMIT_TRANSFER_ONLY;
76
+ instructions.push(_web.ComputeBudgetProgram.setComputeUnitPrice({
77
+ microLamports: SPL_COMPUTE_BUDGET_CONSTANTS.UNIT_PRICE_MICRO_LAMPORTS
78
+ }), _web.ComputeBudgetProgram.setComputeUnitLimit({
79
+ units: computeUnitLimit
80
+ }));
81
+ if (shouldCreateATA) {
82
+ instructions.push((0, _splToken.createAssociatedTokenAccountInstruction)(fromPubkey, toTokenAccount, toPubkey, mintPubkey, programId));
83
+ }
84
+ instructions.push((0, _splToken.createTransferCheckedInstruction)(fromTokenAccount, mintPubkey, toTokenAccount, fromPubkey, tokenAmount, decimals, [], programId));
85
+ const {
86
+ blockhash,
87
+ lastValidBlockHeight
88
+ } = await connection.getLatestBlockhash();
89
+ return new _web.Transaction({
90
+ feePayer: fromPubkey,
91
+ blockhash,
92
+ lastValidBlockHeight
93
+ }).add(...instructions);
94
+ } catch (error) {
95
+ throw new Error(`Failed to create SPL token transaction: ${error instanceof Error ? error.message : 'Unknown error'}`);
96
+ }
97
+ }
98
+ //# sourceMappingURL=createSPLTokenTransaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_splToken","require","_web","SPL_COMPUTE_BUDGET_CONSTANTS","UNIT_PRICE_MICRO_LAMPORTS","UNIT_LIMIT_TRANSFER_ONLY","UNIT_LIMIT_WITH_ATA_CREATION","getMintOwnerProgramId","connection","mint","info","getAccountInfo","Error","owner","equals","TOKEN_PROGRAM_ID","TOKEN_2022_PROGRAM_ID","createSPLTokenTransaction","fromAddress","toAddress","amount","tokenMint","fromPubkey","PublicKey","toPubkey","mintPubkey","programId","mintInfo","getMint","undefined","decimals","tokenAmount","Math","floor","fromTokenAccount","getAssociatedTokenAddressSync","toTokenAccount","fromAccount","getAccount","BigInt","error","TokenAccountNotFoundError","shouldCreateATA","instructions","computeUnitLimit","push","ComputeBudgetProgram","setComputeUnitPrice","microLamports","setComputeUnitLimit","units","createAssociatedTokenAccountInstruction","createTransferCheckedInstruction","blockhash","lastValidBlockHeight","getLatestBlockhash","Transaction","feePayer","add","message"],"sourceRoot":"../../../src","sources":["utils/createSPLTokenTransaction.ts"],"mappings":"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","ignoreList":[]}
@@ -12,18 +12,18 @@ var _web = require("@solana/web3.js");
12
12
  * amount of SOL that can be sent in case of cleaning the account and remove the rent exemption error.
13
13
  */
14
14
  const COMPUTE_BUDGET_CONSTANTS = {
15
- UNIT_PRICE_MICRO_LAMPORTS: 20000000,
15
+ UNIT_PRICE_MICRO_LAMPORTS: 1000000,
16
16
  UNIT_LIMIT: 500
17
17
  };
18
18
  async function createSendTransaction({
19
19
  fromAddress,
20
20
  toAddress,
21
- value,
21
+ amount,
22
22
  connection
23
23
  }) {
24
24
  const fromPubkey = new _web.PublicKey(fromAddress);
25
25
  const toPubkey = new _web.PublicKey(toAddress);
26
- const lamports = Math.floor(value * _web.LAMPORTS_PER_SOL);
26
+ const lamports = Math.floor(amount * _web.LAMPORTS_PER_SOL);
27
27
  const {
28
28
  blockhash
29
29
  } = await connection.getLatestBlockhash();
@@ -1 +1 @@
1
- {"version":3,"names":["_web","require","COMPUTE_BUDGET_CONSTANTS","UNIT_PRICE_MICRO_LAMPORTS","UNIT_LIMIT","createSendTransaction","fromAddress","toAddress","value","connection","fromPubkey","PublicKey","toPubkey","lamports","Math","floor","LAMPORTS_PER_SOL","blockhash","getLatestBlockhash","instructions","ComputeBudgetProgram","setComputeUnitPrice","microLamports","setComputeUnitLimit","units","SystemProgram","transfer","transaction","Transaction","add","feePayer","recentBlockhash"],"sourceRoot":"../../../src","sources":["utils/createSendTransaction.ts"],"mappings":";;;;;;AAAA,IAAAA,IAAA,GAAAC,OAAA;AASA;;AASA;AACA;AACA;AACA;AACA,MAAMC,wBAAwB,GAAG;EAC/BC,yBAAyB,EAAE,QAAQ;EACnCC,UAAU,EAAE;AACd,CAAC;AAEM,eAAeC,qBAAqBA,CAAC;EAC1CC,WAAW;EACXC,SAAS;EACTC,KAAK;EACLC;AACmB,CAAC,EAAwB;EAC5C,MAAMC,UAAU,GAAG,IAAIC,cAAS,CAACL,WAAW,CAAC;EAC7C,MAAMM,QAAQ,GAAG,IAAID,cAAS,CAACJ,SAAS,CAAC;EACzC,MAAMM,QAAQ,GAAGC,IAAI,CAACC,KAAK,CAACP,KAAK,GAAGQ,qBAAgB,CAAC;EAErD,MAAM;IAAEC;EAAU,CAAC,GAAG,MAAMR,UAAU,CAACS,kBAAkB,CAAC,CAAC;EAE3D,MAAMC,YAAY,GAAG,CACnBC,yBAAoB,CAACC,mBAAmB,CAAC;IACvCC,aAAa,EAAEpB,wBAAwB,CAACC;EAC1C,CAAC,CAAC,EACFiB,yBAAoB,CAACG,mBAAmB,CAAC;IAAEC,KAAK,EAAEtB,wBAAwB,CAACE;EAAW,CAAC,CAAC,EACxFqB,kBAAa,CAACC,QAAQ,CAAC;IACrBhB,UAAU;IACVE,QAAQ;IACRC;EACF,CAAC,CAAC,CACH;EAED,MAAMc,WAAW,GAAG,IAAIC,gBAAW,CAAC,CAAC,CAACC,GAAG,CAAC,GAAGV,YAAY,CAAC;EAC1DQ,WAAW,CAACG,QAAQ,GAAGpB,UAAU;EACjCiB,WAAW,CAACI,eAAe,GAAGd,SAAS;EAEvC,OAAOU,WAAW;AACpB","ignoreList":[]}
1
+ {"version":3,"names":["_web","require","COMPUTE_BUDGET_CONSTANTS","UNIT_PRICE_MICRO_LAMPORTS","UNIT_LIMIT","createSendTransaction","fromAddress","toAddress","amount","connection","fromPubkey","PublicKey","toPubkey","lamports","Math","floor","LAMPORTS_PER_SOL","blockhash","getLatestBlockhash","instructions","ComputeBudgetProgram","setComputeUnitPrice","microLamports","setComputeUnitLimit","units","SystemProgram","transfer","transaction","Transaction","add","feePayer","recentBlockhash"],"sourceRoot":"../../../src","sources":["utils/createSendTransaction.ts"],"mappings":";;;;;;AAAA,IAAAA,IAAA,GAAAC,OAAA;AASA;;AASA;AACA;AACA;AACA;AACA,MAAMC,wBAAwB,GAAG;EAC/BC,yBAAyB,EAAE,OAAO;EAClCC,UAAU,EAAE;AACd,CAAC;AAEM,eAAeC,qBAAqBA,CAAC;EAC1CC,WAAW;EACXC,SAAS;EACTC,MAAM;EACNC;AACmB,CAAC,EAAwB;EAC5C,MAAMC,UAAU,GAAG,IAAIC,cAAS,CAACL,WAAW,CAAC;EAC7C,MAAMM,QAAQ,GAAG,IAAID,cAAS,CAACJ,SAAS,CAAC;EACzC,MAAMM,QAAQ,GAAGC,IAAI,CAACC,KAAK,CAACP,MAAM,GAAGQ,qBAAgB,CAAC;EAEtD,MAAM;IAAEC;EAAU,CAAC,GAAG,MAAMR,UAAU,CAACS,kBAAkB,CAAC,CAAC;EAE3D,MAAMC,YAAY,GAAG,CACnBC,yBAAoB,CAACC,mBAAmB,CAAC;IACvCC,aAAa,EAAEpB,wBAAwB,CAACC;EAC1C,CAAC,CAAC,EACFiB,yBAAoB,CAACG,mBAAmB,CAAC;IAAEC,KAAK,EAAEtB,wBAAwB,CAACE;EAAW,CAAC,CAAC,EACxFqB,kBAAa,CAACC,QAAQ,CAAC;IACrBhB,UAAU;IACVE,QAAQ;IACRC;EACF,CAAC,CAAC,CACH;EAED,MAAMc,WAAW,GAAG,IAAIC,gBAAW,CAAC,CAAC,CAACC,GAAG,CAAC,GAAGV,YAAY,CAAC;EAC1DQ,WAAW,CAACG,QAAQ,GAAGpB,UAAU;EACjCiB,WAAW,CAACI,eAAe,GAAGd,SAAS;EAEvC,OAAOU,WAAW;AACpB","ignoreList":[]}
@@ -5,6 +5,7 @@ import { getSolanaNativeBalance, getSolanaTokenBalance } from './helpers';
5
5
  import { Connection, Transaction, VersionedTransaction } from '@solana/web3.js';
6
6
  import base58 from 'bs58';
7
7
  import { createSendTransaction } from './utils/createSendTransaction';
8
+ import { createSPLTokenTransaction } from './utils/createSPLTokenTransaction';
8
9
  export class SolanaAdapter extends SolanaBaseAdapter {
9
10
  static supportedNamespace = 'solana';
10
11
  constructor() {
@@ -75,10 +76,23 @@ export class SolanaAdapter extends SolanaBaseAdapter {
75
76
  throw new Error('SolanaAdapter:signTransaction - provider is undefined');
76
77
  }
77
78
  try {
78
- // Serialize transaction to base64 (following WalletConnect standard)
79
- const serializedTransaction = Buffer.from(new Uint8Array(transaction.serialize({
80
- verifySignatures: false
81
- }))).toString('base64');
79
+ // Check if this is a deeplink provider (Phantom/Solflare)
80
+ const isDeeplinkProvider = this.connector.type === 'phantom' || this.connector.type === 'solflare';
81
+
82
+ // Serialize transaction based on provider type
83
+ let serializedTransaction;
84
+ if (isDeeplinkProvider) {
85
+ // Deeplink providers (Phantom/Solflare) expect base58
86
+ const transactionBytes = new Uint8Array(transaction.serialize({
87
+ verifySignatures: false
88
+ }));
89
+ serializedTransaction = base58.encode(transactionBytes);
90
+ } else {
91
+ // WalletConnect providers expect base64 (following WalletConnect standard)
92
+ serializedTransaction = Buffer.from(new Uint8Array(transaction.serialize({
93
+ verifySignatures: false
94
+ }))).toString('base64');
95
+ }
82
96
  const result = await provider.request({
83
97
  method: 'solana_signTransaction',
84
98
  params: {
@@ -98,7 +112,19 @@ export class SolanaAdapter extends SolanaBaseAdapter {
98
112
  }
99
113
  if ('transaction' in result && result.transaction) {
100
114
  // New response format - deserialize the signed transaction
101
- const decodedTransaction = Buffer.from(result.transaction, 'base64');
115
+ let decodedTransaction;
116
+ if (isDeeplinkProvider) {
117
+ // Deeplink providers return base58 encoded transactions
118
+ try {
119
+ const decodedBytes = base58.decode(result.transaction);
120
+ decodedTransaction = Buffer.from(decodedBytes);
121
+ } catch (error) {
122
+ throw new Error('Failed to decode base58 transaction from deeplink provider');
123
+ }
124
+ } else {
125
+ // WalletConnect providers return base64 encoded transactions
126
+ decodedTransaction = Buffer.from(result.transaction, 'base64');
127
+ }
102
128
  if (transaction instanceof VersionedTransaction) {
103
129
  return VersionedTransaction.deserialize(new Uint8Array(decodedTransaction));
104
130
  }
@@ -118,7 +144,8 @@ export class SolanaAdapter extends SolanaBaseAdapter {
118
144
  toAddress,
119
145
  amount,
120
146
  network,
121
- rpcUrl
147
+ rpcUrl,
148
+ tokenMint
122
149
  } = data;
123
150
  if (!this.connector) {
124
151
  throw new Error('SolanaAdapter:sendTransaction - no active connector');
@@ -151,11 +178,17 @@ export class SolanaAdapter extends SolanaBaseAdapter {
151
178
 
152
179
  // Create connection
153
180
  const connection = new Connection(connectionRpcUrl, 'confirmed');
154
- const transaction = await createSendTransaction({
181
+ const transaction = tokenMint ? await createSPLTokenTransaction({
182
+ connection,
183
+ fromAddress,
184
+ toAddress,
185
+ amount,
186
+ tokenMint
187
+ }) : await createSendTransaction({
155
188
  connection,
156
189
  fromAddress,
157
190
  toAddress,
158
- value: amount
191
+ amount
159
192
  });
160
193
 
161
194
  // Sign the transaction
@@ -1 +1 @@
1
- {"version":3,"names":["SolanaBaseAdapter","getSolanaNativeBalance","getSolanaTokenBalance","Connection","Transaction","VersionedTransaction","base58","createSendTransaction","SolanaAdapter","supportedNamespace","constructor","adapterType","getBalance","params","network","address","tokens","connector","Error","balanceAddress","getAccounts","find","account","includes","id","toString","amount","symbol","rpcUrl","rpcUrls","default","http","base58Address","split","token","caipNetworkId","balance","emit","error","signTransaction","transaction","provider","getProvider","serializedTransaction","Buffer","from","Uint8Array","serialize","verifySignatures","result","request","method","pubkey","signature","decoded","decode","feePayer","addSignature","decodedTransaction","deserialize","message","sendTransaction","data","fromAddress","toAddress","connectionRpcUrl","connection","value","signedTransaction","sendRawTransaction","skipPreflight","preflightCommitment","signMessage","chainId","chain","getSupportedNamespace","undefined","encodedMessage","TextEncoder","encode","switchNetwork","switchError","namespaces","getNamespaces","accounts","disconnect"],"sourceRoot":"../../src","sources":["adapter.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["SolanaBaseAdapter","getSolanaNativeBalance","getSolanaTokenBalance","Connection","Transaction","VersionedTransaction","base58","createSendTransaction","createSPLTokenTransaction","SolanaAdapter","supportedNamespace","constructor","adapterType","getBalance","params","network","address","tokens","connector","Error","balanceAddress","getAccounts","find","account","includes","id","toString","amount","symbol","rpcUrl","rpcUrls","default","http","base58Address","split","token","caipNetworkId","balance","emit","error","signTransaction","transaction","provider","getProvider","isDeeplinkProvider","type","serializedTransaction","transactionBytes","Uint8Array","serialize","verifySignatures","encode","Buffer","from","result","request","method","pubkey","signature","decoded","decode","feePayer","addSignature","decodedTransaction","decodedBytes","deserialize","message","sendTransaction","data","fromAddress","toAddress","tokenMint","connectionRpcUrl","connection","signedTransaction","sendRawTransaction","skipPreflight","preflightCommitment","signMessage","chainId","chain","getSupportedNamespace","undefined","encodedMessage","TextEncoder","switchNetwork","switchError","namespaces","getNamespaces","accounts","disconnect"],"sourceRoot":"../../src","sources":["adapter.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+
3
+ import { TOKEN_2022_PROGRAM_ID, TOKEN_PROGRAM_ID, TokenAccountNotFoundError, createAssociatedTokenAccountInstruction, createTransferCheckedInstruction, getAccount, getAssociatedTokenAddressSync, getMint } from '@solana/spl-token';
4
+ import { ComputeBudgetProgram, PublicKey, Transaction } from '@solana/web3.js';
5
+ const SPL_COMPUTE_BUDGET_CONSTANTS = {
6
+ UNIT_PRICE_MICRO_LAMPORTS: 1000000,
7
+ UNIT_LIMIT_TRANSFER_ONLY: 300000,
8
+ UNIT_LIMIT_WITH_ATA_CREATION: 400000
9
+ };
10
+ async function getMintOwnerProgramId(connection, mint) {
11
+ const info = await connection.getAccountInfo(mint);
12
+ if (!info) {
13
+ throw new Error('Mint account not found');
14
+ }
15
+ if (info.owner.equals(TOKEN_PROGRAM_ID)) {
16
+ return TOKEN_PROGRAM_ID;
17
+ }
18
+ if (info.owner.equals(TOKEN_2022_PROGRAM_ID)) {
19
+ return TOKEN_2022_PROGRAM_ID;
20
+ }
21
+ throw new Error('Unknown mint owner program');
22
+ }
23
+ export async function createSPLTokenTransaction({
24
+ fromAddress,
25
+ toAddress,
26
+ amount,
27
+ tokenMint,
28
+ connection
29
+ }) {
30
+ if (!fromAddress) {
31
+ throw new Error('No public key found');
32
+ }
33
+ if (amount <= 0) {
34
+ throw new Error('Amount must be greater than 0');
35
+ }
36
+ try {
37
+ const fromPubkey = new PublicKey(fromAddress);
38
+ const toPubkey = new PublicKey(toAddress);
39
+ const mintPubkey = new PublicKey(tokenMint);
40
+ const programId = await getMintOwnerProgramId(connection, mintPubkey);
41
+ const mintInfo = await getMint(connection, mintPubkey, undefined, programId);
42
+ const decimals = mintInfo.decimals;
43
+ if (decimals < 0) {
44
+ throw new Error('Invalid token decimals');
45
+ }
46
+ const tokenAmount = Math.floor(amount * 10 ** decimals);
47
+ const fromTokenAccount = getAssociatedTokenAddressSync(mintPubkey, fromPubkey, false, programId);
48
+ const toTokenAccount = getAssociatedTokenAddressSync(mintPubkey, toPubkey, false, programId);
49
+ try {
50
+ const fromAccount = await getAccount(connection, fromTokenAccount, undefined, programId);
51
+ if (fromAccount.amount < BigInt(tokenAmount)) {
52
+ throw new Error('Insufficient token balance');
53
+ }
54
+ } catch (error) {
55
+ if (error instanceof TokenAccountNotFoundError) {
56
+ throw new Error('Sender does not have a token account for this mint');
57
+ }
58
+ throw error;
59
+ }
60
+ let shouldCreateATA = false;
61
+ try {
62
+ await getAccount(connection, toTokenAccount, undefined, programId);
63
+ } catch (error) {
64
+ if (error instanceof TokenAccountNotFoundError) {
65
+ shouldCreateATA = true;
66
+ } else {
67
+ throw error;
68
+ }
69
+ }
70
+ const instructions = [];
71
+ const computeUnitLimit = shouldCreateATA ? SPL_COMPUTE_BUDGET_CONSTANTS.UNIT_LIMIT_WITH_ATA_CREATION : SPL_COMPUTE_BUDGET_CONSTANTS.UNIT_LIMIT_TRANSFER_ONLY;
72
+ instructions.push(ComputeBudgetProgram.setComputeUnitPrice({
73
+ microLamports: SPL_COMPUTE_BUDGET_CONSTANTS.UNIT_PRICE_MICRO_LAMPORTS
74
+ }), ComputeBudgetProgram.setComputeUnitLimit({
75
+ units: computeUnitLimit
76
+ }));
77
+ if (shouldCreateATA) {
78
+ instructions.push(createAssociatedTokenAccountInstruction(fromPubkey, toTokenAccount, toPubkey, mintPubkey, programId));
79
+ }
80
+ instructions.push(createTransferCheckedInstruction(fromTokenAccount, mintPubkey, toTokenAccount, fromPubkey, tokenAmount, decimals, [], programId));
81
+ const {
82
+ blockhash,
83
+ lastValidBlockHeight
84
+ } = await connection.getLatestBlockhash();
85
+ return new Transaction({
86
+ feePayer: fromPubkey,
87
+ blockhash,
88
+ lastValidBlockHeight
89
+ }).add(...instructions);
90
+ } catch (error) {
91
+ throw new Error(`Failed to create SPL token transaction: ${error instanceof Error ? error.message : 'Unknown error'}`);
92
+ }
93
+ }
94
+ //# sourceMappingURL=createSPLTokenTransaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["TOKEN_2022_PROGRAM_ID","TOKEN_PROGRAM_ID","TokenAccountNotFoundError","createAssociatedTokenAccountInstruction","createTransferCheckedInstruction","getAccount","getAssociatedTokenAddressSync","getMint","ComputeBudgetProgram","PublicKey","Transaction","SPL_COMPUTE_BUDGET_CONSTANTS","UNIT_PRICE_MICRO_LAMPORTS","UNIT_LIMIT_TRANSFER_ONLY","UNIT_LIMIT_WITH_ATA_CREATION","getMintOwnerProgramId","connection","mint","info","getAccountInfo","Error","owner","equals","createSPLTokenTransaction","fromAddress","toAddress","amount","tokenMint","fromPubkey","toPubkey","mintPubkey","programId","mintInfo","undefined","decimals","tokenAmount","Math","floor","fromTokenAccount","toTokenAccount","fromAccount","BigInt","error","shouldCreateATA","instructions","computeUnitLimit","push","setComputeUnitPrice","microLamports","setComputeUnitLimit","units","blockhash","lastValidBlockHeight","getLatestBlockhash","feePayer","add","message"],"sourceRoot":"../../../src","sources":["utils/createSPLTokenTransaction.ts"],"mappings":"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","ignoreList":[]}
@@ -9,18 +9,18 @@ import { ComputeBudgetProgram, LAMPORTS_PER_SOL, PublicKey, SystemProgram, Trans
9
9
  * amount of SOL that can be sent in case of cleaning the account and remove the rent exemption error.
10
10
  */
11
11
  const COMPUTE_BUDGET_CONSTANTS = {
12
- UNIT_PRICE_MICRO_LAMPORTS: 20000000,
12
+ UNIT_PRICE_MICRO_LAMPORTS: 1000000,
13
13
  UNIT_LIMIT: 500
14
14
  };
15
15
  export async function createSendTransaction({
16
16
  fromAddress,
17
17
  toAddress,
18
- value,
18
+ amount,
19
19
  connection
20
20
  }) {
21
21
  const fromPubkey = new PublicKey(fromAddress);
22
22
  const toPubkey = new PublicKey(toAddress);
23
- const lamports = Math.floor(value * LAMPORTS_PER_SOL);
23
+ const lamports = Math.floor(amount * LAMPORTS_PER_SOL);
24
24
  const {
25
25
  blockhash
26
26
  } = await connection.getLatestBlockhash();
@@ -1 +1 @@
1
- {"version":3,"names":["ComputeBudgetProgram","LAMPORTS_PER_SOL","PublicKey","SystemProgram","Transaction","COMPUTE_BUDGET_CONSTANTS","UNIT_PRICE_MICRO_LAMPORTS","UNIT_LIMIT","createSendTransaction","fromAddress","toAddress","value","connection","fromPubkey","toPubkey","lamports","Math","floor","blockhash","getLatestBlockhash","instructions","setComputeUnitPrice","microLamports","setComputeUnitLimit","units","transfer","transaction","add","feePayer","recentBlockhash"],"sourceRoot":"../../../src","sources":["utils/createSendTransaction.ts"],"mappings":";;AAAA,SACEA,oBAAoB,EAEpBC,gBAAgB,EAChBC,SAAS,EACTC,aAAa,EACbC,WAAW,QACN,iBAAiB;;AAExB;;AASA;AACA;AACA;AACA;AACA,MAAMC,wBAAwB,GAAG;EAC/BC,yBAAyB,EAAE,QAAQ;EACnCC,UAAU,EAAE;AACd,CAAC;AAED,OAAO,eAAeC,qBAAqBA,CAAC;EAC1CC,WAAW;EACXC,SAAS;EACTC,KAAK;EACLC;AACmB,CAAC,EAAwB;EAC5C,MAAMC,UAAU,GAAG,IAAIX,SAAS,CAACO,WAAW,CAAC;EAC7C,MAAMK,QAAQ,GAAG,IAAIZ,SAAS,CAACQ,SAAS,CAAC;EACzC,MAAMK,QAAQ,GAAGC,IAAI,CAACC,KAAK,CAACN,KAAK,GAAGV,gBAAgB,CAAC;EAErD,MAAM;IAAEiB;EAAU,CAAC,GAAG,MAAMN,UAAU,CAACO,kBAAkB,CAAC,CAAC;EAE3D,MAAMC,YAAY,GAAG,CACnBpB,oBAAoB,CAACqB,mBAAmB,CAAC;IACvCC,aAAa,EAAEjB,wBAAwB,CAACC;EAC1C,CAAC,CAAC,EACFN,oBAAoB,CAACuB,mBAAmB,CAAC;IAAEC,KAAK,EAAEnB,wBAAwB,CAACE;EAAW,CAAC,CAAC,EACxFJ,aAAa,CAACsB,QAAQ,CAAC;IACrBZ,UAAU;IACVC,QAAQ;IACRC;EACF,CAAC,CAAC,CACH;EAED,MAAMW,WAAW,GAAG,IAAItB,WAAW,CAAC,CAAC,CAACuB,GAAG,CAAC,GAAGP,YAAY,CAAC;EAC1DM,WAAW,CAACE,QAAQ,GAAGf,UAAU;EACjCa,WAAW,CAACG,eAAe,GAAGX,SAAS;EAEvC,OAAOQ,WAAW;AACpB","ignoreList":[]}
1
+ {"version":3,"names":["ComputeBudgetProgram","LAMPORTS_PER_SOL","PublicKey","SystemProgram","Transaction","COMPUTE_BUDGET_CONSTANTS","UNIT_PRICE_MICRO_LAMPORTS","UNIT_LIMIT","createSendTransaction","fromAddress","toAddress","amount","connection","fromPubkey","toPubkey","lamports","Math","floor","blockhash","getLatestBlockhash","instructions","setComputeUnitPrice","microLamports","setComputeUnitLimit","units","transfer","transaction","add","feePayer","recentBlockhash"],"sourceRoot":"../../../src","sources":["utils/createSendTransaction.ts"],"mappings":";;AAAA,SACEA,oBAAoB,EAEpBC,gBAAgB,EAChBC,SAAS,EACTC,aAAa,EACbC,WAAW,QACN,iBAAiB;;AAExB;;AASA;AACA;AACA;AACA;AACA,MAAMC,wBAAwB,GAAG;EAC/BC,yBAAyB,EAAE,OAAO;EAClCC,UAAU,EAAE;AACd,CAAC;AAED,OAAO,eAAeC,qBAAqBA,CAAC;EAC1CC,WAAW;EACXC,SAAS;EACTC,MAAM;EACNC;AACmB,CAAC,EAAwB;EAC5C,MAAMC,UAAU,GAAG,IAAIX,SAAS,CAACO,WAAW,CAAC;EAC7C,MAAMK,QAAQ,GAAG,IAAIZ,SAAS,CAACQ,SAAS,CAAC;EACzC,MAAMK,QAAQ,GAAGC,IAAI,CAACC,KAAK,CAACN,MAAM,GAAGV,gBAAgB,CAAC;EAEtD,MAAM;IAAEiB;EAAU,CAAC,GAAG,MAAMN,UAAU,CAACO,kBAAkB,CAAC,CAAC;EAE3D,MAAMC,YAAY,GAAG,CACnBpB,oBAAoB,CAACqB,mBAAmB,CAAC;IACvCC,aAAa,EAAEjB,wBAAwB,CAACC;EAC1C,CAAC,CAAC,EACFN,oBAAoB,CAACuB,mBAAmB,CAAC;IAAEC,KAAK,EAAEnB,wBAAwB,CAACE;EAAW,CAAC,CAAC,EACxFJ,aAAa,CAACsB,QAAQ,CAAC;IACrBZ,UAAU;IACVC,QAAQ;IACRC;EACF,CAAC,CAAC,CACH;EAED,MAAMW,WAAW,GAAG,IAAItB,WAAW,CAAC,CAAC,CAACuB,GAAG,CAAC,GAAGP,YAAY,CAAC;EAC1DM,WAAW,CAACE,QAAQ,GAAGf,UAAU;EACjCa,WAAW,CAACG,eAAe,GAAGX,SAAS;EAEvC,OAAOQ,WAAW;AACpB","ignoreList":[]}
@@ -6,6 +6,7 @@ export interface SolanaTransactionData {
6
6
  amount: number;
7
7
  network?: AppKitNetwork;
8
8
  rpcUrl?: string;
9
+ tokenMint?: string;
9
10
  }
10
11
  export declare class SolanaAdapter extends SolanaBaseAdapter {
11
12
  private static supportedNamespace;
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACxB,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAAc,WAAW,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAIhF,MAAM,WAAW,qBAAqB;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,aAAc,SAAQ,iBAAiB;IAClD,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAA4B;;IASvD,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA8CjE,eAAe,CAAC,CAAC,SAAS,WAAW,GAAG,oBAAoB,EAChE,WAAW,EAAE,CAAC,EACd,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,CAAC,CAAC;IAiEP,eAAe,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAsE3D,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAiCzF,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAe1D,WAAW,IAAI,WAAW,EAAE,GAAG,SAAS;IAOxC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAM3B,qBAAqB,IAAI,cAAc;CAGxC"}
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACxB,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAAc,WAAW,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAKhF,MAAM,WAAW,qBAAqB;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,aAAc,SAAQ,iBAAiB;IAClD,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAA4B;;IASvD,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA8CjE,eAAe,CAAC,CAAC,SAAS,WAAW,GAAG,oBAAoB,EAChE,WAAW,EAAE,CAAC,EACd,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,CAAC,CAAC;IA0FP,eAAe,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IA8E3D,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAiCzF,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAe1D,WAAW,IAAI,WAAW,EAAE,GAAG,SAAS;IAOxC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAM3B,qBAAqB,IAAI,cAAc;CAGxC"}
@@ -1,5 +1,6 @@
1
1
  import type { CaipNetworkId, Namespaces, Storage, WalletInfo } from '@reown/appkit-common-react-native';
2
2
  import type nacl from 'tweetnacl';
3
+ import type { Connection } from '@solana/web3.js';
3
4
  export interface TokenInfo {
4
5
  address: string;
5
6
  symbol: string;
@@ -7,6 +8,13 @@ export interface TokenInfo {
7
8
  decimals: number;
8
9
  logoURI?: string;
9
10
  }
11
+ export type SPLTokenTransactionArgs = {
12
+ connection: Connection;
13
+ fromAddress: string;
14
+ toAddress: string;
15
+ amount: number;
16
+ tokenMint: string;
17
+ };
10
18
  export type Cluster = 'mainnet-beta' | 'testnet' | 'devnet';
11
19
  export type DeeplinkConnectResult = DeeplinkSession;
12
20
  export interface DeeplinkSession {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { Transaction } from '@solana/web3.js';
2
+ import type { SPLTokenTransactionArgs } from '../types';
3
+ export declare function createSPLTokenTransaction({ fromAddress, toAddress, amount, tokenMint, connection }: SPLTokenTransactionArgs): Promise<Transaction>;
4
+ //# sourceMappingURL=createSPLTokenTransaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createSPLTokenTransaction.d.ts","sourceRoot":"","sources":["../../../src/utils/createSPLTokenTransaction.ts"],"names":[],"mappings":"AAUA,OAAO,EAIL,WAAW,EAEZ,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AA0BxD,wBAAsB,yBAAyB,CAAC,EAC9C,WAAW,EACX,SAAS,EACT,MAAM,EACN,SAAS,EACT,UAAU,EACX,EAAE,uBAAuB,GAAG,OAAO,CAAC,WAAW,CAAC,CAyGhD"}
@@ -3,8 +3,8 @@ type SendTransactionArgs = {
3
3
  connection: Connection;
4
4
  fromAddress: string;
5
5
  toAddress: string;
6
- value: number;
6
+ amount: number;
7
7
  };
8
- export declare function createSendTransaction({ fromAddress, toAddress, value, connection }: SendTransactionArgs): Promise<Transaction>;
8
+ export declare function createSendTransaction({ fromAddress, toAddress, amount, connection }: SendTransactionArgs): Promise<Transaction>;
9
9
  export {};
10
10
  //# sourceMappingURL=createSendTransaction.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"createSendTransaction.d.ts","sourceRoot":"","sources":["../../../src/utils/createSendTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,UAAU,EAIf,WAAW,EACZ,MAAM,iBAAiB,CAAC;AAIzB,KAAK,mBAAmB,GAAG;IACzB,UAAU,EAAE,UAAU,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAWF,wBAAsB,qBAAqB,CAAC,EAC1C,WAAW,EACX,SAAS,EACT,KAAK,EACL,UAAU,EACX,EAAE,mBAAmB,GAAG,OAAO,CAAC,WAAW,CAAC,CAwB5C"}
1
+ {"version":3,"file":"createSendTransaction.d.ts","sourceRoot":"","sources":["../../../src/utils/createSendTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,UAAU,EAIf,WAAW,EACZ,MAAM,iBAAiB,CAAC;AAIzB,KAAK,mBAAmB,GAAG;IACzB,UAAU,EAAE,UAAU,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAWF,wBAAsB,qBAAqB,CAAC,EAC1C,WAAW,EACX,SAAS,EACT,MAAM,EACN,UAAU,EACX,EAAE,mBAAmB,GAAG,OAAO,CAAC,WAAW,CAAC,CAwB5C"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reown/appkit-solana-react-native",
3
- "version": "0.0.0-feat-siwx-20250923204044",
3
+ "version": "0.0.0-feat-siwx-20250924182536",
4
4
  "main": "lib/commonjs/index.js",
5
5
  "types": "lib/typescript/index.d.ts",
6
6
  "module": "lib/module/index.js",
@@ -40,7 +40,8 @@
40
40
  "provenance": true
41
41
  },
42
42
  "dependencies": {
43
- "@reown/appkit-common-react-native": "0.0.0-feat-siwx-20250923204044",
43
+ "@reown/appkit-common-react-native": "0.0.0-feat-siwx-20250924182536",
44
+ "@solana/spl-token": "0.4.13",
44
45
  "@solana/web3.js": "1.98.2",
45
46
  "bs58": "6.0.0",
46
47
  "tweetnacl": "1.0.3"
package/src/adapter.ts CHANGED
@@ -10,6 +10,7 @@ import { getSolanaNativeBalance, getSolanaTokenBalance } from './helpers';
10
10
  import { Connection, Transaction, VersionedTransaction } from '@solana/web3.js';
11
11
  import base58 from 'bs58';
12
12
  import { createSendTransaction } from './utils/createSendTransaction';
13
+ import { createSPLTokenTransaction } from './utils/createSPLTokenTransaction';
13
14
 
14
15
  export interface SolanaTransactionData {
15
16
  fromAddress: string;
@@ -17,6 +18,7 @@ export interface SolanaTransactionData {
17
18
  amount: number;
18
19
  network?: AppKitNetwork;
19
20
  rpcUrl?: string;
21
+ tokenMint?: string;
20
22
  }
21
23
 
22
24
  export class SolanaAdapter extends SolanaBaseAdapter {
@@ -93,10 +95,22 @@ export class SolanaAdapter extends SolanaBaseAdapter {
93
95
  }
94
96
 
95
97
  try {
96
- // Serialize transaction to base64 (following WalletConnect standard)
97
- const serializedTransaction = Buffer.from(
98
- new Uint8Array(transaction.serialize({ verifySignatures: false }))
99
- ).toString('base64');
98
+ // Check if this is a deeplink provider (Phantom/Solflare)
99
+ const isDeeplinkProvider =
100
+ this.connector.type === 'phantom' || this.connector.type === 'solflare';
101
+
102
+ // Serialize transaction based on provider type
103
+ let serializedTransaction: string;
104
+ if (isDeeplinkProvider) {
105
+ // Deeplink providers (Phantom/Solflare) expect base58
106
+ const transactionBytes = new Uint8Array(transaction.serialize({ verifySignatures: false }));
107
+ serializedTransaction = base58.encode(transactionBytes);
108
+ } else {
109
+ // WalletConnect providers expect base64 (following WalletConnect standard)
110
+ serializedTransaction = Buffer.from(
111
+ new Uint8Array(transaction.serialize({ verifySignatures: false }))
112
+ ).toString('base64');
113
+ }
100
114
 
101
115
  const result = (await provider.request(
102
116
  {
@@ -125,7 +139,20 @@ export class SolanaAdapter extends SolanaBaseAdapter {
125
139
 
126
140
  if ('transaction' in result && result.transaction) {
127
141
  // New response format - deserialize the signed transaction
128
- const decodedTransaction = Buffer.from(result.transaction, 'base64');
142
+ let decodedTransaction: Buffer;
143
+
144
+ if (isDeeplinkProvider) {
145
+ // Deeplink providers return base58 encoded transactions
146
+ try {
147
+ const decodedBytes = base58.decode(result.transaction);
148
+ decodedTransaction = Buffer.from(decodedBytes);
149
+ } catch (error) {
150
+ throw new Error('Failed to decode base58 transaction from deeplink provider');
151
+ }
152
+ } else {
153
+ // WalletConnect providers return base64 encoded transactions
154
+ decodedTransaction = Buffer.from(result.transaction, 'base64');
155
+ }
129
156
 
130
157
  if (transaction instanceof VersionedTransaction) {
131
158
  return VersionedTransaction.deserialize(new Uint8Array(decodedTransaction)) as T;
@@ -144,7 +171,7 @@ export class SolanaAdapter extends SolanaBaseAdapter {
144
171
  }
145
172
 
146
173
  async sendTransaction(data: SolanaTransactionData): Promise<string | null> {
147
- const { fromAddress, toAddress, amount, network, rpcUrl } = data;
174
+ const { fromAddress, toAddress, amount, network, rpcUrl, tokenMint } = data;
148
175
 
149
176
  if (!this.connector) {
150
177
  throw new Error('SolanaAdapter:sendTransaction - no active connector');
@@ -184,12 +211,20 @@ export class SolanaAdapter extends SolanaBaseAdapter {
184
211
  // Create connection
185
212
  const connection = new Connection(connectionRpcUrl, 'confirmed');
186
213
 
187
- const transaction = await createSendTransaction({
188
- connection,
189
- fromAddress,
190
- toAddress,
191
- value: amount
192
- });
214
+ const transaction = tokenMint
215
+ ? await createSPLTokenTransaction({
216
+ connection,
217
+ fromAddress,
218
+ toAddress,
219
+ amount,
220
+ tokenMint
221
+ })
222
+ : await createSendTransaction({
223
+ connection,
224
+ fromAddress,
225
+ toAddress,
226
+ amount
227
+ });
193
228
 
194
229
  // Sign the transaction
195
230
  const signedTransaction = await this.signTransaction(transaction, network);
package/src/types.ts CHANGED
@@ -5,6 +5,7 @@ import type {
5
5
  WalletInfo
6
6
  } from '@reown/appkit-common-react-native';
7
7
  import type nacl from 'tweetnacl';
8
+ import type { Connection } from '@solana/web3.js';
8
9
 
9
10
  // --- From helpers ---
10
11
 
@@ -16,6 +17,14 @@ export interface TokenInfo {
16
17
  logoURI?: string;
17
18
  }
18
19
 
20
+ export type SPLTokenTransactionArgs = {
21
+ connection: Connection;
22
+ fromAddress: string;
23
+ toAddress: string;
24
+ amount: number;
25
+ tokenMint: string;
26
+ };
27
+
19
28
  // --- From PhantomProvider ---
20
29
 
21
30
  export type Cluster = 'mainnet-beta' | 'testnet' | 'devnet';
@@ -0,0 +1,155 @@
1
+ import {
2
+ TOKEN_2022_PROGRAM_ID,
3
+ TOKEN_PROGRAM_ID,
4
+ TokenAccountNotFoundError,
5
+ createAssociatedTokenAccountInstruction,
6
+ createTransferCheckedInstruction,
7
+ getAccount,
8
+ getAssociatedTokenAddressSync,
9
+ getMint
10
+ } from '@solana/spl-token';
11
+ import {
12
+ ComputeBudgetProgram,
13
+ Connection,
14
+ PublicKey,
15
+ Transaction,
16
+ type TransactionInstruction
17
+ } from '@solana/web3.js';
18
+ import type { SPLTokenTransactionArgs } from '../types';
19
+
20
+ const SPL_COMPUTE_BUDGET_CONSTANTS = {
21
+ UNIT_PRICE_MICRO_LAMPORTS: 1000000,
22
+ UNIT_LIMIT_TRANSFER_ONLY: 300000,
23
+ UNIT_LIMIT_WITH_ATA_CREATION: 400000
24
+ } as const;
25
+
26
+ async function getMintOwnerProgramId(connection: Connection, mint: PublicKey) {
27
+ const info = await connection.getAccountInfo(mint);
28
+
29
+ if (!info) {
30
+ throw new Error('Mint account not found');
31
+ }
32
+
33
+ if (info.owner.equals(TOKEN_PROGRAM_ID)) {
34
+ return TOKEN_PROGRAM_ID;
35
+ }
36
+
37
+ if (info.owner.equals(TOKEN_2022_PROGRAM_ID)) {
38
+ return TOKEN_2022_PROGRAM_ID;
39
+ }
40
+
41
+ throw new Error('Unknown mint owner program');
42
+ }
43
+
44
+ export async function createSPLTokenTransaction({
45
+ fromAddress,
46
+ toAddress,
47
+ amount,
48
+ tokenMint,
49
+ connection
50
+ }: SPLTokenTransactionArgs): Promise<Transaction> {
51
+ if (!fromAddress) {
52
+ throw new Error('No public key found');
53
+ }
54
+ if (amount <= 0) {
55
+ throw new Error('Amount must be greater than 0');
56
+ }
57
+ try {
58
+ const fromPubkey = new PublicKey(fromAddress);
59
+ const toPubkey = new PublicKey(toAddress);
60
+ const mintPubkey = new PublicKey(tokenMint);
61
+
62
+ const programId = await getMintOwnerProgramId(connection, mintPubkey);
63
+
64
+ const mintInfo = await getMint(connection, mintPubkey, undefined, programId);
65
+ const decimals = mintInfo.decimals;
66
+ if (decimals < 0) {
67
+ throw new Error('Invalid token decimals');
68
+ }
69
+
70
+ const tokenAmount = Math.floor(amount * 10 ** decimals);
71
+
72
+ const fromTokenAccount = getAssociatedTokenAddressSync(
73
+ mintPubkey,
74
+ fromPubkey,
75
+ false,
76
+ programId
77
+ );
78
+ const toTokenAccount = getAssociatedTokenAddressSync(mintPubkey, toPubkey, false, programId);
79
+
80
+ try {
81
+ const fromAccount = await getAccount(connection, fromTokenAccount, undefined, programId);
82
+ if (fromAccount.amount < BigInt(tokenAmount)) {
83
+ throw new Error('Insufficient token balance');
84
+ }
85
+ } catch (error) {
86
+ if (error instanceof TokenAccountNotFoundError) {
87
+ throw new Error('Sender does not have a token account for this mint');
88
+ }
89
+ throw error;
90
+ }
91
+
92
+ let shouldCreateATA = false;
93
+ try {
94
+ await getAccount(connection, toTokenAccount, undefined, programId);
95
+ } catch (error) {
96
+ if (error instanceof TokenAccountNotFoundError) {
97
+ shouldCreateATA = true;
98
+ } else {
99
+ throw error;
100
+ }
101
+ }
102
+
103
+ const instructions: TransactionInstruction[] = [];
104
+
105
+ const computeUnitLimit = shouldCreateATA
106
+ ? SPL_COMPUTE_BUDGET_CONSTANTS.UNIT_LIMIT_WITH_ATA_CREATION
107
+ : SPL_COMPUTE_BUDGET_CONSTANTS.UNIT_LIMIT_TRANSFER_ONLY;
108
+
109
+ instructions.push(
110
+ ComputeBudgetProgram.setComputeUnitPrice({
111
+ microLamports: SPL_COMPUTE_BUDGET_CONSTANTS.UNIT_PRICE_MICRO_LAMPORTS
112
+ }),
113
+ ComputeBudgetProgram.setComputeUnitLimit({ units: computeUnitLimit })
114
+ );
115
+
116
+ if (shouldCreateATA) {
117
+ instructions.push(
118
+ createAssociatedTokenAccountInstruction(
119
+ fromPubkey,
120
+ toTokenAccount,
121
+ toPubkey,
122
+ mintPubkey,
123
+ programId
124
+ )
125
+ );
126
+ }
127
+
128
+ instructions.push(
129
+ createTransferCheckedInstruction(
130
+ fromTokenAccount,
131
+ mintPubkey,
132
+ toTokenAccount,
133
+ fromPubkey,
134
+ tokenAmount,
135
+ decimals,
136
+ [],
137
+ programId
138
+ )
139
+ );
140
+
141
+ const { blockhash, lastValidBlockHeight } = await connection.getLatestBlockhash();
142
+
143
+ return new Transaction({
144
+ feePayer: fromPubkey,
145
+ blockhash,
146
+ lastValidBlockHeight
147
+ }).add(...instructions);
148
+ } catch (error) {
149
+ throw new Error(
150
+ `Failed to create SPL token transaction: ${
151
+ error instanceof Error ? error.message : 'Unknown error'
152
+ }`
153
+ );
154
+ }
155
+ }
@@ -13,7 +13,7 @@ type SendTransactionArgs = {
13
13
  connection: Connection;
14
14
  fromAddress: string;
15
15
  toAddress: string;
16
- value: number;
16
+ amount: number;
17
17
  };
18
18
 
19
19
  /**
@@ -21,19 +21,19 @@ type SendTransactionArgs = {
21
21
  * amount of SOL that can be sent in case of cleaning the account and remove the rent exemption error.
22
22
  */
23
23
  const COMPUTE_BUDGET_CONSTANTS = {
24
- UNIT_PRICE_MICRO_LAMPORTS: 20000000,
24
+ UNIT_PRICE_MICRO_LAMPORTS: 1000000,
25
25
  UNIT_LIMIT: 500
26
26
  };
27
27
 
28
28
  export async function createSendTransaction({
29
29
  fromAddress,
30
30
  toAddress,
31
- value,
31
+ amount,
32
32
  connection
33
33
  }: SendTransactionArgs): Promise<Transaction> {
34
34
  const fromPubkey = new PublicKey(fromAddress);
35
35
  const toPubkey = new PublicKey(toAddress);
36
- const lamports = Math.floor(value * LAMPORTS_PER_SOL);
36
+ const lamports = Math.floor(amount * LAMPORTS_PER_SOL);
37
37
 
38
38
  const { blockhash } = await connection.getLatestBlockhash();
39
39