Skip to content

Commit

Permalink
add token factory (without tests)
Browse files Browse the repository at this point in the history
  • Loading branch information
faddat committed Jul 26, 2023
1 parent 8c25362 commit 658efda
Show file tree
Hide file tree
Showing 20 changed files with 133 additions and 530 deletions.
32 changes: 28 additions & 4 deletions app/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,9 @@ import (
"github.com/CosmWasm/wasmd/x/wasm"
wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper"
wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types"

tokenfactorykeeper "github.com/notional-labs/nursery/x/tokenfactory/keeper"
tokenfactorytypes "github.com/notional-labs/nursery/x/tokenfactory/types"
)

const appName = "WasmApp"
Expand Down Expand Up @@ -200,15 +203,22 @@ var maccPerms = map[string][]string{
govtypes.ModuleName: {authtypes.Burner},
nft.ModuleName: nil,
// non sdk modules
ibctransfertypes.ModuleName: {authtypes.Minter, authtypes.Burner},
ibcfeetypes.ModuleName: nil,
icatypes.ModuleName: nil,
wasmtypes.ModuleName: {authtypes.Burner},
ibctransfertypes.ModuleName: {authtypes.Minter, authtypes.Burner},
ibcfeetypes.ModuleName: nil,
icatypes.ModuleName: nil,
wasmtypes.ModuleName: {authtypes.Burner},
tokenfactorytypes.ModuleName: {authtypes.Minter, authtypes.Burner},
}

var (
_ runtime.AppI = (*WasmApp)(nil)
_ servertypes.Application = (*WasmApp)(nil)

tokenFactoryCapabilities = []string{
tokenfactorytypes.EnableBurnFrom,
tokenfactorytypes.EnableForceTransfer,
tokenfactorytypes.EnableSetMetadata,
}
)

