Personalizando Minitia

Descripción general

Para aquellos que trabajan dentro del ecosistema de Initia y están considerando modificaciones a componentes principales como cometbfty cosmos-sdk, recomendamos encarecidamente minimizar la lógica personalizada para garantizar la estabilidad y la mantenibilidad del sistema. Si la personalización es inevitable, es fundamental bifurcar las versiones específicas initia-labs/cometbfty initia-labs/cosmos-sdkreducir los esfuerzos de integración y los posibles conflictos.

Pautas de personalización para Minitia

Minitia admite la integración de módulos Cosmos personalizados, pero es recomendable abstenerse de modificar o agregar módulos que estén directamente relacionados con el stake, como los módulos de stake, distribución y gov. En cambio, estas funcionalidades son reemplazadas por el opchildmódulo para agilizar las operaciones.

Para mantener la uniformidad en la configuración de IBC, recomendamos bifurcar repositorios como minimove/miniwasm/minievme implementar cambios allí en lugar de integrar directamente el opchildmódulo en su cadena de aplicaciones.

Agregar consultas de Cosmos incluidas en la lista blanca

MOVER

Al personalizar consultas dentro del módulo MOVE, evite incluir consultas relacionadas con saldos bancarios, ya que ya están integradas dentro del activo fungible de movimiento. Debido al estado aislado durante la ejecución, los resultados pueden diferir del estado real de Cosmos.

// in app.go

queryWhitelist := movetypes.DefaultVMQueryWhiteList(ac)
queryWhitelist.Custom["chain_id"] = func(ctx context.Context, _ []byte) ([]byte, error) {
	return []byte(sdk.UnwrapSDKContext(ctx).ChainID()), nil
}
queryWhitelist.Stargate["/slinky.oracle.v1.Query/GetPrices"] = movetypes.ProtoSet{
	Request:  &oracletypes.GetPricesRequest{},
	Response: &oracletypes.GetPricesResponse{},
}

*app.MoveKeeper = movekeeper.NewKeeper(...).WithVMQueryWhitelist(queryWhitelist)

ERA M

Para el módulo WASM, puede especificar qué consultas permitir a través del sistema:

// in app.go

// add the query list you want to add
queryAllowlist := make(map[string]proto.Message)
queryAllowlist["/slinky.oracle.v1.Query/GetAllCurrencyPairs"] = &oracletypes.GetAllCurrencyPairsResponse{}
queryAllowlist["/slinky.oracle.v1.Query/GetPrice"] = &oracletypes.GetPriceResponse{}
queryAllowlist["/slinky.oracle.v1.Query/GetPrices"] = &oracletypes.GetPricesResponse{}


// use accept list stargate querier
wasmOpts = append(wasmOpts, wasmkeeper.WithQueryPlugins(&wasmkeeper.QueryPlugins{
	Stargate: wasmkeeper.AcceptListStargateQuerier(queryAllowlist, app.GRPCQueryRouter(), appCodec),
}))


*app.WasmKeeper = wasmkeeper.NewKeeper(
	...
	wasmOpts...,
)

EVM

Habilitar consultas personalizadas desde el contrato

En el módulo EVM, es importante evitar agregar consultas relacionadas con saldos bancarios, similar a las configuraciones MOVE y WASM:

// in app.go

whitelist := evmtypes.DefaultQueryCosmosWhitelist()

// append module queries
whitelist["/custom.module.v1.Query/Info"]  = evmtypes.ProtoSet{
	Request:  &customtypes.GetInfoRequest{},
	Response: &customtypes.GetInfoResponse{},
}

app.EVMKeeper = evmkeeper.NewKeeper(
	...,
	whitelist,
)

Deshabilitar la implementación personalizada de ERC-20

Puede desactivar la compatibilidad con ERC-20 personalizada en génesis.

// $HOME/.minitia/config/genesis.json
{
  ...
  "app_state": {
    ...
    "evm": {
      ...
      "params": {
        ...
        allow_custom_erc20: false,
        // used only allow_custom_erc20 is true.
        // empty means allow all custom contracts.
        allowed_custom_erc20s: ["0xContractAddr"], 
      }
    }
  }
}

O puede modificar esto a través de MsgUpdateParams.

minitiad tx opchild execute-messages ~/add-currency.json
// add-currency.json
{
    "messages": [{
        "@type": "/minievm.evm.v1.MsgUpdateParams",
        "authority": "init1gz9n8jnu9fgqw7vem9ud67gqjk5q4m2w0aejne",
        "params": {
            "extra_eips": [],
            "allowed_publishers": [],
            "allow_custom_erc20": false,
            "allowed_custom_erc20s": [],
        }
    }]
}

Conclusión

Al personalizar los componentes centrales de la infraestructura de Initia, es fundamental cumplir con las mejores prácticas para mantener la integridad y funcionalidad del sistema. Una consideración cuidadosa de estas pautas garantiza que cualquier modificación necesaria se alinee con la estabilidad general y la eficiencia operativa del ecosistema.

Last updated