Skip to content

Commit 4b1b839

Browse files
authored
Merge branch 'main' into stepit/halborn-audit
2 parents 13cb53a + 898e5c5 commit 4b1b839

14 files changed

Lines changed: 360 additions & 205 deletions

File tree

.golangci.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,10 @@ formatters:
7373
no-inline-comments: true
7474
no-prefix-comments: true
7575
gofmt:
76+
simplify: true
7677
rewrite-rules:
7778
- pattern: 'interface{}'
7879
replacement: 'any'
7980
golines:
81+
max-len: 100
8082
shorten-comments: true

controller/action/fee.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,7 @@ func (c *FeeController) extractAttributes(
236236
func ComputeFeeAmount(amount math.Int, basisPoints uint64) (math.Int, error) {
237237
basisPointsInt := math.NewIntFromUint64(basisPoints)
238238
fee, err := amount.SafeMul(basisPointsInt)
239-
if err != nil || fee.IsZero() {
239+
if err != nil || !fee.IsPositive() {
240240
return math.ZeroInt(), err
241241
}
242242

controller/adapter/ibc.go

Lines changed: 38 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,13 @@
2121
package adapter
2222

2323
import (
24+
"fmt"
25+
2426
errorsmod "cosmossdk.io/errors"
2527
"cosmossdk.io/log"
28+
sdkmath "cosmossdk.io/math"
2629
"github.com/cosmos/cosmos-sdk/codec"
30+
sdk "github.com/cosmos/cosmos-sdk/types"
2731
transfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types"
2832

2933
"github.com/noble-assets/orbiter/controller"
@@ -67,16 +71,35 @@ func NewIBCAdapter(cdc codec.Codec, logger log.Logger) (*IBCAdapter, error) {
6771
}, nil
6872
}
6973

70-
// ParsePayload dispatches the payload parsing to the underlying IBC parser.
71-
func (a *IBCAdapter) ParsePayload(
72-
id core.ProtocolID,
73-
payloadBz []byte,
74-
) (bool, *core.Payload, error) {
75-
return a.parser.ParsePayload(id, payloadBz)
74+
func (a *IBCAdapter) ParsePacket(packetBz []byte) (*types.ParsedData, error) {
75+
packet, err := GetICS20PacketData(packetBz)
76+
if err != nil {
77+
return nil, core.ErrNoOrbiterPacket.Wrap("data is not ICS20 packet")
78+
}
79+
80+
if packet.GetReceiver() != core.ModuleAddress.String() {
81+
return nil, core.ErrNoOrbiterPacket.Wrap("receiver is not Orbiter module")
82+
}
83+
84+
payload, err := a.parser.ParsePayload([]byte(packet.GetMemo()))
85+
if err != nil {
86+
return nil, err
87+
}
88+
89+
amount, ok := sdkmath.NewIntFromString(packet.Amount)
90+
if !ok {
91+
return nil, fmt.Errorf("invalid amount: %s", packet.Amount)
92+
}
93+
94+
return &types.ParsedData{
95+
Coin: sdk.NewCoin(packet.Denom, amount),
96+
Payload: *payload,
97+
}, nil
7698
}
7799

78100
var _ types.PayloadParser = &IBCParser{}
79101

102+
// NOTE: maybe we get rid of the IBC parser and directly use the JSON one.
80103
type IBCParser struct {
81104
JSONParser
82105
}
@@ -102,34 +125,23 @@ func NewIBCParser(cdc codec.Codec) (*IBCParser, error) {
102125
// - bool: whether the payload is intended for the Orbiter module.
103126
// - Payload: the parsed payload.
104127
// - error: an error, if one occurred during parsing.
105-
func (p *IBCParser) ParsePayload(_ core.ProtocolID, payloadBz []byte) (bool, *core.Payload, error) {
106-
data, err := p.GetICS20PacketData(payloadBz)
128+
func (p *IBCParser) ParsePayload(memoBz []byte) (*core.Payload, error) {
129+
payload, err := p.Parse(string(memoBz))
107130
if err != nil {
108-
// Despite the error is not nil, we don't return it. We
109-
// want the non fungible token packet data error to be
110-
// returned from the ICS20 app.
111-
return false, nil, nil //nolint:nilerr
112-
}
113-
114-
if data.GetReceiver() != core.ModuleAddress.String() {
115-
return false, nil, nil
116-
}
117-
118-
payload, err := p.Parse(data.GetMemo())
119-
if err != nil {
120-
return true, nil, err
131+
return nil, err
121132
}
122133

134+
// NOTE: validation should probably be not here.
123135
if err := payload.Validate(); err != nil {
124-
return true, payload, err
136+
return payload, err
125137
}
126138

127-
return true, payload, nil
139+
return payload, nil
128140
}
129141

130-
// GetICS20PacketData returns unmarshalled ICS-20 packet data if it is present in the data
131-
// as well as a boolean indicating the successful decoding.
132-
func (p *IBCParser) GetICS20PacketData(data []byte) (transfertypes.FungibleTokenPacketData, error) {
142+
// GetICS20PacketData returns the unmarshalled ICS-20 packet data.
143+
// It returns an error if the data cannot be unmarshalled.
144+
func GetICS20PacketData(data []byte) (transfertypes.FungibleTokenPacketData, error) {
133145
var ics20Data transfertypes.FungibleTokenPacketData
134146
err := transfertypes.ModuleCdc.UnmarshalJSON(data, &ics20Data)
135147

0 commit comments

Comments
 (0)