Skip to content

Commit 8952bb5

Browse files
committed
fix: fallback to StateInit.code for uninit accounts
1 parent 859c40c commit 8952bb5

File tree

4 files changed

+91
-4
lines changed

4 files changed

+91
-4
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ npm install @tact-lang/txtracer-core
2121
## Quick Start
2222

2323
```ts
24-
import { retrace } from "@tact-lang/txtracer-core"
24+
import {retrace} from "@tact-lang/txtracer-core"
2525

2626
// Example: trace a transaction by its hash
2727
const result = await retrace(false, "YOUR_TX_HASH")
@@ -33,7 +33,7 @@ console.log(result)
3333
### Transaction Tracing
3434

3535
```ts
36-
import { retrace } from "@tact-lang/txtracer-core"
36+
import {retrace} from "@tact-lang/txtracer-core"
3737

3838
/**
3939
* @param testnet - true for testnet, false for mainnet

src/runner.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,9 +90,12 @@ export const retrace = async (testnet: boolean, txLink: string): Promise<TraceRe
9090
const shardAccountBeforeTx = await getBlockAccount(testnet, baseTx.address, fullBlock)
9191
const [libs, loadedCode] = await collectUsedLibraries(testnet, shardAccountBeforeTx, tx.tx)
9292

93-
// retrieve code cell if account in active mode
93+
// retrieve code cell if an account in active mode
9494
const state = shardAccountBeforeTx.account?.storage.state
95-
const codeCell = state?.type === "active" ? (state.state.code ?? undefined) : undefined
95+
const codeCell =
96+
state?.type === "active"
97+
? (state.state.code ?? undefined)
98+
: (tx.tx.inMessage?.init?.code ?? undefined)
9699

97100
const {emulatorVersion, emulate} = await prepareEmulator(blockConfig, libs, randSeed)
98101

src/test/__snapshots__/test.spec.ts.snap

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,41 @@ exports[`transactions should return correct information for simple transaction w
3535
}
3636
`;
3737

38+
exports[`transactions should return correct information for transaction 1`] = `"b5ee9c724101010100730000e2ff00208e683001d072d721d200d200fa4021103450666f04f86102f862ed44d0d3ff013102915be0d70d1ff2e082018210988d4037ba8e308308d718666c12f90102f9108e21f84270830670136d5520c8cf8580ca00cf8440ce01fa02806acf40f400c901fb00dee05bf2c082e1f2c80ba1dd8d9d"`;
39+
40+
exports[`transactions should return correct information for transaction 2`] = `"b5ee9c724101010100730000e2ff00208e683001d072d721d200d200fa4021103450666f04f86102f862ed44d0d3ff013102915be0d70d1ff2e082018210988d4037ba8e308308d718666c12f90102f9108e21f84270830670136d5520c8cf8580ca00cf8440ce01fa02806acf40f400c901fb00dee05bf2c082e1f2c80ba1dd8d9d"`;
41+
42+
exports[`transactions should return correct information for transaction 3`] = `"EQBAmIBdInKmGzdTUMay9fqq8nyCZ9jnUh_yBFEE_cfedniG"`;
43+
44+
exports[`transactions should return correct information for transaction 4`] = `"EQBQP4J1fVdzKVP9LBOoFQGPhE0OZe764tPvMoaNfY8Kn2jh"`;
45+
46+
exports[`transactions should return correct information for transaction 5`] = `100000000n`;
47+
48+
exports[`transactions should return correct information for transaction 6`] = `56244582000003n`;
49+
50+
exports[`transactions should return correct information for transaction 7`] = `1745087734`;
51+
52+
exports[`transactions should return correct information for transaction 8`] = `
53+
{
54+
"exitCode": 130,
55+
"gasFees": 428800n,
56+
"gasUsed": 1072n,
57+
"success": false,
58+
"vmSteps": 36,
59+
}
60+
`;
61+
62+
exports[`transactions should return correct information for transaction 9`] = `undefined`;
63+
64+
exports[`transactions should return correct information for transaction 10`] = `
65+
{
66+
"balanceAfter": 0n,
67+
"balanceBefore": 0n,
68+
"sentTotal": 99171200n,
69+
"totalFees": 562131n,
70+
}
71+
`;
72+
3873
exports[`transactions should return correct information for transaction for code with several exotic library cells 1`] = `"b5ee9c7241022601000b59000114ff00f4a413f4bcf2c80b0102016202250202c9030f02f7dbb68bb7ec831c03cb418087434c0dc009c6c260c5fc0a00835c85677be903e900c7e800c5c75c87e800c7e800c1cea6d0000f4c7f4cfc412040dc415914110c4dbc27e187e105bc4373e105bc45c007e910c006ebcb8157b51343e90007e18be90007e18fe80007e193e80007e19747e105bc47e10f1c178c03e106040703baf8416f17f8416f13821050c6a654ba8fc4fa00fa00fa00fa00d200fa40f404d531fa40fa4030f8445009a0f864f8455007a0f865029d23c200f844c200f845c200b0b09b23c200f844f845a0c200b0e2e30fdb3c7f923070e292db31e005060d00ca70f843f842f844f84548164014507a1319c85006cf1601cf165004cf16c9821006ecd527f8416f1401c8cb1fcb3f5006fa025004fa025005cf165004fa0201fa0212f400ccc98100a0718018c8cb055004cf165004fa0212cb6accc901fb0070f86470f86500885f0582080f4240f8416f15f82ca0f8416f16a101b60970fb0270018100828210d53276db59f8416f14708010c8cb055004cf165005fa0212cb6a12cb1f12cb3fc901fb0003be6f11f842c7058f56f8416f17f8416f138210132b9a2cba8ebff8416f1382100ff8bfc6bae30230f8416f13821029d22935ba8e2282080f424070fb0270f8428306708018c8cb055003cf165003fa02cb6ac901fb007fe070e30d92db31e0de080b0e01fef8416f16f8416f12aa0182080f4240a08208989680a08208989680a082099bfcc0a082080f4240a08209312d00a0bcf2e053fa00fa00fa00fa00fa40f404d5fa40fa40d102d1237001fa443001ba217001fa443001bab0227001fa443001bab0f2e056279437f84407df269436f84506df25c20028c20028c200b0b0f2e051090198f84428a1f864f84527a1f865f844c2fff845c2ffb0f2e050f844f845a0c2008e1782080f4240f8416f15f82ca0f8416f16a101b60970fb02de70f843f8416f1108107a1069105904103a49a00a01a4c85006cf1601cf165004cf16c9821006ecd527f8416f1401c8cb1fcb3f5006fa025004fa025005cf165004fa0201fa0212f400ccc9128100a0718018c8cb055004cf165004fa0212cb6accc901fb00db3c7f0d01c0f404f404d1f844c200f845c200b1f2e050f8416f16f8416f12a7078208989680a08208989680a08208e4e1c0a08208989680a08208f42400a08208989680a08210042c1d80a08208989680a08210042c1d80a0bcf2e05370f843f844f84555130c018882100f98e2b8f8416f1401c8cb1fcb3f5004fa0258fa02f8416f11cf16f400f400c98100a0718018c8cb055004cf165004fa0212cb6accc901fb0070f86470f865db3c7f0d0028c8f842cf16f843cf16f844fa02f845fa02c9ed5400e2f8416f13821024cfc100ba8e5c82080f4240f8416f15f82ca0f8416f16a101b60970fb0270f8416f11f842f843f844f845821024cfc100f8416f1401c8cb1fcb3f5004cf1658cf1601fa0201fa02c9810082718018c8cb055004cf165004fa0212cb6accc901fb007f9170e2dc840ff2f0020148101a0145a610411806f05b59d3b200005cc708c11806f05b59d3b20000290154c2782651f187401101fe702182b05803bcc5cb9634ba4cfb2213f784019318ed4dcb6017880faa35be8e23308288195e54c5dd42177f53a27172fa9ec630262827aa23a904821b782dace9d9aa18de2182708bcc0026baae9e45e470190267a230cfaa18be8e1c0182501425982cf597cd205cef7380a90401821b782dace9d9aa17a0dea76401a7641201f2208261855144814a7ff805980ff0084000be8e2a8238056bc75e2d631000008261855144814a7ff805980ff0084000a98401822056bc75e2d631aa18a001de20824adf0ab5a80a22c61ab5a700be8e278238056bc75e2d63100000824adf0ab5a80a22c61ab5a700a98401822056bc75e2d631aa17a001de201302f882403f1fce3da636ea5cf850be8e268238056bc75e2d6310000082403f1fce3da636ea5cf850a98401822056bc75e2d631aa16a001de20823927fa27722cc06cc5e2be8e268238056bc75e2d63100000823927fa27722cc06cc5e2a98401823815af1d78b58c400000a001de208238280e60114edb805d03bee300201415004c8238056bc75e2d631000008238280e60114edb805d03a9840182380ad78ebc5ac6200000a00102f482380ebc5fb41746121110be8e268238056bc75e2d6310000082380ebc5fb41746121110a984018238056bc75e2d63100000a001de20823808f00f760a4b2db55dbe8e258238056bc75e2d63100000823808f00f760a4b2db55da984018232b5e3af16b1880000a001de20823806f5f1775788937937bee300201617004a8238056bc75e2d63100000823806f5f1775788937937a9840182315af1d78b58c40000a00101ec823806248f33704b286603be8e258238056bc75e2d63100000823806248f33704b286603a984018230ad78ebc5ac620000a001de20823805c548670b9510e7acbe8e258238056bc75e2d63100000823805c548670b9510e7aca98401823056bc75e2d6310000a001de208238056bc75e2d63100000a11801fe8238056bc75e2d631000005122a012a98453008238056bc75e2d63100000a9845c8238056bc75e2d63100000a9842073a90413a051218238056bc75e2d63100000a9842075a90413a051218238056bc75e2d63100000a9842077a90413a051218238056bc75e2d63100000a9842079a90413a0598238056bc75e2d6310000019001ca984800ba904a0aa00a08064a9040137a410411806f05b59d3b200005d4d98411812dca375e059b0b9f187401b02fc8200c354218235c702bd3a30fc0000be228238070c1cc73b00c80000bbb0f2f420c1008e1282300de0b6b3a76400005202a3f05812a984e020821b782dace9d9aa18be8e2820821b782dace9d9aa17be8e18821b782dace9d9aa17a182501425982cf597cd205cef73809171e2e30d01a7648238056bc75e2d63100000211c1d0042821b782dace9d9aa18a18288195e54c5dd42177f53a27172fa9ec630262827aa2303fc822056bc75e2d631aa18be8e1c30822056bc75e2d631aa18a18261855144814a7ff805980ff0084000de21822056bc75e2d631aa17be8e2701822056bc75e2d631aa17a101824adf0ab5a80a22c61ab5a7008238056bc75e2d63100000a984de21822056bc75e2d631aa16bee30021823815af1d78b58c400000bee300211e1f20004c01822056bc75e2d631aa16a10182403f1fce3da636ea5cf8508238056bc75e2d63100000a984004c01823815af1d78b58c400000a101823927fa27722cc06cc5e28238056bc75e2d63100000a98402f482380ad78ebc5ac6200000be8e260182380ad78ebc5ac6200000a1018238280e60114edb805d038238056bc75e2d63100000a984de218238056bc75e2d63100000be8e26018238056bc75e2d63100000a10182380ebc5fb417461211108238056bc75e2d63100000a984de218232b5e3af16b1880000bee300212122004a018232b5e3af16b1880000a101823808f00f760a4b2db55d8238056bc75e2d63100000a98401ec82315af1d78b58c40000be8e250182315af1d78b58c40000a101823806f5f17757889379378238056bc75e2d63100000a984de218238056bc75e2d6310000021a0511382380ad78ebc5ac6200000a98466a0511382381043561a8829300000a98466a05113823815af1d78b58c400000a98466a051132301ea82381b1ae4d6e2ef500000a98466a0511382382086ac351052600000a98466a05113823825f273933db5700000a98466a05113822056bc75e2d631aa16a98466a05113823830ca024f987b900000a98466a0511382383635c9adc5dea00000a98466a0511382383ba1910bf341b00000a98466a0032400428238410d586a20a4c00000a98412a08238056bc75e2d63100000a984018064a9840045a1ba6dda89a1f48003f0c5f48003f0c7f40003f0c9f40003f0cba3f085f087f089f08b626196e6"`;
3974

4075
exports[`transactions should return correct information for transaction for code with several exotic library cells 2`] = `"b5ee9c7241010101002300084202c95a2ed22ab516f77f9d4898dc4578e72f18a2448e8f6832334b0b4bf501bc794eb848f4"`;
@@ -126,6 +161,41 @@ exports[`transactions should return correct information for transaction for code
126161
}
127162
`;
128163

164+
exports[`transactions should return correct information for transaction for uninit transaction with StateInit code 1`] = `"b5ee9c724101010100730000e2ff00208e683001d072d721d200d200fa4021103450666f04f86102f862ed44d0d3ff013102915be0d70d1ff2e082018210988d4037ba8e308308d718666c12f90102f9108e21f84270830670136d5520c8cf8580ca00cf8440ce01fa02806acf40f400c901fb00dee05bf2c082e1f2c80ba1dd8d9d"`;
165+
166+
exports[`transactions should return correct information for transaction for uninit transaction with StateInit code 2`] = `"b5ee9c724101010100730000e2ff00208e683001d072d721d200d200fa4021103450666f04f86102f862ed44d0d3ff013102915be0d70d1ff2e082018210988d4037ba8e308308d718666c12f90102f9108e21f84270830670136d5520c8cf8580ca00cf8440ce01fa02806acf40f400c901fb00dee05bf2c082e1f2c80ba1dd8d9d"`;
167+
168+
exports[`transactions should return correct information for transaction for uninit transaction with StateInit code 3`] = `"EQBAmIBdInKmGzdTUMay9fqq8nyCZ9jnUh_yBFEE_cfedniG"`;
169+
170+
exports[`transactions should return correct information for transaction for uninit transaction with StateInit code 4`] = `"EQBQP4J1fVdzKVP9LBOoFQGPhE0OZe764tPvMoaNfY8Kn2jh"`;
171+
172+
exports[`transactions should return correct information for transaction for uninit transaction with StateInit code 5`] = `100000000n`;
173+
174+
exports[`transactions should return correct information for transaction for uninit transaction with StateInit code 6`] = `56244582000003n`;
175+
176+
exports[`transactions should return correct information for transaction for uninit transaction with StateInit code 7`] = `1745087734`;
177+
178+
exports[`transactions should return correct information for transaction for uninit transaction with StateInit code 8`] = `
179+
{
180+
"exitCode": 130,
181+
"gasFees": 428800n,
182+
"gasUsed": 1072n,
183+
"success": false,
184+
"vmSteps": 36,
185+
}
186+
`;
187+
188+
exports[`transactions should return correct information for transaction for uninit transaction with StateInit code 9`] = `undefined`;
189+
190+
exports[`transactions should return correct information for transaction for uninit transaction with StateInit code 10`] = `
191+
{
192+
"balanceAfter": 0n,
193+
"balanceBefore": 0n,
194+
"sentTotal": 99171200n,
195+
"totalFees": 562131n,
196+
}
197+
`;
198+
129199
exports[`transactions should return correct information for transaction with external-in message for wallet v4 1`] = `"b5ee9c72410214010002d4000114ff00f4a413f4bcf2c80b01020120020f020148030602e6d001d0d3032171b0925f04e022d749c120925f04e002d31f218210706c7567bd22821064737472bdb0925f05e003fa403020fa4401c8ca07cbffc9d0ed44d0810140d721f404305c810108f40a6fa131b3925f07e005d33fc8258210706c7567ba923830e30d03821064737472ba925f06e30d0405007801fa00f40430f8276f2230500aa121bef2e0508210706c7567831eb17080185004cb0526cf1658fa0219f400cb6917cb1f5260cb3f20c98040fb0006008a5004810108f45930ed44d0810140d720c801cf16f400c9ed540172b08e23821064737472831eb17080185005cb055003cf1623fa0213cb6acb1fcb3fc98040fb00925f03e2020120070e020120080d020158090a003db29dfb513420405035c87d010c00b23281f2fff274006040423d029be84c600201200b0c0019adce76a26840206b90eb85ffc00019af1df6a26840106b90eb858fc00011b8c97ed44d0d70b1f80059bd242b6f6a2684080a06b90fa0218470d4080847a4937d29910ce6903e9ff9837812801b7810148987159f318404f8f28308d71820d31fd31fd31f02f823bbf264ed44d0d31fd31fd3fff404d15143baf2a15151baf2a205f901541064f910f2a3f80024a4c8cb1f5240cb1f5230cbff5210f400c9ed54f80f01d30721c0009f6c519320d74a96d307d402fb00e830e021c001e30021c002e30001c0039130e30d03a4c8cb1f12cb1fcbff10111213006ed207fa00d4d422f90005c8ca0715cbffc9d077748018c8cb05cb0222cf165005fa0214cb6b12ccccc973fb00c84014810108f451f2a7020070810108d718fa00d33fc8542047810108f451f2a782106e6f746570748018c8cb05cb025006cf165004fa0214cb6a12cb1fcb3fc973fb0002006c810108d718fa00d33f305224810108f459f2a782106473747270748018c8cb05cb025005cf165003fa0213cb6acb1f12cb3fc973fb00000af400c9ed5408f8e528"`;
130200

131201
exports[`transactions should return correct information for transaction with external-in message for wallet v4 2`] = `"b5ee9c72410214010002d4000114ff00f4a413f4bcf2c80b01020120020f020148030602e6d001d0d3032171b0925f04e022d749c120925f04e002d31f218210706c7567bd22821064737472bdb0925f05e003fa403020fa4401c8ca07cbffc9d0ed44d0810140d721f404305c810108f40a6fa131b3925f07e005d33fc8258210706c7567ba923830e30d03821064737472ba925f06e30d0405007801fa00f40430f8276f2230500aa121bef2e0508210706c7567831eb17080185004cb0526cf1658fa0219f400cb6917cb1f5260cb3f20c98040fb0006008a5004810108f45930ed44d0810140d720c801cf16f400c9ed540172b08e23821064737472831eb17080185005cb055003cf1623fa0213cb6acb1fcb3fc98040fb00925f03e2020120070e020120080d020158090a003db29dfb513420405035c87d010c00b23281f2fff274006040423d029be84c600201200b0c0019adce76a26840206b90eb85ffc00019af1df6a26840106b90eb858fc00011b8c97ed44d0d70b1f80059bd242b6f6a2684080a06b90fa0218470d4080847a4937d29910ce6903e9ff9837812801b7810148987159f318404f8f28308d71820d31fd31fd31f02f823bbf264ed44d0d31fd31fd3fff404d15143baf2a15151baf2a205f901541064f910f2a3f80024a4c8cb1f5240cb1f5230cbff5210f400c9ed54f80f01d30721c0009f6c519320d74a96d307d402fb00e830e021c001e30021c002e30001c0039130e30d03a4c8cb1f12cb1fcbff10111213006ed207fa00d4d422f90005c8ca0715cbffc9d077748018c8cb05cb0222cf165005fa0214cb6b12ccccc973fb00c84014810108f451f2a7020070810108d718fa00d33fc8542047810108f451f2a782106e6f746570748018c8cb05cb025006cf165004fa0214cb6a12cb1fcb3fc973fb0002006c810108d718fa00d33f305224810108f459f2a782106473747270748018c8cb05cb025005cf165003fa0213cb6acb1f12cb3fc973fb00000af400c9ed5408f8e528"`;

src/test/test.spec.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,20 @@ describe("transactions", () => {
8888
DEFAULT_TIMEOUT,
8989
)
9090

91+
it(
92+
"should return correct information for transaction for uninit transaction with StateInit code",
93+
async () => {
94+
await wait()
95+
96+
const txLink = "5abe43cce74d536cdae76b989e55f7b37c61381308b8f1a4b8ecc3098c4b8b39"
97+
const testnet = false
98+
99+
const res = await retrace(testnet, txLink)
100+
checkResult(res)
101+
},
102+
DEFAULT_TIMEOUT,
103+
)
104+
91105
function checkResult(res: TraceResult, expectedOk: boolean = true): void {
92106
expect(res.stateUpdateHashOk).toEqual(expectedOk)
93107
expect(res.codeCell?.toBoc().toString("hex")).toMatchSnapshot()

0 commit comments

Comments
 (0)