// WasmApp extended ABCI application
Expand Down Expand Up @@ -239,6 +249,7 @@ type WasmApp struct {
AuthzKeeper authzkeeper.Keeper
EvidenceKeeper evidencekeeper.Keeper
FeeGrantKeeper feegrantkeeper.Keeper
TokenFactoryKeeper tokenfactorykeeper.Keeper
GroupKeeper groupkeeper.Keeper
NFTKeeper nftkeeper.Keeper
ConsensusParamsKeeper consensusparamkeeper.Keeper
Expand Down Expand Up @@ -561,6 +572,19 @@ func NewWasmApp(
// If evidence needs to be handled for the app, set routes in router here and seal
app.EvidenceKeeper = *evidenceKeeper

govModAddress := authtypes.NewModuleAddress(govtypes.ModuleName).String()

// Create the TokenFactory Keeper
app.TokenFactoryKeeper = tokenfactorykeeper.NewKeeper(
appCodec,
app.keys[tokenfactorytypes.StoreKey],
app.AccountKeeper,
app.BankKeeper,
app.DistrKeeper,
tokenFactoryCapabilities,
govModAddress,
)

// IBC Fee Module keeper
app.IBCFeeKeeper = ibcfeekeeper.NewKeeper(
appCodec, keys[ibcfeetypes.StoreKey],
Expand Down
2 changes: 2 additions & 0 deletions app/params/weights.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,3 +40,5 @@ const (
DefaultWeightUpdateInstantiateConfigProposal int = 5
DefaultWeightStoreAndInstantiateContractProposal int = 5
)

var BondDenom = "danger"
16 changes: 8 additions & 8 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,11 @@ require (
cosmossdk.io/x/nft v0.0.0-20230719143845-dff6b0e26aa4
cosmossdk.io/x/tx v0.9.1
cosmossdk.io/x/upgrade v0.0.0-20230722073756-0fa85b7a424d
github.com/CosmWasm/wasmvm v1.3.0 // indirect
github.com/CosmWasm/wasmvm v1.3.0
github.com/cometbft/cometbft v0.38.0-rc3
github.com/cometbft/cometbft-db v0.8.0 // indirect
github.com/cosmos/cosmos-db v1.0.0
github.com/cosmos/cosmos-proto v1.0.0-beta.3 // indirect
github.com/cosmos/cosmos-proto v1.0.0-beta.3
github.com/cosmos/cosmos-sdk v0.50.0-beta.0.0.20230724200039-0cff9ce3cda9
github.com/cosmos/gogogateway v1.2.0 // indirect
github.com/cosmos/gogoproto v1.4.10
Expand All @@ -30,10 +30,10 @@ require (
github.com/docker/distribution v2.8.2+incompatible // indirect
github.com/dvsekhvalnov/jose2go v1.5.0 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/protobuf v1.5.3 // indirect
github.com/golang/protobuf v1.5.3
github.com/google/gofuzz v1.2.0 // indirect
github.com/gorilla/mux v1.8.0 // indirect
github.com/grpc-ecosystem/grpc-gateway v1.16.0 // indirect
github.com/gorilla/mux v1.8.0
github.com/grpc-ecosystem/grpc-gateway v1.16.0
github.com/pkg/errors v0.9.1 // indirect
github.com/prometheus/client_golang v1.16.0
github.com/spf13/cast v1.5.1
Expand All @@ -44,15 +44,17 @@ require (
github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect
golang.org/x/exp v0.0.0-20230711153332-06a737ee72cb // indirect
google.golang.org/genproto v0.0.0-20230706204954-ccb25ca9f130 // indirect
google.golang.org/grpc v1.56.2 // indirect
google.golang.org/grpc v1.56.2
gopkg.in/yaml.v2 v2.4.0 // indirect
)

require (
cosmossdk.io/errors v1.0.0
cosmossdk.io/tools/confix v0.0.0-20230722073756-0fa85b7a424d
github.com/CosmWasm/wasmd v0.0.0-00010101000000-000000000000
github.com/cosmos/ibc-go/modules/capability v1.0.0-rc3
github.com/snikch/goodman v0.0.0-20171125024755-10e37e294daa
google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529
)

require (
Expand All @@ -62,7 +64,6 @@ require (
cloud.google.com/go/iam v1.1.0 // indirect
cloud.google.com/go/storage v1.30.1 // indirect
cosmossdk.io/collections v0.3.0 // indirect
cosmossdk.io/errors v1.0.0 // indirect
filippo.io/edwards25519 v1.0.0 // indirect
github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect
github.com/99designs/keyring v1.2.1 // indirect
Expand Down Expand Up @@ -189,7 +190,6 @@ require (
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect
google.golang.org/api v0.126.0 // indirect
google.golang.org/appengine v1.6.7 // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98 // indirect
google.golang.org/protobuf v1.31.0 // indirect
gopkg.in/ini.v1 v1.67.0 // indirect
Expand Down
2 changes: 1 addition & 1 deletion x/tokenfactory/bindings/message_plugin.go
Original file line number Diff line number Diff line change
Expand Up @@ -308,7 +308,7 @@ func PerformSetMetadata(f *tokenfactorykeeper.Keeper, b *bankkeeper.BaseKeeper,
}

// GetFullDenom is a function, not method, so the message_plugin can use it
func GetFullDenom(contract string, subDenom string) (string, error) {
func GetFullDenom(contract, subDenom string) (string, error) {
// Address validation
if _, err := parseAddress(contract); err != nil {
return "", err
Expand Down
18 changes: 9 additions & 9 deletions x/tokenfactory/bindings/validate_msg_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ func TestCreateDenom(t *testing.T) {
for name, spec := range specs {
t.Run(name, func(t *testing.T) {
// when
_, gotErr := wasmbinding.PerformCreateDenom(&junoapp.AppKeepers.TokenFactoryKeeper, &junoapp.BankKeeper, ctx, actor, spec.createDenom)
_, gotErr := wasmbinding.PerformCreateDenom(&junoapp.TokenFactoryKeeper, &junoapp.BankKeeper, ctx, actor, spec.createDenom)
// then
if spec.expErr {
t.Logf("validate_msg_test got error: %v", gotErr)
Expand Down Expand Up @@ -179,13 +179,13 @@ func TestMint(t *testing.T) {
validDenom := bindings.CreateDenom{
Subdenom: "MOON",
}
_, err := wasmbinding.PerformCreateDenom(&junoapp.AppKeepers.TokenFactoryKeeper, &junoapp.BankKeeper, ctx, creator, &validDenom)
_, err := wasmbinding.PerformCreateDenom(&junoapp.TokenFactoryKeeper, &junoapp.BankKeeper, ctx, creator, &validDenom)
require.NoError(t, err)

emptyDenom := bindings.CreateDenom{
Subdenom: "",
}
_, err = wasmbinding.PerformCreateDenom(&junoapp.AppKeepers.TokenFactoryKeeper, &junoapp.BankKeeper, ctx, creator, &emptyDenom)
_, err = wasmbinding.PerformCreateDenom(&junoapp.TokenFactoryKeeper, &junoapp.BankKeeper, ctx, creator, &emptyDenom)
require.NoError(t, err)

validDenomStr := fmt.Sprintf("factory/%s/%s", creator.String(), validDenom.Subdenom)
Expand Down Expand Up @@ -275,7 +275,7 @@ func TestMint(t *testing.T) {
for name, spec := range specs {
t.Run(name, func(t *testing.T) {
// when
gotErr := wasmbinding.PerformMint(&junoapp.AppKeepers.TokenFactoryKeeper, &junoapp.AppKeepers.BankKeeper, ctx, creator, spec.mint)
gotErr := wasmbinding.PerformMint(&junoapp.TokenFactoryKeeper, &junoapp.BankKeeper, ctx, creator, spec.mint)
// then
if spec.expErr {
require.Error(t, gotErr)
Expand All @@ -298,19 +298,19 @@ func TestBurn(t *testing.T) {
validDenom := bindings.CreateDenom{
Subdenom: "MOON",
}
_, err := wasmbinding.PerformCreateDenom(&junoapp.AppKeepers.TokenFactoryKeeper, &junoapp.BankKeeper, ctx, creator, &validDenom)
_, err := wasmbinding.PerformCreateDenom(&junoapp.TokenFactoryKeeper, &junoapp.BankKeeper, ctx, creator, &validDenom)
require.NoError(t, err)

emptyDenom := bindings.CreateDenom{
Subdenom: "",
}
_, err = wasmbinding.PerformCreateDenom(&junoapp.AppKeepers.TokenFactoryKeeper, &junoapp.BankKeeper, ctx, creator, &emptyDenom)
_, err = wasmbinding.PerformCreateDenom(&junoapp.TokenFactoryKeeper, &junoapp.BankKeeper, ctx, creator, &emptyDenom)
require.NoError(t, err)

lucky := RandomAccountAddress()

// lucky was broke
balances := junoapp.AppKeepers.BankKeeper.GetAllBalances(ctx, lucky)
balances := junoapp.BankKeeper.GetAllBalances(ctx, lucky)
require.Empty(t, balances)

validDenomStr := fmt.Sprintf("factory/%s/%s", creator.String(), validDenom.Subdenom)
Expand Down Expand Up @@ -392,15 +392,15 @@ func TestBurn(t *testing.T) {
Amount: mintAmount,
MintToAddress: creator.String(),
}
err := wasmbinding.PerformMint(&junoapp.AppKeepers.TokenFactoryKeeper, &junoapp.AppKeepers.BankKeeper, ctx, creator, mintBinding)
err := wasmbinding.PerformMint(&junoapp.TokenFactoryKeeper, &junoapp.BankKeeper, ctx, creator, mintBinding)
require.NoError(t, err)

emptyDenomMintBinding := &bindings.MintTokens{
Denom: emptyDenomStr,
Amount: mintAmount,
MintToAddress: creator.String(),
}
err = wasmbinding.PerformMint(&junoapp.AppKeepers.TokenFactoryKeeper, &junoapp.BankKeeper, ctx, creator, emptyDenomMintBinding)
err = wasmbinding.PerformMint(&junoapp.TokenFactoryKeeper, &junoapp.BankKeeper, ctx, creator, emptyDenomMintBinding)
require.NoError(t, err)

// when
Expand Down
8 changes: 4 additions & 4 deletions x/tokenfactory/bindings/validate_queries_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -67,19 +67,19 @@ func TestDenomAdmin(t *testing.T) {
app, ctx := SetupCustomApp(t, addr)

// set token creation fee to zero to make testing easier
tfParams := app.AppKeepers.TokenFactoryKeeper.GetParams(ctx)
tfParams := app.TokenFactoryKeeper.GetParams(ctx)
tfParams.DenomCreationFee = sdk.NewCoins()
if err := app.AppKeepers.TokenFactoryKeeper.SetParams(ctx, tfParams); err != nil {
if err := app.TokenFactoryKeeper.SetParams(ctx, tfParams); err != nil {
t.Fatal(err)
}

// create a subdenom via the token factory
admin := sdk.AccAddress([]byte("addr1_______________"))
tfDenom, err := app.AppKeepers.TokenFactoryKeeper.CreateDenom(ctx, admin.String(), "subdenom")
tfDenom, err := app.TokenFactoryKeeper.CreateDenom(ctx, admin.String(), "subdenom")
require.NoError(t, err)
require.NotEmpty(t, tfDenom)

queryPlugin := wasmbinding.NewQueryPlugin(&app.AppKeepers.BankKeeper, &app.AppKeepers.TokenFactoryKeeper)
queryPlugin := wasmbinding.NewQueryPlugin(&app.BankKeeper, &app.TokenFactoryKeeper)

testCases := []struct {
name string
Expand Down
2 changes: 1 addition & 1 deletion x/tokenfactory/keeper/admins.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ func (k Keeper) setAuthorityMetadata(ctx sdk.Context, denom string, metadata typ
return nil
}

func (k Keeper) setAdmin(ctx sdk.Context, denom string, admin string) error {
func (k Keeper) setAdmin(ctx sdk.Context, denom, admin string) error {
metadata, err := k.GetAuthorityMetadata(ctx, denom)
if err != nil {
return err
Expand Down
Loading

0 comments on commit 658efda

Please sign in to comment.