@tonappchain/sdk 0.7.2-payload-builder-0.1 → 0.7.2-payload-builder-0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/dist/artifacts/testnet/ton/internal/build/CrossChainLayer.compiled.json +1 -1
  2. package/dist/artifacts/testnet/ton/internal/build/Executor.compiled.json +1 -1
  3. package/dist/artifacts/testnet/ton/internal/build/JettonMinter.compiled.json +1 -1
  4. package/dist/artifacts/testnet/ton/internal/build/JettonProxy.compiled.json +1 -1
  5. package/dist/artifacts/testnet/ton/internal/build/JettonWallet.compiled.json +1 -1
  6. package/dist/artifacts/testnet/ton/internal/build/NFTItem.compiled.json +1 -1
  7. package/dist/artifacts/testnet/ton/internal/build/NFTProxy.compiled.json +1 -1
  8. package/dist/artifacts/testnet/ton/internal/wrappers/CrossChainLayer.d.ts +13 -1
  9. package/dist/artifacts/testnet/ton/internal/wrappers/CrossChainLayer.js +45 -7
  10. package/dist/artifacts/testnet/ton/internal/wrappers/JettonMinter.d.ts +2 -2
  11. package/dist/artifacts/testnet/ton/internal/wrappers/JettonMinter.js +2 -2
  12. package/dist/src/adapters/contractOpener.d.ts +4 -0
  13. package/dist/src/adapters/contractOpener.js +165 -1
  14. package/dist/src/adapters/retryableContractOpener.d.ts +5 -1
  15. package/dist/src/adapters/retryableContractOpener.js +22 -4
  16. package/dist/src/index.d.ts +0 -1
  17. package/dist/src/index.js +1 -4
  18. package/dist/src/interfaces/ContractOpener.d.ts +5 -1
  19. package/dist/src/interfaces/ITxFinalizer.d.ts +5 -0
  20. package/dist/src/interfaces/ITxFinalizer.js +2 -0
  21. package/dist/src/interfaces/WalletInstanse.d.ts +4 -8
  22. package/dist/src/sdk/StartTracking.d.ts +5 -3
  23. package/dist/src/sdk/StartTracking.js +60 -40
  24. package/dist/src/sdk/TONTransactionManager.d.ts +3 -1
  25. package/dist/src/sdk/TONTransactionManager.js +16 -3
  26. package/dist/src/sdk/TacSdk.js +3 -1
  27. package/dist/src/sdk/TxFinalizer.d.ts +15 -4
  28. package/dist/src/sdk/TxFinalizer.js +102 -23
  29. package/dist/src/sdk/Utils.d.ts +6 -1
  30. package/dist/src/sdk/Utils.js +37 -0
  31. package/dist/src/sender/BatchSender.js +19 -0
  32. package/dist/src/sender/RawSender.js +34 -1
  33. package/dist/src/sender/SenderFactory.js +1 -1
  34. package/dist/src/sender/TonConnectSender.js +2 -0
  35. package/dist/src/structs/InternalStruct.d.ts +19 -1
  36. package/dist/src/structs/Struct.d.ts +13 -1
  37. package/dist/src/wrappers/HighloadWalletV3.d.ts +5 -3
  38. package/dist/src/wrappers/HighloadWalletV3.js +14 -3
  39. package/package.json +2 -3
