Skip to content

Commit

Permalink
Add wallet v5r1
Browse files Browse the repository at this point in the history
  • Loading branch information
aleksej-paschenko committed Jul 8, 2024
1 parent 38d019f commit 53458c4
Show file tree
Hide file tree
Showing 17 changed files with 977 additions and 202 deletions.
116 changes: 114 additions & 2 deletions abi/generated_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1707,6 +1707,34 @@ func TestMessageDecoder(t *testing.T) {
},
interfaces: []ContractInterface{},
},
{
name: "w5 extension action",
boc: "te6ccgEBBAEAUQABGWV4dG4AAAAAAAGIlKABAgoOw8htAwIDAAAAaEIANmaZLULGG8tJ/XFeVVjhSDQY0nCFNh3aJ3RbCt5Q6RAgL68IAAAAAAAAAAAAAAAAAAA=",
wantOpName: WalletExtensionActionV5R1MsgOp,
wantValue: WalletExtensionActionV5R1MsgBody{
QueryId: 100500,
Actions: &W5Actions{
{
Magic: 0xec3c86d,
Mode: uint8(3),
Msg: mustHexToCellPtr("b5ee9c7201010101003600006842003666992d42c61bcb49fd715e5558e1483418d27085361dda27745b0ade50e910202faf080000000000000000000000000000"),
},
},
},
interfaces: []ContractInterface{WalletV5R1},
},
{
name: "w5 extension action with disable signature",
boc: "te6ccgEBAQEAEAAAG2V4dG4AAAAAAAGIlEEQ",
wantOpName: WalletExtensionActionV5R1MsgOp,
wantValue: WalletExtensionActionV5R1MsgBody{
QueryId: 100500,
Extended: &W5ExtendedActions{
{SumType: "SetSignatureAllowed", SetSignatureAllowed: &struct{ Allowed bool }{Allowed: false}},
},
},
interfaces: []ContractInterface{WalletV5R1},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
Expand All @@ -1723,7 +1751,7 @@ func TestMessageDecoder(t *testing.T) {
t.Fatalf("MessageDecoder() error: %v", err)
}
if *opName != tt.wantOpName {
t.Fatalf("got opname: %v, want: %v", opName, tt.wantOpName)
t.Fatalf("got opname: %v, want: %v", *opName, tt.wantOpName)
}
if tt.wantValidate != nil {
tt.wantValidate(t, value)
Expand All @@ -1747,6 +1775,14 @@ func mustHexToCell(s string) boc.Cell {
panic(err)
}
return *c[0]
}

func mustHexToCellPtr(s string) *boc.Cell {
c, err := boc.DeserializeBocHex(s)
if err != nil {
panic(err)
}
return c[0]

}

Expand Down Expand Up @@ -2037,6 +2073,77 @@ func TestDecodeExternalIn(t *testing.T) {
return b
},
},
{
name: "ext in v5r1",
boc: "te6ccgEBBgEA0gABoXNpZ25////9ZofzWAAAAAKWb/E2BkKquvrDod1MV/jFRE8U5f9dd2NCWyPu/4MLAvOTpIDuoyZUzxUTJe10/xbYPEFPSLwi2Bl9hEKJMqKDYAECCg7DyG0DAgMCCg7DyG0DBAUAZkIAa5yKA/gbStnXmg2U1Zib1GE01YSPACHaGA0K0BpBRw4aYloAAAAAAAAAAAAAAAAAAAAAAGZCAGucigP4G0rZ15oNlNWYm9RhNNWEjwAh2hgNCtAaQUcOHMS0AAAAAAAAAAAAAAAAAAA=",
wantOpName: WalletSignedExternalV5R1ExtInMsgOp,
interfaces: []ContractInterface{},
wantValue: func() any {
value := WalletSignedExternalV5R1ExtInMsgBody{
WalletId: 2147483645,
ValidUntil: 1720185688,
Seqno: 2,
Actions: &W5Actions{
{Magic: 0xec3c86d, Mode: 3, Msg: mustHexToCellPtr("b5ee9c7201010101003500006642006b9c8a03f81b4ad9d79a0d94d5989bd46134d5848f0021da180d0ad01a41470e1a625a0000000000000000000000000000")},
{Magic: 0xec3c86d, Mode: 3, Msg: mustHexToCellPtr("b5ee9c7201010101003500006642006b9c8a03f81b4ad9d79a0d94d5989bd46134d5848f0021da180d0ad01a41470e1cc4b40000000000000000000000000000")},
},
Extended: nil,
Signature: mustToBits512("59bfc4d8190aaaebeb0e8775315fe315113c5397fd75dd8d096c8fbbfe0c2c0bce4e9203ba8c99533c544c97b5d3fc5b60f1053d22f08b6065f6110a24ca8a0d"),
}
return value
},
},
{
name: "ext in v5r1 with extended actions",
boc: "te6ccgEBAwEAngAC5XNpZ25////9Zou5owAAAAnAoANmaZLULGG8tJ/XFeVVjhSDQY0nCFNh3aJ3RbCt5Q6RLZk/5rz5izz/olhcQbSqRWhAweQxAnXFUmMTIXmGXKyxktM4/e0E41uc2amcpBRcAg7768V3ayzr7K1hEVbI2DwBAgAAAEUCgA2ZpktQsYby0n9cV5VWOFINBjScIU2HdondFsK3lDpE0A==",
wantOpName: WalletSignedExternalV5R1ExtInMsgOp,
interfaces: []ContractInterface{},
wantValue: func() any {
addr1 := ton.MustParseAccountID("0:6ccd325a858c379693fae2bcaab1c2906831a4e10a6c3bb44ee8b615bca1d225")
addr2 := ton.MustParseAccountID("0:6ccd325a858c379693fae2bcaab1c2906831a4e10a6c3bb44ee8b615bca1d226")
value := WalletSignedExternalV5R1ExtInMsgBody{
WalletId: 2147483645,
ValidUntil: 1720433059,
Seqno: 9,
Actions: nil,
Extended: &W5ExtendedActions{
{
SumType: "AddExtension",
AddExtension: &struct{ Addr tlb.MsgAddress }{Addr: addr1.ToMsgAddress()},
},
{
SumType: "AddExtension",
AddExtension: &struct{ Addr tlb.MsgAddress }{Addr: addr2.ToMsgAddress()},
},
},
Signature: mustToBits512("b327fcd79f31679ff44b0b88369548ad08183c86204eb8aa4c62642f30cb9596325a671fbda09c6b739b353394828b8041df7d78aeed659d7d95ac222ad91b07"),
}
return value
},
},
{
name: "ext in v5r1 with extended remove action",
boc: "te6ccgEBAgEAeAAB5XNpZ25////9Zou6hQAAAArA4ANmaZLULGG8tJ/XFeVVjhSDQY0nCFNh3aJ3RbCt5Q6RMe3LvurIRvCkkoiXVYBZr7HW3bPdkYiU7iQqSmwscyANY2HLTt3nqLBd05aWzVdM//6qJyMsReC2ubeTH+QboFQBAAA=",
wantOpName: WalletSignedExternalV5R1ExtInMsgOp,
interfaces: []ContractInterface{},
wantValue: func() any {
addr1 := ton.MustParseAccountID("0:6ccd325a858c379693fae2bcaab1c2906831a4e10a6c3bb44ee8b615bca1d226")
value := WalletSignedExternalV5R1ExtInMsgBody{
WalletId: 2147483645,
ValidUntil: 1720433285,
Seqno: 10,
Actions: nil,
Extended: &W5ExtendedActions{
{
SumType: "RemoveExtension",
RemoveExtension: &struct{ Addr tlb.MsgAddress }{Addr: addr1.ToMsgAddress()},
},
},
Signature: mustToBits512("3db977dd5908de14925112eab00b35f63adbb67bb231129dc485494d858e6401ac6c3969dbbcf5160bba72d2d9aae99fffd544e46588bc16d736f263fc83740a"),
}
return value
},
},
}

