@@ -44,6 +44,15 @@ type RawMessage struct {
4444 Mode byte
4545}
4646
47+ // ToTlbMessage converts a RawMessage to a tlb.Message.
48+ func (rm * RawMessage ) ToTlbMessage () (* tlb.Message , error ) {
49+ var msg tlb.Message
50+ if err := tlb .Unmarshal (rm .Message , & msg ); err != nil {
51+ return nil , err
52+ }
53+ return & msg , nil
54+ }
55+
4756type PayloadV1toV4 []RawMessage
4857type PayloadHighload []RawMessage
4958
@@ -59,20 +68,16 @@ func (body *SignedMsgBody) Verify(publicKey ed25519.PublicKey) error {
5968 return fmt .Errorf ("failed to verify msg signature" )
6069}
6170
62- func extractSignedMsgBody (msg * boc.Cell ) (* SignedMsgBody , error ) {
63- var m tlb.Message
64- if err := tlb .Unmarshal (msg , & m ); err != nil {
65- return nil , err
66- }
71+ func extractSignedMsgBody (msg * tlb.Message ) (* SignedMsgBody , error ) {
72+ bodyCell := boc .Cell (msg .Body .Value )
6773 msgBody := SignedMsgBody {}
68- bodyCell := boc .Cell (m .Body .Value )
6974 if err := tlb .Unmarshal (& bodyCell , & msgBody ); err != nil {
7075 return nil , err
7176 }
7277 return & msgBody , nil
7378}
7479
75- func DecodeMessageV4 (msg * boc. Cell ) (* MessageV4 , error ) {
80+ func DecodeMessageV4 (msg * tlb. Message ) (* MessageV4 , error ) {
7681 signedMsgBody , err := extractSignedMsgBody (msg )
7782 if err != nil {
7883 return nil , err
@@ -89,7 +94,7 @@ func decodeMessageV4(body *SignedMsgBody) (*MessageV4, error) {
8994 return & msgv4 , nil
9095}
9196
92- func DecodeMessageV3 (msg * boc. Cell ) (* MessageV3 , error ) {
97+ func DecodeMessageV3 (msg * tlb. Message ) (* MessageV3 , error ) {
9398 signedMsgBody , err := extractSignedMsgBody (msg )
9499 if err != nil {
95100 return nil , err
@@ -106,7 +111,7 @@ func decodeMessageV3(body *SignedMsgBody) (*MessageV3, error) {
106111 return & msgv3 , nil
107112}
108113
109- func DecodeHighloadV2Message (msg * boc. Cell ) (* HighloadV2Message , error ) {
114+ func DecodeHighloadV2Message (msg * tlb. Message ) (* HighloadV2Message , error ) {
110115 signedMsgBody , err := extractSignedMsgBody (msg )
111116 if err != nil {
112117 return nil , err
@@ -124,7 +129,10 @@ func decodeHighloadV2Message(body *SignedMsgBody) (*HighloadV2Message, error) {
124129}
125130
126131// ExtractRawMessages extracts a list of RawMessages from an external message.
127- func ExtractRawMessages (ver Version , msg * boc.Cell ) (PayloadV1toV4 , error ) {
132+ func ExtractRawMessages (ver Version , msg * tlb.Message ) (PayloadV1toV4 , error ) {
133+ if msg == nil {
134+ return nil , fmt .Errorf ("msg is nil" )
135+ }
128136 switch ver {
129137 case V4R1 , V4R2 :
130138 v4 , err := DecodeMessageV4 (msg )
@@ -154,7 +162,10 @@ func ExtractRawMessages(ver Version, msg *boc.Cell) (PayloadV1toV4, error) {
154162// was signed by the given public key of a wallet contract.
155163// On success, it returns nil.
156164// Otherwise, it returns an error.
157- func VerifySignature (ver Version , msg * boc.Cell , publicKey ed25519.PublicKey ) error {
165+ func VerifySignature (ver Version , msg * tlb.Message , publicKey ed25519.PublicKey ) error {
166+ if msg == nil {
167+ return fmt .Errorf ("msg is nil" )
168+ }
158169 switch ver {
159170 case V3R1 , V3R2 , V4R1 , V4R2 , HighLoadV2R2 :
160171 signedMsgBody , err := extractSignedMsgBody (msg )
0 commit comments