@@ -34,7 +34,16 @@ class RawSender {
34
34
  for (const batch of batches) {
35
35
  try {
36
36
  const result = await this.sendBatch(batch, contractOpener);
37
+ // Extract BoC if it's a string, or from sandbox result
38
+ let externalMsgBoc = '';
39
+ if (typeof result === 'string') {
40
+ externalMsgBoc = result;
41
+ }
42
+ else if (result?.result) {
43
+ externalMsgBoc = result.result;
44
+ }
37
45
  results.push({
46
+ boc: externalMsgBoc,
38
47
  success: true,
39
48
  result,
40
49
  lastMessageIndex: currentMessageIndex + batch.length - 1,
@@ -42,6 +51,7 @@ class RawSender {
42
51
  }
43
52
  catch (error) {
44
53
  results.push({
54
+ boc: '',
45
55
  success: false,
46
56
  error: error,
47
57
  lastMessageIndex: currentMessageIndex - 1,
@@ -63,12 +73,26 @@ class RawSender {
63
73
  async sendBatch(messages, contractOpener) {
64
74
  const walletContract = contractOpener.open(this.wallet);
65
75
  const seqno = await walletContract.getSeqno();
66
- return walletContract.sendTransfer({
76
+ // Try to create BoC locally for standard wallets
77
+ const msg = this.wallet.createTransfer({
67
78
  seqno,
68
79
  secretKey: this.secretKey,
69
80
  messages,
70
81
  sendMode: ton_2.SendMode.PAY_GAS_SEPARATELY,
71
82
  });
83
+ let neededInit = null;
84
+ if (this.wallet.init && (await contractOpener.getContractState(this.wallet.address)).state !== 'active') {
85
+ neededInit = this.wallet.init;
86
+ }
87
+ const ext = (0, ton_1.external)({
88
+ to: this.wallet.address,
89
+ init: neededInit,
90
+ body: msg,
91
+ });
92
+ const boc = (0, ton_1.beginCell)().store((0, ton_1.storeMessage)(ext)).endCell().toBoc().toString('base64');
93
+ // Send the transaction
94
+ const result = await walletContract.send(msg);
95
+ return boc || result;
72
96
  }
73
97
  getSenderAddress() {
74
98
  return this.wallet.address.toString();
@@ -84,7 +108,16 @@ class RawSender {
84
108
  }));
85
109
  }
86
110
  const result = await this.sendBatch(messages, contractOpener);
111
+ // Extract BoC if it's a string, or from sandbox result
112
+ let externalMsgBoc = '';
113
+ if (typeof result === 'string') {
114
+ externalMsgBoc = result;
115
+ }
116
+ else if (result?.result) {
117
+ externalMsgBoc = result.result;
118
+ }
87
119
  return {
120
+ boc: externalMsgBoc,
88
121
  success: true,
89
122
  result,
90
123
  lastMessageIndex: shardTransaction.messages.length - 1,
@@ -51,7 +51,7 @@ class SenderFactory {
51
51
  config.timeout = params.options?.highloadV3?.timeout ?? HighloadWalletV3_1.DEFAULT_TIMEOUT;
52
52
  }
53
53
  const wallet = exports.wallets[params.version].create(config);
54
- if (params.version === 'HIGHLOAD_V3') {
54
+ if (wallet instanceof HighloadWalletV3_1.HighloadWalletV3) {
55
55
  return new BatchSender_1.BatchSender(wallet, keypair.secretKey);
56
56
  }
57
57
  return new RawSender_1.RawSender(wallet, keypair.secretKey, params.version === 'V5R1' ? 254 : 4);
@@ -35,6 +35,7 @@ class TonConnectSender {
35
35
  responses.push({
36
36
  success: true,
37
37
  result: response,
38
+ boc: response.boc,
38
39
  lastMessageIndex: currentMessageIndex + chunk.length - 1,
39
40
  });
40
41
  currentMessageIndex += chunk.length;
@@ -42,6 +43,7 @@ class TonConnectSender {
42
43
  catch (error) {
43
44
  responses.push({
44
45
  success: false,
46
+ boc: '',
45
47
  error: error,
46
48
  lastMessageIndex: currentMessageIndex - 1,
47
49
  });
@@ -1,4 +1,4 @@
1
- import { Cell } from '@ton/ton';
1
+ import { Address, Cell } from '@ton/ton';
2
2
  import { AbstractProvider, ethers } from 'ethers';
3
3
  import { ICrossChainLayer, ISAFactory, ISettings, ITokenUtils } from '../../artifacts/tacTypes';
4
4
  import { ContractOpener } from '../interfaces';
@@ -64,6 +64,7 @@ export type OperationIdWithLogIndex = {
64
64
  export type OperationIdWithLogIndexResponse = ResponseBase<OperationIdWithLogIndex>;
65
65
  export interface SendResult {
66
66
  success: boolean;
67
+ boc: string;
67
68
  result?: unknown;
68
69
  error?: Error;
69
70
  lastMessageIndex?: number;
@@ -91,6 +92,7 @@ export type ToncenterTransaction = {
91
92
  }[];
92
93
  };
93
94
  export type TransactionDepth = {
95
+ address?: Address;
94
96
  hash: string;
95
97
  depth: number;
96
98
  };
@@ -117,3 +119,19 @@ export type ConvertedCurrencyRawResult = {
117
119
  tacPrice: USDPriceInfoRaw;
118
120
  tonPrice: USDPriceInfoRaw;
119
121
  };
122
+ export type GetTransactionsOptions = {
123
+ limit: number;
124
+ lt?: string;
125
+ hash?: string;
126
+ to_lt?: string;
127
+ inclusive?: boolean;
128
+ archival?: boolean;
129
+ timeoutMs?: number;
130
+ retryDelayMs?: number;
131
+ };
132
+ export type AddressInformation = {
133
+ lastTransaction: {
134
+ lt: string;
135
+ hash: string;
136
+ };
137
+ };
@@ -4,6 +4,8 @@ import { AbstractProvider } from 'ethers';
4
4
  import { JettonMinter, JettonMinterData } from '../../artifacts/tonTypes';
5
5
  import type { FT, NFT } from '../assets';
6
6
  import type { Asset, ContractOpener, ILogger } from '../interfaces';
7
+ import { ITxFinalizer } from '../interfaces/ITxFinalizer';
8
+ import { SendResult } from './InternalStruct';
7
9
  export type ContractState = {
8
10
  balance: bigint;
9
11
  state: 'active' | 'uninitialized' | 'frozen';
@@ -59,6 +61,10 @@ export type TONParams = {
59
61
  * Address of TON settings contract. Use only for tests.
60
62
  */
61
63
  settingsAddress?: string;
64
+ /**
65
+ * TxFinalizer for tracking transaction tree
66
+ */
67
+ txFinalizer?: ITxFinalizer;
62
68
  };
63
69
  export type SDKParams = {
64
70
  /**
@@ -110,7 +116,7 @@ export type TransactionLinker = {
110
116
  shardCount: number;
111
117
  shardsKey: string;
112
118
  timestamp: number;
113
- sendTransactionResult?: unknown;
119
+ sendTransactionResult?: SendResult;
114
120
  };
115
121
  export type TransactionLinkerWithOperationId = TransactionLinker & {
116
122
  operationId?: string;
@@ -367,6 +373,11 @@ export interface WaitOptions<T = unknown, TContext = unknown> {
367
373
  * Receives both the result and optional context with additional parameters
368
374
  */
369
375
  onSuccess?: (result: T, context?: TContext) => Promise<void> | void;
376
+ /**
377
+ * Ensure that TON transaction is succesful
378
+ * @default true
379
+ */
380
+ ensureTxExecuted?: boolean;
370
381
  }
371
382
  export declare const defaultWaitOptions: WaitOptions;
372
383
  export declare enum Origin {
@@ -423,4 +434,5 @@ export type CrossChainPayloadResult = {
423
434
  destinationAddress: string;
424
435
  tonAmount: bigint;
425
436
  networkFee: bigint;
437
+ transactionLinker: TransactionLinker;
426
438
  };
@@ -25,6 +25,8 @@ export declare class HighloadWalletV3 implements WalletInstanse {
25
25
  data: Cell;
26
26
  } | undefined);
27
27
  getSeqno(): Promise<number>;
28
+ send(provider: ContractProvider, msg: Cell): Promise<void>;
29
+ createTransfer(): Cell;
28
30
  sendTransfer(provider: ContractProvider, args: {
29
31
  seqno?: number;
30
32
  secretKey: Buffer;
@@ -33,7 +35,7 @@ export declare class HighloadWalletV3 implements WalletInstanse {
33
35
  timeout?: number;
34
36
  subwalletId?: number;
35
37
  createdAt?: number;
36
- }): Promise<void>;
38
+ }): Promise<string>;
37
39
  static create(config: HighloadWalletV3Config, code?: Cell, workchain?: number): HighloadWalletV3;
38
40
  static generateCreatedAt(): number;
39
41
  sendExternalMessage(provider: ContractProvider, secretKey: Buffer, opts: {
@@ -43,8 +45,8 @@ export declare class HighloadWalletV3 implements WalletInstanse {
43
45
  createdAt: number;
44
46
  subwalletId: number;
45
47
  timeout: number;
46
- }): Promise<void>;
47
- sendBatch(provider: ContractProvider, secretKey: Buffer, messages: OutActionSendMsg[], subwallet: number, timeout: number, createdAt?: number, value?: bigint): Promise<void>;
48
+ }): Promise<string>;
49
+ sendBatch(provider: ContractProvider, secretKey: Buffer, messages: OutActionSendMsg[], subwallet: number, timeout: number, createdAt?: number, value?: bigint): Promise<string>;
48
50
  getQueryIdFromCreatedAt(createdAt: number): HighloadQueryId;
49
51
  getExternalMessage(messages: MessageRelaxed[], sendMode: SendMode, value: bigint, queryId: HighloadQueryId): MessageRelaxed;
50
52
  static createInternalTransferBody(opts: {
@@ -30,9 +30,15 @@ class HighloadWalletV3 {
30
30
  async getSeqno() {
31
31
  return 0; // will not be used
32
32
  }
33
+ async send(provider, msg) {
34
+ await provider.external(msg);
35
+ }
36
+ createTransfer() {
37
+ throw new Error('Not implemented. Use sendTransfer instead - it returns the BOC as a string');
38
+ }
33
39
  async sendTransfer(provider, args) {
34
40
  if (!args.messages.length) {
35
- return;
41
+ return '';
36
42
  }
37
43
  const state = await provider.getState();
38
44
  const isActive = state.state.type === 'active';
@@ -43,7 +49,7 @@ class HighloadWalletV3 {
43
49
  mode: args.sendMode,
44
50
  outMsg: msg,
45
51
  }));
46
- await this.sendBatch(provider, args.secretKey, actions, subwalletId, timeout, args.createdAt);
52
+ return await this.sendBatch(provider, args.secretKey, actions, subwalletId, timeout, args.createdAt);
47
53
  }
48
54
  static create(config, code = HIGHLOAD_V3_CODE, workchain = 0) {
49
55
  const data = highloadWalletV3ConfigToCell(config);
@@ -72,7 +78,12 @@ class HighloadWalletV3 {
72
78
  .storeUint(opts.createdAt, exports.TIMESTAMP_SIZE)
73
79
  .storeUint(opts.timeout, exports.TIMEOUT_SIZE)
74
80
  .endCell();
75
- await provider.external((0, ton_1.beginCell)().storeBuffer((0, ton_crypto_1.sign)(messageInner.hash(), secretKey)).storeRef(messageInner).endCell());
81
+ const externalMessage = (0, ton_1.beginCell)()
82
+ .storeBuffer((0, ton_crypto_1.sign)(messageInner.hash(), secretKey))
83
+ .storeRef(messageInner)
84
+ .endCell();
85
+ await provider.external(externalMessage);
86
+ return externalMessage.toBoc().toString('base64');
76
87
  }
77
88
  async sendBatch(provider, secretKey, messages, subwallet, timeout, createdAt, value = 0n) {
78
89
  if (createdAt == undefined) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tonappchain/sdk",
3
- "version": "0.7.2-payload-builder-0.1",
3
+ "version": "0.7.2-payload-builder-0.3",
4
4
  "repository": "https://github.com/TacBuild/tac-sdk.git",
5
5
  "author": "TAC. <developers@tac>",
6
6
  "license": "MIT",
@@ -69,11 +69,10 @@
69
69
  "dependencies": {
70
70
  "@aws-crypto/sha256-js": "^5.2.0",
71
71
  "@orbs-network/ton-access": "^2.3.3",
72
- "@ton/ton": "15.1.0",
72
+ "@ton/ton": "^16.1.0",
73
73
  "@tonappchain/ton-lite-client": "3.0.6",
74
74
  "@tonconnect/ui": "^2.0.11",
75
75
  "bn.js": "^5.2.1",
76
- "cli-table3": "^0.6.5",
77
76
  "dotenv": "^16.4.7",
78
77
  "ethers": "^6.13.5",
79
78
  "ton-crypto": "^3.2.0"