for _, tt := range tests {
Expand All @@ -2062,8 +2169,13 @@ func TestDecodeExternalIn(t *testing.T) {
t.Fatal(err)
}
fmt.Println(string(b))
wantValueJson, err := json.Marshal(tt.wantValue())
if err != nil {
t.Fatal(err)
}
fmt.Println(string(wantValueJson))
wantValue := tt.wantValue()
if !reflect.DeepEqual(wantValue, value) {
if !bytes.Equal(wantValueJson, b) {
t.Fatalf("want value: \n%v\n, got: \n%v", wantValue, value)
}
switch value.(type) {
Expand Down
9 changes: 9 additions & 0 deletions abi/inspect_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,15 @@ func Test_contractInspector_InspectContract(t *testing.T) {
WalletV4R2,
},
},
{
name: "wallet v5r1",
account: "0:20dbf7b0c53b91313e2a93e198f95f7f21433da231e157df6b933ffc2b84e99c",
code: "b5ee9c7201021401000281000114ff00f4a413f4bcf2c80b01020120020302014804050102f20e02dcd020d749c120915b8f6320d70b1f2082106578746ebd21821073696e74bdb0925f03e082106578746eba8eb48020d72101d074d721fa4030fa44f828fa443058bd915be0ed44d0810141d721f4058307f40e6fa1319130e18040d721707fdb3ce03120d749810280b99130e070e2100f020120060702012008090019be5f0f6a2684080a0eb90fa02c02016e0a0b0201480c0d0019adce76a2684020eb90eb85ffc00019af1df6a2684010eb90eb858fc00017b325fb51341c75c875c2c7e00011b262fb513435c28020011e20d70b1f82107369676ebaf2e08a7f0f01e68ef0eda2edfb218308d722028308d723208020d721d31fd31fd31fed44d0d200d31f20d31fd3ffd70a000af90140ccf9109a28945f0adb31e1f2c087df02b35007b0f2d0845125baf2e0855036baf2e086f823bbf2d0882292f800de01a47fc8ca00cb1f01cf16c9ed542092f80fde70db3cd81003f6eda2edfb02f404216e926c218e4c0221d73930709421c700b38e2d01d72820761e436c20d749c008f2e09320d74ac002f2e09320d71d06c712c2005230b0f2d089d74cd7393001a4e86c128407bbf2e093d74ac000f2e093ed55e2d20001c000915be0ebd72c08142091709601d72c081c12e25210b1e30f20d74a111213009601fa4001fa44f828fa443058baf2e091ed44d0810141d718f405049d7fc8ca0040048307f453f2e08b8e14038307f45bf2e08c22d70a00216e01b3b0f2d090e2c85003cf1612f400c9ed54007230d72c08248e2d21f2e092d200ed44d0d2005113baf2d08f54503091319c01810140d721d70a00f2e08ee2c8ca0058cf16c9ed5493f2c08de20010935bdb31e1d74cd0",
data: "b5ee9c7201010101002b0000518000000300000000114b12c49457e64da521c350496c56195c886fc1ddf251326c3f9e1b1cdc9908a0",
want: []ContractInterface{
WalletV5R1,
},
},
{
name: "stonfi pool",
account: "0:0A95E1D4EBE7860D051F8B861730DBDEE1440FD11180211914E0089146580351",
Expand Down
23 changes: 23 additions & 0 deletions abi/interfaces.go
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ const (
WalletV4R1
WalletV4R2
WalletV5Beta
WalletV5R1
WhalesPool
)

Expand Down Expand Up @@ -202,6 +203,8 @@ func (c ContractInterface) String() string {
return "wallet_v4r2"
case WalletV5Beta:
return "wallet_v5_beta"
case WalletV5R1:
return "wallet_v5r1"
case WhalesPool:
return "whales_pool"
default:
Expand Down Expand Up @@ -337,6 +340,8 @@ func ContractInterfaceFromString(s string) ContractInterface {
return WalletV4R2
case "wallet_v5_beta":
return WalletV5Beta
case "wallet_v5r1":
return WalletV5R1
case "whales_pool":
return WhalesPool
default:
Expand Down Expand Up @@ -962,6 +967,8 @@ func (c ContractInterface) recursiveImplements(other ContractInterface) bool {
return Wallet.Implements(other)
case WalletV5Beta:
return Wallet.Implements(other)
case WalletV5R1:
return Wallet.Implements(other)
}
return false
}
Expand Down Expand Up @@ -989,6 +996,13 @@ var knownContracts = map[ton.Bits256]knownContractDescription{
contractInterfaces: []ContractInterface{WalletHighloadV2R2},
getMethods: []InvokeFn{},
},
ton.MustParseHash("20834b7b72b112147e1b2fb457b84e74d1a30f04f737d4f62a668e9552d2b72f"): {
contractInterfaces: []ContractInterface{WalletV5R1},
getMethods: []InvokeFn{
GetPublicKey,
Seqno,
},
},
ton.MustParseHash("24221fa571e542e055c77bedfdbf527c7af460cfdc7f344c450787b4cfa1eb4d"): {
contractInterfaces: []ContractInterface{NftSaleGetgemsV3},
getMethods: []InvokeFn{
Expand Down Expand Up @@ -1230,6 +1244,11 @@ func (c ContractInterface) IntMsgs() []msgDecoderFunc {
decodeFuncStormVaultInitMsgBody,
decodeFuncStormVaultRequestWithdrawPositionMsgBody,
}
case WalletV5R1:
return []msgDecoderFunc{
decodeFuncWalletSignedInternalV5R1MsgBody,
decodeFuncWalletExtensionActionV5R1MsgBody,
}
case WhalesPool:
return []msgDecoderFunc{
decodeFuncWhalesNominatorsWithdrawMsgBody,
Expand Down Expand Up @@ -1265,6 +1284,10 @@ func (c ContractInterface) ExtInMsgs() []msgDecoderFunc {
return []msgDecoderFunc{
decodeFuncWalletSignedV4ExtInMsgBody,
}
case WalletV5R1:
return []msgDecoderFunc{
decodeFuncWalletSignedExternalV5R1ExtInMsgBody,
}
default:
return nil
}
Expand Down
3 changes: 3 additions & 0 deletions abi/messages.md
Original file line number Diff line number Diff line change
Expand Up @@ -171,8 +171,11 @@ The list below contains the supported message operations, their names and opcode
| TopUpChannelBalance| 0x67c7d281 |
| UpdatePubkey| 0x53f34cd6 |
| UpdateStorageParams| 0x54cbf19b |
| WalletExtensionActionV5R1| 0x6578746e |
| WalletPluginDestruct| 0x64737472 |
| WalletPluginDestructResponse| 0xe4737472 |
| WalletSignedExternalV5R1| 0x7369676e |
| WalletSignedInternalV5R1| 0x73696e74 |
| WalletSignedV3| 0x00000000 |
| WalletSignedV4| 0x00000000 |
| WhalesNominatorsAcceptStake| 0x99a811fb |
Expand Down
Loading

0 comments on commit 53458c4

Please sign in to comment.