From e3cf5623088f1ee5cba9dea0e6782d6c345951d1 Mon Sep 17 00:00:00 2001 From: Alexander Hasselbach Date: Wed, 18 Feb 2026 21:14:24 +0300 Subject: [PATCH 1/2] vmstack: ensure consistent ordering of internal slice (last element - top of the stack) --- abi/get_methods.go | 474 ++++++++++++++-------------- abi/parser/generator.go | 7 +- contract/dns/dns.go | 10 +- examples/tvm/main.go | 6 +- liteapi/client.go | 2 +- liteapi/dns.go | 11 +- liteapi/jetton.go | 34 +- liteapi/wallet.go | 4 +- tlb/stack.go | 117 ++++++- tlb/stack_test.go | 2 +- tlb/tuples_test.go | 6 +- tvm/precompiled/jettons.go | 134 ++++---- tvm/precompiled/mining.go | 26 +- tvm/precompiled/nft.go | 54 ++-- tvm/precompiled/precompiled_test.go | 18 +- tvm/precompiled/wallets.go | 90 ++---- 16 files changed, 525 insertions(+), 470 deletions(-) diff --git a/abi/get_methods.go b/abi/get_methods.go index 7e97a574..6311d0dc 100644 --- a/abi/get_methods.go +++ b/abi/get_methods.go @@ -669,7 +669,7 @@ func Dnsresolve(ctx context.Context, executor Executor, reqAccountID ton.Account } func DecodeDnsresolve_RecordsResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 2 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkCell") { + if stack.Len() != 2 || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkCell") { return "", nil, fmt.Errorf("invalid stack format") } var result Dnsresolve_RecordsResult @@ -713,7 +713,7 @@ func EstimateLiquidityDepositAmount(ctx context.Context, executor Executor, reqA } func DecodeEstimateLiquidityDepositAmount_CoffeeResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 4 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") || (stack[3].SumType != "VmStkTinyInt" && stack[3].SumType != "VmStkInt") { + if stack.Len() != 4 || (stack.Peek(3).SumType != "VmStkTinyInt" && stack.Peek(3).SumType != "VmStkInt") || (stack.Peek(2).SumType != "VmStkTinyInt" && stack.Peek(2).SumType != "VmStkInt") || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result EstimateLiquidityDepositAmount_CoffeeResult @@ -753,7 +753,7 @@ func EstimateLiquidityWithdrawAmount(ctx context.Context, executor Executor, req } func DecodeEstimateLiquidityWithdrawAmount_CoffeeResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 2 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") { + if stack.Len() != 2 || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result EstimateLiquidityWithdrawAmount_CoffeeResult @@ -798,7 +798,7 @@ func EstimateSwapAmount(ctx context.Context, executor Executor, reqAccountID ton } func DecodeEstimateSwapAmount_CoffeeResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 2 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") { + if stack.Len() != 2 || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result EstimateSwapAmount_CoffeeResult @@ -844,7 +844,7 @@ func EstimateSwapOut(ctx context.Context, executor Executor, reqAccountID ton.Ac } func DecodeEstimateSwapOut_DedustResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 3 || (stack[0].SumType != "VmStkSlice") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") { + if stack.Len() != 3 || (stack.Peek(2).SumType != "VmStkSlice") || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result EstimateSwapOut_DedustResult @@ -877,7 +877,7 @@ func GetAllTickInfos(ctx context.Context, executor Executor, reqAccountID ton.Ac } func DecodeGetAllTickInfos_ToncoResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkCell") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkCell") { return "", nil, fmt.Errorf("invalid stack format") } var result GetAllTickInfos_ToncoResult @@ -919,7 +919,7 @@ func GetChildContracts(ctx context.Context, executor Executor, reqAccountID ton. } func DecodeGetChildContracts_ToncoPoolResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 4 || (stack[0].SumType != "VmStkCell") || (stack[1].SumType != "VmStkCell") || (stack[2].SumType != "VmStkCell") || (stack[3].SumType != "VmStkCell") { + if stack.Len() != 4 || (stack.Peek(3).SumType != "VmStkCell") || (stack.Peek(2).SumType != "VmStkCell") || (stack.Peek(1).SumType != "VmStkCell") || (stack.Peek(0).SumType != "VmStkCell") { return "", nil, fmt.Errorf("invalid stack format") } var result GetChildContracts_ToncoPoolResult @@ -928,7 +928,7 @@ func DecodeGetChildContracts_ToncoPoolResult(stack tlb.VmStack) (resultType stri } func DecodeGetChildContracts_ToncoRouterResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 3 || (stack[0].SumType != "VmStkCell") || (stack[1].SumType != "VmStkCell") || (stack[2].SumType != "VmStkCell") { + if stack.Len() != 3 || (stack.Peek(2).SumType != "VmStkCell") || (stack.Peek(1).SumType != "VmStkCell") || (stack.Peek(0).SumType != "VmStkCell") { return "", nil, fmt.Errorf("invalid stack format") } var result GetChildContracts_ToncoRouterResult @@ -961,7 +961,7 @@ func GetIsActive(ctx context.Context, executor Executor, reqAccountID ton.Accoun } func DecodeGetIsActive_ToncoResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetIsActive_ToncoResult @@ -1018,7 +1018,7 @@ func GetPoolStateAndConfiguration(ctx context.Context, executor Executor, reqAcc } func DecodeGetPoolStateAndConfiguration_ToncoResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 25 || (stack[0].SumType != "VmStkSlice") || (stack[1].SumType != "VmStkSlice") || (stack[2].SumType != "VmStkSlice") || (stack[3].SumType != "VmStkSlice") || (stack[4].SumType != "VmStkSlice") || (stack[5].SumType != "VmStkSlice") || (stack[6].SumType != "VmStkSlice") || (stack[7].SumType != "VmStkTinyInt" && stack[7].SumType != "VmStkInt") || (stack[8].SumType != "VmStkTinyInt" && stack[8].SumType != "VmStkInt") || (stack[9].SumType != "VmStkTinyInt" && stack[9].SumType != "VmStkInt") || (stack[10].SumType != "VmStkTinyInt" && stack[10].SumType != "VmStkInt") || (stack[11].SumType != "VmStkTinyInt" && stack[11].SumType != "VmStkInt") || (stack[12].SumType != "VmStkTinyInt" && stack[12].SumType != "VmStkInt") || (stack[13].SumType != "VmStkTinyInt" && stack[13].SumType != "VmStkInt") || (stack[14].SumType != "VmStkTinyInt" && stack[14].SumType != "VmStkInt") || (stack[15].SumType != "VmStkTinyInt" && stack[15].SumType != "VmStkInt") || (stack[16].SumType != "VmStkTinyInt" && stack[16].SumType != "VmStkInt") || (stack[17].SumType != "VmStkTinyInt" && stack[17].SumType != "VmStkInt") || (stack[18].SumType != "VmStkTinyInt" && stack[18].SumType != "VmStkInt") || (stack[19].SumType != "VmStkTinyInt" && stack[19].SumType != "VmStkInt") || (stack[20].SumType != "VmStkTinyInt" && stack[20].SumType != "VmStkInt") || (stack[21].SumType != "VmStkTinyInt" && stack[21].SumType != "VmStkInt") || (stack[22].SumType != "VmStkTinyInt" && stack[22].SumType != "VmStkInt") || (stack[23].SumType != "VmStkTinyInt" && stack[23].SumType != "VmStkInt") || (stack[24].SumType != "VmStkTinyInt" && stack[24].SumType != "VmStkInt") { + if stack.Len() != 25 || (stack.Peek(24).SumType != "VmStkSlice") || (stack.Peek(23).SumType != "VmStkSlice") || (stack.Peek(22).SumType != "VmStkSlice") || (stack.Peek(21).SumType != "VmStkSlice") || (stack.Peek(20).SumType != "VmStkSlice") || (stack.Peek(19).SumType != "VmStkSlice") || (stack.Peek(18).SumType != "VmStkSlice") || (stack.Peek(17).SumType != "VmStkTinyInt" && stack.Peek(17).SumType != "VmStkInt") || (stack.Peek(16).SumType != "VmStkTinyInt" && stack.Peek(16).SumType != "VmStkInt") || (stack.Peek(15).SumType != "VmStkTinyInt" && stack.Peek(15).SumType != "VmStkInt") || (stack.Peek(14).SumType != "VmStkTinyInt" && stack.Peek(14).SumType != "VmStkInt") || (stack.Peek(13).SumType != "VmStkTinyInt" && stack.Peek(13).SumType != "VmStkInt") || (stack.Peek(12).SumType != "VmStkTinyInt" && stack.Peek(12).SumType != "VmStkInt") || (stack.Peek(11).SumType != "VmStkTinyInt" && stack.Peek(11).SumType != "VmStkInt") || (stack.Peek(10).SumType != "VmStkTinyInt" && stack.Peek(10).SumType != "VmStkInt") || (stack.Peek(9).SumType != "VmStkTinyInt" && stack.Peek(9).SumType != "VmStkInt") || (stack.Peek(8).SumType != "VmStkTinyInt" && stack.Peek(8).SumType != "VmStkInt") || (stack.Peek(7).SumType != "VmStkTinyInt" && stack.Peek(7).SumType != "VmStkInt") || (stack.Peek(6).SumType != "VmStkTinyInt" && stack.Peek(6).SumType != "VmStkInt") || (stack.Peek(5).SumType != "VmStkTinyInt" && stack.Peek(5).SumType != "VmStkInt") || (stack.Peek(4).SumType != "VmStkTinyInt" && stack.Peek(4).SumType != "VmStkInt") || (stack.Peek(3).SumType != "VmStkTinyInt" && stack.Peek(3).SumType != "VmStkInt") || (stack.Peek(2).SumType != "VmStkTinyInt" && stack.Peek(2).SumType != "VmStkInt") || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetPoolStateAndConfiguration_ToncoResult @@ -1055,7 +1055,7 @@ func GetRouterState(ctx context.Context, executor Executor, reqAccountID ton.Acc } func DecodeGetRouterState_ToncoResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 5 || (stack[0].SumType != "VmStkSlice") || (stack[1].SumType != "VmStkSlice") || (stack[2].SumType != "VmStkSlice") || (stack[3].SumType != "VmStkTinyInt" && stack[3].SumType != "VmStkInt") || (stack[4].SumType != "VmStkTinyInt" && stack[4].SumType != "VmStkInt") { + if stack.Len() != 5 || (stack.Peek(4).SumType != "VmStkSlice") || (stack.Peek(3).SumType != "VmStkSlice") || (stack.Peek(2).SumType != "VmStkSlice") || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetRouterState_ToncoResult @@ -1093,7 +1093,7 @@ func GetAccountData(ctx context.Context, executor Executor, reqAccountID ton.Acc } func DecodeGetAccountData_ToncoResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 6 || (stack[0].SumType != "VmStkSlice") || (stack[1].SumType != "VmStkSlice") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") || (stack[3].SumType != "VmStkTinyInt" && stack[3].SumType != "VmStkInt") || (stack[4].SumType != "VmStkTinyInt" && stack[4].SumType != "VmStkInt") || (stack[5].SumType != "VmStkTinyInt" && stack[5].SumType != "VmStkInt") { + if stack.Len() != 6 || (stack.Peek(5).SumType != "VmStkSlice") || (stack.Peek(4).SumType != "VmStkSlice") || (stack.Peek(3).SumType != "VmStkTinyInt" && stack.Peek(3).SumType != "VmStkInt") || (stack.Peek(2).SumType != "VmStkTinyInt" && stack.Peek(2).SumType != "VmStkInt") || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetAccountData_ToncoResult @@ -1126,7 +1126,7 @@ func GetActiveRange(ctx context.Context, executor Executor, reqAccountID ton.Acc } func DecodeGetActiveRange_BidaskResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkSlice") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkSlice") { return "", nil, fmt.Errorf("invalid stack format") } var result GetActiveRange_BidaskResult @@ -1167,7 +1167,7 @@ func GetAdjustedSpotPrice(ctx context.Context, executor Executor, reqAccountID t } func DecodeGetAdjustedSpotPrice_StormResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetAdjustedSpotPrice_StormResult @@ -1200,7 +1200,7 @@ func GetAdminAddress(ctx context.Context, executor Executor, reqAccountID ton.Ac } func DecodeGetAdminAddress_CoffeeResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkSlice") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkSlice") { return "", nil, fmt.Errorf("invalid stack format") } var result GetAdminAddress_CoffeeResult @@ -1233,7 +1233,7 @@ func GetAmmContractData(ctx context.Context, executor Executor, reqAccountID ton } func DecodeGetAmmContractData_StormResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkCell") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkCell") { return "", nil, fmt.Errorf("invalid stack format") } var result GetAmmContractData_StormResult @@ -1267,7 +1267,7 @@ func GetAmmName(ctx context.Context, executor Executor, reqAccountID ton.Account } func DecodeGetAmmName_StormResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 2 || (stack[0].SumType != "VmStkSlice") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") { + if stack.Len() != 2 || (stack.Peek(1).SumType != "VmStkSlice") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetAmmName_StormResult @@ -1309,7 +1309,7 @@ func GetAmmState(ctx context.Context, executor Executor, reqAccountID ton.Accoun } func DecodeGetAmmState_StormResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 10 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") || (stack[3].SumType != "VmStkTinyInt" && stack[3].SumType != "VmStkInt") || (stack[4].SumType != "VmStkTinyInt" && stack[4].SumType != "VmStkInt") || (stack[5].SumType != "VmStkTinyInt" && stack[5].SumType != "VmStkInt") || (stack[6].SumType != "VmStkTinyInt" && stack[6].SumType != "VmStkInt") || (stack[7].SumType != "VmStkTinyInt" && stack[7].SumType != "VmStkInt") || (stack[8].SumType != "VmStkTinyInt" && stack[8].SumType != "VmStkInt") || (stack[9].SumType != "VmStkTinyInt" && stack[9].SumType != "VmStkInt") { + if stack.Len() != 10 || (stack.Peek(9).SumType != "VmStkTinyInt" && stack.Peek(9).SumType != "VmStkInt") || (stack.Peek(8).SumType != "VmStkTinyInt" && stack.Peek(8).SumType != "VmStkInt") || (stack.Peek(7).SumType != "VmStkTinyInt" && stack.Peek(7).SumType != "VmStkInt") || (stack.Peek(6).SumType != "VmStkTinyInt" && stack.Peek(6).SumType != "VmStkInt") || (stack.Peek(5).SumType != "VmStkTinyInt" && stack.Peek(5).SumType != "VmStkInt") || (stack.Peek(4).SumType != "VmStkTinyInt" && stack.Peek(4).SumType != "VmStkInt") || (stack.Peek(3).SumType != "VmStkTinyInt" && stack.Peek(3).SumType != "VmStkInt") || (stack.Peek(2).SumType != "VmStkTinyInt" && stack.Peek(2).SumType != "VmStkInt") || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetAmmState_StormResult @@ -1346,7 +1346,7 @@ func GetAmmStatus(ctx context.Context, executor Executor, reqAccountID ton.Accou } func DecodeGetAmmStatus_StormResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 5 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") || (stack[3].SumType != "VmStkTinyInt" && stack[3].SumType != "VmStkInt") || (stack[4].SumType != "VmStkTinyInt" && stack[4].SumType != "VmStkInt") { + if stack.Len() != 5 || (stack.Peek(4).SumType != "VmStkTinyInt" && stack.Peek(4).SumType != "VmStkInt") || (stack.Peek(3).SumType != "VmStkTinyInt" && stack.Peek(3).SumType != "VmStkInt") || (stack.Peek(2).SumType != "VmStkTinyInt" && stack.Peek(2).SumType != "VmStkInt") || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetAmmStatus_StormResult @@ -1383,7 +1383,7 @@ func GetAsset(ctx context.Context, executor Executor, reqAccountID ton.AccountID } func DecodeGetAsset_DedustResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkSlice") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkSlice") { return "", nil, fmt.Errorf("invalid stack format") } var result GetAsset_DedustResult @@ -1392,7 +1392,7 @@ func DecodeGetAsset_DedustResult(stack tlb.VmStack) (resultType string, resultAn } func DecodeGetAsset_CoffeeResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkSlice") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkSlice") { return "", nil, fmt.Errorf("invalid stack format") } var result GetAsset_CoffeeResult @@ -1431,7 +1431,7 @@ func GetAssets(ctx context.Context, executor Executor, reqAccountID ton.AccountI } func DecodeGetAssets_DedustResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 2 || (stack[0].SumType != "VmStkSlice") || (stack[1].SumType != "VmStkSlice") { + if stack.Len() != 2 || (stack.Peek(1).SumType != "VmStkSlice") || (stack.Peek(0).SumType != "VmStkSlice") { return "", nil, fmt.Errorf("invalid stack format") } var result GetAssets_DedustResult @@ -1440,7 +1440,7 @@ func DecodeGetAssets_DedustResult(stack tlb.VmStack) (resultType string, resultA } func DecodeGetAssets_MoonResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 2 || (stack[0].SumType != "VmStkSlice") || (stack[1].SumType != "VmStkSlice") { + if stack.Len() != 2 || (stack.Peek(1).SumType != "VmStkSlice") || (stack.Peek(0).SumType != "VmStkSlice") { return "", nil, fmt.Errorf("invalid stack format") } var result GetAssets_MoonResult @@ -1498,7 +1498,7 @@ func GetAuctionDataV4(ctx context.Context, executor Executor, reqAccountID ton.A } func DecodeGetAuctionDataV4Result(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 26 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") || (stack[3].SumType != "VmStkSlice") || (stack[4].SumType != "VmStkSlice") || (stack[5].SumType != "VmStkSlice") || (stack[6].SumType != "VmStkTinyInt" && stack[6].SumType != "VmStkInt") || (stack[7].SumType != "VmStkSlice") || (stack[8].SumType != "VmStkTinyInt" && stack[8].SumType != "VmStkInt") || (stack[9].SumType != "VmStkSlice") || (stack[10].SumType != "VmStkTinyInt" && stack[10].SumType != "VmStkInt") || (stack[11].SumType != "VmStkTinyInt" && stack[11].SumType != "VmStkInt") || (stack[12].SumType != "VmStkSlice") || (stack[13].SumType != "VmStkTinyInt" && stack[13].SumType != "VmStkInt") || (stack[14].SumType != "VmStkTinyInt" && stack[14].SumType != "VmStkInt") || (stack[15].SumType != "VmStkTinyInt" && stack[15].SumType != "VmStkInt") || (stack[16].SumType != "VmStkTinyInt" && stack[16].SumType != "VmStkInt") || (stack[17].SumType != "VmStkTinyInt" && stack[17].SumType != "VmStkInt") || (stack[18].SumType != "VmStkTinyInt" && stack[18].SumType != "VmStkInt") || (stack[19].SumType != "VmStkTinyInt" && stack[19].SumType != "VmStkInt") || (stack[20].SumType != "VmStkTinyInt" && stack[20].SumType != "VmStkInt") || (stack[21].SumType != "VmStkTinyInt" && stack[21].SumType != "VmStkInt") || (stack[22].SumType != "VmStkSlice") || (stack[23].SumType != "VmStkSlice") || (stack[24].SumType != "VmStkTinyInt" && stack[24].SumType != "VmStkInt") || (stack[25].SumType != "VmStkTinyInt" && stack[25].SumType != "VmStkInt") { + if stack.Len() != 26 || (stack.Peek(25).SumType != "VmStkTinyInt" && stack.Peek(25).SumType != "VmStkInt") || (stack.Peek(24).SumType != "VmStkTinyInt" && stack.Peek(24).SumType != "VmStkInt") || (stack.Peek(23).SumType != "VmStkTinyInt" && stack.Peek(23).SumType != "VmStkInt") || (stack.Peek(22).SumType != "VmStkSlice") || (stack.Peek(21).SumType != "VmStkSlice") || (stack.Peek(20).SumType != "VmStkSlice") || (stack.Peek(19).SumType != "VmStkTinyInt" && stack.Peek(19).SumType != "VmStkInt") || (stack.Peek(18).SumType != "VmStkSlice") || (stack.Peek(17).SumType != "VmStkTinyInt" && stack.Peek(17).SumType != "VmStkInt") || (stack.Peek(16).SumType != "VmStkSlice") || (stack.Peek(15).SumType != "VmStkTinyInt" && stack.Peek(15).SumType != "VmStkInt") || (stack.Peek(14).SumType != "VmStkTinyInt" && stack.Peek(14).SumType != "VmStkInt") || (stack.Peek(13).SumType != "VmStkSlice") || (stack.Peek(12).SumType != "VmStkTinyInt" && stack.Peek(12).SumType != "VmStkInt") || (stack.Peek(11).SumType != "VmStkTinyInt" && stack.Peek(11).SumType != "VmStkInt") || (stack.Peek(10).SumType != "VmStkTinyInt" && stack.Peek(10).SumType != "VmStkInt") || (stack.Peek(9).SumType != "VmStkTinyInt" && stack.Peek(9).SumType != "VmStkInt") || (stack.Peek(8).SumType != "VmStkTinyInt" && stack.Peek(8).SumType != "VmStkInt") || (stack.Peek(7).SumType != "VmStkTinyInt" && stack.Peek(7).SumType != "VmStkInt") || (stack.Peek(6).SumType != "VmStkTinyInt" && stack.Peek(6).SumType != "VmStkInt") || (stack.Peek(5).SumType != "VmStkTinyInt" && stack.Peek(5).SumType != "VmStkInt") || (stack.Peek(4).SumType != "VmStkTinyInt" && stack.Peek(4).SumType != "VmStkInt") || (stack.Peek(3).SumType != "VmStkSlice") || (stack.Peek(2).SumType != "VmStkSlice") || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetAuctionDataV4Result @@ -1533,7 +1533,7 @@ func GetAuctionInfo(ctx context.Context, executor Executor, reqAccountID ton.Acc } func DecodeGetAuctionInfoResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) < 3 || (stack[0].SumType != "VmStkSlice") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") { + if stack.Len() < 3 || (stack.Peek(stack.Len()-1).SumType != "VmStkSlice") || (stack.Peek(stack.Len()-2).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-2).SumType != "VmStkInt") || (stack.Peek(stack.Len()-3).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-3).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetAuctionInfoResult @@ -1566,7 +1566,7 @@ func GetAuthorityAddress(ctx context.Context, executor Executor, reqAccountID to } func DecodeGetAuthorityAddressResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) < 1 || (stack[0].SumType != "VmStkSlice") { + if stack.Len() < 1 || (stack.Peek(stack.Len()-1).SumType != "VmStkSlice") { return "", nil, fmt.Errorf("invalid stack format") } var result GetAuthorityAddressResult @@ -1599,7 +1599,7 @@ func GetAvailableClaimAmount(ctx context.Context, executor Executor, reqAccountI } func DecodeGetAvailableClaimAmountResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetAvailableClaimAmountResult @@ -1639,7 +1639,7 @@ func GetBalances(ctx context.Context, executor Executor, reqAccountID ton.Accoun } func DecodeGetBalances_DedustResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 2 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") { + if stack.Len() != 2 || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetBalances_DedustResult @@ -1648,7 +1648,7 @@ func DecodeGetBalances_DedustResult(stack tlb.VmStack) (resultType string, resul } func DecodeGetBalancesResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 3 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") { + if stack.Len() != 3 || (stack.Peek(2).SumType != "VmStkTinyInt" && stack.Peek(2).SumType != "VmStkInt") || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetBalancesResult @@ -1690,7 +1690,7 @@ func GetBillAddress(ctx context.Context, executor Executor, reqAccountID ton.Acc } func DecodeGetBillAddressResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkSlice") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkSlice") { return "", nil, fmt.Errorf("invalid stack format") } var result GetBillAddressResult @@ -1723,7 +1723,7 @@ func GetBillAmount(ctx context.Context, executor Executor, reqAccountID ton.Acco } func DecodeGetBillAmountResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetBillAmountResult @@ -1763,7 +1763,7 @@ func GetBinAssets(ctx context.Context, executor Executor, reqAccountID ton.Accou } func DecodeGetBinAssets_BidaskResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 2 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") { + if stack.Len() != 2 || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetBinAssets_BidaskResult @@ -1796,7 +1796,7 @@ func GetBinsNumber(ctx context.Context, executor Executor, reqAccountID ton.Acco } func DecodeGetBinsNumber_BidaskResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetBinsNumber_BidaskResult @@ -1832,7 +1832,7 @@ func GetBlankStorageData(ctx context.Context, executor Executor, reqAccountID to } func DecodeGetBlankStorageData_StormResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 4 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkSlice") || (stack[2].SumType != "VmStkSlice") || (stack[3].SumType != "VmStkCell" && stack[3].SumType != "VmStkNull") { + if stack.Len() != 4 || (stack.Peek(3).SumType != "VmStkTinyInt" && stack.Peek(3).SumType != "VmStkInt") || (stack.Peek(2).SumType != "VmStkSlice") || (stack.Peek(1).SumType != "VmStkSlice") || (stack.Peek(0).SumType != "VmStkCell" && stack.Peek(0).SumType != "VmStkNull") { return "", nil, fmt.Errorf("invalid stack format") } var result GetBlankStorageData_StormResult @@ -1868,7 +1868,7 @@ func GetBufferData(ctx context.Context, executor Executor, reqAccountID ton.Acco } func DecodeGetBufferData_StormResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 4 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") || (stack[3].SumType != "VmStkTinyInt" && stack[3].SumType != "VmStkInt") { + if stack.Len() != 4 || (stack.Peek(3).SumType != "VmStkTinyInt" && stack.Peek(3).SumType != "VmStkInt") || (stack.Peek(2).SumType != "VmStkTinyInt" && stack.Peek(2).SumType != "VmStkInt") || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetBufferData_StormResult @@ -1926,7 +1926,7 @@ func GetCanExecuteOrder(ctx context.Context, executor Executor, reqAccountID ton } func DecodeGetCanExecuteOrder_StormResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 3 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") { + if stack.Len() != 3 || (stack.Peek(2).SumType != "VmStkTinyInt" && stack.Peek(2).SumType != "VmStkInt") || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetCanExecuteOrder_StormResult @@ -1983,7 +1983,7 @@ func GetCanForceClose(ctx context.Context, executor Executor, reqAccountID ton.A } func DecodeGetCanForceClose_StormResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 2 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") { + if stack.Len() != 2 || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetCanForceClose_StormResult @@ -2042,7 +2042,7 @@ func GetCanLiquidate(ctx context.Context, executor Executor, reqAccountID ton.Ac } func DecodeGetCanLiquidate_StormResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 4 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") || (stack[3].SumType != "VmStkTinyInt" && stack[3].SumType != "VmStkInt") { + if stack.Len() != 4 || (stack.Peek(3).SumType != "VmStkTinyInt" && stack.Peek(3).SumType != "VmStkInt") || (stack.Peek(2).SumType != "VmStkTinyInt" && stack.Peek(2).SumType != "VmStkInt") || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetCanLiquidate_StormResult @@ -2103,7 +2103,7 @@ func GetChannelData(ctx context.Context, executor Executor, reqAccountID ton.Acc } func DecodeGetChannelDataResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) < 8 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTuple") || (stack[2].SumType != "VmStkTuple") || (stack[3].SumType != "VmStkTinyInt" && stack[3].SumType != "VmStkInt") || (stack[4].SumType != "VmStkTuple") || (stack[5].SumType != "VmStkTuple") || (stack[6].SumType != "VmStkSlice" && stack[6].SumType != "VmStkNull") || (stack[7].SumType != "VmStkTuple") { + if stack.Len() < 8 || (stack.Peek(stack.Len()-1).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-1).SumType != "VmStkInt") || (stack.Peek(stack.Len()-2).SumType != "VmStkTuple") || (stack.Peek(stack.Len()-3).SumType != "VmStkTuple") || (stack.Peek(stack.Len()-4).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-4).SumType != "VmStkInt") || (stack.Peek(stack.Len()-5).SumType != "VmStkTuple") || (stack.Peek(stack.Len()-6).SumType != "VmStkTuple") || (stack.Peek(stack.Len()-7).SumType != "VmStkSlice" && stack.Peek(stack.Len()-7).SumType != "VmStkNull") || (stack.Peek(stack.Len()-8).SumType != "VmStkTuple") { return "", nil, fmt.Errorf("invalid stack format") } var result GetChannelDataResult @@ -2136,7 +2136,7 @@ func GetClaimerAddress(ctx context.Context, executor Executor, reqAccountID ton. } func DecodeGetClaimerAddress_StormResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkSlice") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkSlice") { return "", nil, fmt.Errorf("invalid stack format") } var result GetClaimerAddress_StormResult @@ -2177,7 +2177,7 @@ func GetCocoonClientData(ctx context.Context, executor Executor, reqAccountID to } func DecodeGetCocoonClientData_CocoonResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 9 || (stack[0].SumType != "VmStkSlice") || (stack[1].SumType != "VmStkSlice") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") || (stack[3].SumType != "VmStkTinyInt" && stack[3].SumType != "VmStkInt") || (stack[4].SumType != "VmStkTinyInt" && stack[4].SumType != "VmStkInt") || (stack[5].SumType != "VmStkTinyInt" && stack[5].SumType != "VmStkInt") || (stack[6].SumType != "VmStkTinyInt" && stack[6].SumType != "VmStkInt") || (stack[7].SumType != "VmStkTinyInt" && stack[7].SumType != "VmStkInt") || (stack[8].SumType != "VmStkTinyInt" && stack[8].SumType != "VmStkInt") { + if stack.Len() != 9 || (stack.Peek(8).SumType != "VmStkSlice") || (stack.Peek(7).SumType != "VmStkSlice") || (stack.Peek(6).SumType != "VmStkTinyInt" && stack.Peek(6).SumType != "VmStkInt") || (stack.Peek(5).SumType != "VmStkTinyInt" && stack.Peek(5).SumType != "VmStkInt") || (stack.Peek(4).SumType != "VmStkTinyInt" && stack.Peek(4).SumType != "VmStkInt") || (stack.Peek(3).SumType != "VmStkTinyInt" && stack.Peek(3).SumType != "VmStkInt") || (stack.Peek(2).SumType != "VmStkTinyInt" && stack.Peek(2).SumType != "VmStkInt") || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetCocoonClientData_CocoonResult @@ -2219,7 +2219,7 @@ func GetCocoonData(ctx context.Context, executor Executor, reqAccountID ton.Acco } func DecodeGetCocoonData_CocoonResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 10 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") || (stack[3].SumType != "VmStkTinyInt" && stack[3].SumType != "VmStkInt") || (stack[4].SumType != "VmStkTinyInt" && stack[4].SumType != "VmStkInt") || (stack[5].SumType != "VmStkTinyInt" && stack[5].SumType != "VmStkInt") || (stack[6].SumType != "VmStkTinyInt" && stack[6].SumType != "VmStkInt") || (stack[7].SumType != "VmStkTinyInt" && stack[7].SumType != "VmStkInt") || (stack[8].SumType != "VmStkTinyInt" && stack[8].SumType != "VmStkInt") || (stack[9].SumType != "VmStkSlice") { + if stack.Len() != 10 || (stack.Peek(9).SumType != "VmStkTinyInt" && stack.Peek(9).SumType != "VmStkInt") || (stack.Peek(8).SumType != "VmStkTinyInt" && stack.Peek(8).SumType != "VmStkInt") || (stack.Peek(7).SumType != "VmStkTinyInt" && stack.Peek(7).SumType != "VmStkInt") || (stack.Peek(6).SumType != "VmStkTinyInt" && stack.Peek(6).SumType != "VmStkInt") || (stack.Peek(5).SumType != "VmStkTinyInt" && stack.Peek(5).SumType != "VmStkInt") || (stack.Peek(4).SumType != "VmStkTinyInt" && stack.Peek(4).SumType != "VmStkInt") || (stack.Peek(3).SumType != "VmStkTinyInt" && stack.Peek(3).SumType != "VmStkInt") || (stack.Peek(2).SumType != "VmStkTinyInt" && stack.Peek(2).SumType != "VmStkInt") || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkSlice") { return "", nil, fmt.Errorf("invalid stack format") } var result GetCocoonData_CocoonResult @@ -2263,7 +2263,7 @@ func GetCocoonProxyData(ctx context.Context, executor Executor, reqAccountID ton } func DecodeGetCocoonProxyData_CocoonResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 12 || (stack[0].SumType != "VmStkSlice") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkSlice") || (stack[3].SumType != "VmStkTinyInt" && stack[3].SumType != "VmStkInt") || (stack[4].SumType != "VmStkTinyInt" && stack[4].SumType != "VmStkInt") || (stack[5].SumType != "VmStkTinyInt" && stack[5].SumType != "VmStkInt") || (stack[6].SumType != "VmStkTinyInt" && stack[6].SumType != "VmStkInt") || (stack[7].SumType != "VmStkTinyInt" && stack[7].SumType != "VmStkInt") || (stack[8].SumType != "VmStkTinyInt" && stack[8].SumType != "VmStkInt") || (stack[9].SumType != "VmStkTinyInt" && stack[9].SumType != "VmStkInt") || (stack[10].SumType != "VmStkTinyInt" && stack[10].SumType != "VmStkInt") || (stack[11].SumType != "VmStkTinyInt" && stack[11].SumType != "VmStkInt") { + if stack.Len() != 12 || (stack.Peek(11).SumType != "VmStkSlice") || (stack.Peek(10).SumType != "VmStkTinyInt" && stack.Peek(10).SumType != "VmStkInt") || (stack.Peek(9).SumType != "VmStkSlice") || (stack.Peek(8).SumType != "VmStkTinyInt" && stack.Peek(8).SumType != "VmStkInt") || (stack.Peek(7).SumType != "VmStkTinyInt" && stack.Peek(7).SumType != "VmStkInt") || (stack.Peek(6).SumType != "VmStkTinyInt" && stack.Peek(6).SumType != "VmStkInt") || (stack.Peek(5).SumType != "VmStkTinyInt" && stack.Peek(5).SumType != "VmStkInt") || (stack.Peek(4).SumType != "VmStkTinyInt" && stack.Peek(4).SumType != "VmStkInt") || (stack.Peek(3).SumType != "VmStkTinyInt" && stack.Peek(3).SumType != "VmStkInt") || (stack.Peek(2).SumType != "VmStkTinyInt" && stack.Peek(2).SumType != "VmStkInt") || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetCocoonProxyData_CocoonResult @@ -2300,7 +2300,7 @@ func GetCocoonWorkerData(ctx context.Context, executor Executor, reqAccountID to } func DecodeGetCocoonWorkerData_CocoonResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 5 || (stack[0].SumType != "VmStkSlice") || (stack[1].SumType != "VmStkSlice") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") || (stack[3].SumType != "VmStkTinyInt" && stack[3].SumType != "VmStkInt") || (stack[4].SumType != "VmStkTinyInt" && stack[4].SumType != "VmStkInt") { + if stack.Len() != 5 || (stack.Peek(4).SumType != "VmStkSlice") || (stack.Peek(3).SumType != "VmStkSlice") || (stack.Peek(2).SumType != "VmStkTinyInt" && stack.Peek(2).SumType != "VmStkInt") || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetCocoonWorkerData_CocoonResult @@ -2334,7 +2334,7 @@ func GetCode(ctx context.Context, executor Executor, reqAccountID ton.AccountID) } func DecodeGetCode_CoffeeResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 2 || (stack[0].SumType != "VmStkCell") || (stack[1].SumType != "VmStkCell") { + if stack.Len() != 2 || (stack.Peek(1).SumType != "VmStkCell") || (stack.Peek(0).SumType != "VmStkCell") { return "", nil, fmt.Errorf("invalid stack format") } var result GetCode_CoffeeResult @@ -2368,7 +2368,7 @@ func GetCollectedFeesInfo(ctx context.Context, executor Executor, reqAccountID t } func DecodeGetCollectedFeesInfo_BidaskDammResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 2 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") { + if stack.Len() != 2 || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetCollectedFeesInfo_BidaskDammResult @@ -2403,7 +2403,7 @@ func GetCollectionData(ctx context.Context, executor Executor, reqAccountID ton. } func DecodeGetCollectionDataResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) < 3 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkCell") || (stack[2].SumType != "VmStkSlice") { + if stack.Len() < 3 || (stack.Peek(stack.Len()-1).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-1).SumType != "VmStkInt") || (stack.Peek(stack.Len()-2).SumType != "VmStkCell") || (stack.Peek(stack.Len()-3).SumType != "VmStkSlice") { return "", nil, fmt.Errorf("invalid stack format") } var result GetCollectionDataResult @@ -2447,7 +2447,7 @@ func GetComputeFundingData(ctx context.Context, executor Executor, reqAccountID } func DecodeGetComputeFundingData_StormResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 4 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") || (stack[3].SumType != "VmStkTinyInt" && stack[3].SumType != "VmStkInt") { + if stack.Len() != 4 || (stack.Peek(3).SumType != "VmStkTinyInt" && stack.Peek(3).SumType != "VmStkInt") || (stack.Peek(2).SumType != "VmStkTinyInt" && stack.Peek(2).SumType != "VmStkInt") || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetComputeFundingData_StormResult @@ -2483,7 +2483,7 @@ func GetContractData(ctx context.Context, executor Executor, reqAccountID ton.Ac } func DecodeGetContractData_AirdropInterlockerV1Result(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 4 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkSlice") || (stack[3].SumType != "VmStkSlice") { + if stack.Len() != 4 || (stack.Peek(3).SumType != "VmStkTinyInt" && stack.Peek(3).SumType != "VmStkInt") || (stack.Peek(2).SumType != "VmStkTinyInt" && stack.Peek(2).SumType != "VmStkInt") || (stack.Peek(1).SumType != "VmStkSlice") || (stack.Peek(0).SumType != "VmStkSlice") { return "", nil, fmt.Errorf("invalid stack format") } var result GetContractData_AirdropInterlockerV1Result @@ -2519,7 +2519,7 @@ func GetCronInfo(ctx context.Context, executor Executor, reqAccountID ton.Accoun } func DecodeGetCronInfoResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 4 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") || (stack[3].SumType != "VmStkTinyInt" && stack[3].SumType != "VmStkInt") { + if stack.Len() != 4 || (stack.Peek(3).SumType != "VmStkTinyInt" && stack.Peek(3).SumType != "VmStkInt") || (stack.Peek(2).SumType != "VmStkTinyInt" && stack.Peek(2).SumType != "VmStkInt") || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetCronInfoResult @@ -2565,7 +2565,7 @@ func GetCurParams(ctx context.Context, executor Executor, reqAccountID ton.Accou } func DecodeGetCurParams_CocoonResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 14 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") || (stack[3].SumType != "VmStkTinyInt" && stack[3].SumType != "VmStkInt") || (stack[4].SumType != "VmStkTinyInt" && stack[4].SumType != "VmStkInt") || (stack[5].SumType != "VmStkTinyInt" && stack[5].SumType != "VmStkInt") || (stack[6].SumType != "VmStkTinyInt" && stack[6].SumType != "VmStkInt") || (stack[7].SumType != "VmStkTinyInt" && stack[7].SumType != "VmStkInt") || (stack[8].SumType != "VmStkTinyInt" && stack[8].SumType != "VmStkInt") || (stack[9].SumType != "VmStkTinyInt" && stack[9].SumType != "VmStkInt") || (stack[10].SumType != "VmStkTinyInt" && stack[10].SumType != "VmStkInt") || (stack[11].SumType != "VmStkTinyInt" && stack[11].SumType != "VmStkInt") || (stack[12].SumType != "VmStkTinyInt" && stack[12].SumType != "VmStkInt") || (stack[13].SumType != "VmStkTinyInt" && stack[13].SumType != "VmStkInt") { + if stack.Len() != 14 || (stack.Peek(13).SumType != "VmStkTinyInt" && stack.Peek(13).SumType != "VmStkInt") || (stack.Peek(12).SumType != "VmStkTinyInt" && stack.Peek(12).SumType != "VmStkInt") || (stack.Peek(11).SumType != "VmStkTinyInt" && stack.Peek(11).SumType != "VmStkInt") || (stack.Peek(10).SumType != "VmStkTinyInt" && stack.Peek(10).SumType != "VmStkInt") || (stack.Peek(9).SumType != "VmStkTinyInt" && stack.Peek(9).SumType != "VmStkInt") || (stack.Peek(8).SumType != "VmStkTinyInt" && stack.Peek(8).SumType != "VmStkInt") || (stack.Peek(7).SumType != "VmStkTinyInt" && stack.Peek(7).SumType != "VmStkInt") || (stack.Peek(6).SumType != "VmStkTinyInt" && stack.Peek(6).SumType != "VmStkInt") || (stack.Peek(5).SumType != "VmStkTinyInt" && stack.Peek(5).SumType != "VmStkInt") || (stack.Peek(4).SumType != "VmStkTinyInt" && stack.Peek(4).SumType != "VmStkInt") || (stack.Peek(3).SumType != "VmStkTinyInt" && stack.Peek(3).SumType != "VmStkInt") || (stack.Peek(2).SumType != "VmStkTinyInt" && stack.Peek(2).SumType != "VmStkInt") || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetCurParams_CocoonResult @@ -2598,7 +2598,7 @@ func GetCurrentBin(ctx context.Context, executor Executor, reqAccountID ton.Acco } func DecodeGetCurrentBin_BidaskResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetCurrentBin_BidaskResult @@ -2632,7 +2632,7 @@ func GetDayTradingData(ctx context.Context, executor Executor, reqAccountID ton. } func DecodeGetDayTradingData_StormResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 2 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") { + if stack.Len() != 2 || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetDayTradingData_StormResult @@ -2666,7 +2666,7 @@ func GetDefaultReferralFees(ctx context.Context, executor Executor, reqAccountID } func DecodeGetDefaultReferralFees_StormResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 2 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") { + if stack.Len() != 2 || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetDefaultReferralFees_StormResult @@ -2704,7 +2704,7 @@ func GetDelegationState(ctx context.Context, executor Executor, reqAccountID ton } func DecodeGetDelegationStateResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 3 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkTuple") { + if stack.Len() != 3 || (stack.Peek(2).SumType != "VmStkTinyInt" && stack.Peek(2).SumType != "VmStkInt") || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTuple") { return "", nil, fmt.Errorf("invalid stack format") } var result GetDelegationStateResult @@ -2738,7 +2738,7 @@ func GetDisplayMultiplier(ctx context.Context, executor Executor, reqAccountID t } func DecodeGetDisplayMultiplierResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) < 2 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") { + if stack.Len() < 2 || (stack.Peek(stack.Len()-1).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-1).SumType != "VmStkInt") || (stack.Peek(stack.Len()-2).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-2).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetDisplayMultiplierResult @@ -2774,7 +2774,7 @@ func GetDistributionInfo(ctx context.Context, executor Executor, reqAccountID to } func DecodeGetDistributionInfoResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 4 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkSlice") || (stack[2].SumType != "VmStkSlice") || (stack[3].SumType != "VmStkTinyInt" && stack[3].SumType != "VmStkInt") { + if stack.Len() != 4 || (stack.Peek(3).SumType != "VmStkTinyInt" && stack.Peek(3).SumType != "VmStkInt") || (stack.Peek(2).SumType != "VmStkSlice") || (stack.Peek(1).SumType != "VmStkSlice") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetDistributionInfoResult @@ -2807,7 +2807,7 @@ func GetDomain(ctx context.Context, executor Executor, reqAccountID ton.AccountI } func DecodeGetDomainResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) < 1 || (stack[0].SumType != "VmStkSlice") { + if stack.Len() < 1 || (stack.Peek(stack.Len()-1).SumType != "VmStkSlice") { return "", nil, fmt.Errorf("invalid stack format") } var result GetDomainResult @@ -2843,7 +2843,7 @@ func GetDynamicFeesInfo(ctx context.Context, executor Executor, reqAccountID ton } func DecodeGetDynamicFeesInfo_BidaskResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 4 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") || (stack[3].SumType != "VmStkTinyInt" && stack[3].SumType != "VmStkInt") { + if stack.Len() != 4 || (stack.Peek(3).SumType != "VmStkTinyInt" && stack.Peek(3).SumType != "VmStkInt") || (stack.Peek(2).SumType != "VmStkTinyInt" && stack.Peek(2).SumType != "VmStkInt") || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetDynamicFeesInfo_BidaskResult @@ -2876,7 +2876,7 @@ func GetEditor(ctx context.Context, executor Executor, reqAccountID ton.AccountI } func DecodeGetEditorResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) < 1 || (stack[0].SumType != "VmStkSlice") { + if stack.Len() < 1 || (stack.Peek(stack.Len()-1).SumType != "VmStkSlice") { return "", nil, fmt.Errorf("invalid stack format") } var result GetEditorResult @@ -2922,7 +2922,7 @@ func GetEstimatedAttachedValue(ctx context.Context, executor Executor, reqAccoun } func DecodeGetEstimatedAttachedValueResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetEstimatedAttachedValueResult @@ -2981,7 +2981,7 @@ func GetExchangeSettings(ctx context.Context, executor Executor, reqAccountID to } func DecodeGetExchangeSettings_StormResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 27 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") || (stack[3].SumType != "VmStkTinyInt" && stack[3].SumType != "VmStkInt") || (stack[4].SumType != "VmStkTinyInt" && stack[4].SumType != "VmStkInt") || (stack[5].SumType != "VmStkTinyInt" && stack[5].SumType != "VmStkInt") || (stack[6].SumType != "VmStkTinyInt" && stack[6].SumType != "VmStkInt") || (stack[7].SumType != "VmStkTinyInt" && stack[7].SumType != "VmStkInt") || (stack[8].SumType != "VmStkTinyInt" && stack[8].SumType != "VmStkInt") || (stack[9].SumType != "VmStkTinyInt" && stack[9].SumType != "VmStkInt") || (stack[10].SumType != "VmStkTinyInt" && stack[10].SumType != "VmStkInt") || (stack[11].SumType != "VmStkTinyInt" && stack[11].SumType != "VmStkInt") || (stack[12].SumType != "VmStkTinyInt" && stack[12].SumType != "VmStkInt") || (stack[13].SumType != "VmStkTinyInt" && stack[13].SumType != "VmStkInt") || (stack[14].SumType != "VmStkTinyInt" && stack[14].SumType != "VmStkInt") || (stack[15].SumType != "VmStkTinyInt" && stack[15].SumType != "VmStkInt") || (stack[16].SumType != "VmStkTinyInt" && stack[16].SumType != "VmStkInt") || (stack[17].SumType != "VmStkTinyInt" && stack[17].SumType != "VmStkInt") || (stack[18].SumType != "VmStkTinyInt" && stack[18].SumType != "VmStkInt") || (stack[19].SumType != "VmStkTinyInt" && stack[19].SumType != "VmStkInt") || (stack[20].SumType != "VmStkCell") || (stack[21].SumType != "VmStkTinyInt" && stack[21].SumType != "VmStkInt") || (stack[22].SumType != "VmStkTinyInt" && stack[22].SumType != "VmStkInt") || (stack[23].SumType != "VmStkTinyInt" && stack[23].SumType != "VmStkInt") || (stack[24].SumType != "VmStkTinyInt" && stack[24].SumType != "VmStkInt") || (stack[25].SumType != "VmStkTinyInt" && stack[25].SumType != "VmStkInt") || (stack[26].SumType != "VmStkTinyInt" && stack[26].SumType != "VmStkInt") { + if stack.Len() != 27 || (stack.Peek(26).SumType != "VmStkTinyInt" && stack.Peek(26).SumType != "VmStkInt") || (stack.Peek(25).SumType != "VmStkTinyInt" && stack.Peek(25).SumType != "VmStkInt") || (stack.Peek(24).SumType != "VmStkTinyInt" && stack.Peek(24).SumType != "VmStkInt") || (stack.Peek(23).SumType != "VmStkTinyInt" && stack.Peek(23).SumType != "VmStkInt") || (stack.Peek(22).SumType != "VmStkTinyInt" && stack.Peek(22).SumType != "VmStkInt") || (stack.Peek(21).SumType != "VmStkTinyInt" && stack.Peek(21).SumType != "VmStkInt") || (stack.Peek(20).SumType != "VmStkTinyInt" && stack.Peek(20).SumType != "VmStkInt") || (stack.Peek(19).SumType != "VmStkTinyInt" && stack.Peek(19).SumType != "VmStkInt") || (stack.Peek(18).SumType != "VmStkTinyInt" && stack.Peek(18).SumType != "VmStkInt") || (stack.Peek(17).SumType != "VmStkTinyInt" && stack.Peek(17).SumType != "VmStkInt") || (stack.Peek(16).SumType != "VmStkTinyInt" && stack.Peek(16).SumType != "VmStkInt") || (stack.Peek(15).SumType != "VmStkTinyInt" && stack.Peek(15).SumType != "VmStkInt") || (stack.Peek(14).SumType != "VmStkTinyInt" && stack.Peek(14).SumType != "VmStkInt") || (stack.Peek(13).SumType != "VmStkTinyInt" && stack.Peek(13).SumType != "VmStkInt") || (stack.Peek(12).SumType != "VmStkTinyInt" && stack.Peek(12).SumType != "VmStkInt") || (stack.Peek(11).SumType != "VmStkTinyInt" && stack.Peek(11).SumType != "VmStkInt") || (stack.Peek(10).SumType != "VmStkTinyInt" && stack.Peek(10).SumType != "VmStkInt") || (stack.Peek(9).SumType != "VmStkTinyInt" && stack.Peek(9).SumType != "VmStkInt") || (stack.Peek(8).SumType != "VmStkTinyInt" && stack.Peek(8).SumType != "VmStkInt") || (stack.Peek(7).SumType != "VmStkTinyInt" && stack.Peek(7).SumType != "VmStkInt") || (stack.Peek(6).SumType != "VmStkCell") || (stack.Peek(5).SumType != "VmStkTinyInt" && stack.Peek(5).SumType != "VmStkInt") || (stack.Peek(4).SumType != "VmStkTinyInt" && stack.Peek(4).SumType != "VmStkInt") || (stack.Peek(3).SumType != "VmStkTinyInt" && stack.Peek(3).SumType != "VmStkInt") || (stack.Peek(2).SumType != "VmStkTinyInt" && stack.Peek(2).SumType != "VmStkInt") || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetExchangeSettings_StormResult @@ -3014,7 +3014,7 @@ func GetExecutorBalances(ctx context.Context, executor Executor, reqAccountID to } func DecodeGetExecutorBalances_StormResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkCell") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkCell") { return "", nil, fmt.Errorf("invalid stack format") } var result GetExecutorBalances_StormResult @@ -3047,7 +3047,7 @@ func GetExecutorCollectionAddress(ctx context.Context, executor Executor, reqAcc } func DecodeGetExecutorCollectionAddress_StormResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkSlice") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkSlice") { return "", nil, fmt.Errorf("invalid stack format") } var result GetExecutorCollectionAddress_StormResult @@ -3086,7 +3086,7 @@ func GetExecutorItemAddr(ctx context.Context, executor Executor, reqAccountID to } func DecodeGetExecutorItemAddr_StormResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkSlice") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkSlice") { return "", nil, fmt.Errorf("invalid stack format") } var result GetExecutorItemAddr_StormResult @@ -3119,7 +3119,7 @@ func GetExecutorVaultsWhitelist(ctx context.Context, executor Executor, reqAccou } func DecodeGetExecutorVaultsWhitelist_StormResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkCell") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkCell") { return "", nil, fmt.Errorf("invalid stack format") } var result GetExecutorVaultsWhitelist_StormResult @@ -3165,7 +3165,7 @@ func GetExpectedOutputs(ctx context.Context, executor Executor, reqAccountID ton } func DecodeGetExpectedOutputs_StonfiResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 3 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") { + if stack.Len() != 3 || (stack.Peek(2).SumType != "VmStkTinyInt" && stack.Peek(2).SumType != "VmStkInt") || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetExpectedOutputs_StonfiResult @@ -3221,7 +3221,7 @@ func GetExpectedSwapResult(ctx context.Context, executor Executor, reqAccountID } func DecodeGetExpectedSwapResult_BidaskDammResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 7 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") || (stack[3].SumType != "VmStkTinyInt" && stack[3].SumType != "VmStkInt") || (stack[4].SumType != "VmStkTinyInt" && stack[4].SumType != "VmStkInt") || (stack[5].SumType != "VmStkTinyInt" && stack[5].SumType != "VmStkInt") || (stack[6].SumType != "VmStkTinyInt" && stack[6].SumType != "VmStkInt") { + if stack.Len() != 7 || (stack.Peek(6).SumType != "VmStkTinyInt" && stack.Peek(6).SumType != "VmStkInt") || (stack.Peek(5).SumType != "VmStkTinyInt" && stack.Peek(5).SumType != "VmStkInt") || (stack.Peek(4).SumType != "VmStkTinyInt" && stack.Peek(4).SumType != "VmStkInt") || (stack.Peek(3).SumType != "VmStkTinyInt" && stack.Peek(3).SumType != "VmStkInt") || (stack.Peek(2).SumType != "VmStkTinyInt" && stack.Peek(2).SumType != "VmStkInt") || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetExpectedSwapResult_BidaskDammResult @@ -3254,7 +3254,7 @@ func GetExtensions(ctx context.Context, executor Executor, reqAccountID ton.Acco } func DecodeGetExtensionsResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkCell" && stack[0].SumType != "VmStkNull") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkCell" && stack.Peek(0).SumType != "VmStkNull") { return "", nil, fmt.Errorf("invalid stack format") } var result GetExtensionsResult @@ -3293,7 +3293,7 @@ func GetFactoryData(ctx context.Context, executor Executor, reqAccountID ton.Acc } func DecodeGetFactoryData_StormResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 7 || (stack[0].SumType != "VmStkSlice") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") || (stack[3].SumType != "VmStkTinyInt" && stack[3].SumType != "VmStkInt") || (stack[4].SumType != "VmStkCell") || (stack[5].SumType != "VmStkTinyInt" && stack[5].SumType != "VmStkInt") || (stack[6].SumType != "VmStkCell") { + if stack.Len() != 7 || (stack.Peek(6).SumType != "VmStkSlice") || (stack.Peek(5).SumType != "VmStkTinyInt" && stack.Peek(5).SumType != "VmStkInt") || (stack.Peek(4).SumType != "VmStkTinyInt" && stack.Peek(4).SumType != "VmStkInt") || (stack.Peek(3).SumType != "VmStkTinyInt" && stack.Peek(3).SumType != "VmStkInt") || (stack.Peek(2).SumType != "VmStkCell") || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkCell") { return "", nil, fmt.Errorf("invalid stack format") } var result GetFactoryData_StormResult @@ -3338,7 +3338,7 @@ func GetFarmingInfo(ctx context.Context, executor Executor, reqAccountID ton.Acc } func DecodeGetFarmingInfo_BidaskResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 6 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") || (stack[3].SumType != "VmStkTinyInt" && stack[3].SumType != "VmStkInt") || (stack[4].SumType != "VmStkTinyInt" && stack[4].SumType != "VmStkInt") || (stack[5].SumType != "VmStkTinyInt" && stack[5].SumType != "VmStkInt") { + if stack.Len() != 6 || (stack.Peek(5).SumType != "VmStkTinyInt" && stack.Peek(5).SumType != "VmStkInt") || (stack.Peek(4).SumType != "VmStkTinyInt" && stack.Peek(4).SumType != "VmStkInt") || (stack.Peek(3).SumType != "VmStkTinyInt" && stack.Peek(3).SumType != "VmStkInt") || (stack.Peek(2).SumType != "VmStkTinyInt" && stack.Peek(2).SumType != "VmStkInt") || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetFarmingInfo_BidaskResult @@ -3347,7 +3347,7 @@ func DecodeGetFarmingInfo_BidaskResult(stack tlb.VmStack) (resultType string, re } func DecodeGetFarmingInfo_BidaskDammResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 4 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") || (stack[3].SumType != "VmStkTinyInt" && stack[3].SumType != "VmStkInt") { + if stack.Len() != 4 || (stack.Peek(3).SumType != "VmStkTinyInt" && stack.Peek(3).SumType != "VmStkInt") || (stack.Peek(2).SumType != "VmStkTinyInt" && stack.Peek(2).SumType != "VmStkInt") || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetFarmingInfo_BidaskDammResult @@ -3385,7 +3385,7 @@ func GetFeesInfo(ctx context.Context, executor Executor, reqAccountID ton.Accoun } func DecodeGetFeesInfo_BidaskDammResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 6 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") || (stack[3].SumType != "VmStkTinyInt" && stack[3].SumType != "VmStkInt") || (stack[4].SumType != "VmStkTinyInt" && stack[4].SumType != "VmStkInt") || (stack[5].SumType != "VmStkTinyInt" && stack[5].SumType != "VmStkInt") { + if stack.Len() != 6 || (stack.Peek(5).SumType != "VmStkTinyInt" && stack.Peek(5).SumType != "VmStkInt") || (stack.Peek(4).SumType != "VmStkTinyInt" && stack.Peek(4).SumType != "VmStkInt") || (stack.Peek(3).SumType != "VmStkTinyInt" && stack.Peek(3).SumType != "VmStkInt") || (stack.Peek(2).SumType != "VmStkTinyInt" && stack.Peek(2).SumType != "VmStkInt") || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetFeesInfo_BidaskDammResult @@ -3424,7 +3424,7 @@ func GetFillOut(ctx context.Context, executor Executor, reqAccountID ton.Account } func DecodeGetFillOut_MoonResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetFillOut_MoonResult @@ -3469,7 +3469,7 @@ func GetFixPriceDataV4(ctx context.Context, executor Executor, reqAccountID ton. } func DecodeGetFixPriceDataV4Result(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 13 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkSlice") || (stack[3].SumType != "VmStkSlice") || (stack[4].SumType != "VmStkSlice" && stack[4].SumType != "VmStkNull") || (stack[5].SumType != "VmStkTinyInt" && stack[5].SumType != "VmStkInt") || (stack[6].SumType != "VmStkSlice") || (stack[7].SumType != "VmStkTinyInt" && stack[7].SumType != "VmStkInt") || (stack[8].SumType != "VmStkSlice") || (stack[9].SumType != "VmStkTinyInt" && stack[9].SumType != "VmStkInt") || (stack[10].SumType != "VmStkTinyInt" && stack[10].SumType != "VmStkInt") || (stack[11].SumType != "VmStkTinyInt" && stack[11].SumType != "VmStkInt") || (stack[12].SumType != "VmStkCell" && stack[12].SumType != "VmStkNull") { + if stack.Len() != 13 || (stack.Peek(12).SumType != "VmStkTinyInt" && stack.Peek(12).SumType != "VmStkInt") || (stack.Peek(11).SumType != "VmStkTinyInt" && stack.Peek(11).SumType != "VmStkInt") || (stack.Peek(10).SumType != "VmStkSlice") || (stack.Peek(9).SumType != "VmStkSlice") || (stack.Peek(8).SumType != "VmStkSlice" && stack.Peek(8).SumType != "VmStkNull") || (stack.Peek(7).SumType != "VmStkTinyInt" && stack.Peek(7).SumType != "VmStkInt") || (stack.Peek(6).SumType != "VmStkSlice") || (stack.Peek(5).SumType != "VmStkTinyInt" && stack.Peek(5).SumType != "VmStkInt") || (stack.Peek(4).SumType != "VmStkSlice") || (stack.Peek(3).SumType != "VmStkTinyInt" && stack.Peek(3).SumType != "VmStkInt") || (stack.Peek(2).SumType != "VmStkTinyInt" && stack.Peek(2).SumType != "VmStkInt") || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkCell" && stack.Peek(0).SumType != "VmStkNull") { return "", nil, fmt.Errorf("invalid stack format") } var result GetFixPriceDataV4Result @@ -3502,7 +3502,7 @@ func GetFullDomain(ctx context.Context, executor Executor, reqAccountID ton.Acco } func DecodeGetFullDomainResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) < 1 || (stack[0].SumType != "VmStkSlice") { + if stack.Len() < 1 || (stack.Peek(stack.Len()-1).SumType != "VmStkSlice") { return "", nil, fmt.Errorf("invalid stack format") } var result GetFullDomainResult @@ -3547,7 +3547,7 @@ func GetFunding(ctx context.Context, executor Executor, reqAccountID ton.Account } func DecodeGetFunding_StormResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 5 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") || (stack[3].SumType != "VmStkTinyInt" && stack[3].SumType != "VmStkInt") || (stack[4].SumType != "VmStkTinyInt" && stack[4].SumType != "VmStkInt") { + if stack.Len() != 5 || (stack.Peek(4).SumType != "VmStkTinyInt" && stack.Peek(4).SumType != "VmStkInt") || (stack.Peek(3).SumType != "VmStkTinyInt" && stack.Peek(3).SumType != "VmStkInt") || (stack.Peek(2).SumType != "VmStkTinyInt" && stack.Peek(2).SumType != "VmStkInt") || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetFunding_StormResult @@ -3584,7 +3584,7 @@ func GetFundingSettings(ctx context.Context, executor Executor, reqAccountID ton } func DecodeGetFundingSettings_StormResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 5 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") || (stack[3].SumType != "VmStkTinyInt" && stack[3].SumType != "VmStkInt") || (stack[4].SumType != "VmStkTinyInt" && stack[4].SumType != "VmStkInt") { + if stack.Len() != 5 || (stack.Peek(4).SumType != "VmStkTinyInt" && stack.Peek(4).SumType != "VmStkInt") || (stack.Peek(3).SumType != "VmStkTinyInt" && stack.Peek(3).SumType != "VmStkInt") || (stack.Peek(2).SumType != "VmStkTinyInt" && stack.Peek(2).SumType != "VmStkInt") || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetFundingSettings_StormResult @@ -3620,7 +3620,7 @@ func GetHighloadData(ctx context.Context, executor Executor, reqAccountID ton.Ac } func DecodeGetHighloadData_StormResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 4 || (stack[0].SumType != "VmStkCell") || (stack[1].SumType != "VmStkCell") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") || (stack[3].SumType != "VmStkTinyInt" && stack[3].SumType != "VmStkInt") { + if stack.Len() != 4 || (stack.Peek(3).SumType != "VmStkCell") || (stack.Peek(2).SumType != "VmStkCell") || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetHighloadData_StormResult @@ -3653,7 +3653,7 @@ func GetId(ctx context.Context, executor Executor, reqAccountID ton.AccountID) ( } func DecodeGetId_MoonResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetId_MoonResult @@ -3686,7 +3686,7 @@ func GetIsInited(ctx context.Context, executor Executor, reqAccountID ton.Accoun } func DecodeGetIsInited_StormResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetIsInited_StormResult @@ -3723,7 +3723,7 @@ func GetJettonData(ctx context.Context, executor Executor, reqAccountID ton.Acco } func DecodeGetJettonDataResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) < 5 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkSlice") || (stack[3].SumType != "VmStkCell") || (stack[4].SumType != "VmStkCell") { + if stack.Len() < 5 || (stack.Peek(stack.Len()-1).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-1).SumType != "VmStkInt") || (stack.Peek(stack.Len()-2).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-2).SumType != "VmStkInt") || (stack.Peek(stack.Len()-3).SumType != "VmStkSlice") || (stack.Peek(stack.Len()-4).SumType != "VmStkCell") || (stack.Peek(stack.Len()-5).SumType != "VmStkCell") { return "", nil, fmt.Errorf("invalid stack format") } var result GetJettonDataResult @@ -3759,7 +3759,7 @@ func GetKeysData(ctx context.Context, executor Executor, reqAccountID ton.Accoun } func DecodeGetKeysData_StormResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 4 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkCell") || (stack[3].SumType != "VmStkTinyInt" && stack[3].SumType != "VmStkInt") { + if stack.Len() != 4 || (stack.Peek(3).SumType != "VmStkTinyInt" && stack.Peek(3).SumType != "VmStkInt") || (stack.Peek(2).SumType != "VmStkTinyInt" && stack.Peek(2).SumType != "VmStkInt") || (stack.Peek(1).SumType != "VmStkCell") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetKeysData_StormResult @@ -3792,7 +3792,7 @@ func GetLastCleanTime(ctx context.Context, executor Executor, reqAccountID ton.A } func DecodeGetLastCleanTimeResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetLastCleanTimeResult @@ -3825,7 +3825,7 @@ func GetLastFillUpTime(ctx context.Context, executor Executor, reqAccountID ton. } func DecodeGetLastFillUpTimeResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetLastFillUpTimeResult @@ -3858,7 +3858,7 @@ func GetLastPositionManagerCode(ctx context.Context, executor Executor, reqAccou } func DecodeGetLastPositionManagerCode_StormResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkCell") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkCell") { return "", nil, fmt.Errorf("invalid stack format") } var result GetLastPositionManagerCode_StormResult @@ -3893,7 +3893,7 @@ func GetLazerData(ctx context.Context, executor Executor, reqAccountID ton.Accou } func DecodeGetLazerData_StormResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 3 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") { + if stack.Len() != 3 || (stack.Peek(2).SumType != "VmStkTinyInt" && stack.Peek(2).SumType != "VmStkInt") || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetLazerData_StormResult @@ -3946,7 +3946,7 @@ func GetLiquidationPriceVpi(ctx context.Context, executor Executor, reqAccountID } func DecodeGetLiquidationPriceVpi_StormResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetLiquidationPriceVpi_StormResult @@ -3982,7 +3982,7 @@ func GetLiquidityData(ctx context.Context, executor Executor, reqAccountID ton.A } func DecodeGetLiquidityData_BidaskResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 4 || (stack[0].SumType != "VmStkSlice") || (stack[1].SumType != "VmStkSlice") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") || (stack[3].SumType != "VmStkTinyInt" && stack[3].SumType != "VmStkInt") { + if stack.Len() != 4 || (stack.Peek(3).SumType != "VmStkSlice") || (stack.Peek(2).SumType != "VmStkSlice") || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetLiquidityData_BidaskResult @@ -4036,7 +4036,7 @@ func GetLiquidityDepositAddress(ctx context.Context, executor Executor, reqAccou } func DecodeGetLiquidityDepositAddress_DedustResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkSlice") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkSlice") { return "", nil, fmt.Errorf("invalid stack format") } var result GetLiquidityDepositAddress_DedustResult @@ -4096,7 +4096,7 @@ func GetLiquidityDepositoryAddress(ctx context.Context, executor Executor, reqAc } func DecodeGetLiquidityDepositoryAddress_CoffeeResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 2 || (stack[0].SumType != "VmStkSlice") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") { + if stack.Len() != 2 || (stack.Peek(1).SumType != "VmStkSlice") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetLiquidityDepositoryAddress_CoffeeResult @@ -4151,7 +4151,7 @@ func GetLiquidityDepositoryAddressNoSettings(ctx context.Context, executor Execu } func DecodeGetLiquidityDepositoryAddressNoSettings_CoffeeResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 2 || (stack[0].SumType != "VmStkSlice") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") { + if stack.Len() != 2 || (stack.Peek(1).SumType != "VmStkSlice") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetLiquidityDepositoryAddressNoSettings_CoffeeResult @@ -4189,7 +4189,7 @@ func GetLiquidityInfo(ctx context.Context, executor Executor, reqAccountID ton.A } func DecodeGetLiquidityInfo_BidaskDammResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 6 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") || (stack[3].SumType != "VmStkTinyInt" && stack[3].SumType != "VmStkInt") || (stack[4].SumType != "VmStkTinyInt" && stack[4].SumType != "VmStkInt") || (stack[5].SumType != "VmStkTinyInt" && stack[5].SumType != "VmStkInt") { + if stack.Len() != 6 || (stack.Peek(5).SumType != "VmStkTinyInt" && stack.Peek(5).SumType != "VmStkInt") || (stack.Peek(4).SumType != "VmStkTinyInt" && stack.Peek(4).SumType != "VmStkInt") || (stack.Peek(3).SumType != "VmStkTinyInt" && stack.Peek(3).SumType != "VmStkInt") || (stack.Peek(2).SumType != "VmStkTinyInt" && stack.Peek(2).SumType != "VmStkInt") || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetLiquidityInfo_BidaskDammResult @@ -4225,7 +4225,7 @@ func GetLockerBillData(ctx context.Context, executor Executor, reqAccountID ton. } func DecodeGetLockerBillDataResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 4 || (stack[0].SumType != "VmStkSlice") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkSlice") || (stack[3].SumType != "VmStkTinyInt" && stack[3].SumType != "VmStkInt") { + if stack.Len() != 4 || (stack.Peek(3).SumType != "VmStkSlice") || (stack.Peek(2).SumType != "VmStkTinyInt" && stack.Peek(2).SumType != "VmStkInt") || (stack.Peek(1).SumType != "VmStkSlice") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetLockerBillDataResult @@ -4263,7 +4263,7 @@ func GetLockerData(ctx context.Context, executor Executor, reqAccountID ton.Acco } func DecodeGetLockerDataResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 6 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") || (stack[3].SumType != "VmStkTinyInt" && stack[3].SumType != "VmStkInt") || (stack[4].SumType != "VmStkTinyInt" && stack[4].SumType != "VmStkInt") || (stack[5].SumType != "VmStkTinyInt" && stack[5].SumType != "VmStkInt") { + if stack.Len() != 6 || (stack.Peek(5).SumType != "VmStkTinyInt" && stack.Peek(5).SumType != "VmStkInt") || (stack.Peek(4).SumType != "VmStkTinyInt" && stack.Peek(4).SumType != "VmStkInt") || (stack.Peek(3).SumType != "VmStkTinyInt" && stack.Peek(3).SumType != "VmStkInt") || (stack.Peek(2).SumType != "VmStkTinyInt" && stack.Peek(2).SumType != "VmStkInt") || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetLockerDataResult @@ -4301,7 +4301,7 @@ func GetLockupData(ctx context.Context, executor Executor, reqAccountID ton.Acco } func DecodeGetLockupDataResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 6 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") || (stack[3].SumType != "VmStkTinyInt" && stack[3].SumType != "VmStkInt") || (stack[4].SumType != "VmStkTinyInt" && stack[4].SumType != "VmStkInt") || (stack[5].SumType != "VmStkTinyInt" && stack[5].SumType != "VmStkInt") { + if stack.Len() != 6 || (stack.Peek(5).SumType != "VmStkTinyInt" && stack.Peek(5).SumType != "VmStkInt") || (stack.Peek(4).SumType != "VmStkTinyInt" && stack.Peek(4).SumType != "VmStkInt") || (stack.Peek(3).SumType != "VmStkTinyInt" && stack.Peek(3).SumType != "VmStkInt") || (stack.Peek(2).SumType != "VmStkTinyInt" && stack.Peek(2).SumType != "VmStkInt") || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetLockupDataResult @@ -4343,7 +4343,7 @@ func GetLpAccountAddress(ctx context.Context, executor Executor, reqAccountID to } func DecodeGetLpAccountAddress_StonfiResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkSlice") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkSlice") { return "", nil, fmt.Errorf("invalid stack format") } var result GetLpAccountAddress_StonfiResult @@ -4379,7 +4379,7 @@ func GetLpAccountData(ctx context.Context, executor Executor, reqAccountID ton.A } func DecodeGetLpAccountData_StonfiResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 4 || (stack[0].SumType != "VmStkSlice") || (stack[1].SumType != "VmStkSlice") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") || (stack[3].SumType != "VmStkTinyInt" && stack[3].SumType != "VmStkInt") { + if stack.Len() != 4 || (stack.Peek(3).SumType != "VmStkSlice") || (stack.Peek(2).SumType != "VmStkSlice") || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetLpAccountData_StonfiResult @@ -4414,7 +4414,7 @@ func GetLpData(ctx context.Context, executor Executor, reqAccountID ton.AccountI } func DecodeGetLpData_MegatonResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 3 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkCell") || (stack[2].SumType != "VmStkCell") { + if stack.Len() != 3 || (stack.Peek(2).SumType != "VmStkTinyInt" && stack.Peek(2).SumType != "VmStkInt") || (stack.Peek(1).SumType != "VmStkCell") || (stack.Peek(0).SumType != "VmStkCell") { return "", nil, fmt.Errorf("invalid stack format") } var result GetLpData_MegatonResult @@ -4453,7 +4453,7 @@ func GetLpMiningData(ctx context.Context, executor Executor, reqAccountID ton.Ac } func DecodeGetLpMiningData_MegatonResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 7 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") || (stack[3].SumType != "VmStkTinyInt" && stack[3].SumType != "VmStkInt") || (stack[4].SumType != "VmStkTinyInt" && stack[4].SumType != "VmStkInt") || (stack[5].SumType != "VmStkTinyInt" && stack[5].SumType != "VmStkInt") || (stack[6].SumType != "VmStkCell") { + if stack.Len() != 7 || (stack.Peek(6).SumType != "VmStkTinyInt" && stack.Peek(6).SumType != "VmStkInt") || (stack.Peek(5).SumType != "VmStkTinyInt" && stack.Peek(5).SumType != "VmStkInt") || (stack.Peek(4).SumType != "VmStkTinyInt" && stack.Peek(4).SumType != "VmStkInt") || (stack.Peek(3).SumType != "VmStkTinyInt" && stack.Peek(3).SumType != "VmStkInt") || (stack.Peek(2).SumType != "VmStkTinyInt" && stack.Peek(2).SumType != "VmStkInt") || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkCell") { return "", nil, fmt.Errorf("invalid stack format") } var result GetLpMiningData_MegatonResult @@ -4486,7 +4486,7 @@ func GetLpMinterAddress(ctx context.Context, executor Executor, reqAccountID ton } func DecodeGetLpMinterAddress_StormResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkSlice") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkSlice") { return "", nil, fmt.Errorf("invalid stack format") } var result GetLpMinterAddress_StormResult @@ -4528,7 +4528,7 @@ func GetLpMultitokenWallet(ctx context.Context, executor Executor, reqAccountID } func DecodeGetLpMultitokenWallet_BidaskResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkSlice") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkSlice") { return "", nil, fmt.Errorf("invalid stack format") } var result GetLpMultitokenWallet_BidaskResult @@ -4571,7 +4571,7 @@ func GetLpSwapData(ctx context.Context, executor Executor, reqAccountID ton.Acco } func DecodeGetLpSwapData_MegatonResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 11 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkSlice") || (stack[3].SumType != "VmStkSlice") || (stack[4].SumType != "VmStkSlice") || (stack[5].SumType != "VmStkTinyInt" && stack[5].SumType != "VmStkInt") || (stack[6].SumType != "VmStkTinyInt" && stack[6].SumType != "VmStkInt") || (stack[7].SumType != "VmStkSlice") || (stack[8].SumType != "VmStkSlice") || (stack[9].SumType != "VmStkTinyInt" && stack[9].SumType != "VmStkInt") || (stack[10].SumType != "VmStkTinyInt" && stack[10].SumType != "VmStkInt") { + if stack.Len() != 11 || (stack.Peek(10).SumType != "VmStkTinyInt" && stack.Peek(10).SumType != "VmStkInt") || (stack.Peek(9).SumType != "VmStkTinyInt" && stack.Peek(9).SumType != "VmStkInt") || (stack.Peek(8).SumType != "VmStkSlice") || (stack.Peek(7).SumType != "VmStkSlice") || (stack.Peek(6).SumType != "VmStkSlice") || (stack.Peek(5).SumType != "VmStkTinyInt" && stack.Peek(5).SumType != "VmStkInt") || (stack.Peek(4).SumType != "VmStkTinyInt" && stack.Peek(4).SumType != "VmStkInt") || (stack.Peek(3).SumType != "VmStkSlice") || (stack.Peek(2).SumType != "VmStkSlice") || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetLpSwapData_MegatonResult @@ -4604,7 +4604,7 @@ func GetMasterAddress(ctx context.Context, executor Executor, reqAccountID ton.A } func DecodeGetMasterAddress_CoffeeStakingVaultResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkSlice") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkSlice") { return "", nil, fmt.Errorf("invalid stack format") } var result GetMasterAddress_CoffeeStakingVaultResult @@ -4649,7 +4649,7 @@ func GetMember(ctx context.Context, executor Executor, reqAccountID ton.AccountI } func DecodeGetMember_WhalesNominatorResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) < 4 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") || (stack[3].SumType != "VmStkTinyInt" && stack[3].SumType != "VmStkInt") { + if stack.Len() < 4 || (stack.Peek(stack.Len()-1).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-1).SumType != "VmStkInt") || (stack.Peek(stack.Len()-2).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-2).SumType != "VmStkInt") || (stack.Peek(stack.Len()-3).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-3).SumType != "VmStkInt") || (stack.Peek(stack.Len()-4).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-4).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetMember_WhalesNominatorResult @@ -4682,7 +4682,7 @@ func GetMembersRaw(ctx context.Context, executor Executor, reqAccountID ton.Acco } func DecodeGetMembersRaw_WhalesNominatorResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkCell") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkCell") { return "", nil, fmt.Errorf("invalid stack format") } var result GetMembersRaw_WhalesNominatorResult @@ -4720,7 +4720,7 @@ func GetMinFees(ctx context.Context, executor Executor, reqAccountID ton.Account } func DecodeGetMinFees_StormResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 6 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") || (stack[3].SumType != "VmStkTinyInt" && stack[3].SumType != "VmStkInt") || (stack[4].SumType != "VmStkTinyInt" && stack[4].SumType != "VmStkInt") || (stack[5].SumType != "VmStkTinyInt" && stack[5].SumType != "VmStkInt") { + if stack.Len() != 6 || (stack.Peek(5).SumType != "VmStkTinyInt" && stack.Peek(5).SumType != "VmStkInt") || (stack.Peek(4).SumType != "VmStkTinyInt" && stack.Peek(4).SumType != "VmStkInt") || (stack.Peek(3).SumType != "VmStkTinyInt" && stack.Peek(3).SumType != "VmStkInt") || (stack.Peek(2).SumType != "VmStkTinyInt" && stack.Peek(2).SumType != "VmStkInt") || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetMinFees_StormResult @@ -4758,7 +4758,7 @@ func GetMiningData(ctx context.Context, executor Executor, reqAccountID ton.Acco } func DecodeGetMiningData_MegatonResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 6 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") || (stack[3].SumType != "VmStkTinyInt" && stack[3].SumType != "VmStkInt") || (stack[4].SumType != "VmStkTinyInt" && stack[4].SumType != "VmStkInt") || (stack[5].SumType != "VmStkTinyInt" && stack[5].SumType != "VmStkInt") { + if stack.Len() != 6 || (stack.Peek(5).SumType != "VmStkTinyInt" && stack.Peek(5).SumType != "VmStkInt") || (stack.Peek(4).SumType != "VmStkTinyInt" && stack.Peek(4).SumType != "VmStkInt") || (stack.Peek(3).SumType != "VmStkTinyInt" && stack.Peek(3).SumType != "VmStkInt") || (stack.Peek(2).SumType != "VmStkTinyInt" && stack.Peek(2).SumType != "VmStkInt") || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetMiningData_MegatonResult @@ -4794,7 +4794,7 @@ func GetMultisigData(ctx context.Context, executor Executor, reqAccountID ton.Ac } func DecodeGetMultisigDataResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) < 4 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkCell") || (stack[3].SumType != "VmStkCell" && stack[3].SumType != "VmStkNull") { + if stack.Len() < 4 || (stack.Peek(stack.Len()-1).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-1).SumType != "VmStkInt") || (stack.Peek(stack.Len()-2).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-2).SumType != "VmStkInt") || (stack.Peek(stack.Len()-3).SumType != "VmStkCell") || (stack.Peek(stack.Len()-4).SumType != "VmStkCell" && stack.Peek(stack.Len()-4).SumType != "VmStkNull") { return "", nil, fmt.Errorf("invalid stack format") } var result GetMultisigDataResult @@ -4827,7 +4827,7 @@ func GetNextAdminAddress(ctx context.Context, executor Executor, reqAccountID to } func DecodeGetNextAdminAddressResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkSlice") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkSlice") { return "", nil, fmt.Errorf("invalid stack format") } var result GetNextAdminAddressResult @@ -4862,7 +4862,7 @@ func GetNextProofInfo(ctx context.Context, executor Executor, reqAccountID ton.A } func DecodeGetNextProofInfoResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) < 3 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") { + if stack.Len() < 3 || (stack.Peek(stack.Len()-1).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-1).SumType != "VmStkInt") || (stack.Peek(stack.Len()-2).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-2).SumType != "VmStkInt") || (stack.Peek(stack.Len()-3).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-3).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetNextProofInfoResult @@ -4901,7 +4901,7 @@ func GetNftAddressByIndex(ctx context.Context, executor Executor, reqAccountID t } func DecodeGetNftAddressByIndexResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) < 1 || (stack[0].SumType != "VmStkSlice") { + if stack.Len() < 1 || (stack.Peek(stack.Len()-1).SumType != "VmStkSlice") { return "", nil, fmt.Errorf("invalid stack format") } var result GetNftAddressByIndexResult @@ -4935,7 +4935,7 @@ func GetNftApiInfo(ctx context.Context, executor Executor, reqAccountID ton.Acco } func DecodeGetNftApiInfoResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) < 2 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkCell") { + if stack.Len() < 2 || (stack.Peek(stack.Len()-1).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-1).SumType != "VmStkInt") || (stack.Peek(stack.Len()-2).SumType != "VmStkCell") { return "", nil, fmt.Errorf("invalid stack format") } var result GetNftApiInfoResult @@ -4979,7 +4979,7 @@ func GetNftContent(ctx context.Context, executor Executor, reqAccountID ton.Acco } func DecodeGetNftContentResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) < 1 || (stack[0].SumType != "VmStkCell") { + if stack.Len() < 1 || (stack.Peek(stack.Len()-1).SumType != "VmStkCell") { return "", nil, fmt.Errorf("invalid stack format") } var result GetNftContentResult @@ -5016,7 +5016,7 @@ func GetNftData(ctx context.Context, executor Executor, reqAccountID ton.Account } func DecodeGetNftDataResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) < 5 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkSlice") || (stack[3].SumType != "VmStkSlice") || (stack[4].SumType != "VmStkCell") { + if stack.Len() < 5 || (stack.Peek(stack.Len()-1).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-1).SumType != "VmStkInt") || (stack.Peek(stack.Len()-2).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-2).SumType != "VmStkInt") || (stack.Peek(stack.Len()-3).SumType != "VmStkSlice") || (stack.Peek(stack.Len()-4).SumType != "VmStkSlice") || (stack.Peek(stack.Len()-5).SumType != "VmStkCell") { return "", nil, fmt.Errorf("invalid stack format") } var result GetNftDataResult @@ -5057,7 +5057,7 @@ func GetNominatorData(ctx context.Context, executor Executor, reqAccountID ton.A } func DecodeGetNominatorDataResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) < 3 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") { + if stack.Len() < 3 || (stack.Peek(stack.Len()-1).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-1).SumType != "VmStkInt") || (stack.Peek(stack.Len()-2).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-2).SumType != "VmStkInt") || (stack.Peek(stack.Len()-3).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-3).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetNominatorDataResult @@ -5096,7 +5096,7 @@ func GetOracleData(ctx context.Context, executor Executor, reqAccountID ton.Acco } func DecodeGetOracleData_StormResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 7 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") || (stack[3].SumType != "VmStkTinyInt" && stack[3].SumType != "VmStkInt") || (stack[4].SumType != "VmStkTinyInt" && stack[4].SumType != "VmStkInt") || (stack[5].SumType != "VmStkTinyInt" && stack[5].SumType != "VmStkInt") || (stack[6].SumType != "VmStkCell") { + if stack.Len() != 7 || (stack.Peek(6).SumType != "VmStkTinyInt" && stack.Peek(6).SumType != "VmStkInt") || (stack.Peek(5).SumType != "VmStkTinyInt" && stack.Peek(5).SumType != "VmStkInt") || (stack.Peek(4).SumType != "VmStkTinyInt" && stack.Peek(4).SumType != "VmStkInt") || (stack.Peek(3).SumType != "VmStkTinyInt" && stack.Peek(3).SumType != "VmStkInt") || (stack.Peek(2).SumType != "VmStkTinyInt" && stack.Peek(2).SumType != "VmStkInt") || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkCell") { return "", nil, fmt.Errorf("invalid stack format") } var result GetOracleData_StormResult @@ -5135,7 +5135,7 @@ func GetOrderAddress(ctx context.Context, executor Executor, reqAccountID ton.Ac } func DecodeGetOrderAddressResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) < 1 || (stack[0].SumType != "VmStkSlice") { + if stack.Len() < 1 || (stack.Peek(stack.Len()-1).SumType != "VmStkSlice") { return "", nil, fmt.Errorf("invalid stack format") } var result GetOrderAddressResult @@ -5168,7 +5168,7 @@ func GetOrderAmount(ctx context.Context, executor Executor, reqAccountID ton.Acc } func DecodeGetOrderAmount_MoonResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetOrderAmount_MoonResult @@ -5209,7 +5209,7 @@ func GetOrderData(ctx context.Context, executor Executor, reqAccountID ton.Accou } func DecodeGetOrderDataResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) < 9 || (stack[0].SumType != "VmStkSlice") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") || (stack[3].SumType != "VmStkTinyInt" && stack[3].SumType != "VmStkInt") || (stack[4].SumType != "VmStkCell") || (stack[5].SumType != "VmStkTinyInt" && stack[5].SumType != "VmStkInt") || (stack[6].SumType != "VmStkTinyInt" && stack[6].SumType != "VmStkInt") || (stack[7].SumType != "VmStkTinyInt" && stack[7].SumType != "VmStkInt") || (stack[8].SumType != "VmStkCell") { + if stack.Len() < 9 || (stack.Peek(stack.Len()-1).SumType != "VmStkSlice") || (stack.Peek(stack.Len()-2).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-2).SumType != "VmStkInt") || (stack.Peek(stack.Len()-3).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-3).SumType != "VmStkInt") || (stack.Peek(stack.Len()-4).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-4).SumType != "VmStkInt") || (stack.Peek(stack.Len()-5).SumType != "VmStkCell") || (stack.Peek(stack.Len()-6).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-6).SumType != "VmStkInt") || (stack.Peek(stack.Len()-7).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-7).SumType != "VmStkInt") || (stack.Peek(stack.Len()-8).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-8).SumType != "VmStkInt") || (stack.Peek(stack.Len()-9).SumType != "VmStkCell") { return "", nil, fmt.Errorf("invalid stack format") } var result GetOrderDataResult @@ -5242,7 +5242,7 @@ func GetOwnerAddress(ctx context.Context, executor Executor, reqAccountID ton.Ac } func DecodeGetOwnerAddress_CocoonResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkSlice") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkSlice") { return "", nil, fmt.Errorf("invalid stack format") } var result GetOwnerAddress_CocoonResult @@ -5281,7 +5281,7 @@ func GetParams(ctx context.Context, executor Executor, reqAccountID ton.AccountI } func DecodeGetParams_WhalesNominatorResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 7 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") || (stack[3].SumType != "VmStkTinyInt" && stack[3].SumType != "VmStkInt") || (stack[4].SumType != "VmStkTinyInt" && stack[4].SumType != "VmStkInt") || (stack[5].SumType != "VmStkTinyInt" && stack[5].SumType != "VmStkInt") || (stack[6].SumType != "VmStkTinyInt" && stack[6].SumType != "VmStkInt") { + if stack.Len() != 7 || (stack.Peek(6).SumType != "VmStkTinyInt" && stack.Peek(6).SumType != "VmStkInt") || (stack.Peek(5).SumType != "VmStkTinyInt" && stack.Peek(5).SumType != "VmStkInt") || (stack.Peek(4).SumType != "VmStkTinyInt" && stack.Peek(4).SumType != "VmStkInt") || (stack.Peek(3).SumType != "VmStkTinyInt" && stack.Peek(3).SumType != "VmStkInt") || (stack.Peek(2).SumType != "VmStkTinyInt" && stack.Peek(2).SumType != "VmStkInt") || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetParams_WhalesNominatorResult @@ -5314,7 +5314,7 @@ func GetPauseTime(ctx context.Context, executor Executor, reqAccountID ton.Accou } func DecodeGetPauseTime_StormResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkCell") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkCell") { return "", nil, fmt.Errorf("invalid stack format") } var result GetPauseTime_StormResult @@ -5353,7 +5353,7 @@ func GetPaymentInfo(ctx context.Context, executor Executor, reqAccountID ton.Acc } func DecodeGetPaymentInfo_SubscriptionV2Result(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 7 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") || (stack[3].SumType != "VmStkTinyInt" && stack[3].SumType != "VmStkInt") || (stack[4].SumType != "VmStkTinyInt" && stack[4].SumType != "VmStkInt") || (stack[5].SumType != "VmStkTinyInt" && stack[5].SumType != "VmStkInt") || (stack[6].SumType != "VmStkTinyInt" && stack[6].SumType != "VmStkInt") { + if stack.Len() != 7 || (stack.Peek(6).SumType != "VmStkTinyInt" && stack.Peek(6).SumType != "VmStkInt") || (stack.Peek(5).SumType != "VmStkTinyInt" && stack.Peek(5).SumType != "VmStkInt") || (stack.Peek(4).SumType != "VmStkTinyInt" && stack.Peek(4).SumType != "VmStkInt") || (stack.Peek(3).SumType != "VmStkTinyInt" && stack.Peek(3).SumType != "VmStkInt") || (stack.Peek(2).SumType != "VmStkTinyInt" && stack.Peek(2).SumType != "VmStkInt") || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetPaymentInfo_SubscriptionV2Result @@ -5392,7 +5392,7 @@ func GetPegAdjustCost(ctx context.Context, executor Executor, reqAccountID ton.A } func DecodeGetPegAdjustCost_StormResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetPegAdjustCost_StormResult @@ -5434,7 +5434,7 @@ func GetPipe(ctx context.Context, executor Executor, reqAccountID ton.AccountID, } func DecodeGetPipe_MoonResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkSlice") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkSlice") { return "", nil, fmt.Errorf("invalid stack format") } var result GetPipe_MoonResult @@ -5470,7 +5470,7 @@ func GetPluginList(ctx context.Context, executor Executor, reqAccountID ton.Acco } func DecodeGetPluginListResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) < 1 || (stack[0].SumType != "VmStkTuple" && stack[0].SumType != "VmStkNull") { + if stack.Len() < 1 || (stack.Peek(stack.Len()-1).SumType != "VmStkTuple" && stack.Peek(stack.Len()-1).SumType != "VmStkNull") { return "", nil, fmt.Errorf("invalid stack format") } var result GetPluginListResult @@ -5503,7 +5503,7 @@ func GetPool(ctx context.Context, executor Executor, reqAccountID ton.AccountID) } func DecodeGetPool_MoonResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkSlice") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkSlice") { return "", nil, fmt.Errorf("invalid stack format") } var result GetPool_MoonResult @@ -5536,7 +5536,7 @@ func GetPoolAddr(ctx context.Context, executor Executor, reqAccountID ton.Accoun } func DecodeGetPoolAddr_BidaskResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkSlice") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkSlice") { return "", nil, fmt.Errorf("invalid stack format") } var result GetPoolAddr_BidaskResult @@ -5583,7 +5583,7 @@ func GetPoolAddress(ctx context.Context, executor Executor, reqAccountID ton.Acc } func DecodeGetPoolAddress_StonfiResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkSlice") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkSlice") { return "", nil, fmt.Errorf("invalid stack format") } var result GetPoolAddress_StonfiResult @@ -5633,7 +5633,7 @@ func GetPoolAddressNoSettings(ctx context.Context, executor Executor, reqAccount } func DecodeGetPoolAddressNoSettings_CoffeeResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 2 || (stack[0].SumType != "VmStkSlice") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") { + if stack.Len() != 2 || (stack.Peek(1).SumType != "VmStkSlice") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetPoolAddressNoSettings_CoffeeResult @@ -5693,7 +5693,7 @@ func GetPoolCreatorAddress(ctx context.Context, executor Executor, reqAccountID } func DecodeGetPoolCreatorAddress_CoffeeResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 2 || (stack[0].SumType != "VmStkSlice") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") { + if stack.Len() != 2 || (stack.Peek(1).SumType != "VmStkSlice") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetPoolCreatorAddress_CoffeeResult @@ -5748,7 +5748,7 @@ func GetPoolCreatorAddressNoSettings(ctx context.Context, executor Executor, req } func DecodeGetPoolCreatorAddressNoSettings_CoffeeResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 2 || (stack[0].SumType != "VmStkSlice") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") { + if stack.Len() != 2 || (stack.Peek(1).SumType != "VmStkSlice") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetPoolCreatorAddressNoSettings_CoffeeResult @@ -5920,7 +5920,7 @@ func GetPoolData(ctx context.Context, executor Executor, reqAccountID ton.Accoun } func DecodeGetPoolData_AffluentResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 16 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkSlice" && stack[2].SumType != "VmStkNull") || (stack[3].SumType != "VmStkSlice" && stack[3].SumType != "VmStkNull") || (stack[4].SumType != "VmStkTinyInt" && stack[4].SumType != "VmStkInt") || (stack[5].SumType != "VmStkSlice" && stack[5].SumType != "VmStkNull") || (stack[6].SumType != "VmStkCell" && stack[6].SumType != "VmStkNull") || (stack[7].SumType != "VmStkTinyInt" && stack[7].SumType != "VmStkInt") || (stack[8].SumType != "VmStkTinyInt" && stack[8].SumType != "VmStkInt") || (stack[9].SumType != "VmStkTinyInt" && stack[9].SumType != "VmStkInt") || (stack[10].SumType != "VmStkTinyInt" && stack[10].SumType != "VmStkInt") || (stack[11].SumType != "VmStkTinyInt" && stack[11].SumType != "VmStkInt") || (stack[12].SumType != "VmStkTinyInt" && stack[12].SumType != "VmStkInt") || (stack[13].SumType != "VmStkTuple" && stack[13].SumType != "VmStkNull") || (stack[14].SumType != "VmStkCell" && stack[14].SumType != "VmStkNull") || (stack[15].SumType != "VmStkCell") { + if stack.Len() != 16 || (stack.Peek(15).SumType != "VmStkTinyInt" && stack.Peek(15).SumType != "VmStkInt") || (stack.Peek(14).SumType != "VmStkTinyInt" && stack.Peek(14).SumType != "VmStkInt") || (stack.Peek(13).SumType != "VmStkSlice" && stack.Peek(13).SumType != "VmStkNull") || (stack.Peek(12).SumType != "VmStkSlice" && stack.Peek(12).SumType != "VmStkNull") || (stack.Peek(11).SumType != "VmStkTinyInt" && stack.Peek(11).SumType != "VmStkInt") || (stack.Peek(10).SumType != "VmStkSlice" && stack.Peek(10).SumType != "VmStkNull") || (stack.Peek(9).SumType != "VmStkCell" && stack.Peek(9).SumType != "VmStkNull") || (stack.Peek(8).SumType != "VmStkTinyInt" && stack.Peek(8).SumType != "VmStkInt") || (stack.Peek(7).SumType != "VmStkTinyInt" && stack.Peek(7).SumType != "VmStkInt") || (stack.Peek(6).SumType != "VmStkTinyInt" && stack.Peek(6).SumType != "VmStkInt") || (stack.Peek(5).SumType != "VmStkTinyInt" && stack.Peek(5).SumType != "VmStkInt") || (stack.Peek(4).SumType != "VmStkTinyInt" && stack.Peek(4).SumType != "VmStkInt") || (stack.Peek(3).SumType != "VmStkTinyInt" && stack.Peek(3).SumType != "VmStkInt") || (stack.Peek(2).SumType != "VmStkTuple" && stack.Peek(2).SumType != "VmStkNull") || (stack.Peek(1).SumType != "VmStkCell" && stack.Peek(1).SumType != "VmStkNull") || (stack.Peek(0).SumType != "VmStkCell") { return "", nil, fmt.Errorf("invalid stack format") } var result GetPoolData_AffluentResult @@ -5929,7 +5929,7 @@ func DecodeGetPoolData_AffluentResult(stack tlb.VmStack) (resultType string, res } func DecodeGetPoolData_DaolamaResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 5 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") || (stack[3].SumType != "VmStkTinyInt" && stack[3].SumType != "VmStkInt") || (stack[4].SumType != "VmStkTinyInt" && stack[4].SumType != "VmStkInt") { + if stack.Len() != 5 || (stack.Peek(4).SumType != "VmStkTinyInt" && stack.Peek(4).SumType != "VmStkInt") || (stack.Peek(3).SumType != "VmStkTinyInt" && stack.Peek(3).SumType != "VmStkInt") || (stack.Peek(2).SumType != "VmStkTinyInt" && stack.Peek(2).SumType != "VmStkInt") || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetPoolData_DaolamaResult @@ -5938,7 +5938,7 @@ func DecodeGetPoolData_DaolamaResult(stack tlb.VmStack) (resultType string, resu } func DecodeGetPoolData_StonfiResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 10 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkSlice") || (stack[3].SumType != "VmStkSlice") || (stack[4].SumType != "VmStkTinyInt" && stack[4].SumType != "VmStkInt") || (stack[5].SumType != "VmStkTinyInt" && stack[5].SumType != "VmStkInt") || (stack[6].SumType != "VmStkTinyInt" && stack[6].SumType != "VmStkInt") || (stack[7].SumType != "VmStkSlice") || (stack[8].SumType != "VmStkTinyInt" && stack[8].SumType != "VmStkInt") || (stack[9].SumType != "VmStkTinyInt" && stack[9].SumType != "VmStkInt") { + if stack.Len() != 10 || (stack.Peek(9).SumType != "VmStkTinyInt" && stack.Peek(9).SumType != "VmStkInt") || (stack.Peek(8).SumType != "VmStkTinyInt" && stack.Peek(8).SumType != "VmStkInt") || (stack.Peek(7).SumType != "VmStkSlice") || (stack.Peek(6).SumType != "VmStkSlice") || (stack.Peek(5).SumType != "VmStkTinyInt" && stack.Peek(5).SumType != "VmStkInt") || (stack.Peek(4).SumType != "VmStkTinyInt" && stack.Peek(4).SumType != "VmStkInt") || (stack.Peek(3).SumType != "VmStkTinyInt" && stack.Peek(3).SumType != "VmStkInt") || (stack.Peek(2).SumType != "VmStkSlice") || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetPoolData_StonfiResult @@ -5947,7 +5947,7 @@ func DecodeGetPoolData_StonfiResult(stack tlb.VmStack) (resultType string, resul } func DecodeGetPoolData_StonfiV2Result(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 12 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkSlice") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") || (stack[3].SumType != "VmStkTinyInt" && stack[3].SumType != "VmStkInt") || (stack[4].SumType != "VmStkTinyInt" && stack[4].SumType != "VmStkInt") || (stack[5].SumType != "VmStkSlice") || (stack[6].SumType != "VmStkSlice") || (stack[7].SumType != "VmStkTinyInt" && stack[7].SumType != "VmStkInt") || (stack[8].SumType != "VmStkTinyInt" && stack[8].SumType != "VmStkInt") || (stack[9].SumType != "VmStkSlice") || (stack[10].SumType != "VmStkTinyInt" && stack[10].SumType != "VmStkInt") || (stack[11].SumType != "VmStkTinyInt" && stack[11].SumType != "VmStkInt") { + if stack.Len() != 12 || (stack.Peek(11).SumType != "VmStkTinyInt" && stack.Peek(11).SumType != "VmStkInt") || (stack.Peek(10).SumType != "VmStkSlice") || (stack.Peek(9).SumType != "VmStkTinyInt" && stack.Peek(9).SumType != "VmStkInt") || (stack.Peek(8).SumType != "VmStkTinyInt" && stack.Peek(8).SumType != "VmStkInt") || (stack.Peek(7).SumType != "VmStkTinyInt" && stack.Peek(7).SumType != "VmStkInt") || (stack.Peek(6).SumType != "VmStkSlice") || (stack.Peek(5).SumType != "VmStkSlice") || (stack.Peek(4).SumType != "VmStkTinyInt" && stack.Peek(4).SumType != "VmStkInt") || (stack.Peek(3).SumType != "VmStkTinyInt" && stack.Peek(3).SumType != "VmStkInt") || (stack.Peek(2).SumType != "VmStkSlice") || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetPoolData_StonfiV2Result @@ -5956,7 +5956,7 @@ func DecodeGetPoolData_StonfiV2Result(stack tlb.VmStack) (resultType string, res } func DecodeGetPoolData_StonfiV2StableswapResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 13 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkSlice") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") || (stack[3].SumType != "VmStkTinyInt" && stack[3].SumType != "VmStkInt") || (stack[4].SumType != "VmStkTinyInt" && stack[4].SumType != "VmStkInt") || (stack[5].SumType != "VmStkSlice") || (stack[6].SumType != "VmStkSlice") || (stack[7].SumType != "VmStkTinyInt" && stack[7].SumType != "VmStkInt") || (stack[8].SumType != "VmStkTinyInt" && stack[8].SumType != "VmStkInt") || (stack[9].SumType != "VmStkSlice") || (stack[10].SumType != "VmStkTinyInt" && stack[10].SumType != "VmStkInt") || (stack[11].SumType != "VmStkTinyInt" && stack[11].SumType != "VmStkInt") || (stack[12].SumType != "VmStkTinyInt" && stack[12].SumType != "VmStkInt") { + if stack.Len() != 13 || (stack.Peek(12).SumType != "VmStkTinyInt" && stack.Peek(12).SumType != "VmStkInt") || (stack.Peek(11).SumType != "VmStkSlice") || (stack.Peek(10).SumType != "VmStkTinyInt" && stack.Peek(10).SumType != "VmStkInt") || (stack.Peek(9).SumType != "VmStkTinyInt" && stack.Peek(9).SumType != "VmStkInt") || (stack.Peek(8).SumType != "VmStkTinyInt" && stack.Peek(8).SumType != "VmStkInt") || (stack.Peek(7).SumType != "VmStkSlice") || (stack.Peek(6).SumType != "VmStkSlice") || (stack.Peek(5).SumType != "VmStkTinyInt" && stack.Peek(5).SumType != "VmStkInt") || (stack.Peek(4).SumType != "VmStkTinyInt" && stack.Peek(4).SumType != "VmStkInt") || (stack.Peek(3).SumType != "VmStkSlice") || (stack.Peek(2).SumType != "VmStkTinyInt" && stack.Peek(2).SumType != "VmStkInt") || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetPoolData_StonfiV2StableswapResult @@ -5965,7 +5965,7 @@ func DecodeGetPoolData_StonfiV2StableswapResult(stack tlb.VmStack) (resultType s } func DecodeGetPoolData_StonfiV2WeightedStableswapResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 16 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkSlice") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") || (stack[3].SumType != "VmStkTinyInt" && stack[3].SumType != "VmStkInt") || (stack[4].SumType != "VmStkTinyInt" && stack[4].SumType != "VmStkInt") || (stack[5].SumType != "VmStkSlice") || (stack[6].SumType != "VmStkSlice") || (stack[7].SumType != "VmStkTinyInt" && stack[7].SumType != "VmStkInt") || (stack[8].SumType != "VmStkTinyInt" && stack[8].SumType != "VmStkInt") || (stack[9].SumType != "VmStkSlice") || (stack[10].SumType != "VmStkTinyInt" && stack[10].SumType != "VmStkInt") || (stack[11].SumType != "VmStkTinyInt" && stack[11].SumType != "VmStkInt") || (stack[12].SumType != "VmStkTinyInt" && stack[12].SumType != "VmStkInt") || (stack[13].SumType != "VmStkTinyInt" && stack[13].SumType != "VmStkInt") || (stack[14].SumType != "VmStkTinyInt" && stack[14].SumType != "VmStkInt") || (stack[15].SumType != "VmStkSlice") { + if stack.Len() != 16 || (stack.Peek(15).SumType != "VmStkTinyInt" && stack.Peek(15).SumType != "VmStkInt") || (stack.Peek(14).SumType != "VmStkSlice") || (stack.Peek(13).SumType != "VmStkTinyInt" && stack.Peek(13).SumType != "VmStkInt") || (stack.Peek(12).SumType != "VmStkTinyInt" && stack.Peek(12).SumType != "VmStkInt") || (stack.Peek(11).SumType != "VmStkTinyInt" && stack.Peek(11).SumType != "VmStkInt") || (stack.Peek(10).SumType != "VmStkSlice") || (stack.Peek(9).SumType != "VmStkSlice") || (stack.Peek(8).SumType != "VmStkTinyInt" && stack.Peek(8).SumType != "VmStkInt") || (stack.Peek(7).SumType != "VmStkTinyInt" && stack.Peek(7).SumType != "VmStkInt") || (stack.Peek(6).SumType != "VmStkSlice") || (stack.Peek(5).SumType != "VmStkTinyInt" && stack.Peek(5).SumType != "VmStkInt") || (stack.Peek(4).SumType != "VmStkTinyInt" && stack.Peek(4).SumType != "VmStkInt") || (stack.Peek(3).SumType != "VmStkTinyInt" && stack.Peek(3).SumType != "VmStkInt") || (stack.Peek(2).SumType != "VmStkTinyInt" && stack.Peek(2).SumType != "VmStkInt") || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkSlice") { return "", nil, fmt.Errorf("invalid stack format") } var result GetPoolData_StonfiV2WeightedStableswapResult @@ -5974,7 +5974,7 @@ func DecodeGetPoolData_StonfiV2WeightedStableswapResult(stack tlb.VmStack) (resu } func DecodeGetPoolData_CoffeeResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 11 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkSlice") || (stack[2].SumType != "VmStkSlice") || (stack[3].SumType != "VmStkTinyInt" && stack[3].SumType != "VmStkInt") || (stack[4].SumType != "VmStkCell" && stack[4].SumType != "VmStkNull") || (stack[5].SumType != "VmStkTinyInt" && stack[5].SumType != "VmStkInt") || (stack[6].SumType != "VmStkTinyInt" && stack[6].SumType != "VmStkInt") || (stack[7].SumType != "VmStkTinyInt" && stack[7].SumType != "VmStkInt") || (stack[8].SumType != "VmStkTinyInt" && stack[8].SumType != "VmStkInt") || (stack[9].SumType != "VmStkTinyInt" && stack[9].SumType != "VmStkInt") || (stack[10].SumType != "VmStkTinyInt" && stack[10].SumType != "VmStkInt") { + if stack.Len() != 11 || (stack.Peek(10).SumType != "VmStkTinyInt" && stack.Peek(10).SumType != "VmStkInt") || (stack.Peek(9).SumType != "VmStkSlice") || (stack.Peek(8).SumType != "VmStkSlice") || (stack.Peek(7).SumType != "VmStkTinyInt" && stack.Peek(7).SumType != "VmStkInt") || (stack.Peek(6).SumType != "VmStkCell" && stack.Peek(6).SumType != "VmStkNull") || (stack.Peek(5).SumType != "VmStkTinyInt" && stack.Peek(5).SumType != "VmStkInt") || (stack.Peek(4).SumType != "VmStkTinyInt" && stack.Peek(4).SumType != "VmStkInt") || (stack.Peek(3).SumType != "VmStkTinyInt" && stack.Peek(3).SumType != "VmStkInt") || (stack.Peek(2).SumType != "VmStkTinyInt" && stack.Peek(2).SumType != "VmStkInt") || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetPoolData_CoffeeResult @@ -5983,7 +5983,7 @@ func DecodeGetPoolData_CoffeeResult(stack tlb.VmStack) (resultType string, resul } func DecodeGetPoolData_TfResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) < 17 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") || (stack[3].SumType != "VmStkTinyInt" && stack[3].SumType != "VmStkInt") || (stack[4].SumType != "VmStkTinyInt" && stack[4].SumType != "VmStkInt") || (stack[5].SumType != "VmStkTinyInt" && stack[5].SumType != "VmStkInt") || (stack[6].SumType != "VmStkTinyInt" && stack[6].SumType != "VmStkInt") || (stack[7].SumType != "VmStkTinyInt" && stack[7].SumType != "VmStkInt") || (stack[8].SumType != "VmStkTinyInt" && stack[8].SumType != "VmStkInt") || (stack[9].SumType != "VmStkCell" && stack[9].SumType != "VmStkNull") || (stack[10].SumType != "VmStkCell" && stack[10].SumType != "VmStkNull") || (stack[11].SumType != "VmStkTinyInt" && stack[11].SumType != "VmStkInt") || (stack[12].SumType != "VmStkTinyInt" && stack[12].SumType != "VmStkInt") || (stack[13].SumType != "VmStkTinyInt" && stack[13].SumType != "VmStkInt") || (stack[14].SumType != "VmStkTinyInt" && stack[14].SumType != "VmStkInt") || (stack[15].SumType != "VmStkTinyInt" && stack[15].SumType != "VmStkInt") || (stack[16].SumType != "VmStkTuple" && stack[16].SumType != "VmStkNull") { + if stack.Len() < 17 || (stack.Peek(stack.Len()-1).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-1).SumType != "VmStkInt") || (stack.Peek(stack.Len()-2).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-2).SumType != "VmStkInt") || (stack.Peek(stack.Len()-3).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-3).SumType != "VmStkInt") || (stack.Peek(stack.Len()-4).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-4).SumType != "VmStkInt") || (stack.Peek(stack.Len()-5).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-5).SumType != "VmStkInt") || (stack.Peek(stack.Len()-6).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-6).SumType != "VmStkInt") || (stack.Peek(stack.Len()-7).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-7).SumType != "VmStkInt") || (stack.Peek(stack.Len()-8).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-8).SumType != "VmStkInt") || (stack.Peek(stack.Len()-9).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-9).SumType != "VmStkInt") || (stack.Peek(stack.Len()-10).SumType != "VmStkCell" && stack.Peek(stack.Len()-10).SumType != "VmStkNull") || (stack.Peek(stack.Len()-11).SumType != "VmStkCell" && stack.Peek(stack.Len()-11).SumType != "VmStkNull") || (stack.Peek(stack.Len()-12).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-12).SumType != "VmStkInt") || (stack.Peek(stack.Len()-13).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-13).SumType != "VmStkInt") || (stack.Peek(stack.Len()-14).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-14).SumType != "VmStkInt") || (stack.Peek(stack.Len()-15).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-15).SumType != "VmStkInt") || (stack.Peek(stack.Len()-16).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-16).SumType != "VmStkInt") || (stack.Peek(stack.Len()-17).SumType != "VmStkTuple" && stack.Peek(stack.Len()-17).SumType != "VmStkNull") { return "", nil, fmt.Errorf("invalid stack format") } var result GetPoolData_TfResult @@ -6063,7 +6063,7 @@ func GetPoolFullData(ctx context.Context, executor Executor, reqAccountID ton.Ac } func DecodeGetPoolFullDataResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 30 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") || (stack[3].SumType != "VmStkTinyInt" && stack[3].SumType != "VmStkInt") || (stack[4].SumType != "VmStkTinyInt" && stack[4].SumType != "VmStkInt") || (stack[5].SumType != "VmStkTinyInt" && stack[5].SumType != "VmStkInt") || (stack[6].SumType != "VmStkTinyInt" && stack[6].SumType != "VmStkInt") || (stack[7].SumType != "VmStkTuple") || (stack[8].SumType != "VmStkTuple") || (stack[9].SumType != "VmStkTinyInt" && stack[9].SumType != "VmStkInt") || (stack[10].SumType != "VmStkTinyInt" && stack[10].SumType != "VmStkInt") || (stack[11].SumType != "VmStkTinyInt" && stack[11].SumType != "VmStkInt") || (stack[12].SumType != "VmStkSlice") || (stack[13].SumType != "VmStkTinyInt" && stack[13].SumType != "VmStkInt") || (stack[14].SumType != "VmStkSlice" && stack[14].SumType != "VmStkNull") || (stack[15].SumType != "VmStkTinyInt" && stack[15].SumType != "VmStkInt") || (stack[16].SumType != "VmStkSlice" && stack[16].SumType != "VmStkNull") || (stack[17].SumType != "VmStkTinyInt" && stack[17].SumType != "VmStkInt") || (stack[18].SumType != "VmStkSlice" && stack[18].SumType != "VmStkNull") || (stack[19].SumType != "VmStkTinyInt" && stack[19].SumType != "VmStkInt") || (stack[20].SumType != "VmStkSlice" && stack[20].SumType != "VmStkNull") || (stack[21].SumType != "VmStkTinyInt" && stack[21].SumType != "VmStkInt") || (stack[22].SumType != "VmStkSlice" && stack[22].SumType != "VmStkNull") || (stack[23].SumType != "VmStkSlice" && stack[23].SumType != "VmStkNull") || (stack[24].SumType != "VmStkSlice" && stack[24].SumType != "VmStkNull") || (stack[25].SumType != "VmStkCell") || (stack[26].SumType != "VmStkCell") || (stack[27].SumType != "VmStkCell") || (stack[28].SumType != "VmStkTinyInt" && stack[28].SumType != "VmStkInt") || (stack[29].SumType != "VmStkTinyInt" && stack[29].SumType != "VmStkInt") { + if stack.Len() != 30 || (stack.Peek(29).SumType != "VmStkTinyInt" && stack.Peek(29).SumType != "VmStkInt") || (stack.Peek(28).SumType != "VmStkTinyInt" && stack.Peek(28).SumType != "VmStkInt") || (stack.Peek(27).SumType != "VmStkTinyInt" && stack.Peek(27).SumType != "VmStkInt") || (stack.Peek(26).SumType != "VmStkTinyInt" && stack.Peek(26).SumType != "VmStkInt") || (stack.Peek(25).SumType != "VmStkTinyInt" && stack.Peek(25).SumType != "VmStkInt") || (stack.Peek(24).SumType != "VmStkTinyInt" && stack.Peek(24).SumType != "VmStkInt") || (stack.Peek(23).SumType != "VmStkTinyInt" && stack.Peek(23).SumType != "VmStkInt") || (stack.Peek(22).SumType != "VmStkTuple") || (stack.Peek(21).SumType != "VmStkTuple") || (stack.Peek(20).SumType != "VmStkTinyInt" && stack.Peek(20).SumType != "VmStkInt") || (stack.Peek(19).SumType != "VmStkTinyInt" && stack.Peek(19).SumType != "VmStkInt") || (stack.Peek(18).SumType != "VmStkTinyInt" && stack.Peek(18).SumType != "VmStkInt") || (stack.Peek(17).SumType != "VmStkSlice") || (stack.Peek(16).SumType != "VmStkTinyInt" && stack.Peek(16).SumType != "VmStkInt") || (stack.Peek(15).SumType != "VmStkSlice" && stack.Peek(15).SumType != "VmStkNull") || (stack.Peek(14).SumType != "VmStkTinyInt" && stack.Peek(14).SumType != "VmStkInt") || (stack.Peek(13).SumType != "VmStkSlice" && stack.Peek(13).SumType != "VmStkNull") || (stack.Peek(12).SumType != "VmStkTinyInt" && stack.Peek(12).SumType != "VmStkInt") || (stack.Peek(11).SumType != "VmStkSlice" && stack.Peek(11).SumType != "VmStkNull") || (stack.Peek(10).SumType != "VmStkTinyInt" && stack.Peek(10).SumType != "VmStkInt") || (stack.Peek(9).SumType != "VmStkSlice" && stack.Peek(9).SumType != "VmStkNull") || (stack.Peek(8).SumType != "VmStkTinyInt" && stack.Peek(8).SumType != "VmStkInt") || (stack.Peek(7).SumType != "VmStkSlice" && stack.Peek(7).SumType != "VmStkNull") || (stack.Peek(6).SumType != "VmStkSlice" && stack.Peek(6).SumType != "VmStkNull") || (stack.Peek(5).SumType != "VmStkSlice" && stack.Peek(5).SumType != "VmStkNull") || (stack.Peek(4).SumType != "VmStkCell") || (stack.Peek(3).SumType != "VmStkCell") || (stack.Peek(2).SumType != "VmStkCell") || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetPoolFullDataResult @@ -6105,7 +6105,7 @@ func GetPoolInfo(ctx context.Context, executor Executor, reqAccountID ton.Accoun } func DecodeGetPoolInfo_BidaskResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 4 || (stack[0].SumType != "VmStkSlice") || (stack[1].SumType != "VmStkSlice") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") || (stack[3].SumType != "VmStkTinyInt" && stack[3].SumType != "VmStkInt") { + if stack.Len() != 4 || (stack.Peek(3).SumType != "VmStkSlice") || (stack.Peek(2).SumType != "VmStkSlice") || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetPoolInfo_BidaskResult @@ -6114,7 +6114,7 @@ func DecodeGetPoolInfo_BidaskResult(stack tlb.VmStack) (resultType string, resul } func DecodeGetPoolInfo_BidaskDammResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 3 || (stack[0].SumType != "VmStkSlice") || (stack[1].SumType != "VmStkSlice") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") { + if stack.Len() != 3 || (stack.Peek(2).SumType != "VmStkSlice") || (stack.Peek(1).SumType != "VmStkSlice") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetPoolInfo_BidaskDammResult @@ -6151,7 +6151,7 @@ func GetPoolStatus(ctx context.Context, executor Executor, reqAccountID ton.Acco } func DecodeGetPoolStatusResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 5 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") || (stack[3].SumType != "VmStkTinyInt" && stack[3].SumType != "VmStkInt") || (stack[4].SumType != "VmStkTinyInt" && stack[4].SumType != "VmStkInt") { + if stack.Len() != 5 || (stack.Peek(4).SumType != "VmStkTinyInt" && stack.Peek(4).SumType != "VmStkInt") || (stack.Peek(3).SumType != "VmStkTinyInt" && stack.Peek(3).SumType != "VmStkInt") || (stack.Peek(2).SumType != "VmStkTinyInt" && stack.Peek(2).SumType != "VmStkInt") || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetPoolStatusResult @@ -6184,7 +6184,7 @@ func GetPoolType(ctx context.Context, executor Executor, reqAccountID ton.Accoun } func DecodeGetPoolType_StonfiV2Result(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkSlice") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkSlice") { return "", nil, fmt.Errorf("invalid stack format") } var result GetPoolType_StonfiV2Result @@ -6218,7 +6218,7 @@ func GetPosition(ctx context.Context, executor Executor, reqAccountID ton.Accoun } func DecodeGetPosition_StormResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 2 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkCell" && stack[1].SumType != "VmStkNull") { + if stack.Len() != 2 || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkCell" && stack.Peek(0).SumType != "VmStkNull") { return "", nil, fmt.Errorf("invalid stack format") } var result GetPosition_StormResult @@ -6265,7 +6265,7 @@ func GetPositionAddress(ctx context.Context, executor Executor, reqAccountID ton } func DecodeGetPositionAddress_StormResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkSlice") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkSlice") { return "", nil, fmt.Errorf("invalid stack format") } var result GetPositionAddress_StormResult @@ -6298,7 +6298,7 @@ func GetPositionManagerAddress(ctx context.Context, executor Executor, reqAccoun } func DecodeGetPositionManagerAddress_StormResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetPositionManagerAddress_StormResult @@ -6338,7 +6338,7 @@ func GetPositionManagerContractData(ctx context.Context, executor Executor, reqA } func DecodeGetPositionManagerContractData_StormResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 8 || (stack[0].SumType != "VmStkSlice") || (stack[1].SumType != "VmStkSlice") || (stack[2].SumType != "VmStkSlice") || (stack[3].SumType != "VmStkCell") || (stack[4].SumType != "VmStkCell") || (stack[5].SumType != "VmStkCell") || (stack[6].SumType != "VmStkCell") || (stack[7].SumType != "VmStkCell") { + if stack.Len() != 8 || (stack.Peek(7).SumType != "VmStkSlice") || (stack.Peek(6).SumType != "VmStkSlice") || (stack.Peek(5).SumType != "VmStkSlice") || (stack.Peek(4).SumType != "VmStkCell") || (stack.Peek(3).SumType != "VmStkCell") || (stack.Peek(2).SumType != "VmStkCell") || (stack.Peek(1).SumType != "VmStkCell") || (stack.Peek(0).SumType != "VmStkCell") { return "", nil, fmt.Errorf("invalid stack format") } var result GetPositionManagerContractData_StormResult @@ -6371,7 +6371,7 @@ func GetPositionManagerData(ctx context.Context, executor Executor, reqAccountID } func DecodeGetPositionManagerData_StormResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkCell") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkCell") { return "", nil, fmt.Errorf("invalid stack format") } var result GetPositionManagerData_StormResult @@ -6407,7 +6407,7 @@ func GetPowParams(ctx context.Context, executor Executor, reqAccountID ton.Accou } func DecodeGetPowParamsResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) < 4 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") || (stack[3].SumType != "VmStkTinyInt" && stack[3].SumType != "VmStkInt") { + if stack.Len() < 4 || (stack.Peek(stack.Len()-1).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-1).SumType != "VmStkInt") || (stack.Peek(stack.Len()-2).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-2).SumType != "VmStkInt") || (stack.Peek(stack.Len()-3).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-3).SumType != "VmStkInt") || (stack.Peek(stack.Len()-4).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-4).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetPowParamsResult @@ -6446,7 +6446,7 @@ func GetPremium(ctx context.Context, executor Executor, reqAccountID ton.Account } func DecodeGetPremium_StormResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetPremium_StormResult @@ -6479,7 +6479,7 @@ func GetProxy(ctx context.Context, executor Executor, reqAccountID ton.AccountID } func DecodeGetProxy_WhalesNominatorResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkSlice") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkSlice") { return "", nil, fmt.Errorf("invalid stack format") } var result GetProxy_WhalesNominatorResult @@ -6512,7 +6512,7 @@ func GetPublicKey(ctx context.Context, executor Executor, reqAccountID ton.Accou } func DecodeGetPublicKeyResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetPublicKeyResult @@ -6545,7 +6545,7 @@ func GetReferralCollectionAddress(ctx context.Context, executor Executor, reqAcc } func DecodeGetReferralCollectionAddress_StormResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkSlice") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkSlice") { return "", nil, fmt.Errorf("invalid stack format") } var result GetReferralCollectionAddress_StormResult @@ -6581,7 +6581,7 @@ func GetReferralData(ctx context.Context, executor Executor, reqAccountID ton.Ac } func DecodeGetReferralData_StormResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 4 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") || (stack[3].SumType != "VmStkCell") { + if stack.Len() != 4 || (stack.Peek(3).SumType != "VmStkTinyInt" && stack.Peek(3).SumType != "VmStkInt") || (stack.Peek(2).SumType != "VmStkTinyInt" && stack.Peek(2).SumType != "VmStkInt") || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkCell") { return "", nil, fmt.Errorf("invalid stack format") } var result GetReferralData_StormResult @@ -6620,7 +6620,7 @@ func GetReferralItemAddr(ctx context.Context, executor Executor, reqAccountID to } func DecodeGetReferralItemAddr_StormResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkSlice") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkSlice") { return "", nil, fmt.Errorf("invalid stack format") } var result GetReferralItemAddr_StormResult @@ -6653,7 +6653,7 @@ func GetReferralVaultsWhitelist(ctx context.Context, executor Executor, reqAccou } func DecodeGetReferralVaultsWhitelist_StormResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkCell") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkCell") { return "", nil, fmt.Errorf("invalid stack format") } var result GetReferralVaultsWhitelist_StormResult @@ -6707,7 +6707,7 @@ func GetRemainMarginWithFundingPayment(ctx context.Context, executor Executor, r } func DecodeGetRemainMarginWithFundingPayment_StormResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 9 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") || (stack[3].SumType != "VmStkTinyInt" && stack[3].SumType != "VmStkInt") || (stack[4].SumType != "VmStkTinyInt" && stack[4].SumType != "VmStkInt") || (stack[5].SumType != "VmStkTinyInt" && stack[5].SumType != "VmStkInt") || (stack[6].SumType != "VmStkTinyInt" && stack[6].SumType != "VmStkInt") || (stack[7].SumType != "VmStkTinyInt" && stack[7].SumType != "VmStkInt") || (stack[8].SumType != "VmStkTinyInt" && stack[8].SumType != "VmStkInt") { + if stack.Len() != 9 || (stack.Peek(8).SumType != "VmStkTinyInt" && stack.Peek(8).SumType != "VmStkInt") || (stack.Peek(7).SumType != "VmStkTinyInt" && stack.Peek(7).SumType != "VmStkInt") || (stack.Peek(6).SumType != "VmStkTinyInt" && stack.Peek(6).SumType != "VmStkInt") || (stack.Peek(5).SumType != "VmStkTinyInt" && stack.Peek(5).SumType != "VmStkInt") || (stack.Peek(4).SumType != "VmStkTinyInt" && stack.Peek(4).SumType != "VmStkInt") || (stack.Peek(3).SumType != "VmStkTinyInt" && stack.Peek(3).SumType != "VmStkInt") || (stack.Peek(2).SumType != "VmStkTinyInt" && stack.Peek(2).SumType != "VmStkInt") || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetRemainMarginWithFundingPayment_StormResult @@ -6748,7 +6748,7 @@ func GetReserves(ctx context.Context, executor Executor, reqAccountID ton.Accoun } func DecodeGetReserves_DedustResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 2 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") { + if stack.Len() != 2 || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetReserves_DedustResult @@ -6757,7 +6757,7 @@ func DecodeGetReserves_DedustResult(stack tlb.VmStack) (resultType string, resul } func DecodeGetReserves_MoonResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 4 || (stack[0].SumType != "VmStkSlice") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkSlice") || (stack[3].SumType != "VmStkTinyInt" && stack[3].SumType != "VmStkInt") { + if stack.Len() != 4 || (stack.Peek(3).SumType != "VmStkSlice") || (stack.Peek(2).SumType != "VmStkTinyInt" && stack.Peek(2).SumType != "VmStkInt") || (stack.Peek(1).SumType != "VmStkSlice") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetReserves_MoonResult @@ -6790,7 +6790,7 @@ func GetRevokedTime(ctx context.Context, executor Executor, reqAccountID ton.Acc } func DecodeGetRevokedTimeResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) < 1 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") { + if stack.Len() < 1 || (stack.Peek(stack.Len()-1).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-1).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetRevokedTimeResult @@ -6829,7 +6829,7 @@ func GetRfqAddress(ctx context.Context, executor Executor, reqAccountID ton.Acco } func DecodeGetRfqAddress_AffluentResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkSlice") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkSlice") { return "", nil, fmt.Errorf("invalid stack format") } var result GetRfqAddress_AffluentResult @@ -6862,7 +6862,7 @@ func GetRootPubkey(ctx context.Context, executor Executor, reqAccountID ton.Acco } func DecodeGetRootPubkeyResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetRootPubkeyResult @@ -6912,7 +6912,7 @@ func GetRouterData(ctx context.Context, executor Executor, reqAccountID ton.Acco } func DecodeGetRouterData_StonfiResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 6 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkSlice") || (stack[2].SumType != "VmStkCell") || (stack[3].SumType != "VmStkCell") || (stack[4].SumType != "VmStkCell") || (stack[5].SumType != "VmStkCell") { + if stack.Len() != 6 || (stack.Peek(5).SumType != "VmStkTinyInt" && stack.Peek(5).SumType != "VmStkInt") || (stack.Peek(4).SumType != "VmStkSlice") || (stack.Peek(3).SumType != "VmStkCell") || (stack.Peek(2).SumType != "VmStkCell") || (stack.Peek(1).SumType != "VmStkCell") || (stack.Peek(0).SumType != "VmStkCell") { return "", nil, fmt.Errorf("invalid stack format") } var result GetRouterData_StonfiResult @@ -6921,7 +6921,7 @@ func DecodeGetRouterData_StonfiResult(stack tlb.VmStack) (resultType string, res } func DecodeGetRouterData_StonfiV2Result(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 9 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkSlice") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") || (stack[3].SumType != "VmStkSlice") || (stack[4].SumType != "VmStkCell") || (stack[5].SumType != "VmStkCell") || (stack[6].SumType != "VmStkCell") || (stack[7].SumType != "VmStkCell") || (stack[8].SumType != "VmStkCell") { + if stack.Len() != 9 || (stack.Peek(8).SumType != "VmStkTinyInt" && stack.Peek(8).SumType != "VmStkInt") || (stack.Peek(7).SumType != "VmStkSlice") || (stack.Peek(6).SumType != "VmStkTinyInt" && stack.Peek(6).SumType != "VmStkInt") || (stack.Peek(5).SumType != "VmStkSlice") || (stack.Peek(4).SumType != "VmStkCell") || (stack.Peek(3).SumType != "VmStkCell") || (stack.Peek(2).SumType != "VmStkCell") || (stack.Peek(1).SumType != "VmStkCell") || (stack.Peek(0).SumType != "VmStkCell") { return "", nil, fmt.Errorf("invalid stack format") } var result GetRouterData_StonfiV2Result @@ -6956,7 +6956,7 @@ func GetRouterVersion(ctx context.Context, executor Executor, reqAccountID ton.A } func DecodeGetRouterVersion_StonfiV2Result(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 3 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkSlice") { + if stack.Len() != 3 || (stack.Peek(2).SumType != "VmStkTinyInt" && stack.Peek(2).SumType != "VmStkInt") || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkSlice") { return "", nil, fmt.Errorf("invalid stack format") } var result GetRouterVersion_StonfiV2Result @@ -7032,7 +7032,7 @@ func GetSaleData(ctx context.Context, executor Executor, reqAccountID ton.Accoun } func DecodeGetSaleData_BasicResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 7 || (stack[0].SumType != "VmStkSlice") || (stack[1].SumType != "VmStkSlice") || (stack[2].SumType != "VmStkSlice") || (stack[3].SumType != "VmStkTinyInt" && stack[3].SumType != "VmStkInt") || (stack[4].SumType != "VmStkTinyInt" && stack[4].SumType != "VmStkInt") || (stack[5].SumType != "VmStkSlice") || (stack[6].SumType != "VmStkTinyInt" && stack[6].SumType != "VmStkInt") { + if stack.Len() != 7 || (stack.Peek(6).SumType != "VmStkSlice") || (stack.Peek(5).SumType != "VmStkSlice") || (stack.Peek(4).SumType != "VmStkSlice") || (stack.Peek(3).SumType != "VmStkTinyInt" && stack.Peek(3).SumType != "VmStkInt") || (stack.Peek(2).SumType != "VmStkTinyInt" && stack.Peek(2).SumType != "VmStkInt") || (stack.Peek(1).SumType != "VmStkSlice") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetSaleData_BasicResult @@ -7041,7 +7041,7 @@ func DecodeGetSaleData_BasicResult(stack tlb.VmStack) (resultType string, result } func DecodeGetSaleData_GetgemsResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 11 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") || (stack[3].SumType != "VmStkSlice") || (stack[4].SumType != "VmStkSlice") || (stack[5].SumType != "VmStkSlice") || (stack[6].SumType != "VmStkTinyInt" && stack[6].SumType != "VmStkInt") || (stack[7].SumType != "VmStkSlice") || (stack[8].SumType != "VmStkTinyInt" && stack[8].SumType != "VmStkInt") || (stack[9].SumType != "VmStkSlice") || (stack[10].SumType != "VmStkTinyInt" && stack[10].SumType != "VmStkInt") { + if stack.Len() != 11 || (stack.Peek(10).SumType != "VmStkTinyInt" && stack.Peek(10).SumType != "VmStkInt") || (stack.Peek(9).SumType != "VmStkTinyInt" && stack.Peek(9).SumType != "VmStkInt") || (stack.Peek(8).SumType != "VmStkTinyInt" && stack.Peek(8).SumType != "VmStkInt") || (stack.Peek(7).SumType != "VmStkSlice") || (stack.Peek(6).SumType != "VmStkSlice") || (stack.Peek(5).SumType != "VmStkSlice") || (stack.Peek(4).SumType != "VmStkTinyInt" && stack.Peek(4).SumType != "VmStkInt") || (stack.Peek(3).SumType != "VmStkSlice") || (stack.Peek(2).SumType != "VmStkTinyInt" && stack.Peek(2).SumType != "VmStkInt") || (stack.Peek(1).SumType != "VmStkSlice") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetSaleData_GetgemsResult @@ -7050,7 +7050,7 @@ func DecodeGetSaleData_GetgemsResult(stack tlb.VmStack) (resultType string, resu } func DecodeGetSaleData_GetgemsAuctionResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 20 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") || (stack[3].SumType != "VmStkSlice") || (stack[4].SumType != "VmStkSlice") || (stack[5].SumType != "VmStkSlice") || (stack[6].SumType != "VmStkTinyInt" && stack[6].SumType != "VmStkInt") || (stack[7].SumType != "VmStkSlice") || (stack[8].SumType != "VmStkTinyInt" && stack[8].SumType != "VmStkInt") || (stack[9].SumType != "VmStkSlice") || (stack[10].SumType != "VmStkTinyInt" && stack[10].SumType != "VmStkInt") || (stack[11].SumType != "VmStkTinyInt" && stack[11].SumType != "VmStkInt") || (stack[12].SumType != "VmStkSlice") || (stack[13].SumType != "VmStkTinyInt" && stack[13].SumType != "VmStkInt") || (stack[14].SumType != "VmStkTinyInt" && stack[14].SumType != "VmStkInt") || (stack[15].SumType != "VmStkTinyInt" && stack[15].SumType != "VmStkInt") || (stack[16].SumType != "VmStkTinyInt" && stack[16].SumType != "VmStkInt") || (stack[17].SumType != "VmStkTinyInt" && stack[17].SumType != "VmStkInt") || (stack[18].SumType != "VmStkTinyInt" && stack[18].SumType != "VmStkInt") || (stack[19].SumType != "VmStkTinyInt" && stack[19].SumType != "VmStkInt") { + if stack.Len() != 20 || (stack.Peek(19).SumType != "VmStkTinyInt" && stack.Peek(19).SumType != "VmStkInt") || (stack.Peek(18).SumType != "VmStkTinyInt" && stack.Peek(18).SumType != "VmStkInt") || (stack.Peek(17).SumType != "VmStkTinyInt" && stack.Peek(17).SumType != "VmStkInt") || (stack.Peek(16).SumType != "VmStkSlice") || (stack.Peek(15).SumType != "VmStkSlice") || (stack.Peek(14).SumType != "VmStkSlice") || (stack.Peek(13).SumType != "VmStkTinyInt" && stack.Peek(13).SumType != "VmStkInt") || (stack.Peek(12).SumType != "VmStkSlice") || (stack.Peek(11).SumType != "VmStkTinyInt" && stack.Peek(11).SumType != "VmStkInt") || (stack.Peek(10).SumType != "VmStkSlice") || (stack.Peek(9).SumType != "VmStkTinyInt" && stack.Peek(9).SumType != "VmStkInt") || (stack.Peek(8).SumType != "VmStkTinyInt" && stack.Peek(8).SumType != "VmStkInt") || (stack.Peek(7).SumType != "VmStkSlice") || (stack.Peek(6).SumType != "VmStkTinyInt" && stack.Peek(6).SumType != "VmStkInt") || (stack.Peek(5).SumType != "VmStkTinyInt" && stack.Peek(5).SumType != "VmStkInt") || (stack.Peek(4).SumType != "VmStkTinyInt" && stack.Peek(4).SumType != "VmStkInt") || (stack.Peek(3).SumType != "VmStkTinyInt" && stack.Peek(3).SumType != "VmStkInt") || (stack.Peek(2).SumType != "VmStkTinyInt" && stack.Peek(2).SumType != "VmStkInt") || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetSaleData_GetgemsAuctionResult @@ -7083,7 +7083,7 @@ func GetSeedPubkey(ctx context.Context, executor Executor, reqAccountID ton.Acco } func DecodeGetSeedPubkeyResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetSeedPubkeyResult @@ -7121,7 +7121,7 @@ func GetSettlementOracleData(ctx context.Context, executor Executor, reqAccountI } func DecodeGetSettlementOracleData_StormResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 6 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") || (stack[3].SumType != "VmStkTinyInt" && stack[3].SumType != "VmStkInt") || (stack[4].SumType != "VmStkTinyInt" && stack[4].SumType != "VmStkInt") || (stack[5].SumType != "VmStkTinyInt" && stack[5].SumType != "VmStkInt") { + if stack.Len() != 6 || (stack.Peek(5).SumType != "VmStkTinyInt" && stack.Peek(5).SumType != "VmStkInt") || (stack.Peek(4).SumType != "VmStkTinyInt" && stack.Peek(4).SumType != "VmStkInt") || (stack.Peek(3).SumType != "VmStkTinyInt" && stack.Peek(3).SumType != "VmStkInt") || (stack.Peek(2).SumType != "VmStkTinyInt" && stack.Peek(2).SumType != "VmStkInt") || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetSettlementOracleData_StormResult @@ -7154,7 +7154,7 @@ func GetSpotPrice(ctx context.Context, executor Executor, reqAccountID ton.Accou } func DecodeGetSpotPrice_StormResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetSpotPrice_StormResult @@ -7187,7 +7187,7 @@ func GetSqrtP(ctx context.Context, executor Executor, reqAccountID ton.AccountID } func DecodeGetSqrtP_BidaskResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetSqrtP_BidaskResult @@ -7226,7 +7226,7 @@ func GetStakingStatus(ctx context.Context, executor Executor, reqAccountID ton.A } func DecodeGetStakingStatusResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 7 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") || (stack[3].SumType != "VmStkTinyInt" && stack[3].SumType != "VmStkInt") || (stack[4].SumType != "VmStkTinyInt" && stack[4].SumType != "VmStkInt") || (stack[5].SumType != "VmStkTinyInt" && stack[5].SumType != "VmStkInt") || (stack[6].SumType != "VmStkTinyInt" && stack[6].SumType != "VmStkInt") { + if stack.Len() != 7 || (stack.Peek(6).SumType != "VmStkTinyInt" && stack.Peek(6).SumType != "VmStkInt") || (stack.Peek(5).SumType != "VmStkTinyInt" && stack.Peek(5).SumType != "VmStkInt") || (stack.Peek(4).SumType != "VmStkTinyInt" && stack.Peek(4).SumType != "VmStkInt") || (stack.Peek(3).SumType != "VmStkTinyInt" && stack.Peek(3).SumType != "VmStkInt") || (stack.Peek(2).SumType != "VmStkTinyInt" && stack.Peek(2).SumType != "VmStkInt") || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetStakingStatusResult @@ -7259,7 +7259,7 @@ func GetStartTradeTime(ctx context.Context, executor Executor, reqAccountID ton. } func DecodeGetStartTradeTime_BidaskDammResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetStartTradeTime_BidaskDammResult @@ -7296,7 +7296,7 @@ func GetStatus(ctx context.Context, executor Executor, reqAccountID ton.AccountI } func DecodeGetStatusResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetStatusResult @@ -7305,7 +7305,7 @@ func DecodeGetStatusResult(stack tlb.VmStack) (resultType string, resultAny any, } func DecodeGetStatus_MoonResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetStatus_MoonResult @@ -7353,7 +7353,7 @@ func GetStorageContractAddress(ctx context.Context, executor Executor, reqAccoun } func DecodeGetStorageContractAddressResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) < 1 || (stack[0].SumType != "VmStkSlice") { + if stack.Len() < 1 || (stack.Peek(stack.Len()-1).SumType != "VmStkSlice") { return "", nil, fmt.Errorf("invalid stack format") } var result GetStorageContractAddressResult @@ -7396,7 +7396,7 @@ func GetStorageContractData(ctx context.Context, executor Executor, reqAccountID } func DecodeGetStorageContractDataResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) < 11 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkSlice") || (stack[3].SumType != "VmStkTinyInt" && stack[3].SumType != "VmStkInt") || (stack[4].SumType != "VmStkTinyInt" && stack[4].SumType != "VmStkInt") || (stack[5].SumType != "VmStkTinyInt" && stack[5].SumType != "VmStkInt") || (stack[6].SumType != "VmStkTinyInt" && stack[6].SumType != "VmStkInt") || (stack[7].SumType != "VmStkTinyInt" && stack[7].SumType != "VmStkInt") || (stack[8].SumType != "VmStkTinyInt" && stack[8].SumType != "VmStkInt") || (stack[9].SumType != "VmStkSlice") || (stack[10].SumType != "VmStkTinyInt" && stack[10].SumType != "VmStkInt") { + if stack.Len() < 11 || (stack.Peek(stack.Len()-1).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-1).SumType != "VmStkInt") || (stack.Peek(stack.Len()-2).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-2).SumType != "VmStkInt") || (stack.Peek(stack.Len()-3).SumType != "VmStkSlice") || (stack.Peek(stack.Len()-4).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-4).SumType != "VmStkInt") || (stack.Peek(stack.Len()-5).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-5).SumType != "VmStkInt") || (stack.Peek(stack.Len()-6).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-6).SumType != "VmStkInt") || (stack.Peek(stack.Len()-7).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-7).SumType != "VmStkInt") || (stack.Peek(stack.Len()-8).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-8).SumType != "VmStkInt") || (stack.Peek(stack.Len()-9).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-9).SumType != "VmStkInt") || (stack.Peek(stack.Len()-10).SumType != "VmStkSlice") || (stack.Peek(stack.Len()-11).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-11).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetStorageContractDataResult @@ -7436,7 +7436,7 @@ func GetStorageData(ctx context.Context, executor Executor, reqAccountID ton.Acc } func DecodeGetStorageData_StormResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 8 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkSlice") || (stack[2].SumType != "VmStkSlice") || (stack[3].SumType != "VmStkCell" && stack[3].SumType != "VmStkNull") || (stack[4].SumType != "VmStkTinyInt" && stack[4].SumType != "VmStkInt") || (stack[5].SumType != "VmStkCell") || (stack[6].SumType != "VmStkCell" && stack[6].SumType != "VmStkNull") || (stack[7].SumType != "VmStkCell") { + if stack.Len() != 8 || (stack.Peek(7).SumType != "VmStkTinyInt" && stack.Peek(7).SumType != "VmStkInt") || (stack.Peek(6).SumType != "VmStkSlice") || (stack.Peek(5).SumType != "VmStkSlice") || (stack.Peek(4).SumType != "VmStkCell" && stack.Peek(4).SumType != "VmStkNull") || (stack.Peek(3).SumType != "VmStkTinyInt" && stack.Peek(3).SumType != "VmStkInt") || (stack.Peek(2).SumType != "VmStkCell") || (stack.Peek(1).SumType != "VmStkCell" && stack.Peek(1).SumType != "VmStkNull") || (stack.Peek(0).SumType != "VmStkCell") { return "", nil, fmt.Errorf("invalid stack format") } var result GetStorageData_StormResult @@ -7473,7 +7473,7 @@ func GetStorageParams(ctx context.Context, executor Executor, reqAccountID ton.A } func DecodeGetStorageParamsResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) < 5 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") || (stack[3].SumType != "VmStkTinyInt" && stack[3].SumType != "VmStkInt") || (stack[4].SumType != "VmStkTinyInt" && stack[4].SumType != "VmStkInt") { + if stack.Len() < 5 || (stack.Peek(stack.Len()-1).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-1).SumType != "VmStkInt") || (stack.Peek(stack.Len()-2).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-2).SumType != "VmStkInt") || (stack.Peek(stack.Len()-3).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-3).SumType != "VmStkInt") || (stack.Peek(stack.Len()-4).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-4).SumType != "VmStkInt") || (stack.Peek(stack.Len()-5).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-5).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetStorageParamsResult @@ -7532,7 +7532,7 @@ func GetStoredData(ctx context.Context, executor Executor, reqAccountID ton.Acco } func DecodeGetStoredData_CoffeeStakingMasterResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 8 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkSlice") || (stack[2].SumType != "VmStkSlice") || (stack[3].SumType != "VmStkSlice") || (stack[4].SumType != "VmStkCell") || (stack[5].SumType != "VmStkCell") || (stack[6].SumType != "VmStkCell") || (stack[7].SumType != "VmStkCell") { + if stack.Len() != 8 || (stack.Peek(7).SumType != "VmStkTinyInt" && stack.Peek(7).SumType != "VmStkInt") || (stack.Peek(6).SumType != "VmStkSlice") || (stack.Peek(5).SumType != "VmStkSlice") || (stack.Peek(4).SumType != "VmStkSlice") || (stack.Peek(3).SumType != "VmStkCell") || (stack.Peek(2).SumType != "VmStkCell") || (stack.Peek(1).SumType != "VmStkCell") || (stack.Peek(0).SumType != "VmStkCell") { return "", nil, fmt.Errorf("invalid stack format") } var result GetStoredData_CoffeeStakingMasterResult @@ -7541,7 +7541,7 @@ func DecodeGetStoredData_CoffeeStakingMasterResult(stack tlb.VmStack) (resultTyp } func DecodeGetStoredData_CoffeeStakingVaultResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 6 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkSlice") || (stack[2].SumType != "VmStkCell") || (stack[3].SumType != "VmStkCell") || (stack[4].SumType != "VmStkCell") || (stack[5].SumType != "VmStkCell") { + if stack.Len() != 6 || (stack.Peek(5).SumType != "VmStkTinyInt" && stack.Peek(5).SumType != "VmStkInt") || (stack.Peek(4).SumType != "VmStkSlice") || (stack.Peek(3).SumType != "VmStkCell") || (stack.Peek(2).SumType != "VmStkCell") || (stack.Peek(1).SumType != "VmStkCell") || (stack.Peek(0).SumType != "VmStkCell") { return "", nil, fmt.Errorf("invalid stack format") } var result GetStoredData_CoffeeStakingVaultResult @@ -7550,7 +7550,7 @@ func DecodeGetStoredData_CoffeeStakingVaultResult(stack tlb.VmStack) (resultType } func DecodeGetStoredData_CoffeeStakingItemResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 7 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkSlice") || (stack[3].SumType != "VmStkSlice") || (stack[4].SumType != "VmStkCell") || (stack[5].SumType != "VmStkCell") || (stack[6].SumType != "VmStkCell") { + if stack.Len() != 7 || (stack.Peek(6).SumType != "VmStkTinyInt" && stack.Peek(6).SumType != "VmStkInt") || (stack.Peek(5).SumType != "VmStkTinyInt" && stack.Peek(5).SumType != "VmStkInt") || (stack.Peek(4).SumType != "VmStkSlice") || (stack.Peek(3).SumType != "VmStkSlice") || (stack.Peek(2).SumType != "VmStkCell") || (stack.Peek(1).SumType != "VmStkCell") || (stack.Peek(0).SumType != "VmStkCell") { return "", nil, fmt.Errorf("invalid stack format") } var result GetStoredData_CoffeeStakingItemResult @@ -7600,7 +7600,7 @@ func GetSubscriptionData(ctx context.Context, executor Executor, reqAccountID to } func DecodeGetSubscriptionDataResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) < 10 || (stack[0].SumType != "VmStkTuple") || (stack[1].SumType != "VmStkTuple") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") || (stack[3].SumType != "VmStkTinyInt" && stack[3].SumType != "VmStkInt") || (stack[4].SumType != "VmStkTinyInt" && stack[4].SumType != "VmStkInt") || (stack[5].SumType != "VmStkTinyInt" && stack[5].SumType != "VmStkInt") || (stack[6].SumType != "VmStkTinyInt" && stack[6].SumType != "VmStkInt") || (stack[7].SumType != "VmStkTinyInt" && stack[7].SumType != "VmStkInt") || (stack[8].SumType != "VmStkTinyInt" && stack[8].SumType != "VmStkInt") || (stack[9].SumType != "VmStkTinyInt" && stack[9].SumType != "VmStkInt") { + if stack.Len() < 10 || (stack.Peek(stack.Len()-1).SumType != "VmStkTuple") || (stack.Peek(stack.Len()-2).SumType != "VmStkTuple") || (stack.Peek(stack.Len()-3).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-3).SumType != "VmStkInt") || (stack.Peek(stack.Len()-4).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-4).SumType != "VmStkInt") || (stack.Peek(stack.Len()-5).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-5).SumType != "VmStkInt") || (stack.Peek(stack.Len()-6).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-6).SumType != "VmStkInt") || (stack.Peek(stack.Len()-7).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-7).SumType != "VmStkInt") || (stack.Peek(stack.Len()-8).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-8).SumType != "VmStkInt") || (stack.Peek(stack.Len()-9).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-9).SumType != "VmStkInt") || (stack.Peek(stack.Len()-10).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-10).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetSubscriptionDataResult @@ -7639,7 +7639,7 @@ func GetSubscriptionInfo(ctx context.Context, executor Executor, reqAccountID to } func DecodeGetSubscriptionInfo_V2Result(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 7 || (stack[0].SumType != "VmStkSlice") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkSlice") || (stack[3].SumType != "VmStkTinyInt" && stack[3].SumType != "VmStkInt") || (stack[4].SumType != "VmStkSlice") || (stack[5].SumType != "VmStkCell") || (stack[6].SumType != "VmStkCell") { + if stack.Len() != 7 || (stack.Peek(6).SumType != "VmStkSlice") || (stack.Peek(5).SumType != "VmStkTinyInt" && stack.Peek(5).SumType != "VmStkInt") || (stack.Peek(4).SumType != "VmStkSlice") || (stack.Peek(3).SumType != "VmStkTinyInt" && stack.Peek(3).SumType != "VmStkInt") || (stack.Peek(2).SumType != "VmStkSlice") || (stack.Peek(1).SumType != "VmStkCell") || (stack.Peek(0).SumType != "VmStkCell") { return "", nil, fmt.Errorf("invalid stack format") } var result GetSubscriptionInfo_V2Result @@ -7672,7 +7672,7 @@ func GetSubwalletId(ctx context.Context, executor Executor, reqAccountID ton.Acc } func DecodeGetSubwalletIdResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetSubwalletIdResult @@ -7706,7 +7706,7 @@ func GetTargetBalances(ctx context.Context, executor Executor, reqAccountID ton. } func DecodeGetTargetBalances_DedustResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 2 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") { + if stack.Len() != 2 || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetTargetBalances_DedustResult @@ -7744,7 +7744,7 @@ func GetTelemintAuctionConfig(ctx context.Context, executor Executor, reqAccount } func DecodeGetTelemintAuctionConfigResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 6 || (stack[0].SumType != "VmStkSlice") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") || (stack[3].SumType != "VmStkTinyInt" && stack[3].SumType != "VmStkInt") || (stack[4].SumType != "VmStkTinyInt" && stack[4].SumType != "VmStkInt") || (stack[5].SumType != "VmStkTinyInt" && stack[5].SumType != "VmStkInt") { + if stack.Len() != 6 || (stack.Peek(5).SumType != "VmStkSlice") || (stack.Peek(4).SumType != "VmStkTinyInt" && stack.Peek(4).SumType != "VmStkInt") || (stack.Peek(3).SumType != "VmStkTinyInt" && stack.Peek(3).SumType != "VmStkInt") || (stack.Peek(2).SumType != "VmStkTinyInt" && stack.Peek(2).SumType != "VmStkInt") || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetTelemintAuctionConfigResult @@ -7781,7 +7781,7 @@ func GetTelemintAuctionState(ctx context.Context, executor Executor, reqAccountI } func DecodeGetTelemintAuctionStateResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 5 || (stack[0].SumType != "VmStkSlice") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") || (stack[3].SumType != "VmStkTinyInt" && stack[3].SumType != "VmStkInt") || (stack[4].SumType != "VmStkTinyInt" && stack[4].SumType != "VmStkInt") { + if stack.Len() != 5 || (stack.Peek(4).SumType != "VmStkSlice") || (stack.Peek(3).SumType != "VmStkTinyInt" && stack.Peek(3).SumType != "VmStkInt") || (stack.Peek(2).SumType != "VmStkTinyInt" && stack.Peek(2).SumType != "VmStkInt") || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetTelemintAuctionStateResult @@ -7814,7 +7814,7 @@ func GetTelemintTokenName(ctx context.Context, executor Executor, reqAccountID t } func DecodeGetTelemintTokenNameResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkSlice") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkSlice") { return "", nil, fmt.Errorf("invalid stack format") } var result GetTelemintTokenNameResult @@ -7847,7 +7847,7 @@ func GetTerminalAmmPrice(ctx context.Context, executor Executor, reqAccountID to } func DecodeGetTerminalAmmPrice_StormResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetTerminalAmmPrice_StormResult @@ -7880,7 +7880,7 @@ func GetTimeout(ctx context.Context, executor Executor, reqAccountID ton.Account } func DecodeGetTimeoutResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetTimeoutResult @@ -7913,7 +7913,7 @@ func GetTorrentHash(ctx context.Context, executor Executor, reqAccountID ton.Acc } func DecodeGetTorrentHashResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) < 1 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") { + if stack.Len() < 1 || (stack.Peek(stack.Len()-1).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-1).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetTorrentHashResult @@ -7947,7 +7947,7 @@ func GetTradeFee(ctx context.Context, executor Executor, reqAccountID ton.Accoun } func DecodeGetTradeFee_DedustResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 2 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") { + if stack.Len() != 2 || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetTradeFee_DedustResult @@ -7983,7 +7983,7 @@ func GetUnlocksInfo(ctx context.Context, executor Executor, reqAccountID ton.Acc } func DecodeGetUnlocksInfoResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 4 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") || (stack[3].SumType != "VmStkCell") { + if stack.Len() != 4 || (stack.Peek(3).SumType != "VmStkTinyInt" && stack.Peek(3).SumType != "VmStkInt") || (stack.Peek(2).SumType != "VmStkTinyInt" && stack.Peek(2).SumType != "VmStkInt") || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkCell") { return "", nil, fmt.Errorf("invalid stack format") } var result GetUnlocksInfoResult @@ -8025,7 +8025,7 @@ func GetUserBinAssets(ctx context.Context, executor Executor, reqAccountID ton.A } func DecodeGetUserBinAssets_BidaskResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 2 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") { + if stack.Len() != 2 || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetUserBinAssets_BidaskResult @@ -8061,7 +8061,7 @@ func GetUserFeesInfo(ctx context.Context, executor Executor, reqAccountID ton.Ac } func DecodeGetUserFeesInfo_BidaskDammResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 4 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") || (stack[3].SumType != "VmStkTinyInt" && stack[3].SumType != "VmStkInt") { + if stack.Len() != 4 || (stack.Peek(3).SumType != "VmStkTinyInt" && stack.Peek(3).SumType != "VmStkInt") || (stack.Peek(2).SumType != "VmStkTinyInt" && stack.Peek(2).SumType != "VmStkInt") || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetUserFeesInfo_BidaskDammResult @@ -8094,7 +8094,7 @@ func GetUserPublicKeys(ctx context.Context, executor Executor, reqAccountID ton. } func DecodeGetUserPublicKeys_StormResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkCell") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkCell") { return "", nil, fmt.Errorf("invalid stack format") } var result GetUserPublicKeys_StormResult @@ -8140,7 +8140,7 @@ func GetValidateSignatures(ctx context.Context, executor Executor, reqAccountID } func DecodeGetValidateSignatures_StormResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 5 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || ((stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") && stack[2].SumType != "VmStkNull") || ((stack[3].SumType != "VmStkTinyInt" && stack[3].SumType != "VmStkInt") && stack[3].SumType != "VmStkNull") || (stack[4].SumType != "VmStkTinyInt" && stack[4].SumType != "VmStkInt") { + if stack.Len() != 5 || (stack.Peek(4).SumType != "VmStkTinyInt" && stack.Peek(4).SumType != "VmStkInt") || (stack.Peek(3).SumType != "VmStkTinyInt" && stack.Peek(3).SumType != "VmStkInt") || ((stack.Peek(2).SumType != "VmStkTinyInt" && stack.Peek(2).SumType != "VmStkInt") && stack.Peek(2).SumType != "VmStkNull") || ((stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") && stack.Peek(1).SumType != "VmStkNull") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetValidateSignatures_StormResult @@ -8186,7 +8186,7 @@ func GetValidatorControllerData(ctx context.Context, executor Executor, reqAccou } func DecodeGetValidatorControllerDataResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) < 14 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") || (stack[3].SumType != "VmStkTinyInt" && stack[3].SumType != "VmStkInt") || (stack[4].SumType != "VmStkTinyInt" && stack[4].SumType != "VmStkInt") || (stack[5].SumType != "VmStkTinyInt" && stack[5].SumType != "VmStkInt") || (stack[6].SumType != "VmStkTinyInt" && stack[6].SumType != "VmStkInt") || (stack[7].SumType != "VmStkTinyInt" && stack[7].SumType != "VmStkInt") || (stack[8].SumType != "VmStkTinyInt" && stack[8].SumType != "VmStkInt") || (stack[9].SumType != "VmStkTinyInt" && stack[9].SumType != "VmStkInt") || (stack[10].SumType != "VmStkTinyInt" && stack[10].SumType != "VmStkInt") || (stack[11].SumType != "VmStkSlice") || (stack[12].SumType != "VmStkSlice") || (stack[13].SumType != "VmStkSlice") { + if stack.Len() < 14 || (stack.Peek(stack.Len()-1).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-1).SumType != "VmStkInt") || (stack.Peek(stack.Len()-2).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-2).SumType != "VmStkInt") || (stack.Peek(stack.Len()-3).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-3).SumType != "VmStkInt") || (stack.Peek(stack.Len()-4).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-4).SumType != "VmStkInt") || (stack.Peek(stack.Len()-5).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-5).SumType != "VmStkInt") || (stack.Peek(stack.Len()-6).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-6).SumType != "VmStkInt") || (stack.Peek(stack.Len()-7).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-7).SumType != "VmStkInt") || (stack.Peek(stack.Len()-8).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-8).SumType != "VmStkInt") || (stack.Peek(stack.Len()-9).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-9).SumType != "VmStkInt") || (stack.Peek(stack.Len()-10).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-10).SumType != "VmStkInt") || (stack.Peek(stack.Len()-11).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-11).SumType != "VmStkInt") || (stack.Peek(stack.Len()-12).SumType != "VmStkSlice") || (stack.Peek(stack.Len()-13).SumType != "VmStkSlice") || (stack.Peek(stack.Len()-14).SumType != "VmStkSlice") { return "", nil, fmt.Errorf("invalid stack format") } var result GetValidatorControllerDataResult @@ -8225,7 +8225,7 @@ func GetVammAddress(ctx context.Context, executor Executor, reqAccountID ton.Acc } func DecodeGetVammAddress_StormResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkSlice") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkSlice") { return "", nil, fmt.Errorf("invalid stack format") } var result GetVammAddress_StormResult @@ -8258,7 +8258,7 @@ func GetVammType(ctx context.Context, executor Executor, reqAccountID ton.Accoun } func DecodeGetVammType_StormResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetVammType_StormResult @@ -8300,7 +8300,7 @@ func GetVaultAddress(ctx context.Context, executor Executor, reqAccountID ton.Ac } func DecodeGetVaultAddress_DedustResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkSlice") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkSlice") { return "", nil, fmt.Errorf("invalid stack format") } var result GetVaultAddress_DedustResult @@ -8342,7 +8342,7 @@ func GetVaultBalance(ctx context.Context, executor Executor, reqAccountID ton.Ac } func DecodeGetVaultBalance_StormResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetVaultBalance_StormResult @@ -8375,7 +8375,7 @@ func GetVaultContractData(ctx context.Context, executor Executor, reqAccountID t } func DecodeGetVaultContractData_StormResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkCell") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkCell") { return "", nil, fmt.Errorf("invalid stack format") } var result GetVaultContractData_StormResult @@ -8542,7 +8542,7 @@ func GetVaultData(ctx context.Context, executor Executor, reqAccountID ton.Accou } func DecodeGetVaultData_AffluentLendingVaultResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 11 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkSlice") || (stack[2].SumType != "VmStkSlice") || (stack[3].SumType != "VmStkSlice") || (stack[4].SumType != "VmStkTinyInt" && stack[4].SumType != "VmStkInt") || (stack[5].SumType != "VmStkTinyInt" && stack[5].SumType != "VmStkInt") || (stack[6].SumType != "VmStkTinyInt" && stack[6].SumType != "VmStkInt") || (stack[7].SumType != "VmStkSlice") || (stack[8].SumType != "VmStkTuple" && stack[8].SumType != "VmStkNull") || (stack[9].SumType != "VmStkCell") || (stack[10].SumType != "VmStkCell") { + if stack.Len() != 11 || (stack.Peek(10).SumType != "VmStkTinyInt" && stack.Peek(10).SumType != "VmStkInt") || (stack.Peek(9).SumType != "VmStkSlice") || (stack.Peek(8).SumType != "VmStkSlice") || (stack.Peek(7).SumType != "VmStkSlice") || (stack.Peek(6).SumType != "VmStkTinyInt" && stack.Peek(6).SumType != "VmStkInt") || (stack.Peek(5).SumType != "VmStkTinyInt" && stack.Peek(5).SumType != "VmStkInt") || (stack.Peek(4).SumType != "VmStkTinyInt" && stack.Peek(4).SumType != "VmStkInt") || (stack.Peek(3).SumType != "VmStkSlice") || (stack.Peek(2).SumType != "VmStkTuple" && stack.Peek(2).SumType != "VmStkNull") || (stack.Peek(1).SumType != "VmStkCell") || (stack.Peek(0).SumType != "VmStkCell") { return "", nil, fmt.Errorf("invalid stack format") } var result GetVaultData_AffluentLendingVaultResult @@ -8551,7 +8551,7 @@ func DecodeGetVaultData_AffluentLendingVaultResult(stack tlb.VmStack) (resultTyp } func DecodeGetVaultData_AffluentMultiplyVaultResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkTuple") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkTuple") { return "", nil, fmt.Errorf("invalid stack format") } var result GetVaultData_AffluentMultiplyVaultResult @@ -8560,7 +8560,7 @@ func DecodeGetVaultData_AffluentMultiplyVaultResult(stack tlb.VmStack) (resultTy } func DecodeGetVaultData_AffluentMultiplyVaultV2Result(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkTuple") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkTuple") { return "", nil, fmt.Errorf("invalid stack format") } var result GetVaultData_AffluentMultiplyVaultV2Result @@ -8569,7 +8569,7 @@ func DecodeGetVaultData_AffluentMultiplyVaultV2Result(stack tlb.VmStack) (result } func DecodeGetVaultData_StonfiV2Result(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 4 || (stack[0].SumType != "VmStkSlice") || (stack[1].SumType != "VmStkSlice") || (stack[2].SumType != "VmStkSlice") || (stack[3].SumType != "VmStkTinyInt" && stack[3].SumType != "VmStkInt") { + if stack.Len() != 4 || (stack.Peek(3).SumType != "VmStkSlice") || (stack.Peek(2).SumType != "VmStkSlice") || (stack.Peek(1).SumType != "VmStkSlice") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetVaultData_StonfiV2Result @@ -8578,7 +8578,7 @@ func DecodeGetVaultData_StonfiV2Result(stack tlb.VmStack) (resultType string, re } func DecodeGetVaultData_StormResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 9 || (stack[0].SumType != "VmStkSlice") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") || (stack[3].SumType != "VmStkTinyInt" && stack[3].SumType != "VmStkInt") || (stack[4].SumType != "VmStkTinyInt" && stack[4].SumType != "VmStkInt") || (stack[5].SumType != "VmStkTinyInt" && stack[5].SumType != "VmStkInt") || (stack[6].SumType != "VmStkTinyInt" && stack[6].SumType != "VmStkInt") || (stack[7].SumType != "VmStkTinyInt" && stack[7].SumType != "VmStkInt") || (stack[8].SumType != "VmStkTinyInt" && stack[8].SumType != "VmStkInt") { + if stack.Len() != 9 || (stack.Peek(8).SumType != "VmStkSlice") || (stack.Peek(7).SumType != "VmStkTinyInt" && stack.Peek(7).SumType != "VmStkInt") || (stack.Peek(6).SumType != "VmStkTinyInt" && stack.Peek(6).SumType != "VmStkInt") || (stack.Peek(5).SumType != "VmStkTinyInt" && stack.Peek(5).SumType != "VmStkInt") || (stack.Peek(4).SumType != "VmStkTinyInt" && stack.Peek(4).SumType != "VmStkInt") || (stack.Peek(3).SumType != "VmStkTinyInt" && stack.Peek(3).SumType != "VmStkInt") || (stack.Peek(2).SumType != "VmStkTinyInt" && stack.Peek(2).SumType != "VmStkInt") || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetVaultData_StormResult @@ -8611,7 +8611,7 @@ func GetVaultType(ctx context.Context, executor Executor, reqAccountID ton.Accou } func DecodeGetVaultType_StormResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetVaultType_StormResult @@ -8644,7 +8644,7 @@ func GetVaultWhitelistedAddresses(ctx context.Context, executor Executor, reqAcc } func DecodeGetVaultWhitelistedAddresses_StormResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkCell") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkCell") { return "", nil, fmt.Errorf("invalid stack format") } var result GetVaultWhitelistedAddresses_StormResult @@ -8677,7 +8677,7 @@ func GetVersion(ctx context.Context, executor Executor, reqAccountID ton.Account } func DecodeGetVersion_StormResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetVersion_StormResult @@ -8723,7 +8723,7 @@ func GetVestingData(ctx context.Context, executor Executor, reqAccountID ton.Acc } func DecodeGetVestingData_MoonResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 3 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkSlice") { + if stack.Len() != 3 || (stack.Peek(2).SumType != "VmStkTinyInt" && stack.Peek(2).SumType != "VmStkInt") || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkSlice") { return "", nil, fmt.Errorf("invalid stack format") } var result GetVestingData_MoonResult @@ -8732,7 +8732,7 @@ func DecodeGetVestingData_MoonResult(stack tlb.VmStack) (resultType string, resu } func DecodeGetVestingDataResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 8 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") || (stack[3].SumType != "VmStkTinyInt" && stack[3].SumType != "VmStkInt") || (stack[4].SumType != "VmStkTinyInt" && stack[4].SumType != "VmStkInt") || (stack[5].SumType != "VmStkSlice") || (stack[6].SumType != "VmStkSlice") || (stack[7].SumType != "VmStkCell") { + if stack.Len() != 8 || (stack.Peek(7).SumType != "VmStkTinyInt" && stack.Peek(7).SumType != "VmStkInt") || (stack.Peek(6).SumType != "VmStkTinyInt" && stack.Peek(6).SumType != "VmStkInt") || (stack.Peek(5).SumType != "VmStkTinyInt" && stack.Peek(5).SumType != "VmStkInt") || (stack.Peek(4).SumType != "VmStkTinyInt" && stack.Peek(4).SumType != "VmStkInt") || (stack.Peek(3).SumType != "VmStkTinyInt" && stack.Peek(3).SumType != "VmStkInt") || (stack.Peek(2).SumType != "VmStkSlice") || (stack.Peek(1).SumType != "VmStkSlice") || (stack.Peek(0).SumType != "VmStkCell") { return "", nil, fmt.Errorf("invalid stack format") } var result GetVestingDataResult @@ -8765,7 +8765,7 @@ func GetWalletAddr(ctx context.Context, executor Executor, reqAccountID ton.Acco } func DecodeGetWalletAddrResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkSlice") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkSlice") { return "", nil, fmt.Errorf("invalid stack format") } var result GetWalletAddrResult @@ -8807,7 +8807,7 @@ func GetWalletAddress(ctx context.Context, executor Executor, reqAccountID ton.A } func DecodeGetWalletAddressResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) < 1 || (stack[0].SumType != "VmStkSlice") { + if stack.Len() < 1 || (stack.Peek(stack.Len()-1).SumType != "VmStkSlice") { return "", nil, fmt.Errorf("invalid stack format") } var result GetWalletAddressResult @@ -8843,7 +8843,7 @@ func GetWalletData(ctx context.Context, executor Executor, reqAccountID ton.Acco } func DecodeGetWalletDataResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) < 4 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkSlice") || (stack[2].SumType != "VmStkSlice") || (stack[3].SumType != "VmStkCell") { + if stack.Len() < 4 || (stack.Peek(stack.Len()-1).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-1).SumType != "VmStkInt") || (stack.Peek(stack.Len()-2).SumType != "VmStkSlice") || (stack.Peek(stack.Len()-3).SumType != "VmStkSlice") || (stack.Peek(stack.Len()-4).SumType != "VmStkCell") { return "", nil, fmt.Errorf("invalid stack format") } var result GetWalletDataResult @@ -8878,7 +8878,7 @@ func GetWalletParams(ctx context.Context, executor Executor, reqAccountID ton.Ac } func DecodeGetWalletParamsResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) < 3 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") { + if stack.Len() < 3 || (stack.Peek(stack.Len()-1).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-1).SumType != "VmStkInt") || (stack.Peek(stack.Len()-2).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-2).SumType != "VmStkInt") || (stack.Peek(stack.Len()-3).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-3).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result GetWalletParamsResult @@ -8915,7 +8915,7 @@ func IsActive(ctx context.Context, executor Executor, reqAccountID ton.AccountID } func DecodeIsActiveResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) < 1 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") { + if stack.Len() < 1 || (stack.Peek(stack.Len()-1).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-1).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result IsActiveResult @@ -8924,7 +8924,7 @@ func DecodeIsActiveResult(stack tlb.VmStack) (resultType string, resultAny any, } func DecodeIsActive_CoffeeResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result IsActive_CoffeeResult @@ -8957,7 +8957,7 @@ func IsClaimed(ctx context.Context, executor Executor, reqAccountID ton.AccountI } func DecodeIsClaimedResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result IsClaimedResult @@ -8998,7 +8998,7 @@ func IsPluginInstalled(ctx context.Context, executor Executor, reqAccountID ton. } func DecodeIsPluginInstalledResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) < 1 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") { + if stack.Len() < 1 || (stack.Peek(stack.Len()-1).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-1).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result IsPluginInstalledResult @@ -9031,7 +9031,7 @@ func IsSignatureAllowed(ctx context.Context, executor Executor, reqAccountID ton } func DecodeIsSignatureAllowedResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result IsSignatureAllowedResult @@ -9064,7 +9064,7 @@ func IsStable(ctx context.Context, executor Executor, reqAccountID ton.AccountID } func DecodeIsStable_DedustResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result IsStable_DedustResult @@ -9097,7 +9097,7 @@ func IsStrategyVault(ctx context.Context, executor Executor, reqAccountID ton.Ac } func DecodeIsStrategyVault_AffluentResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result IsStrategyVault_AffluentResult @@ -9131,7 +9131,7 @@ func JettonWalletLockData(ctx context.Context, executor Executor, reqAccountID t } func DecodeJettonWalletLockDataResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) < 2 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") { + if stack.Len() < 2 || (stack.Peek(stack.Len()-1).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-1).SumType != "VmStkInt") || (stack.Peek(stack.Len()-2).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-2).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result JettonWalletLockDataResult @@ -9164,7 +9164,7 @@ func LastProxySeqno(ctx context.Context, executor Executor, reqAccountID ton.Acc } func DecodeLastProxySeqno_CocoonResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result LastProxySeqno_CocoonResult @@ -9202,7 +9202,7 @@ func ListNominators(ctx context.Context, executor Executor, reqAccountID ton.Acc } func DecodeListNominatorsResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) < 1 || (stack[0].SumType != "VmStkTuple" && stack[0].SumType != "VmStkNull") { + if stack.Len() < 1 || (stack.Peek(stack.Len()-1).SumType != "VmStkTuple" && stack.Peek(stack.Len()-1).SumType != "VmStkNull") { return "", nil, fmt.Errorf("invalid stack format") } var result ListNominatorsResult @@ -9238,7 +9238,7 @@ func ListVotes(ctx context.Context, executor Executor, reqAccountID ton.AccountI } func DecodeListVotesResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) < 1 || (stack[0].SumType != "VmStkTuple" && stack[0].SumType != "VmStkNull") { + if stack.Len() < 1 || (stack.Peek(stack.Len()-1).SumType != "VmStkTuple" && stack.Peek(stack.Len()-1).SumType != "VmStkNull") { return "", nil, fmt.Errorf("invalid stack format") } var result ListVotesResult @@ -9283,7 +9283,7 @@ func Processed(ctx context.Context, executor Executor, reqAccountID ton.AccountI } func DecodeProcessed_StormResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 3 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkTinyInt" && stack[2].SumType != "VmStkInt") { + if stack.Len() != 3 || (stack.Peek(2).SumType != "VmStkTinyInt" && stack.Peek(2).SumType != "VmStkInt") || (stack.Peek(1).SumType != "VmStkTinyInt" && stack.Peek(1).SumType != "VmStkInt") || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result Processed_StormResult @@ -9318,7 +9318,7 @@ func RoyaltyParams(ctx context.Context, executor Executor, reqAccountID ton.Acco } func DecodeRoyaltyParamsResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) < 3 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || (stack[1].SumType != "VmStkTinyInt" && stack[1].SumType != "VmStkInt") || (stack[2].SumType != "VmStkSlice") { + if stack.Len() < 3 || (stack.Peek(stack.Len()-1).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-1).SumType != "VmStkInt") || (stack.Peek(stack.Len()-2).SumType != "VmStkTinyInt" && stack.Peek(stack.Len()-2).SumType != "VmStkInt") || (stack.Peek(stack.Len()-3).SumType != "VmStkSlice") { return "", nil, fmt.Errorf("invalid stack format") } var result RoyaltyParamsResult @@ -9351,7 +9351,7 @@ func Seqno(ctx context.Context, executor Executor, reqAccountID ton.AccountID) ( } func DecodeSeqnoResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkTinyInt" && stack.Peek(0).SumType != "VmStkInt") { return "", nil, fmt.Errorf("invalid stack format") } var result SeqnoResult @@ -9384,7 +9384,7 @@ func Whoami(ctx context.Context, executor Executor, reqAccountID ton.AccountID) } func DecodeWhoami_BidaskResult(stack tlb.VmStack) (resultType string, resultAny any, err error) { - if len(stack) != 1 || (stack[0].SumType != "VmStkSlice") { + if stack.Len() != 1 || (stack.Peek(0).SumType != "VmStkSlice") { return "", nil, fmt.Errorf("invalid stack format") } var result Whoami_BidaskResult diff --git a/abi/parser/generator.go b/abi/parser/generator.go index 326c10e4..9dca3753 100644 --- a/abi/parser/generator.go +++ b/abi/parser/generator.go @@ -410,14 +410,15 @@ func buildInputStackValues(r []StackRecord) string { func buildOutputStackCheck(r []StackRecord, isFixed bool) string { var builder strings.Builder + n := len(r) if isFixed { - builder.WriteString(fmt.Sprintf("if len(stack) != %d ", len(r))) + builder.WriteString(fmt.Sprintf("if stack.Len() != %d ", n)) } else { - builder.WriteString(fmt.Sprintf("if len(stack) < %d ", len(r))) + builder.WriteString(fmt.Sprintf("if stack.Len() < %d ", n)) } for i, s := range r { nullableCheck := "" - stackType := fmt.Sprintf("stack[%d].SumType", i) + stackType := fmt.Sprintf("stack.Peek(%d).SumType", n-1-i) if s.Nullable || (s.XMLName.Local == "tuple" && s.List) { nullableCheck = fmt.Sprintf(" && %s != \"VmStkNull\"", stackType) } diff --git a/contract/dns/dns.go b/contract/dns/dns.go index 10d42e74..4d440560 100644 --- a/contract/dns/dns.go +++ b/contract/dns/dns.go @@ -65,14 +65,14 @@ func (d *DNS) Resolve(ctx context.Context, domain string) (map[DNSCategory]tlb.D func (d *DNS) resolve(ctx context.Context, resolver ton.AccountID, dom []byte) (map[DNSCategory]tlb.DNSRecord, error) { n := int64(len(dom)) - stack := tlb.VmStack{} + argStack := tlb.VmStack{} val, err := tlb.TlbStructToVmCellSlice(dom) if err != nil { return nil, err } - stack.Put(val) - stack.Put(tlb.VmStackValue{SumType: "VmStkInt", VmStkInt: tlb.Int257{}}) - exitCode, stack, err := d.executor.RunSmcMethodByID(ctx, resolver, 123660, stack) + argStack.Put(val) + argStack.Put(tlb.VmStackValue{SumType: "VmStkInt", VmStkInt: tlb.Int257{}}) + exitCode, stack, err := d.executor.RunSmcMethodByID(ctx, resolver, 123660, argStack) if err != nil && strings.Contains(err.Error(), "method execution failed") { return nil, fmt.Errorf("%w: %v", ErrNotResolved, err) } @@ -86,7 +86,7 @@ func (d *DNS) resolve(ctx context.Context, resolver ton.AccountID, dom []byte) ( ResolvedBits int64 Result boc.Cell } - if len(stack) == 2 && stack[0].SumType == "VmStkTinyInt" && stack[0].VmStkTinyInt == 0 && stack[1].SumType == "VmStkNull" { + if stack.Len() == 2 && stack.Peek(1).SumType == "VmStkTinyInt" && stack.Peek(1).VmStkTinyInt == 0 && stack.Peek(0).SumType == "VmStkNull" { return nil, ErrNotResolved } err = stack.Unmarshal(&result) diff --git a/examples/tvm/main.go b/examples/tvm/main.go index b2321c28..6bf2e451 100644 --- a/examples/tvm/main.go +++ b/examples/tvm/main.go @@ -37,7 +37,7 @@ func main() { panic(err) } - code, res, err := emulator.RunSmcMethod(context.Background(), account.ID, "get_nft_address_by_index", tlb.VmStack{val}) + code, res, err := emulator.RunSmcMethod(context.Background(), account.ID, "get_nft_address_by_index", val.ToStack()) if err != nil { panic(err) } @@ -46,11 +46,11 @@ func main() { panic("TVM execution failed") } - if len(res) != 1 || res[0].SumType != "VmStkSlice" { + if res.Len() != 1 || res.Peek(0).SumType != "VmStkSlice" { panic("invalid stack data") } - c := res[0].VmStkSlice.Cell() + c := res.Peek(0).VmStkSlice.Cell() var a tlb.MsgAddress err = tlb.Unmarshal(c, &a) if err != nil { diff --git a/liteapi/client.go b/liteapi/client.go index c6d45b20..2549959e 100644 --- a/liteapi/client.go +++ b/liteapi/client.go @@ -518,7 +518,7 @@ func (c *Client) RunSmcMethodByID(ctx context.Context, accountID ton.AccountID, } var result tlb.VmStack if res.ExitCode == 4294967040 { //-256 - return res.ExitCode, nil, ErrAccountNotFound + return res.ExitCode, tlb.VmStack{}, ErrAccountNotFound } cells, err := boc.DeserializeBoc(res.Result) if err != nil { diff --git a/liteapi/dns.go b/liteapi/dns.go index 92f5c9a6..31b9d32f 100644 --- a/liteapi/dns.go +++ b/liteapi/dns.go @@ -39,15 +39,16 @@ func (c *Client) DnsResolve(ctx context.Context, address ton.AccountID, domain s if errCode != 0 && errCode != 1 { return 0, nil, fmt.Errorf("method execution failed with code: %v", errCode) } - if len(stack) != 2 || - stack[0].SumType != "VmStkTinyInt" || - (stack[1].SumType != "VmStkCell" && stack[1].SumType != "VmStkNull") { + if stack.Len() != 2 || + stack.Peek(1).SumType != "VmStkTinyInt" || + (stack.Peek(0).SumType != "VmStkCell" && stack.Peek(0).SumType != "VmStkNull") { return 0, nil, fmt.Errorf("invalid stack") } - if stack[1].SumType == "VmStkNull" { + if stack.Peek(0).SumType == "VmStkNull" { return 0, nil, nil } - return int(stack[0].VmStkTinyInt), &stack[1].VmStkCell.Value, err + topVal := stack.Peek(0).VmStkCell.Value + return int(stack.Peek(1).VmStkTinyInt), &topVal, err } func (c *Client) GetRootDNS(ctx context.Context) (ton.AccountID, error) { diff --git a/liteapi/jetton.go b/liteapi/jetton.go index 809d117c..8662416f 100644 --- a/liteapi/jetton.go +++ b/liteapi/jetton.go @@ -22,18 +22,18 @@ func (c *Client) GetJettonWallet(ctx context.Context, master, owner ton.AccountI if err != nil { return ton.AccountID{}, err } - errCode, stack, err := c.RunSmcMethod(ctx, master, "get_wallet_address", tlb.VmStack{val}) + errCode, stack, err := c.RunSmcMethod(ctx, master, "get_wallet_address", val.ToStack()) if err != nil { return ton.AccountID{}, err } if errCode != 0 && errCode != 1 { return ton.AccountID{}, fmt.Errorf("method execution failed with code: %v", errCode) } - if len(stack) != 1 || stack[0].SumType != "VmStkSlice" { + if stack.Len() != 1 || stack.Peek(0).SumType != "VmStkSlice" { return ton.AccountID{}, fmt.Errorf("invalid stack") } var res tlb.MsgAddress - err = stack[0].VmStkSlice.UnmarshalToTlbStruct(&res) + err = stack.Peek(0).VmStkSlice.UnmarshalToTlbStruct(&res) if err != nil { return ton.AccountID{}, err } @@ -58,14 +58,15 @@ func (c *Client) GetJettonData(ctx context.Context, master ton.AccountID) (tep64 if errCode != 0 && errCode != 1 { return tep64.Metadata{}, fmt.Errorf("method execution failed with code: %v", errCode) } - if len(stack) != 5 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || - stack[1].SumType != "VmStkTinyInt" || - stack[2].SumType != "VmStkSlice" || - stack[3].SumType != "VmStkCell" || - stack[4].SumType != "VmStkCell" { + if stack.Len() != 5 || (stack.Peek(4).SumType != "VmStkTinyInt" && stack.Peek(4).SumType != "VmStkInt") || + stack.Peek(3).SumType != "VmStkTinyInt" || + stack.Peek(2).SumType != "VmStkSlice" || + stack.Peek(1).SumType != "VmStkCell" || + stack.Peek(0).SumType != "VmStkCell" { return tep64.Metadata{}, fmt.Errorf("invalid stack") } - cell := &stack[3].VmStkCell.Value + elem1 := stack.Peek(1) + cell := &elem1.VmStkCell.Value var content tlb.FullContent err = tlb.Unmarshal(cell, &content) if err != nil { @@ -95,15 +96,16 @@ func (c *Client) GetJettonBalance(ctx context.Context, jettonWallet ton.AccountI if errCode != 0 && errCode != 1 { return nil, fmt.Errorf("method execution failed with code: %v", errCode) } - if len(stack) != 4 || (stack[0].SumType != "VmStkTinyInt" && stack[0].SumType != "VmStkInt") || - stack[1].SumType != "VmStkSlice" || - stack[2].SumType != "VmStkSlice" || - stack[3].SumType != "VmStkCell" { + if stack.Len() != 4 || (stack.Peek(3).SumType != "VmStkTinyInt" && stack.Peek(3).SumType != "VmStkInt") || + stack.Peek(2).SumType != "VmStkSlice" || + stack.Peek(1).SumType != "VmStkSlice" || + stack.Peek(0).SumType != "VmStkCell" { return nil, fmt.Errorf("invalid stack") } - if stack[0].SumType == "VmStkTinyInt" { - return big.NewInt(stack[0].VmStkTinyInt), nil + bottom := stack.Peek(3) + if bottom.SumType == "VmStkTinyInt" { + return big.NewInt(bottom.VmStkTinyInt), nil } - res := big.Int(stack[0].VmStkInt) + res := big.Int(bottom.VmStkInt) return &res, nil } diff --git a/liteapi/wallet.go b/liteapi/wallet.go index 60e53e84..a1f0a9ba 100644 --- a/liteapi/wallet.go +++ b/liteapi/wallet.go @@ -18,8 +18,8 @@ func (c *Client) GetSeqno(ctx context.Context, account ton.AccountID) (uint32, e } else if errCode != 0 && errCode != 1 { return 0, fmt.Errorf("method execution failed with code: %v", errCode) } - if len(stack) != 1 || stack[0].SumType != "VmStkTinyInt" { + if stack.Len() != 1 || stack.Peek(0).SumType != "VmStkTinyInt" { return 0, fmt.Errorf("invalid stack") } - return uint32(stack[0].VmStkTinyInt), nil + return uint32(stack.Peek(0).VmStkTinyInt), nil } diff --git a/tlb/stack.go b/tlb/stack.go index 86987952..253f5089 100644 --- a/tlb/stack.go +++ b/tlb/stack.go @@ -15,7 +15,25 @@ import ( // vm_stack#_ depth:(## 24) stack:(VmStackList depth) = VmStack; // vm_stk_cons#_ {n:#} rest:^(VmStackList n) tos:VmStackValue = VmStackList (n + 1); // vm_stk_nil#_ = VmStackList 0; -type VmStack []VmStackValue +type VmStack struct { + values []VmStackValue // last element is top of the stack +} + +// Len returns the size of the stack +func (s VmStack) Len() int { + return len(s.values) +} + +// Peek returns the top element from the stack (if i == 0) without popping it out +// peeking empty stack will panic as out of range +func (s VmStack) Peek(i int) VmStackValue { + return s.values[len(s.values)-i-1] +} + +// Put puts the value on top of the stack +func (s *VmStack) Put(val VmStackValue) { + s.values = append(s.values, val) +} // VmCont // _ cregs:(HashmapE 4 VmStackValue) = VmSaveList; @@ -61,8 +79,74 @@ type VmTupleRef struct { } func (t VmStkTuple) MarshalTLB(c *boc.Cell, encoder *Encoder) error { - // TODO: implement - return fmt.Errorf("VmStkTuple TLB marshaling not implemented") + if err := c.WriteUint(uint64(t.Len), 16); err != nil { + return err + } + if t.Len == 0 { + if t.Data != nil { + return fmt.Errorf("tuple data must be nil when len is 0") + } + return nil + } + if t.Data == nil { + return fmt.Errorf("tuple data is nil for len %d", t.Len) + } + return marshalVmTuple(c, t.Len, t.Data, encoder) +} + +func marshalVmTuple(c *boc.Cell, length uint16, tuple *VmTuple, encoder *Encoder) error { + if length == 0 { + if tuple != nil { + return fmt.Errorf("unexpected tuple payload for len 0") + } + return nil + } + if tuple == nil { + return fmt.Errorf("tuple is nil for len %d", length) + } + n := length - 1 + if err := marshalVmTupleRef(c, n, &tuple.Head, encoder); err != nil { + return err + } + if n == 0 { + return nil + } + if tuple.Tail.SumType == "" { + return fmt.Errorf("tuple tail is empty for len %d", length) + } + ref, err := c.NewRef() + if err != nil { + return err + } + return encoder.Marshal(ref, tuple.Tail) +} + +func marshalVmTupleRef(c *boc.Cell, n uint16, ref *VmTupleRef, encoder *Encoder) error { + if ref == nil { + return fmt.Errorf("tuple ref is nil") + } + switch { + case n == 0 || n == 1: + if ref.Entry == nil { + return fmt.Errorf("tuple ref entry is nil for n=%d", n) + } + entryCell, err := c.NewRef() + if err != nil { + return err + } + return encoder.Marshal(entryCell, ref.Entry) + case n > 1: + if ref.Ref == nil { + return fmt.Errorf("tuple ref child is nil for n=%d", n) + } + childCell, err := c.NewRef() + if err != nil { + return err + } + return marshalVmTuple(childCell, n, ref.Ref, encoder) + default: + return fmt.Errorf("unsupported tuple ref size n=%d", n) + } } func (t *VmStkTuple) UnmarshalTLB(c *boc.Cell, decoder *Decoder) error { @@ -170,13 +254,17 @@ type VmStackValue struct { VmStkTuple VmStkTuple `tlbSumType:"vm_stk_tuple#07"` } +func (v VmStackValue) ToStack() VmStack { + return VmStack{values: []VmStackValue{v}} +} + func (s VmStack) MarshalTLB(c *boc.Cell, encoder *Encoder) error { - depth := uint64(len(s)) + depth := uint64(len(s.values)) err := c.WriteUint(depth, 24) if err != nil { return err } - err = putStackListItems(c, s) + err = putStackListItems(c, s.values) return err } @@ -192,7 +280,7 @@ func (s *VmStack) UnmarshalTLB(c *boc.Cell, decoder *Decoder) error { if err != nil { return err } - *s = list + s.values = list return nil } @@ -222,11 +310,12 @@ func getStackListItems(c *boc.Cell, depth uint64, decoder *Decoder) ([]VmStackVa } func putStackListItems(c *boc.Cell, list []VmStackValue) error { - if len(list) == 0 { + llen := len(list) + if llen == 0 { return nil } restCell := boc.NewCell() - err := putStackListItems(restCell, list[1:]) + err := putStackListItems(restCell, list[:llen-1]) // llen 1 -> list[0:0] if err != nil { return err } @@ -234,7 +323,7 @@ func putStackListItems(c *boc.Cell, list []VmStackValue) error { if err != nil { return err } - err = Marshal(c, list[0]) + err = Marshal(c, list[llen-1]) // llen 1 -> list[0] return err } @@ -267,10 +356,6 @@ func (s *VmStack) UnmarshalTL(r io.Reader) error { return Unmarshal(cell[0], s) } -func (s *VmStack) Put(val VmStackValue) { - *s = append(VmStack{val}, *s...) -} - func (s VmCellSlice) MarshalTLB(c *boc.Cell, encoder *Encoder) error { if s.stBits > s.endBits { return fmt.Errorf("invalid StBits and EndBits for CellSlice") @@ -617,12 +702,12 @@ func (s VmStack) Unmarshal(dest any) error { if val.Kind() != reflect.Pointer { return fmt.Errorf("value should be a pointer") } - if val.Elem().Type().NumField() > len(s) { + if val.Elem().Type().NumField() > len(s.values) { return fmt.Errorf("not enough values in stack") } for i := 0; i < val.Elem().Type().NumField(); i++ { fieldType := val.Elem().Field(i).Type() - if s[i].SumType == "VmStkNull" { + if s.values[i].SumType == "VmStkNull" { kind := fieldType.Kind() if kind == reflect.Pointer || kind == reflect.Slice { continue @@ -630,7 +715,7 @@ func (s VmStack) Unmarshal(dest any) error { return errors.New("can't unmarshal null") } value := reflect.New(fieldType) - if err := s[i].Unmarshal(value.Interface()); err != nil { + if err := s.values[i].Unmarshal(value.Interface()); err != nil { return err } val.Elem().Field(i).Set(value.Elem()) diff --git a/tlb/stack_test.go b/tlb/stack_test.go index 7cc9c068..1416ff5e 100644 --- a/tlb/stack_test.go +++ b/tlb/stack_test.go @@ -175,7 +175,7 @@ func Test_IntMatrixTupleUnmarshal(t *testing.T) { if err != nil { t.Fatal(err) } - val := stack[0] + val := stack.Peek(0) if val.SumType != "VmStkTuple" { t.Errorf("Stack value must be tuple, got %v", val.SumType) } diff --git a/tlb/tuples_test.go b/tlb/tuples_test.go index 56b20e1e..a0934aa2 100644 --- a/tlb/tuples_test.go +++ b/tlb/tuples_test.go @@ -35,7 +35,8 @@ func TestTuple(t *testing.T) { PendingAmount Grams Requested bool } - err = stack[0].VmStkTuple.Unmarshal(&items) + top := stack.Peek(0) + err = top.VmStkTuple.Unmarshal(&items) if err != nil { panic(err) } @@ -87,7 +88,8 @@ func TestTuple2(t *testing.T) { Workchain int32 Address Bits256 } - err = stack[0].VmStkTuple.Unmarshal(&plugins) + top := stack.Peek(0) + err = top.VmStkTuple.Unmarshal(&plugins) if err != nil { t.Fatal(err) } diff --git a/tvm/precompiled/jettons.go b/tvm/precompiled/jettons.go index bb47d53e..3fbe2b47 100644 --- a/tvm/precompiled/jettons.go +++ b/tvm/precompiled/jettons.go @@ -16,42 +16,44 @@ func jettonV1getWalletData(data *boc.Cell, args tlb.VmStack) (tlb.VmStack, error } err := tlb.Unmarshal(data, &body) if err != nil { - return nil, err + return tlb.VmStack{}, err } - var result = make([]tlb.VmStackValue, 4) var b = big.Int(body.Amount) - if b.IsInt64() { - result[0] = tlb.VmStackValue{ - SumType: "VmStkTinyInt", - VmStkTinyInt: b.Int64(), - } - } else { - result[0] = tlb.VmStackValue{ - SumType: "VmStkInt", - VmStkInt: tlb.Int257(b), - } - } ownerCell := boc.NewCell() masterCell := boc.NewCell() err = tlb.Marshal(ownerCell, body.Owner) if err != nil { - return nil, err + return tlb.VmStack{}, err } err = tlb.Marshal(masterCell, body.Master) if err != nil { - return nil, err + return tlb.VmStack{}, err } - result[1], err = tlb.CellToVmCellSlice(ownerCell) + ownerSlice, err := tlb.CellToVmCellSlice(ownerCell) if err != nil { - return nil, err + return tlb.VmStack{}, err } - result[2], err = tlb.CellToVmCellSlice(masterCell) + masterSlice, err := tlb.CellToVmCellSlice(masterCell) if err != nil { - return nil, err + return tlb.VmStack{}, err } - result[3] = tlb.VmStackValue{ + var result tlb.VmStack + result.Put(tlb.VmStackValue{ SumType: "VmStkCell", VmStkCell: tlb.Ref[boc.Cell]{Value: body.Code}, + }) + result.Put(masterSlice) + result.Put(ownerSlice) + if b.IsInt64() { + result.Put(tlb.VmStackValue{ + SumType: "VmStkTinyInt", + VmStkTinyInt: b.Int64(), + }) + } else { + result.Put(tlb.VmStackValue{ + SumType: "VmStkInt", + VmStkInt: tlb.Int257(b), + }) } return result, nil } @@ -69,43 +71,45 @@ func jettonV2getWalletData(code string) func(data *boc.Cell, args tlb.VmStack) ( } err := tlb.Unmarshal(data, &body) if err != nil { - return nil, err + return tlb.VmStack{}, err } - var result = make([]tlb.VmStackValue, 4) var b = big.Int(body.Amount) - if b.IsInt64() { - result[0] = tlb.VmStackValue{ - SumType: "VmStkTinyInt", - VmStkTinyInt: b.Int64(), - } - } else { - result[0] = tlb.VmStackValue{ - SumType: "VmStkInt", - VmStkInt: tlb.Int257(b), - } - } ownerCell := boc.NewCell() masterCell := boc.NewCell() err = tlb.Marshal(ownerCell, body.Owner) if err != nil { - return nil, err + return tlb.VmStack{}, err } err = tlb.Marshal(masterCell, body.Master) if err != nil { - return nil, err + return tlb.VmStack{}, err } codeCell, _ := boc.DeserializeSinglRootBase64(code) - result[1], err = tlb.CellToVmCellSlice(ownerCell) + ownerSlice, err := tlb.CellToVmCellSlice(ownerCell) if err != nil { - return nil, err + return tlb.VmStack{}, err } - result[2], err = tlb.CellToVmCellSlice(masterCell) + masterSlice, err := tlb.CellToVmCellSlice(masterCell) if err != nil { - return nil, err + return tlb.VmStack{}, err } - result[3] = tlb.VmStackValue{ + var result tlb.VmStack + result.Put(tlb.VmStackValue{ SumType: "VmStkCell", VmStkCell: tlb.Ref[boc.Cell]{Value: *codeCell}, + }) + result.Put(masterSlice) + result.Put(ownerSlice) + if b.IsInt64() { + result.Put(tlb.VmStackValue{ + SumType: "VmStkTinyInt", + VmStkTinyInt: b.Int64(), + }) + } else { + result.Put(tlb.VmStackValue{ + SumType: "VmStkInt", + VmStkInt: tlb.Int257(b), + }) } return result, nil } @@ -130,43 +134,45 @@ func jettonV3getWalletData(code string) func(data *boc.Cell, args tlb.VmStack) ( } err := tlb.Unmarshal(data, &body) if err != nil { - return nil, err + return tlb.VmStack{}, err } - var result = make([]tlb.VmStackValue, 4) var b = big.Int(body.Amount) - if b.IsInt64() { - result[0] = tlb.VmStackValue{ - SumType: "VmStkTinyInt", - VmStkTinyInt: b.Int64(), - } - } else { - result[0] = tlb.VmStackValue{ - SumType: "VmStkInt", - VmStkInt: tlb.Int257(b), - } - } ownerCell := boc.NewCell() masterCell := boc.NewCell() err = tlb.Marshal(ownerCell, body.Owner) if err != nil { - return nil, err + return tlb.VmStack{}, err } err = tlb.Marshal(masterCell, body.Master) if err != nil { - return nil, err + return tlb.VmStack{}, err } codeCell, _ := boc.DeserializeSinglRootBase64(code) - result[1], err = tlb.CellToVmCellSlice(ownerCell) + ownerSlice, err := tlb.CellToVmCellSlice(ownerCell) if err != nil { - return nil, err + return tlb.VmStack{}, err } - result[2], err = tlb.CellToVmCellSlice(masterCell) + masterSlice, err := tlb.CellToVmCellSlice(masterCell) if err != nil { - return nil, err + return tlb.VmStack{}, err } - result[3] = tlb.VmStackValue{ + var result tlb.VmStack + result.Put(tlb.VmStackValue{ SumType: "VmStkCell", VmStkCell: tlb.Ref[boc.Cell]{Value: *codeCell}, + }) + result.Put(masterSlice) + result.Put(ownerSlice) + if b.IsInt64() { + result.Put(tlb.VmStackValue{ + SumType: "VmStkTinyInt", + VmStkTinyInt: b.Int64(), + }) + } else { + result.Put(tlb.VmStackValue{ + SumType: "VmStkInt", + VmStkInt: tlb.Int257(b), + }) } return result, nil } @@ -181,12 +187,10 @@ func isClaimed(data *boc.Cell, args tlb.VmStack) (tlb.VmStack, error) { } err := tlb.Unmarshal(data, &body) if err != nil { - return nil, err + return tlb.VmStack{}, err } - var result = make([]tlb.VmStackValue, 1) - result[0] = tlb.VmStackValue{ + return tlb.VmStackValue{ SumType: "VmStkTinyInt", VmStkTinyInt: int64(body.Status), - } - return result, nil + }.ToStack(), nil } diff --git a/tvm/precompiled/mining.go b/tvm/precompiled/mining.go index ec83be91..01104bd6 100644 --- a/tvm/precompiled/mining.go +++ b/tvm/precompiled/mining.go @@ -18,24 +18,12 @@ var getPowParamsGram = func(data *boc.Cell, args tlb.VmStack) (tlb.VmStack, erro } err := tlb.Unmarshal(data, &body) if err != nil { - return nil, err + return tlb.VmStack{}, err } - return tlb.VmStack{ - { - SumType: "VmStkInt", - VmStkInt: tlb.Int257(body.Value1), - }, - { - SumType: "VmStkInt", - VmStkInt: tlb.Int257(body.Value2), - }, - { - SumType: "VmStkTinyInt", - VmStkTinyInt: int64(body.Field1.Value3), - }, - { - SumType: "VmStkTinyInt", - VmStkTinyInt: int64(body.Field1.Value4), - }, - }, nil + var result tlb.VmStack + result.Put(tlb.VmStackValue{SumType: "VmStkTinyInt", VmStkTinyInt: int64(body.Field1.Value4)}) + result.Put(tlb.VmStackValue{SumType: "VmStkTinyInt", VmStkTinyInt: int64(body.Field1.Value3)}) + result.Put(tlb.VmStackValue{SumType: "VmStkInt", VmStkInt: tlb.Int257(body.Value2)}) + result.Put(tlb.VmStackValue{SumType: "VmStkInt", VmStkInt: tlb.Int257(body.Value1)}) + return result, nil } diff --git a/tvm/precompiled/nft.go b/tvm/precompiled/nft.go index d34a26ee..6409e9bb 100644 --- a/tvm/precompiled/nft.go +++ b/tvm/precompiled/nft.go @@ -1,9 +1,10 @@ package precompiled import ( + "math/big" + "github.com/tonkeeper/tongo/boc" "github.com/tonkeeper/tongo/tlb" - "math/big" ) func nftV1getNftData(data *boc.Cell, args tlb.VmStack) (tlb.VmStack, error) { @@ -17,51 +18,64 @@ func nftV1getNftData(data *boc.Cell, args tlb.VmStack) (tlb.VmStack, error) { } err := tlb.Unmarshal(data, &body) if err != nil { - return nil, err + return tlb.VmStack{}, err } - var result = make([]tlb.VmStackValue, 5) - result[0].SumType = "VmStkTinyInt" + + // result[1] - index value + var indexVal tlb.VmStackValue if int64(body.Index) < 0 { var b big.Int b.SetUint64(body.Index) - result[1].SumType = "VmStkInt" - result[1].VmStkInt = tlb.Int257(b) + indexVal.SumType = "VmStkInt" + indexVal.VmStkInt = tlb.Int257(b) } else { - result[1].SumType = "VmStkTinyInt" - result[1].VmStkTinyInt = int64(body.Index) + indexVal.SumType = "VmStkTinyInt" + indexVal.VmStkTinyInt = int64(body.Index) } + + // result[2] - collection slice collectionCells := boc.NewCell() err = tlb.Marshal(collectionCells, body.Collection) if err != nil { - return nil, err + return tlb.VmStack{}, err } - result[2], err = tlb.CellToVmCellSlice(collectionCells) + collectionSlice, err := tlb.CellToVmCellSlice(collectionCells) if err != nil { - return nil, err + return tlb.VmStack{}, err } + + // result[0], result[3], result[4] - init flag, owner, data (conditional) + var initVal, ownerVal, dataVal tlb.VmStackValue if data.BitsAvailableForRead() > 0 { err = tlb.Unmarshal(data, &body2) if err != nil { - return nil, err + return tlb.VmStack{}, err } - result[0].VmStkTinyInt = -1 + initVal = tlb.VmStackValue{SumType: "VmStkTinyInt", VmStkTinyInt: -1} ownerCell := boc.NewCell() err = tlb.Marshal(ownerCell, body2.Owner) if err != nil { - return nil, err + return tlb.VmStack{}, err } - result[3], err = tlb.CellToVmCellSlice(ownerCell) + ownerVal, err = tlb.CellToVmCellSlice(ownerCell) if err != nil { - return nil, err + return tlb.VmStack{}, err } - result[4] = tlb.VmStackValue{ + dataVal = tlb.VmStackValue{ SumType: "VmStkCell", VmStkCell: tlb.Ref[boc.Cell]{Value: body2.Data}, } } else { - result[0].VmStkTinyInt = 0 - result[3].SumType = "VmStkNull" - result[4].SumType = "VmStkNull" + initVal = tlb.VmStackValue{SumType: "VmStkTinyInt", VmStkTinyInt: 0} + ownerVal = tlb.VmStackValue{SumType: "VmStkNull"} + dataVal = tlb.VmStackValue{SumType: "VmStkNull"} } + + var result tlb.VmStack + result.Put(dataVal) + result.Put(ownerVal) + result.Put(collectionSlice) + result.Put(indexVal) + result.Put(initVal) return result, nil } diff --git a/tvm/precompiled/precompiled_test.go b/tvm/precompiled/precompiled_test.go index 471322e1..24007872 100644 --- a/tvm/precompiled/precompiled_test.go +++ b/tvm/precompiled/precompiled_test.go @@ -119,7 +119,7 @@ func TestPrecompiles(t *testing.T) { method: 97026, account: "EQAAseW6AC4wiEWzSxusVP80xM6yYahYRvKEhKmikXBDjYWN", compareFunc: func(stack1, stack2 tlb.VmStack) error { - if len(stack2) != len(stack1) { + if stack2.Len() != stack1.Len() { return fmt.Errorf("stack length mismatch") } var a, b abi.GetWalletDataResult @@ -142,7 +142,7 @@ func TestPrecompiles(t *testing.T) { method: 97026, account: "EQC0ZCVsOCGda8Qufyqn0WLUBFdP0vl5w09MO8JYCYVn6CjE", compareFunc: func(stack1, stack2 tlb.VmStack) error { - if len(stack2) != len(stack1) { + if stack2.Len() != stack1.Len() { return fmt.Errorf("stack length mismatch") } var a, b abi.GetWalletDataResult @@ -166,7 +166,7 @@ func TestPrecompiles(t *testing.T) { method: 97026, account: "EQCJgWrPFPqHhJHTu0ISbIaZuc3OkQH8p7ePnmAtsIjpl3rP", compareFunc: func(stack1, stack2 tlb.VmStack) error { - if len(stack2) != len(stack1) { + if stack2.Len() != stack1.Len() { return fmt.Errorf("stack length mismatch") } var a, b abi.GetWalletDataResult @@ -190,7 +190,7 @@ func TestPrecompiles(t *testing.T) { method: 97026, account: "kQDDNHHLAWzRDIci7_jD1An79w80ER5SzueZHmusWgJs_fG2", compareFunc: func(stack1, stack2 tlb.VmStack) error { - if len(stack2) != len(stack1) { + if stack2.Len() != stack1.Len() { return fmt.Errorf("stack length mismatch") } var a, b abi.GetWalletDataResult @@ -214,7 +214,7 @@ func TestPrecompiles(t *testing.T) { method: 97026, account: "EQDrV3Vex_zbgvZXV0hCYTYwi3ui9yFtFJl0J4GhONs6XHiH", compareFunc: func(stack1, stack2 tlb.VmStack) error { - if len(stack2) != len(stack1) { + if stack2.Len() != stack1.Len() { return fmt.Errorf("stack length mismatch") } var a, b abi.GetWalletDataResult @@ -238,7 +238,7 @@ func TestPrecompiles(t *testing.T) { method: 97026, account: "EQCR50nICun4QUzzXcOhrWyY1jsRNWwJm0mBHMtqlOcMSEAn", compareFunc: func(stack1, stack2 tlb.VmStack) error { - if len(stack2) != len(stack1) { + if stack2.Len() != stack1.Len() { return fmt.Errorf("stack length mismatch") } var a, b abi.GetWalletDataResult @@ -262,7 +262,7 @@ func TestPrecompiles(t *testing.T) { method: 122284, account: "EQCR50nICun4QUzzXcOhrWyY1jsRNWwJm0mBHMtqlOcMSEAn", compareFunc: func(stack1, stack2 tlb.VmStack) error { - if len(stack2) != len(stack1) { + if stack2.Len() != stack1.Len() { return fmt.Errorf("stack length mismatch") } if !reflect.DeepEqual(stack1, stack2) { @@ -278,7 +278,7 @@ func TestPrecompiles(t *testing.T) { method: 102351, account: "EQBp_P5ZgufdVhOgW5Z81ckgXL2P6YEX_m_fJtsmclLH8tB7", compareFunc: func(stack1, stack2 tlb.VmStack) error { - if len(stack2) != len(stack1) { + if stack2.Len() != stack1.Len() { return fmt.Errorf("stack length mismatch") } var a, b abi.GetNftDataResult @@ -324,7 +324,7 @@ func TestPrecompiles(t *testing.T) { if err != nil { t.Fatal(err) } - exitCode, tvmStack, err := e.RunSmcMethodByID(context.Background(), ton.MustParseAccountID(c.account), c.method, nil) + exitCode, tvmStack, err := e.RunSmcMethodByID(context.Background(), ton.MustParseAccountID(c.account), c.method, tlb.VmStack{}) if exitCode != 0 { t.Fatal("exit code is not 0", exitCode) } diff --git a/tvm/precompiled/wallets.go b/tvm/precompiled/wallets.go index 452a866f..0244c5a9 100644 --- a/tvm/precompiled/wallets.go +++ b/tvm/precompiled/wallets.go @@ -16,14 +16,9 @@ func walletv3seqno(data *boc.Cell, args tlb.VmStack) (tlb.VmStack, error) { } err := tlb.Unmarshal(data, &dataV3) if err != nil { - return nil, err - } - return tlb.VmStack{ - { - SumType: "VmStkTinyInt", - VmStkTinyInt: int64(dataV3.Seqno), - }, - }, nil + return tlb.VmStack{}, err + } + return tlb.VmStackValue{SumType: "VmStkTinyInt", VmStkTinyInt: int64(dataV3.Seqno)}.ToStack(), nil } var walletv3r2publicKey = func(data *boc.Cell, args tlb.VmStack) (tlb.VmStack, error) { @@ -34,16 +29,11 @@ var walletv3r2publicKey = func(data *boc.Cell, args tlb.VmStack) (tlb.VmStack, e } err := tlb.Unmarshal(data, &dataV3) if err != nil { - return nil, err + return tlb.VmStack{}, err } var b big.Int b.SetBytes(dataV3.PublicKey[:]) - return tlb.VmStack{ - { - SumType: "VmStkInt", - VmStkInt: tlb.Int257(b), - }, - }, nil + return tlb.VmStackValue{SumType: "VmStkInt", VmStkInt: tlb.Int257(b)}.ToStack(), nil } var walletv4r2seqno = func(data *boc.Cell, args tlb.VmStack) (tlb.VmStack, error) { @@ -54,14 +44,9 @@ var walletv4r2seqno = func(data *boc.Cell, args tlb.VmStack) (tlb.VmStack, error } err := tlb.Unmarshal(data, &dataV4) if err != nil { - return nil, err - } - return tlb.VmStack{ - { - SumType: "VmStkTinyInt", - VmStkTinyInt: int64(dataV4.Seqno), - }, - }, nil + return tlb.VmStack{}, err + } + return tlb.VmStackValue{SumType: "VmStkTinyInt", VmStkTinyInt: int64(dataV4.Seqno)}.ToStack(), nil } var walletv4r2SubwalletID = func(data *boc.Cell, args tlb.VmStack) (tlb.VmStack, error) { @@ -72,14 +57,9 @@ var walletv4r2SubwalletID = func(data *boc.Cell, args tlb.VmStack) (tlb.VmStack, } err := tlb.Unmarshal(data, &dataV4) if err != nil { - return nil, err - } - return tlb.VmStack{ - { - SumType: "VmStkTinyInt", - VmStkTinyInt: int64(dataV4.SubWalletId), - }, - }, nil + return tlb.VmStack{}, err + } + return tlb.VmStackValue{SumType: "VmStkTinyInt", VmStkTinyInt: int64(dataV4.SubWalletId)}.ToStack(), nil } var walletv4r2publicKey = func(data *boc.Cell, args tlb.VmStack) (tlb.VmStack, error) { @@ -90,16 +70,11 @@ var walletv4r2publicKey = func(data *boc.Cell, args tlb.VmStack) (tlb.VmStack, e } err := tlb.Unmarshal(data, &dataV4) if err != nil { - return nil, err + return tlb.VmStack{}, err } var b big.Int b.SetBytes(dataV4.PublicKey[:]) - return tlb.VmStack{ - { - SumType: "VmStkInt", - VmStkInt: tlb.Int257(b), - }, - }, nil + return tlb.VmStackValue{SumType: "VmStkInt", VmStkInt: tlb.Int257(b)}.ToStack(), nil } var walletv4r2getPluginList = func(data *boc.Cell, args tlb.VmStack) (tlb.VmStack, error) { @@ -111,15 +86,13 @@ var walletv4r2getPluginList = func(data *boc.Cell, args tlb.VmStack) (tlb.VmStac } err := tlb.Unmarshal(data, &dataV4) if err != nil { - return nil, err + return tlb.VmStack{}, err } if len(dataV4.PluginDict.Keys()) == 0 { - return tlb.VmStack{ - {SumType: "VmStkNull"}, - }, nil + return tlb.VmStackValue{SumType: "VmStkNull"}.ToStack(), nil } //todo: implement - return nil, fmt.Errorf("not implemented not empty dict") + return tlb.VmStack{}, fmt.Errorf("not implemented not empty dict") } func walletv5r1seqno(data *boc.Cell, args tlb.VmStack) (tlb.VmStack, error) { @@ -132,14 +105,9 @@ func walletv5r1seqno(data *boc.Cell, args tlb.VmStack) (tlb.VmStack, error) { } err := tlb.Unmarshal(data, &dataV5) if err != nil { - return nil, err - } - return tlb.VmStack{ - { - SumType: "VmStkTinyInt", - VmStkTinyInt: int64(dataV5.Seqno), - }, - }, nil + return tlb.VmStack{}, err + } + return tlb.VmStackValue{SumType: "VmStkTinyInt", VmStkTinyInt: int64(dataV5.Seqno)}.ToStack(), nil } func walletv5r1SubwalletID(data *boc.Cell, args tlb.VmStack) (tlb.VmStack, error) { @@ -152,14 +120,9 @@ func walletv5r1SubwalletID(data *boc.Cell, args tlb.VmStack) (tlb.VmStack, error } err := tlb.Unmarshal(data, &dataV5) if err != nil { - return nil, err - } - return tlb.VmStack{ - { - SumType: "VmStkTinyInt", - VmStkTinyInt: int64(dataV5.WalletID), - }, - }, nil + return tlb.VmStack{}, err + } + return tlb.VmStackValue{SumType: "VmStkTinyInt", VmStkTinyInt: int64(dataV5.WalletID)}.ToStack(), nil } func walletv5r1publicKey(data *boc.Cell, args tlb.VmStack) (tlb.VmStack, error) { @@ -172,14 +135,9 @@ func walletv5r1publicKey(data *boc.Cell, args tlb.VmStack) (tlb.VmStack, error) } err := tlb.Unmarshal(data, &dataV5) if err != nil { - return nil, err + return tlb.VmStack{}, err } var b big.Int b.SetBytes(dataV5.PublicKey[:]) - return tlb.VmStack{ - { - SumType: "VmStkInt", - VmStkInt: tlb.Int257(b), - }, - }, nil + return tlb.VmStackValue{SumType: "VmStkInt", VmStkInt: tlb.Int257(b)}.ToStack(), nil } From 01b683388c1dbcc06ab82f94e9344531c61c3a8e Mon Sep 17 00:00:00 2001 From: Alexander Hasselbach Date: Fri, 6 Feb 2026 10:27:33 +0300 Subject: [PATCH 2/2] implemented block marshaling --- tlb/account.go | 41 ++++++ tlb/bintree.go | 31 ++++- tlb/block.go | 140 +++++++++++++++++++++ tlb/block_test.go | 224 ++++++++++++++++++++++++++++++--- tlb/decoder.go | 13 +- tlb/encoder.go | 24 +++- tlb/encoder_test.go | 16 ++- tlb/hashmap.go | 121 +++++++++++++++++- tlb/helpers.go | 18 +++ tlb/messages.go | 2 +- tlb/primitives.go | 3 + tlb/proof.go | 72 +++++++++++ tlb/testdata/block-8/block.bin | Bin 0 -> 119264 bytes 13 files changed, 671 insertions(+), 34 deletions(-) create mode 100644 tlb/helpers.go create mode 100644 tlb/testdata/block-8/block.bin diff --git a/tlb/account.go b/tlb/account.go index e329b07f..8c5874fb 100644 --- a/tlb/account.go +++ b/tlb/account.go @@ -11,6 +11,47 @@ type ShardAccount struct { Account Account `tlb:"^"` LastTransHash Bits256 LastTransLt uint64 + + accountCell *boc.Cell +} + +func (s *ShardAccount) UnmarshalTLB(c *boc.Cell, decoder *Decoder) error { + ref, err := c.NextRef() + if err != nil { + return err + } + if ref.CellType() == boc.PrunedBranchCell { + s.Account = Account{} + s.accountCell = ref + } else { + s.accountCell = nil + if err := decoder.Unmarshal(ref, &s.Account); err != nil { + return err + } + } + if err := decoder.Unmarshal(c, &s.LastTransHash); err != nil { + return err + } + return decoder.Unmarshal(c, &s.LastTransLt) +} + +func (s ShardAccount) MarshalTLB(c *boc.Cell, encoder *Encoder) error { + ref, err := c.NewRef() + if err != nil { + return err + } + switch { + case s.accountCell != nil && s.Account.SumType == "": + *ref = *cloneCell(s.accountCell) + default: + if err := encoder.Marshal(ref, s.Account); err != nil { + return err + } + } + if err := encoder.Marshal(c, s.LastTransHash); err != nil { + return err + } + return encoder.Marshal(c, s.LastTransLt) } // Account diff --git a/tlb/bintree.go b/tlb/bintree.go index 183f37ab..64972c4d 100644 --- a/tlb/bintree.go +++ b/tlb/bintree.go @@ -43,8 +43,35 @@ func decodeRecursiveBinTree(c *boc.Cell) ([]*boc.Cell, error) { } func (b BinTree[T]) MarshalTLB(c *boc.Cell, encoder *Encoder) error { - // TODO: implement - return fmt.Errorf("BinTree marshaling not implemented") + if len(b.Values) == 0 { + return fmt.Errorf("BinTree must have at least one value") + } + return b.marshalRecursive(c, b.Values, encoder) +} + +func (b BinTree[T]) marshalRecursive(c *boc.Cell, values []T, encoder *Encoder) error { + if len(values) == 1 { + if err := c.WriteBit(false); err != nil { + return err + } + return encoder.Marshal(c, values[0]) + } + if err := c.WriteBit(true); err != nil { + return err + } + mid := len(values) / 2 + l, err := c.NewRef() + if err != nil { + return err + } + if err := b.marshalRecursive(l, values[:mid], encoder); err != nil { + return err + } + r, err := c.NewRef() + if err != nil { + return err + } + return b.marshalRecursive(r, values[mid:], encoder) } func (b *BinTree[T]) UnmarshalTLB(c *boc.Cell, decoder *Decoder) error { diff --git a/tlb/block.go b/tlb/block.go index dcf951dc..0eecc220 100644 --- a/tlb/block.go +++ b/tlb/block.go @@ -116,6 +116,57 @@ func (i *BlockInfo) UnmarshalTLB(c *boc.Cell, decoder *Decoder) error { return nil } +func (i BlockInfo) MarshalTLB(c *boc.Cell, encoder *Encoder) error { + var header struct { + Magic Magic `tlb:"block_info#9bc7a987"` + BlockInfo BlockInfoPart + } + header.BlockInfo = i.BlockInfoPart + if err := encoder.Marshal(c, header); err != nil { + return err + } + if i.Flags&1 == 1 { + if i.GenSoftware == nil { + return fmt.Errorf("BlockInfo: Flags&1 is set but GenSoftware is nil") + } + if err := encoder.Marshal(c, *i.GenSoftware); err != nil { + return err + } + } + if i.NotMaster { + if i.MasterRef == nil { + return fmt.Errorf("BlockInfo: NotMaster is set but MasterRef is nil") + } + ref, err := c.NewRef() + if err != nil { + return err + } + if err := encoder.Marshal(ref, *i.MasterRef); err != nil { + return err + } + } + ref, err := c.NewRef() + if err != nil { + return err + } + if err := i.PrevRef.MarshalTLB(ref, encoder); err != nil { + return err + } + if i.VertSeqnoIncr { + if i.PrevVertRef == nil { + return fmt.Errorf("BlockInfo: VertSeqnoIncr is set but PrevVertRef is nil") + } + ref, err := c.NewRef() + if err != nil { + return err + } + if err := i.PrevVertRef.MarshalTLB(ref, encoder); err != nil { + return err + } + } + return nil +} + // GlobalVersion // capabilities#c4 version:uint32 capabilities:uint64 = GlobalVersion; type GlobalVersion struct { @@ -193,6 +244,28 @@ func (i *BlkPrevInfo) UnmarshalTLB(c *boc.Cell, isBlks bool, decoder *Decoder) e return nil } +func (i *BlkPrevInfo) MarshalTLB(c *boc.Cell, encoder *Encoder) error { + switch i.SumType { + case "PrevBlkInfo": + return encoder.Marshal(c, i.PrevBlkInfo.Prev) + case "PrevBlksInfo": + c1, err := c.NewRef() + if err != nil { + return err + } + if err := encoder.Marshal(c1, i.PrevBlksInfo.Prev1); err != nil { + return err + } + c2, err := c.NewRef() + if err != nil { + return err + } + return encoder.Marshal(c2, i.PrevBlksInfo.Prev2) + default: + return fmt.Errorf("invalid BlkPrevInfo SumType: %v", i.SumType) + } +} + // Block // block#11ef55aa global_id:int32 // info:^BlockInfo value_flow:^ValueFlow @@ -341,6 +414,73 @@ func (m *ValueFlow) UnmarshalTLB(c *boc.Cell, decoder *Decoder) error { return nil } +func (m ValueFlow) MarshalTLB(c *boc.Cell, encoder *Encoder) error { + sumType := uint32(m.Magic) + if sumType != valueFlowV1 && sumType != valueFlowV2 { + return fmt.Errorf("value flow invalid tag: %v", sumType) + } + err := c.WriteUint(uint64(sumType), 32) + if err != nil { + return err + } + firstGroup := boc.NewCell() + err = encoder.Marshal(c, m.FeesCollected) + if err != nil { + return err + } + err = encoder.Marshal(firstGroup, m.FromPrevBlk) + if err != nil { + return err + } + err = encoder.Marshal(firstGroup, m.ToNextBlk) + if err != nil { + return err + } + err = encoder.Marshal(firstGroup, m.Imported) + if err != nil { + return err + } + err = encoder.Marshal(firstGroup, m.Exported) + if err != nil { + return err + } + err = c.AddRef(firstGroup) + if err != nil { + return err + } + if sumType == valueFlowV2 { + if m.Burned == nil { + return fmt.Errorf("ValueFlow V2 must have Burned field set") + } + err = encoder.Marshal(c, *m.Burned) + if err != nil { + return err + } + } + secondGroup := boc.NewCell() + err = encoder.Marshal(secondGroup, m.FeesImported) + if err != nil { + return err + } + err = encoder.Marshal(secondGroup, m.Recovered) + if err != nil { + return err + } + err = encoder.Marshal(secondGroup, m.Created) + if err != nil { + return err + } + err = encoder.Marshal(secondGroup, m.Minted) + if err != nil { + return err + } + err = c.AddRef(secondGroup) + if err != nil { + return err + } + return nil +} + // BlockExtra // block_extra in_msg_descr:^InMsgDescr // out_msg_descr:^OutMsgDescr diff --git a/tlb/block_test.go b/tlb/block_test.go index fce7d730..5951fcf6 100644 --- a/tlb/block_test.go +++ b/tlb/block_test.go @@ -7,6 +7,7 @@ import ( "fmt" "os" "path" + "reflect" "sort" "testing" @@ -64,18 +65,15 @@ func Test_tlb_Unmarshal(t *testing.T) { t.Run(tc.name, func(t *testing.T) { inputFilename := path.Join(tc.folder, "block.bin") - data, err := os.ReadFile(inputFilename) + block, err := readBlock(inputFilename) if err != nil { - t.Fatalf("ReadFile() failed: %v", err) + t.Fatalf("readBlock() failed: %v", err) } - cell, err := boc.DeserializeBoc(data) - if err != nil { - t.Fatalf("boc.DeserializeBoc() failed: %v", err) + if tc.folder == "testdata/block-5" && block.Magic == 0 { + t.Fatalf("block magic not set") } - var block Block - err = Unmarshal(cell[0], &block) - if err != nil { - t.Fatalf("Unmarshal() failed: %v", err) + if tc.folder == "testdata/block-5" { + t.Logf("block magic: 0x%x state sumtype: %s", block.Magic, block.StateUpdate.ToRoot.SumType) } accounts := map[string]*AccountBlock{} var txHashes []string @@ -141,6 +139,201 @@ func Test_tlb_Unmarshal(t *testing.T) { } } +func Test_tlb_MarshallingRoundtrip(t *testing.T) { + testCases := []struct { + folder string + }{ + {folder: "testdata/block-1"}, + {folder: "testdata/block-2"}, + {folder: "testdata/block-3"}, + {folder: "testdata/block-4"}, + {folder: "testdata/block-5"}, + {folder: "testdata/block-6"}, + {folder: "testdata/block-7"}, + } + + for _, tc := range testCases { + t.Run(tc.folder, func(t *testing.T) { + inputFilename := path.Join(tc.folder, "block.bin") + block, err := readBlock(inputFilename) + if err != nil { + t.Fatalf("readBlock() failed: %v", err) + } + + cell := boc.NewCell() + err = Marshal(cell, block) + if err != nil { + t.Fatalf("Marshal() failed: %v", err) + } + + bocData, err := cell.ToBoc() + if err != nil { + t.Fatalf("ToBoc() failed: %v", err) + } + cells, err := boc.DeserializeBoc(bocData) + if err != nil { + t.Fatalf("DeserializeBoc() failed: %v", err) + } + var decoded Block + if err := Unmarshal(cells[0], &decoded); err != nil { + dec := NewDecoder().WithDebug() + var dbg Block + cells[0].ResetCounters() + if dbgErr := dec.Unmarshal(cells[0], &dbg); dbgErr != nil { + t.Fatalf("Unmarshal() failed: %v", dbgErr) + } + t.Fatalf("Unmarshal() failed: %v", err) + } + if !blocksEqual(block, &decoded) { + t.Fatalf("block mismatch after marshaling round-trip: %s", describeBlockDiff(block, &decoded)) + } + }) + } +} + +func describeBlockDiff(a, b *Block) string { + switch { + case a.Magic != b.Magic: + return "Magic differs" + case a.GlobalId != b.GlobalId: + return "GlobalId differs" + case !reflect.DeepEqual(a.Info, b.Info): + return "Info differs" + case !reflect.DeepEqual(a.ValueFlow, b.ValueFlow): + return "ValueFlow differs" + case !reflect.DeepEqual(a.StateUpdate, b.StateUpdate): + return describeMerkleUpdateDiff("StateUpdate", a.StateUpdate, b.StateUpdate) + case !reflect.DeepEqual(a.Extra, b.Extra): + return "Extra differs" + default: + return "unknown difference" + } +} + +func describeMerkleUpdateDiff(name string, a, b MerkleUpdate[ShardState]) string { + switch { + case a.Magic != b.Magic: + return fmt.Sprintf("%s magic differs", name) + case a.FromHash != b.FromHash: + return fmt.Sprintf("%s FromHash differs", name) + case a.ToHash != b.ToHash: + return fmt.Sprintf("%s ToHash differs", name) + case a.FromDepth != b.FromDepth: + return fmt.Sprintf("%s FromDepth differs", name) + case a.ToDepth != b.ToDepth: + return fmt.Sprintf("%s ToDepth differs", name) + case !reflect.DeepEqual(a.FromRoot, b.FromRoot): + return describeShardStateDiff(fmt.Sprintf("%s.FromRoot", name), a.FromRoot, b.FromRoot) + case !reflect.DeepEqual(a.ToRoot, b.ToRoot): + return describeShardStateDiff(fmt.Sprintf("%s.ToRoot", name), a.ToRoot, b.ToRoot) + default: + return fmt.Sprintf("%s unknown difference", name) + } +} + +func describeShardStateDiff(name string, a, b ShardState) string { + if a.SumType != b.SumType { + return fmt.Sprintf("%s sum type differs: %s vs %s", name, a.SumType, b.SumType) + } + switch a.SumType { + case "UnsplitState": + return describeShardStateUnsplitDiff(fmt.Sprintf("%s.UnsplitState", name), a.UnsplitState.Value, b.UnsplitState.Value) + case "SplitState": + switch { + case !reflect.DeepEqual(a.SplitState.Left, b.SplitState.Left): + return describeShardStateUnsplitDiff(fmt.Sprintf("%s.SplitState.Left", name), a.SplitState.Left, b.SplitState.Left) + case !reflect.DeepEqual(a.SplitState.Right, b.SplitState.Right): + return describeShardStateUnsplitDiff(fmt.Sprintf("%s.SplitState.Right", name), a.SplitState.Right, b.SplitState.Right) + } + default: + return fmt.Sprintf("%s unknown sum type %s", name, a.SumType) + } + return fmt.Sprintf("%s unknown difference", name) +} + +func describeShardStateUnsplitDiff(name string, a, b ShardStateUnsplit) string { + switch { + case a.Magic != b.Magic: + return fmt.Sprintf("%s magic differs", name) + case a.ShardStateUnsplit.GlobalID != b.ShardStateUnsplit.GlobalID: + return fmt.Sprintf("%s GlobalID differs", name) + case a.ShardStateUnsplit.ShardID != b.ShardStateUnsplit.ShardID: + return fmt.Sprintf("%s ShardID differs", name) + case a.ShardStateUnsplit.SeqNo != b.ShardStateUnsplit.SeqNo: + return fmt.Sprintf("%s SeqNo differs", name) + case a.ShardStateUnsplit.VertSeqNo != b.ShardStateUnsplit.VertSeqNo: + return fmt.Sprintf("%s VertSeqNo differs", name) + case a.ShardStateUnsplit.GenUtime != b.ShardStateUnsplit.GenUtime: + return fmt.Sprintf("%s GenUtime differs", name) + case a.ShardStateUnsplit.GenLt != b.ShardStateUnsplit.GenLt: + return fmt.Sprintf("%s GenLt differs", name) + case a.ShardStateUnsplit.MinRefMcSeqno != b.ShardStateUnsplit.MinRefMcSeqno: + return fmt.Sprintf("%s MinRefMcSeqno differs", name) + case !reflect.DeepEqual(a.ShardStateUnsplit.OutMsgQueueInfo, b.ShardStateUnsplit.OutMsgQueueInfo): + return fmt.Sprintf("%s OutMsgQueueInfo differs", name) + case a.ShardStateUnsplit.BeforeSplit != b.ShardStateUnsplit.BeforeSplit: + return fmt.Sprintf("%s BeforeSplit differs", name) + case !reflect.DeepEqual(a.ShardStateUnsplit.Accounts, b.ShardStateUnsplit.Accounts): + return describeHashmapAugEDiff(fmt.Sprintf("%s.Accounts", name), a.ShardStateUnsplit.Accounts, b.ShardStateUnsplit.Accounts) + case !reflect.DeepEqual(a.ShardStateUnsplit.Other, b.ShardStateUnsplit.Other): + return fmt.Sprintf("%s Other differs", name) + case !reflect.DeepEqual(a.ShardStateUnsplit.Custom, b.ShardStateUnsplit.Custom): + return fmt.Sprintf("%s Custom differs", name) + default: + return fmt.Sprintf("%s unknown difference", name) + } +} + +func describeHashmapAugEDiff[keyT fixedSize, T1, T2 any](name string, a, b HashmapAugE[keyT, T1, T2]) string { + switch { + case len(a.m.keys) != len(b.m.keys): + return fmt.Sprintf("%s key count differs", name) + case !reflect.DeepEqual(a.m.keys, b.m.keys): + return fmt.Sprintf("%s keys differ", name) + case !reflect.DeepEqual(a.m.values, b.m.values): + if len(a.m.values) != len(b.m.values) { + return fmt.Sprintf("%s value count differs: %d vs %d", name, len(a.m.values), len(b.m.values)) + } + for i := range a.m.values { + if !reflect.DeepEqual(a.m.values[i], b.m.values[i]) { + return fmt.Sprintf("%s value at index %d differs: %#v vs %#v", name, i, a.m.values[i], b.m.values[i]) + } + } + return fmt.Sprintf("%s values differ", name) + case !reflect.DeepEqual(a.m.extra, b.m.extra): + return fmt.Sprintf("%s inner extras differ", name) + case !reflect.DeepEqual(a.extra, b.extra): + return fmt.Sprintf("%s extra differs", name) + default: + return fmt.Sprintf("%s unknown difference", name) + } +} + +func blocksEqual(a, b *Block) bool { + aj, err := json.Marshal(a) + if err != nil { + return false + } + bj, err := json.Marshal(b) + if err != nil { + return false + } + return bytes.Equal(aj, bj) +} + +func readBlock(filename string) (*Block, error) { + data, err := os.ReadFile(filename) + if err != nil { + return nil, fmt.Errorf("ReadFile() failed: %v", err) + } + cell, err := boc.DeserializeBoc(data) + if err != nil { + return nil, fmt.Errorf("boc.DeserializeBoc() failed: %v", err) + } + var block Block + return &block, Unmarshal(cell[0], &block) +} + func libraries(s *ShardState) map[string]map[string]struct{} { libs := map[string]map[string]struct{}{} for _, item := range s.UnsplitState.Value.ShardStateUnsplit.Other.Libraries.Items() { @@ -279,18 +472,9 @@ func Test_GetInMsgsMetadata(t *testing.T) { for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { inputFilename := path.Join(tc.folder, "block.bin") - data, err := os.ReadFile(inputFilename) - if err != nil { - t.Fatalf("ReadFile() failed: %v", err) - } - cell, err := boc.DeserializeBoc(data) + block, err := readBlock(inputFilename) if err != nil { - t.Fatalf("boc.DeserializeBoc() failed: %v", err) - } - var block Block - err = Unmarshal(cell[0], &block) - if err != nil { - t.Fatalf("Unmarshal() failed: %v", err) + t.Fatalf("readBlock() failed: %v", err) } inMsgsMetadata, err := block.GetInMsgsMetadata() if err != nil { diff --git a/tlb/decoder.go b/tlb/decoder.go index 09fecf00..15884c99 100644 --- a/tlb/decoder.go +++ b/tlb/decoder.go @@ -3,6 +3,7 @@ package tlb import ( "fmt" "reflect" + "strings" "github.com/tonkeeper/tongo/boc" ) @@ -60,11 +61,19 @@ var bocCellPointerType = reflect.TypeOf(&boc.Cell{}) var bocTlbANyPointerType = reflect.TypeOf(&Any{}) var bitStringType = reflect.TypeOf(boc.BitString{}) -func decode(c *boc.Cell, tag string, val reflect.Value, decoder *Decoder) error { +func decode(c *boc.Cell, tag string, val reflect.Value, decoder *Decoder) (err error) { if decoder.withDebug { - decoder.debugPath = append(decoder.debugPath, fmt.Sprintf("%v#%v", val.Type().Name(), tag)) + typeName := val.Type().String() + decoder.debugPath = append(decoder.debugPath, fmt.Sprintf("%v#%v", typeName, tag)) defer func() { + fullPath := append([]string(nil), decoder.debugPath...) decoder.debugPath = decoder.debugPath[:len(decoder.debugPath)-1] + if err != nil && decoder.withDebug { + path := strings.Join(fullPath, " -> ") + if path != "" { + err = fmt.Errorf("%w (path: %s)", err, path) + } + } }() } if c.IsLibrary() { diff --git a/tlb/encoder.go b/tlb/encoder.go index 0cd338e7..0203e036 100644 --- a/tlb/encoder.go +++ b/tlb/encoder.go @@ -110,8 +110,9 @@ func encode(c *boc.Cell, tag string, o any, encoder *Encoder) error { return encodeStruct(c, o, encoder) } case reflect.Pointer: - if val.IsNil() && !t.IsOptional { - return fmt.Errorf("can't encode empty pointer %v if tlb scheme is not optional", val.Type()) + if val.IsNil() { + zeroVal := reflect.New(val.Type().Elem()) + return encode(c, tag, zeroVal.Elem().Interface(), encoder) } return encode(c, tag, val.Elem().Interface(), encoder) case reflect.Array: @@ -146,9 +147,12 @@ func encodeStruct(c *boc.Cell, o any, encoder *Encoder) error { func encodeBasicStruct(c *boc.Cell, o any, encoder *Encoder) error { val := reflect.ValueOf(o) for i := 0; i < val.NumField(); i++ { + if !val.Type().Field(i).IsExported() { + continue + } tag := val.Type().Field(i).Tag.Get("tlb") if err := encode(c, tag, val.Field(i).Interface(), encoder); err != nil { - return err + return fmt.Errorf("field %v.%v: %w", val.Type().Name(), val.Type().Field(i).Name, err) } } return nil @@ -159,6 +163,20 @@ func encodeSumType(c *boc.Cell, o any, encoder *Encoder) error { name := val.FieldByName("SumType").String() if name == "" { + // Default to the first non-SumType field (zero variant) + for i := 0; i < val.NumField(); i++ { + if val.Field(i).Type().Name() == "SumType" { + continue + } + tag := val.Type().Field(i).Tag.Get("tlbSumType") + if err := encodeSumTag(c, tag); err != nil { + return err + } + if err := encode(c, "", val.Field(i).Interface(), encoder); err != nil { + return err + } + return nil + } return fmt.Errorf("empty SumType value") } diff --git a/tlb/encoder_test.go b/tlb/encoder_test.go index 43ede527..b8b68c74 100644 --- a/tlb/encoder_test.go +++ b/tlb/encoder_test.go @@ -86,10 +86,8 @@ func TestEnum(t *testing.T) { } func TestEnumFail(t *testing.T) { + // Empty SumType defaults to first variant, so only invalid SumType should fail var cases = []testSumType{ - { - B: testCase{4, 6}, - }, { SumType: "C", B: testCase{4, 6}, @@ -104,6 +102,18 @@ func TestEnumFail(t *testing.T) { } } +func TestEnumEmptySumType(t *testing.T) { + // Empty SumType should default to the first variant + enum := testSumType{ + B: testCase{4, 6}, + } + b1 := boc.NewCell() + err := Marshal(b1, enum) + if err != nil { + t.Fatalf("empty SumType should default to first variant: %v", err) + } +} + func TestRef(t *testing.T) { type A struct { A uint8 diff --git a/tlb/hashmap.go b/tlb/hashmap.go index e26b605e..d1a62119 100644 --- a/tlb/hashmap.go +++ b/tlb/hashmap.go @@ -6,6 +6,7 @@ import ( "fmt" "math" "slices" + "sort" "strconv" "strings" @@ -27,6 +28,7 @@ type HashmapItem[keyT fixedSize, T any] struct { type Hashmap[keyT fixedSize, T any] struct { keys []keyT values []T + raw *boc.Cell } // NewHashmap returns a new instance of Hashmap. @@ -39,13 +41,19 @@ func NewHashmap[keyT fixedSize, T any](keys []keyT, values []T) Hashmap[keyT, T] } func (h Hashmap[keyT, T]) MarshalTLB(c *boc.Cell, encoder *Encoder) error { + if h.raw != nil { + *c = *cloneCell(h.raw) + return nil + } // Marshal empty Hashmap if len(h.values) == 0 || h.values == nil { return nil } + order := sortedIndices(h.keys) var s keyT keys := make([]boc.BitString, 0, len(h.keys)) - for _, k := range h.keys { + for _, idx := range order { + k := h.keys[idx] cell := boc.NewCell() err := Marshal(cell, k) if err != nil { @@ -53,7 +61,11 @@ func (h Hashmap[keyT, T]) MarshalTLB(c *boc.Cell, encoder *Encoder) error { } keys = append(keys, cell.RawBitString()) } - err := h.encodeMap(c, keys, h.values, s.FixedSize()) + values := make([]T, len(h.values)) + for i, idx := range order { + values[i] = h.values[idx] + } + err := h.encodeMap(c, keys, values, s.FixedSize()) if err != nil { return err } @@ -116,6 +128,7 @@ func (h Hashmap[keyT, T]) encodeMap(c *boc.Cell, keys []boc.BitString, values [] } func (h *Hashmap[keyT, T]) UnmarshalTLB(c *boc.Cell, decoder *Decoder) error { + h.raw = cloneCell(c) var s keyT keySize := s.FixedSize() keyPrefix := boc.NewBitString(keySize) @@ -515,6 +528,7 @@ type HashmapAug[keyT fixedSize, T1, T2 any] struct { keys []keyT values []T1 extra HashMapAugExtraList[T2] + raw *boc.Cell } type HashMapAugExtraList[T any] struct { @@ -524,10 +538,111 @@ type HashMapAugExtraList[T any] struct { } func (h HashmapAug[keyT, T1, T2]) MarshalTLB(c *boc.Cell, encoder *Encoder) error { - return fmt.Errorf("not implemented") + if h.raw != nil { + *c = *cloneCell(h.raw) + return nil + } + if len(h.values) == 0 || h.values == nil { + return nil + } + order := sortedIndices(h.keys) + var s keyT + keys := make([]boc.BitString, 0, len(h.keys)) + for _, idx := range order { + k := h.keys[idx] + cell := boc.NewCell() + err := Marshal(cell, k) + if err != nil { + return err + } + keys = append(keys, cell.RawBitString()) + } + values := make([]T1, len(h.values)) + for i, idx := range order { + values[i] = h.values[idx] + } + return h.encodeMapAug(c, keys, values, s.FixedSize(), &h.extra) +} + +func (h HashmapAug[keyT, T1, T2]) encodeMapAug(c *boc.Cell, keys []boc.BitString, values []T1, keySize int, extras *HashMapAugExtraList[T2]) error { + if len(keys) == 0 || len(values) == 0 { + return fmt.Errorf("keys or values are empty") + } + extras = ensureExtras(extras) + label, err := encodeLabel(c, &keys[0], &keys[len(keys)-1], keySize) + if err != nil { + return err + } + keySize = keySize - label.BitsAvailableForRead() - 1 + if len(keys) > 1 { + var leftKeys, rightKeys []boc.BitString + var leftValues, rightValues []T1 + for i := range keys { + _, err := keys[i].ReadBits(label.BitsAvailableForRead()) + if err != nil { + return err + } + isRight, err := keys[i].ReadBit() + if err != nil { + return err + } + if isRight { + rightKeys = append(rightKeys, keys[i].ReadRemainingBits()) + rightValues = append(rightValues, values[i]) + } else { + leftKeys = append(leftKeys, keys[i].ReadRemainingBits()) + leftValues = append(leftValues, values[i]) + } + } + l, err := c.NewRef() + if err != nil { + return err + } + err = h.encodeMapAug(l, leftKeys, leftValues, keySize, extras.Left) + if err != nil { + return err + } + r, err := c.NewRef() + if err != nil { + return err + } + err = h.encodeMapAug(r, rightKeys, rightValues, keySize, extras.Right) + if err != nil { + return err + } + return Marshal(c, extras.Data) + } + err = Marshal(c, extras.Data) + if err != nil { + return err + } + return Marshal(c, values[0]) +} + +func ensureExtras[T any](extras *HashMapAugExtraList[T]) *HashMapAugExtraList[T] { + if extras == nil { + return &HashMapAugExtraList[T]{} + } + return extras +} + +func sortedIndices[keyT fixedSize](keys []keyT) []int { + order := make([]int, len(keys)) + for i := range order { + order[i] = i + } + sort.Slice(order, func(i, j int) bool { + cmp, ok := keys[order[i]].Compare(keys[order[j]]) + if !ok { + return false + } + return cmp < 0 + }) + return order } func (h *HashmapAug[keyT, T1, T2]) UnmarshalTLB(c *boc.Cell, decoder *Decoder) error { + h.raw = cloneCell(c) var t keyT keySize := t.FixedSize() keyPrefix := boc.NewBitString(keySize) diff --git a/tlb/helpers.go b/tlb/helpers.go new file mode 100644 index 00000000..95db66d9 --- /dev/null +++ b/tlb/helpers.go @@ -0,0 +1,18 @@ +package tlb + +import "github.com/tonkeeper/tongo/boc" + +func cloneCell(c *boc.Cell) *boc.Cell { + if c == nil { + return nil + } + data, err := c.ToBoc() + if err != nil { + panic(err) + } + cloned, err := boc.DeserializeBoc(data) + if err != nil || len(cloned) == 0 { + panic(err) + } + return cloned[0] +} diff --git a/tlb/messages.go b/tlb/messages.go index ed32d16f..6e44b75e 100644 --- a/tlb/messages.go +++ b/tlb/messages.go @@ -271,7 +271,7 @@ func (a *MsgAddress) UnmarshalTLB(c *boc.Cell, decoder *Decoder) error { func (a MsgAddress) MarshalTLB(c *boc.Cell, encoder *Encoder) error { switch a.SumType { - case "AddrNone": + case "AddrNone", "": return c.WriteUint(0, 2) case "AddrExtern": err := c.WriteUint(1, 2) diff --git a/tlb/primitives.go b/tlb/primitives.go index 7a5c5db6..be820ff5 100644 --- a/tlb/primitives.go +++ b/tlb/primitives.go @@ -94,6 +94,9 @@ func (m *Magic) UnmarshalJSON(b []byte) error { } func (m Magic) EncodeTag(c *boc.Cell, tag string) error { + if tag == "" { + return c.WriteUint(uint64(m), 32) + } return encodeSumTag(c, tag) } diff --git a/tlb/proof.go b/tlb/proof.go index 554c0ee7..4bc5c598 100644 --- a/tlb/proof.go +++ b/tlb/proof.go @@ -73,6 +73,9 @@ type ShardState struct { // only manual decoding Left ShardStateUnsplit `tlb:"^"` // ^ but decodes manually Right ShardStateUnsplit `tlb:"^"` // ^ but decodes manually } `tlbSumType:"split_state#5f327da5"` + + leftCell *boc.Cell + rightCell *boc.Cell } func (s *ShardState) UnmarshalTLB(c *boc.Cell, decoder *Decoder) error { @@ -91,8 +94,10 @@ func (s *ShardState) UnmarshalTLB(c *boc.Cell, decoder *Decoder) error { if err != nil { return err } + s.leftCell = nil } else { s.SplitState.Left = ShardStateUnsplit{} + s.leftCell = c1 } c1, err = c.NextRef() if err != nil { @@ -102,8 +107,10 @@ func (s *ShardState) UnmarshalTLB(c *boc.Cell, decoder *Decoder) error { if err := decoder.Unmarshal(c1, &s.SplitState.Right); err != nil { return err } + s.rightCell = nil } else { s.SplitState.Right = ShardStateUnsplit{} + s.rightCell = c1 } s.SumType = "SplitState" break @@ -122,6 +129,42 @@ func (s *ShardState) UnmarshalTLB(c *boc.Cell, decoder *Decoder) error { return nil } +func (m ShardState) MarshalTLB(c *boc.Cell, encoder *Encoder) error { + switch m.SumType { + case "SplitState": + if err := c.WriteUint(0x5f327da5, 32); err != nil { + return err + } + c1, err := c.NewRef() + if err != nil { + return err + } + if m.leftCell != nil && m.SplitState.Left.Magic == 0 { + *c1 = *cloneCell(m.leftCell) + } else { + if err := encoder.Marshal(c1, m.SplitState.Left); err != nil { + return err + } + } + c2, err := c.NewRef() + if err != nil { + return err + } + if m.rightCell != nil && m.SplitState.Right.Magic == 0 { + *c2 = *cloneCell(m.rightCell) + } else { + if err := encoder.Marshal(c2, m.SplitState.Right); err != nil { + return err + } + } + return nil + case "UnsplitState": + return encoder.Marshal(c, m.UnsplitState.Value) + default: + return fmt.Errorf("invalid tag") + } +} + func (s *ShardState) AccountBalances() map[Bits256]CurrencyCollection { switch s.SumType { case "UnsplitState": @@ -333,6 +376,35 @@ type McStateExtra struct { type ConfigParams struct { ConfigAddr Bits256 Config Hashmap[Uint32, Ref[boc.Cell]] `tlb:"^"` + + configCell *boc.Cell +} + +func (p *ConfigParams) UnmarshalTLB(c *boc.Cell, decoder *Decoder) error { + if err := decoder.Unmarshal(c, &p.ConfigAddr); err != nil { + return err + } + ref, err := c.NextRef() + if err != nil { + return err + } + p.configCell = cloneCell(ref) + return decoder.Unmarshal(ref, &p.Config) +} + +func (p ConfigParams) MarshalTLB(c *boc.Cell, encoder *Encoder) error { + if err := encoder.Marshal(c, p.ConfigAddr); err != nil { + return err + } + ref, err := c.NewRef() + if err != nil { + return err + } + if p.configCell != nil { + *ref = *cloneCell(p.configCell) + return nil + } + return encoder.Marshal(ref, p.Config) } // CloneKeepingSubsetOfKeys returns a new ConfigParams with only the keys specified in the keys parameter. diff --git a/tlb/testdata/block-8/block.bin b/tlb/testdata/block-8/block.bin new file mode 100644 index 0000000000000000000000000000000000000000..349bcfc862052a83b92d1a3dfa5a54cdb7898bc8 GIT binary patch literal 119264 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 literal 0 HcmV?d00001