Skip to content

Commit

Permalink
fix: side-chain err (#92)
Browse files Browse the repository at this point in the history
  • Loading branch information
taramakage authored Jul 25, 2023
1 parent 887f1a8 commit 6b19699
Show file tree
Hide file tree
Showing 9 changed files with 119 additions and 147 deletions.
111 changes: 56 additions & 55 deletions api/iritamod/side-chain/v1/side-chain.pulsar.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

16 changes: 2 additions & 14 deletions modules/side-chain/keeper/ante.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ func (dlt ValidateSideChainDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, sim
return ctx, err
}
case *types.MsgTransferSpace:
if err := dlt.validateSpaceOwnership(ctx, msg.Sender, msg.SpaceId); err != nil {
if err := dlt.validateOnlySpace(ctx, msg.SpaceId); err != nil {
return ctx, err
}
if err := dlt.validateSideChainUserRole(ctx, msg.Sender); err != nil {
Expand All @@ -37,7 +37,7 @@ func (dlt ValidateSideChainDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, sim
return ctx, err
}
case *types.MsgCreateBlockHeader:
if err := dlt.validateSpaceOwnership(ctx, msg.Sender, msg.SpaceId); err != nil {
if err := dlt.validateOnlySpace(ctx, msg.SpaceId); err != nil {
return ctx, err
}
if err := dlt.validateSideChainUserRole(ctx, msg.Sender); err != nil {
Expand All @@ -56,18 +56,6 @@ func (dlt ValidateSideChainDecorator) validateOnlySpace(ctx sdk.Context, spaceId
return nil
}

func (dlt ValidateSideChainDecorator) validateSpaceOwnership(ctx sdk.Context, addr string, spaceId uint64) error {
accAddr, _ := sdk.AccAddressFromBech32(addr)
if !dlt.keeper.HasSpace(ctx, spaceId) {
return sdkerrors.Wrapf(types.ErrInvalidSpaceId, "space (%d) does not exist", spaceId)
}

if !dlt.keeper.HasSpaceOfOwner(ctx, accAddr, spaceId) {
return sdkerrors.Wrapf(types.ErrInvalidSpaceOwner, "space (%d) is not owned by (%s)", spaceId, addr)
}
return nil
}

func (dlt ValidateSideChainDecorator) validateSideChainUserRole(ctx sdk.Context, addr string) error {
accAddr, _ := sdk.AccAddressFromBech32(addr)
if !dlt.permKeeper.HasSideChainUserRole(ctx, accAddr) {
Expand Down
2 changes: 1 addition & 1 deletion modules/side-chain/keeper/genesis.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ func (k Keeper) InitGenesis(ctx sdk.Context, data types.GenesisState) {
}

for _, spaceLatestHeight := range data.SpaceLatestHeights {
k.setSpaceLatestHeight(ctx, spaceLatestHeight.Id, spaceLatestHeight.Height)
k.setSpaceLatestHeight(ctx, spaceLatestHeight.SpaceId, spaceLatestHeight.Height)
}
}

Expand Down
7 changes: 2 additions & 5 deletions modules/side-chain/keeper/grpc_query.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,8 @@ func (k Keeper) Space(goCtx context.Context, request *types.QuerySpaceRequest) (

// NOTE: history data didn't record latest height, so return 0 if not exist.
latestHeight := uint64(0)
if k.HasSpaceLatestHeight(ctx, request.SpaceId) {
lh, err := k.GetSpaceLatestHeight(ctx, request.SpaceId)
if err != nil {
return nil, err
}
lh, exist := k.GetSpaceLatestHeight(ctx, request.SpaceId)
if exist {
latestHeight = lh
}

Expand Down
40 changes: 20 additions & 20 deletions modules/side-chain/keeper/space.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,11 @@ func (k Keeper) TransferSpace(ctx sdk.Context, spaceId uint64, from, to sdk.AccA
if err != nil {
return err
}

if !k.HasSpaceOfOwner(ctx, from, spaceId) {
return sdkerrors.Wrapf(types.ErrInvalidSpaceOwner, "space (%d) is not owned by (%s)", spaceId, from.String())
}

space.Owner = to.String()

k.setSpace(ctx, spaceId, space)
Expand All @@ -49,6 +54,10 @@ func (k Keeper) TransferSpace(ctx sdk.Context, spaceId uint64, from, to sdk.AccA

// CreateBlockHeader creates a layer2 block header record
func (k Keeper) CreateBlockHeader(ctx sdk.Context, spaceId, height uint64, header string, sender sdk.AccAddress) error {
if !k.HasSpaceOfOwner(ctx, sender, spaceId) {
return sdkerrors.Wrapf(types.ErrInvalidSpaceOwner, "space (%d) is not owned by (%s)", spaceId, sender.String())
}

if k.HasBlockHeader(ctx, spaceId, height) {
return sdkerrors.Wrapf(types.ErrBlockHeader, "block header already exists at height (%d) in space (%d)", height, spaceId)
}
Expand All @@ -57,15 +66,8 @@ func (k Keeper) CreateBlockHeader(ctx sdk.Context, spaceId, height uint64, heade
k.setBlockHeaderTxHash(ctx, spaceId, height, tmhash.Sum(ctx.TxBytes()))

// update the latest side chain height
if k.HasSpaceLatestHeight(ctx, spaceId) {
latestHeight, err := k.GetSpaceLatestHeight(ctx, spaceId)
if err != nil {
return sdkerrors.Wrapf(types.ErrBlockHeader, "fail to get latest block header height in space (%d)", spaceId)
}
if latestHeight < height {
k.setSpaceLatestHeight(ctx, spaceId, height)
}
} else {
latestHeight, exist := k.GetSpaceLatestHeight(ctx, spaceId)
if !exist || latestHeight < height {
k.setSpaceLatestHeight(ctx, spaceId, height)
}

Expand Down Expand Up @@ -178,13 +180,11 @@ func (k Keeper) GetBlockHeaders(ctx sdk.Context) []types.BlockHeader {
}

for i := 0; i < len(headers); i++ {
if k.HasBlockHeaderTxHash(ctx, headers[i].SpaceId, headers[i].Height) {
txHash, err := k.GetBlockHeaderTxHash(ctx, headers[i].SpaceId, headers[i].Height)
if err != nil {
panic("fail to get block header tx hash")
}
headers[i].TxHash = txHash
txHash, err := k.GetBlockHeaderTxHash(ctx, headers[i].SpaceId, headers[i].Height)
if err != nil {
panic("fail to get block header tx hash")
}
headers[i].TxHash = txHash
}

return headers
Expand Down Expand Up @@ -242,8 +242,8 @@ func (k Keeper) GetSpaceLatestHeights(ctx sdk.Context) []types.SpaceLatestHeight
}
latestHeight := sdk.BigEndianToUint64(iterator.Value())
latestHeights = append(latestHeights, types.SpaceLatestHeight{
Id: spaceId,
Height: latestHeight,
SpaceId: spaceId,
Height: latestHeight,
})
}
return latestHeights
Expand All @@ -254,13 +254,13 @@ func (k Keeper) HasSpaceLatestHeight(ctx sdk.Context, spaceId uint64) bool {
return store.Has(types.KeyPrefixSpaceLatestHeightStoreKey(spaceId))
}

func (k Keeper) GetSpaceLatestHeight(ctx sdk.Context, spaceId uint64) (uint64, error) {
func (k Keeper) GetSpaceLatestHeight(ctx sdk.Context, spaceId uint64) (uint64, bool) {
store := ctx.KVStore(k.storeKey)
bz := store.Get(types.KeyPrefixSpaceLatestHeightStoreKey(spaceId))
if bz == nil {
return 0, sdkerrors.Wrapf(types.ErrInvalidSpaceId, "latest block header height does not exist in space (%d)", spaceId)
return 0, false
}
return sdk.BigEndianToUint64(bz), nil
return sdk.BigEndianToUint64(bz), true
}

func (k Keeper) setSpaceLatestHeight(ctx sdk.Context, spaceId, blockHeight uint64) {
Expand Down
4 changes: 2 additions & 2 deletions modules/side-chain/keeper/space_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,8 @@ func (s *TestSuite) TestCreateBlockHeader() {
s.Require().NoErrorf(err, "failed to get block header")
s.Require().Equal(header, resHeader)

h, err := s.keeper.GetSpaceLatestHeight(s.ctx, avataSpaceId)
s.Require().NoErrorf(err, "failed to get block header latest height")
h, exist := s.keeper.GetSpaceLatestHeight(s.ctx, avataSpaceId)
s.Require().Equal(exist, true)
s.Require().Equal(height, h)

var expected tmbytes.HexBytes = tmhash.Sum(s.ctx.TxBytes())
Expand Down
Loading

0 comments on commit 6b19699

Please sign in to comment.