Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions app/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -536,6 +536,7 @@ func New(
app.AccountKeeper,
&app.BankKeeper,
&app.WasmKeeper,
&app.Erc20Keeper,
authtypes.NewModuleAddress(govtypes.ModuleName).String(),
)

Expand Down
15 changes: 15 additions & 0 deletions x/tokenfactory/keeper/createdenom.go
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
package keeper

import (
"crypto/sha256"
"fmt"

"cosmossdk.io/errors"
"github.com/MANTRA-Chain/mantrachain/v5/x/tokenfactory/types"
sdk "github.com/cosmos/cosmos-sdk/types"
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
erc20types "github.com/cosmos/evm/x/erc20/types"
ethcommon "github.com/ethereum/go-ethereum/common"
)

// ConvertToBaseToken converts a fee amount in a whitelisted fee token to the base fee token amount
Expand Down Expand Up @@ -36,6 +39,7 @@ func (k Keeper) createDenomAfterValidation(ctx sdk.Context, creatorAddr, denom s
Exponent: 0,
}},
Base: denom,
Name: denom,
}

k.bankKeeper.SetDenomMetaData(ctx, denomMetaData)
Expand All @@ -49,6 +53,17 @@ func (k Keeper) createDenomAfterValidation(ctx sdk.Context, creatorAddr, denom s
return err
}

// create erc20 contractAddr and set token pair
denomHash := sha256.Sum256([]byte(denom))
ethContractAddr := ethcommon.BytesToAddress(denomHash[:])
pair := erc20types.NewTokenPair(ethContractAddr, denom, erc20types.OWNER_EXTERNAL)
k.erc20Keeper.SetToken(ctx, pair)

err = k.erc20Keeper.EnableDynamicPrecompiles(ctx, pair.GetERC20Contract())
if err != nil {
return err
}

k.addDenomFromCreator(ctx, creatorAddr, denom)
return nil
}
Expand Down
3 changes: 3 additions & 0 deletions x/tokenfactory/keeper/keeper.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ type (
accountKeeper types.AccountKeeper
bankKeeper types.BankKeeper
contractKeeper types.WasmKeeper
erc20Keeper types.ERC20Keeper
authority string
}
)
Expand All @@ -33,6 +34,7 @@ func NewKeeper(
accountKeeper types.AccountKeeper,
bankKeeper types.BankKeeper,
contractKeeper types.WasmKeeper,
erc20Keeper types.ERC20Keeper,
authority string,
) Keeper {
return Keeper{
Expand All @@ -42,6 +44,7 @@ func NewKeeper(
accountKeeper: accountKeeper,
bankKeeper: bankKeeper,
contractKeeper: contractKeeper,
erc20Keeper: erc20Keeper,
authority: authority,
}
}
Expand Down
6 changes: 6 additions & 0 deletions x/tokenfactory/keeper/msg_server.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,13 @@ package keeper

import (
"context"
"crypto/sha256"

"cosmossdk.io/errors"
"github.com/MANTRA-Chain/mantrachain/v5/x/tokenfactory/types"
sdk "github.com/cosmos/cosmos-sdk/types"
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
ethcommon "github.com/ethereum/go-ethereum/common"
)

type msgServer struct {
Expand All @@ -33,11 +35,15 @@ func (server msgServer) CreateDenom(goCtx context.Context, msg *types.MsgCreateD
return nil, err
}

denomHash := sha256.Sum256([]byte(denom))
ethContractAddr := ethcommon.BytesToAddress(denomHash[:])

ctx.EventManager().EmitEvents(sdk.Events{
sdk.NewEvent(
types.TypeMsgCreateDenom,
sdk.NewAttribute(types.AttributeCreator, msg.Sender),
sdk.NewAttribute(types.AttributeNewTokenDenom, denom),
sdk.NewAttribute(types.AttributeNewTokenEthAddr, ethContractAddr.Hex()),
),
})

Expand Down
1 change: 1 addition & 0 deletions x/tokenfactory/types/events.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ const (
AttributeCreator = "creator"
AttributeSubdenom = "subdenom"
AttributeNewTokenDenom = "new_token_denom" //nolint:gosec // token name, not a credential
AttributeNewTokenEthAddr = "new_token_eth_addr"
AttributeMintToAddress = "mint_to_address"
AttributeBurnFromAddress = "burn_from_address"
AttributeTransferFromAddress = "transfer_from_address"
Expand Down
7 changes: 7 additions & 0 deletions x/tokenfactory/types/expected_keepers.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ import (
wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types"
sdk "github.com/cosmos/cosmos-sdk/types"
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
erc20types "github.com/cosmos/evm/x/erc20/types"
ethcommon "github.com/ethereum/go-ethereum/common"
)

type BankKeeper interface {
Expand Down Expand Up @@ -39,3 +41,8 @@ type WasmKeeper interface {
Sudo(ctx context.Context, contractAddress sdk.AccAddress, msg []byte) ([]byte, error)
GetContractInfo(ctx context.Context, contractAddress sdk.AccAddress) *wasmtypes.ContractInfo
}

type ERC20Keeper interface {
SetToken(ctx sdk.Context, pair erc20types.TokenPair)
EnableDynamicPrecompiles(ctx sdk.Context, addresses ...ethcommon.Address) error
}
Loading