Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 34 additions & 4 deletions abi/inspect_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -231,6 +231,40 @@ func Test_contractInspector_InspectContract(t *testing.T) {
WalletVesting,
},
},
{
name: "stonfi v2",
account: "0:8649cad97b5c5bc96a960ef748ea6ccff8601c01616fe995ee6893ae4aa7a6c6",
code: "b5ee9c7201010101002300084202a9338ecd624ca15d37e4a8d9bf677ddc9b84f0e98f05f2fb84c7afe332a281b4",
data: "b5ee9c720101040100d7000149301bc3bb69e12b82156e4fb859fa31b951d2d995caa1e5f97c6631f5c520727f90002800150102c980125c28235ca8d125e676591513d520721b1fe99f7722f4c87723ce7ee0dfb73a300248b589f5f63b6f4039388ef6c31529dbb9787d195ce86bd105e15fe8f88fa47e00491060c0d367f56688dbdc7b109c6f8ddce6415b769330e97afd7710259f7d90400203084202c00836440d084e44fb94316132ac5a21417ef4f429ee09b5560b5678b334c3e8084202c95a2ed22ab516f77f9d4898dc4578e72f18a2448e8f6832334b0b4bf501bc79",
hasLibrary: true,
want: []ContractInterface{
JettonMaster, StonfiPoolV2,
},
},
{
name: "stonfi stableswap",
account: "0:52518e14586245029b342b01d8e2da4e1aacd4e350d9872ad3f0ebb20165ad9d",
code: "b5ee9c72010101010023000842023c882eb9ede6be2459b2d2e469680af9f8e48ab16ec0726f0d07b0e5686be718",
data: "b5ee9c720101040100f800018c301d59a3a8c17b01e8a10c6375b03be1eff87dda2b29c23d22bd483fe400000000000000000000000000000000000000000000000000000000000000000000000001000000640102c9800a46afff33251480ab6dab42434437a3fe464a9dbe5f525f9642ab4d2ef6eac89001466aa0b3a89e00a1dd7ccf9e8a225962fc32536722c3351274978f9861d9e8ee0029ee48e6b746e6db45008d68a4de088ac64064b6fcbb98f3a46f9583bb409e2a400203084202c00836440d084e44fb94316132ac5a21417ef4f429ee09b5560b5678b334c3e8084202c3b3ef256ddc9bd4e35db3e3863c048b18465c9f403f1d5a2b559395e11cfee6",
hasLibrary: true,
want: []ContractInterface{
JettonMaster, StonfiPoolV2,
},
},
{
name: "stonfi weighted stableswap",
account: "0:05ea635b2a168cadfca174d72b12744a5b57d70378e6912e8a33b6b39bd3ee9d",
code: "b5ee9c72010101010023000842029e5038ab735973d5450fae1a14e7707b332dcd8e744f5dbb3b6a0d994d400c59",
data: "b5ee9c720102050100012700023f2eb83040934b00e0b0fd70b83205d77620ca9a0ce7c76e20601218e800080003010200a30000000000000002b5e3af16b18800000000000000000000111c7ef7a00e8000000000000000000003782dace9d900008000000000000000000000000000000000000000000000000000000000000000001002c98000cafb7e1aeb694b6c81c13012e24c43b95cf99bd3c84fb900ee31e9b144096fb0001aa0db2d3fc8f1224da5badf8994c74a05048d50963e42b0d8d71fe2b849569a0003770d21f96c46cd550df24da7d76c88d13cbed0cc691d4e91c69706ae47137bc00304084202c00836440d084e44fb94316132ac5a21417ef4f429ee09b5560b5678b334c3e8084202e398c874e2bb0017b7447c3cbc534ca368d96533c1b120101d4c8c097d12c6e3",
hasLibrary: true,
want: []ContractInterface{
JettonMaster, StonfiPoolV2,
},
},
}
cli, err := liteapi.NewClient(liteapi.Mainnet())
if err != nil {
t.Fatalf("failed to create liteapi client: %v", err)
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
Expand All @@ -243,10 +277,6 @@ func Test_contractInspector_InspectContract(t *testing.T) {
if tt.emulatorConfig == nil {
emulatorConfig = mainnetConfig[0]
}
cli, err := liteapi.NewClient(liteapi.Testnet())
if err != nil {
t.Fatalf("failed to create liteapi client: %v", err)
}
ci := NewContractInspector(InspectWithLibraryResolver(cli))
emulator, err := tvm.NewEmulator(codeCell[0], dataCell[0], emulatorConfig, tvm.WithLazyC7Optimization(), tvm.WithLibraryResolver(cli), tvm.WithIgnoreLibraryCells(true))
if err != nil {
Expand Down
38 changes: 38 additions & 0 deletions abi/interfaces.go
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,8 @@ const (
StonfiLpAccountV2
StonfiPool
StonfiPoolV2
StonfiPoolV2Stableswap
StonfiPoolV2WeightedStableswap
StonfiRouter
StonfiRouterV2
StonfiVaultV2
Expand Down Expand Up @@ -243,6 +245,10 @@ func (c ContractInterface) String() string {
return "stonfi_pool"
case StonfiPoolV2:
return "stonfi_pool_v2"
case StonfiPoolV2Stableswap:
return "stonfi_pool_v2_stableswap"
case StonfiPoolV2WeightedStableswap:
return "stonfi_pool_v2_weighted_stableswap"
case StonfiRouter:
return "stonfi_router"
case StonfiRouterV2:
Expand Down Expand Up @@ -460,6 +466,10 @@ func ContractInterfaceFromString(s string) ContractInterface {
return StonfiPool
case "stonfi_pool_v2":
return StonfiPoolV2
case "stonfi_pool_v2_stableswap":
return StonfiPoolV2Stableswap
case "stonfi_pool_v2_weighted_stableswap":
return StonfiPoolV2WeightedStableswap
case "stonfi_router":
return StonfiRouter
case "stonfi_router_v2":
Expand Down Expand Up @@ -1230,6 +1240,18 @@ var contractInterfacesOrder = []InterfaceDescription{
"GetPoolData_StonfiV2Result",
},
},
{
Name: StonfiPoolV2,
Results: []string{
"GetPoolData_StonfiV2StableswapResult",
},
},
{
Name: StonfiPoolV2,
Results: []string{
"GetPoolData_StonfiV2WeightedStableswapResult",
},
},
{
Name: StonfiRouter,
Results: []string{
Expand Down Expand Up @@ -2019,6 +2041,22 @@ func (c ContractInterface) IntMsgs() []msgDecoderFunc {
decodeFuncPtonResetGasMsgBody,
decodeFuncStonfiCbAddLiquidityV2MsgBody,
}
case StonfiPoolV2Stableswap:
return []msgDecoderFunc{
decodeFuncStonfiBurnNotificationExtV2MsgBody,
decodeFuncStonfiSwapV2MsgBody,
decodeFuncStonfiProvideLpV2MsgBody,
decodeFuncPtonResetGasMsgBody,
decodeFuncStonfiCbAddLiquidityV2MsgBody,
}
case StonfiPoolV2WeightedStableswap:
return []msgDecoderFunc{
decodeFuncStonfiBurnNotificationExtV2MsgBody,
decodeFuncStonfiSwapV2MsgBody,
decodeFuncStonfiProvideLpV2MsgBody,
decodeFuncPtonResetGasMsgBody,
decodeFuncStonfiCbAddLiquidityV2MsgBody,
}
case StonfiRouterV2:
return []msgDecoderFunc{
decodeFuncJettonNotifyMsgBody,
Expand Down
13 changes: 12 additions & 1 deletion abi/parser/generator.go
Original file line number Diff line number Diff line change
Expand Up @@ -604,11 +604,13 @@ func (g *Generator) RenderInvocationOrderList(simpleMethods []string) (string, e
InterfaceOrder []interfaceDescription
KnownHashes map[string]interfaceDescription
Inheritance map[string]string
TransformTo map[string]string
IntMsgs, ExtInMsgs, ExtOutMsgs map[string][]string
}{
Interfaces: map[string]string{},
KnownHashes: map[string]interfaceDescription{},
Inheritance: map[string]string{},
TransformTo: map[string]string{},
IntMsgs: map[string][]string{},
ExtInMsgs: map[string][]string{},
ExtOutMsgs: map[string][]string{},
Expand All @@ -633,6 +635,7 @@ func (g *Generator) RenderInvocationOrderList(simpleMethods []string) (string, e
descriptions[invokeFnName] = desc
}

transformTo := map[string]string{}
inheritance := map[string]string{} // interface name -> parent interface
methodsByIface := map[string]map[string]string{} // interface name -> method name -> result name

Expand All @@ -642,6 +645,9 @@ func (g *Generator) RenderInvocationOrderList(simpleMethods []string) (string, e
if iface.Inherits != "" {
inheritance[ifaceName] = utils.ToCamelCase(iface.Inherits)
}
if iface.TransformTo != "" {
transformTo[ifaceName] = utils.ToCamelCase(iface.TransformTo)
}
for _, method := range iface.Methods {
if !slices.Contains(simpleMethods, method.Name) {
continue
Expand All @@ -657,6 +663,7 @@ func (g *Generator) RenderInvocationOrderList(simpleMethods []string) (string, e
methodsByIface[ifaceName][methodName] = resultName
}
}
context.TransformTo = transformTo
context.Inheritance = inheritance

for _, iface := range g.abi.Interfaces {
Expand All @@ -669,8 +676,12 @@ func (g *Generator) RenderInvocationOrderList(simpleMethods []string) (string, e
ifaceMethods[methodName] = resultName
}
}
ifaceDescrName := ifaceName
if transformToName, ok := context.TransformTo[ifaceName]; ok {
ifaceDescrName = transformToName
}
description := interfaceDescription{
Name: ifaceName,
Name: ifaceDescrName,
}
methodNames := maps.Keys(ifaceMethods)
sort.Strings(methodNames)
Expand Down
7 changes: 4 additions & 3 deletions abi/parser/parser.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,10 @@ type Interface struct {
Internals []InterfaceMessage `xml:"internal"`
Externals []InterfaceMessage `xml:"ext_out"`
} `xml:"msg_out"`
CodeHashes []string `xml:"code_hash"`
Inherits string `xml:"inherits,attr"`
Errors []struct {
CodeHashes []string `xml:"code_hash"`
Inherits string `xml:"inherits,attr"`
TransformTo string `xml:"transform_to,attr"`
Errors []struct {
Text string `xml:",chardata"`
Code int `xml:"code,attr"`
} `xml:"error"`
Expand Down
22 changes: 22 additions & 0 deletions abi/schemas/ston-fi.xml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,28 @@
<internal name="stonfi_cb_add_liquidity_v2"/>
</msg_in>
</interface>
<interface name="stonfi_pool_v2_stableswap" transform_to="stonfi_pool_v2">
<get_method name="get_pool_data" version="stonfi_v2_stableswap"/>
<get_method name="get_lp_account_address" version="stonfi"/>
<msg_in>
<internal name="stonfi_burn_notification_ext_v2"/>
<internal name="stonfi_swap_v2"/>
<internal name="stonfi_provide_lp_v2"/>
<internal name="pton_reset_gas"/>
<internal name="stonfi_cb_add_liquidity_v2"/>
</msg_in>
</interface>
<interface name="stonfi_pool_v2_weighted_stableswap" transform_to="stonfi_pool_v2">
<get_method name="get_pool_data" version="stonfi_v2_weighted_stableswap"/>
<get_method name="get_lp_account_address" version="stonfi"/>
<msg_in>
<internal name="stonfi_burn_notification_ext_v2"/>
<internal name="stonfi_swap_v2"/>
<internal name="stonfi_provide_lp_v2"/>
<internal name="pton_reset_gas"/>
<internal name="stonfi_cb_add_liquidity_v2"/>
</msg_in>
</interface>
<interface name="stonfi_router">
<get_method name="get_router_data" version="stonfi"/>
</interface>
Expand Down
Loading