-
Notifications
You must be signed in to change notification settings - Fork 1
/
packet.go
60 lines (46 loc) · 1.05 KB
/
packet.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
package types
import (
"github.com/ethereum/go-ethereum/accounts/abi"
)
///////////////////////////////////
// Implement Packet Decoding //
///////////////////////////////////
type CrosschainRouterPacket struct {
Handler string `json:"handler"`
Payload []byte `json:"payload"`
}
type RouterCrosschainPacket interface {
GetRequestPacket() []byte
}
func DecodeRouterCrosschainPacket(msg RouterCrosschainPacket) *CrosschainRouterPacket {
packet := &CrosschainRouterPacket{}
if len(msg.GetRequestPacket()) < 100 {
return packet
}
Bytes, err := abi.NewType("bytes", "", nil)
if err != nil {
return packet
}
String, err := abi.NewType("string", "", nil)
if err != nil {
return packet
}
arguments := abi.Arguments{
{
Type: String,
},
{
Type: Bytes,
},
}
data, err := arguments.Unpack(msg.GetRequestPacket())
if err != nil {
return packet
}
// Assign the decoded values
handlerContractAddress := data[0].(string)
payload := data[1].([]byte)
packet.Handler = handlerContractAddress
packet.Payload = payload
return packet
}