mirror of
https://github.com/0glabs/0g-chain.git
synced 2024-11-10 10:05:18 +00:00
118 lines
2.8 KiB
Go
118 lines
2.8 KiB
Go
package keeper
|
|
|
|
import (
|
|
"context"
|
|
"encoding/hex"
|
|
|
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
|
|
|
"github.com/0glabs/0g-chain/x/bep3/types"
|
|
)
|
|
|
|
type msgServer struct {
|
|
keeper Keeper
|
|
}
|
|
|
|
// NewMsgServerImpl returns an implementation of the bep3 MsgServer interface
|
|
// for the provided Keeper.
|
|
func NewMsgServerImpl(keeper Keeper) types.MsgServer {
|
|
return &msgServer{keeper: keeper}
|
|
}
|
|
|
|
var _ types.MsgServer = msgServer{}
|
|
|
|
func (k msgServer) CreateAtomicSwap(goCtx context.Context, msg *types.MsgCreateAtomicSwap) (*types.MsgCreateAtomicSwapResponse, error) {
|
|
ctx := sdk.UnwrapSDKContext(goCtx)
|
|
|
|
from, err := sdk.AccAddressFromBech32(msg.From)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
to, err := sdk.AccAddressFromBech32(msg.To)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
randomNumberHash, err := hex.DecodeString(msg.RandomNumberHash)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if err = k.keeper.CreateAtomicSwap(ctx, randomNumberHash, msg.Timestamp, msg.HeightSpan,
|
|
from, to, msg.SenderOtherChain, msg.RecipientOtherChain, msg.Amount, true); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
ctx.EventManager().EmitEvent(
|
|
sdk.NewEvent(
|
|
sdk.EventTypeMessage,
|
|
sdk.NewAttribute(sdk.AttributeKeyModule, types.AttributeValueCategory),
|
|
sdk.NewAttribute(sdk.AttributeKeySender, msg.From),
|
|
),
|
|
)
|
|
|
|
return &types.MsgCreateAtomicSwapResponse{}, nil
|
|
}
|
|
|
|
func (k msgServer) ClaimAtomicSwap(goCtx context.Context, msg *types.MsgClaimAtomicSwap) (*types.MsgClaimAtomicSwapResponse, error) {
|
|
ctx := sdk.UnwrapSDKContext(goCtx)
|
|
|
|
from, err := sdk.AccAddressFromBech32(msg.From)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
swapID, err := hex.DecodeString(msg.SwapID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
randomNumber, err := hex.DecodeString(msg.RandomNumber)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
err = k.keeper.ClaimAtomicSwap(ctx, from, swapID, randomNumber)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
ctx.EventManager().EmitEvent(
|
|
sdk.NewEvent(
|
|
sdk.EventTypeMessage,
|
|
sdk.NewAttribute(sdk.AttributeKeyModule, types.AttributeValueCategory),
|
|
sdk.NewAttribute(sdk.AttributeKeySender, msg.From),
|
|
),
|
|
)
|
|
|
|
return &types.MsgClaimAtomicSwapResponse{}, nil
|
|
}
|
|
|
|
func (k msgServer) RefundAtomicSwap(goCtx context.Context, msg *types.MsgRefundAtomicSwap) (*types.MsgRefundAtomicSwapResponse, error) {
|
|
ctx := sdk.UnwrapSDKContext(goCtx)
|
|
|
|
from, err := sdk.AccAddressFromBech32(msg.From)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
swapID, err := hex.DecodeString(msg.SwapID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
err = k.keeper.RefundAtomicSwap(ctx, from, swapID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
ctx.EventManager().EmitEvent(
|
|
sdk.NewEvent(
|
|
sdk.EventTypeMessage,
|
|
sdk.NewAttribute(sdk.AttributeKeyModule, types.AttributeValueCategory),
|
|
sdk.NewAttribute(sdk.AttributeKeySender, msg.From),
|
|
),
|
|
)
|
|
|
|
return &types.MsgRefundAtomicSwapResponse{}, nil
|
|
}
|