tokenmanager

package
v1.1.0-rc1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 6, 2023 License: MIT Imports: 24 Imported by: 0

README


layout: default title: x/tokenamanager

x/tokenamanager

Abstract

The tokenamanager module is responsible for storing information about all supported tokens.

Concepts

For FT and Native tokens such an information will be strongly predefined. NFT collection can contain huge amount of tokens under it, and also they can be minted in future. So we can not define all tokens in core during initialization or token add operation. That is why collections flow was created. Using tokenmanager Collection and CollectionData we can define collection global and chain information regardless of the number of tokens in collection or their metadata. Token information (Item and OnChainItem) will be set up during the first token transfer. During the first transfer oracles should fill the metadata field in MsgCreateTransferOp and provide all required token information to create Item and OnChainItem.

State

Params

Params - defines supported networks and their bridge contracts

Definition:

enum NetworkType {
  EVM = 0;
  Solana = 1;
  Near = 2;
  Other = 3;
}

enum NetworkParamType {
  BRIDGE = 0;
  FEE = 1;
  IDENTITY = 2;
}

message Network {
  // network name
  string name = 1;
  NetworkType type = 2;
  repeated NetworkParams params = 3 [(gogoproto.nullable) = false];
}

message NetworkParams {
  NetworkParamType type = 1;
  // Corresponding to type details
  google.protobuf.Any details = 2;
}

message BridgeNetworkParams {
  string contract = 1;
}

message FeeNetworkParams {
  string contract = 1;
  repeated FeeToken feeTokens = 2;
}

message IdentityNetworkParams {
  string contract = 1;
}

message FeeToken {
  // contract address hex
  string contract = 1;
  string amount = 2;
}

// Params defines the parameters for the module.
message Params {
  repeated Network networks = 1;
}

Example:

{
  "networks": [
    {
      "name": "Solana",
      "type": "Solana",
      "params": [
        {
          "type": "BRIDGE",
          "details": {
            "@type": "/rarimo.rarimocore.tokenmanager.BridgeNetworkParams",
            "contract": "0x6e632137764e7ba6b053ba055a0e63b5151d5866f846fc5c23302517d8b778a8"
          }
        },
        {
          "type": "FEE",
          "details": {
            "@type": "/rarimo.rarimocore.tokenmanager.FeeNetworkParams",
            "contract": "0x00",
            "feeTokens": [
              {
                "contract": "",
                "amount": "1"
              }
            ]
          }
        }
      ]
    }
  ]
}

Collection

Collection - the high level concept of token that is supported on Rarimo bridge.

Definition:

message CollectionMetadata {
  string name = 1;
  string symbol = 2;
  string metadataURI = 3;
}

message CollectionDataIndex {
  // Chain name
  string chain = 1;
  // Collection contract address
  string address = 2;
}

message Collection {
  string index = 1;
  CollectionMetadata meta = 2;
  repeated CollectionDataIndex data = 3;
}

Example:

{
  "index": "usdt",
  "meta": {
    "name": "Tether USD",
    "symbol": "USDT",
    "metadataURI": ""
  },
  "data": [
    {
      "chain": "Solana",
      "address": "0xc4192d3818061c9d9333b6e658422b095cc2417dfe313f7286f96108d543253d"
    },
    {
      "chain": "Near",
      "address": "0x757364742e726172696d6f2e746573746e6574"
    },
    {
      "chain": "Goerli",
      "address": "0x2f362dF82622120f7181e432446E7665f51fFb03"
    }
  ]
}

CollectionData

CollectionData - defines collection data on the certain chain. Indexed by chain|address and contains id of the collection.

Definition:

message CollectionData {
  CollectionDataIndex index = 1;
  string collection = 2;
  Type tokenType = 3;
  bool wrapped = 4;
  uint32 decimals = 5;
}

Example:

[
  {
    "index": {
      "chain": "Goerli",
      "address": "0x2f362dF82622120f7181e432446E7665f51fFb03"
    },
    "collection": "usdt",
    "tokenType": "ERC20",
    "wrapped": true,
    "decimals": 18
  },
  {
    "index": {
      "chain": "Near",
      "address": "0x757364742e726172696d6f2e746573746e6574"
    },
    "collection": "usdt",
    "tokenType": "NEAR_FT",
    "wrapped": true,
    "decimals": 18
  },
  {
    "index": {
      "chain": "Solana",
      "address": "0xc4192d3818061c9d9333b6e658422b095cc2417dfe313f7286f96108d543253d"
    },
    "collection": "usdt",
    "tokenType": "METAPLEX_FT",
    "wrapped": true,
    "decimals": 9
  }
]

Item

Item - defines one simple token across all chains. Contains all metadata required to perform transfers.

Definition:

message ItemMetadata {
  string imageUri = 1;
  // Hash of the token image. Encoded into hex string. (optional)
  string imageHash = 2;
  // Seed is used to generate PDA address for Solana
  string seed = 3;
  string uri = 4;
}

message OnChainItemIndex {
  string chain = 1;
  string address = 2;
  string tokenID = 3;
}

message Item {
  string index = 1;
  string collection = 2;
  ItemMetadata meta = 3;
  repeated OnChainItemIndex onChain = 4;
}

Example:

{
  "index": "usdt",
  "collection": "usdt",
  "meta": {
    "imageUri": "",
    "imageHash": "",
    "seed": "",
    "uri": ""
  },
  "onChain": [
    {
      "chain": "Solana",
      "address": "0xc4192d3818061c9d9333b6e658422b095cc2417dfe313f7286f96108d543253d",
      "tokenID": ""
    },
    {
      "chain": "Near",
      "address": "0x757364742e726172696d6f2e746573746e6574",
      "tokenID": ""
    },
    {
      "chain": "Goerli",
      "address": "0x2f362dF82622120f7181e432446E7665f51fFb03",
      "tokenID": ""
    }
  ]
}

OnChainItem

OnChainItem - defines one simple token on the certain chain. Indexed by chain|address|tokenId.

Definition:

message OnChainItem {
  OnChainItemIndex index = 1;
  string item = 2;
}

Example:

[
  {
    "index": {
      "chain": "Goerli",
      "address": "0x2f362dF82622120f7181e432446E7665f51fFb03",
      "tokenID": ""
    },
    "item": "usdt"
  },
  {
    "index": {
      "chain": "Near",
      "address": "0x757364742e726172696d6f2e746573746e6574",
      "tokenID": ""
    },
    "item": "usdt"
  },
  {
    "index": {
      "chain": "Solana",
      "address": "0xc4192d3818061c9d9333b6e658422b095cc2417dfe313f7286f96108d543253d",
      "tokenID": ""
    },
    "item": "usdt"
  }
]

Keepers

The tokenmanager module only exposes one keeper, which can be used to access information about supported tokens to transfer and supported network params.


Governance

SetNetworkProposal

SetNetworkProposal - creating or updating existing network params.

message SetNetworkProposal {
  string title = 1;
  string description = 2;
  NetworkParams networkParams = 3;
}

UpdateTokenItemProposal

UpdateTokenItemProposal - updating token item params (metadata)

message UpdateTokenItemProposal {
  string title = 1;
  string description = 2;

  repeated Item item = 3;
}

RemoveTokenItemProposal

RemoveTokenItemProposal - removing token item from core.

message RemoveTokenItemProposal {
  string title = 1;
  string description = 2;

  repeated string index = 3;
}

CreateCollectionProposal

CreateCollectionProposal - adding new collection. CollectionData should be provided. Items and OnChainItems can be optionally provided.

message CreateCollectionProposal {
  string title = 1;
  string description = 2;

  string index = 3;
  CollectionMetadata metadata = 4;
  // All supported networks described
  repeated CollectionData data = 5;
  repeated Item item = 6;
  repeated OnChainItem onChainItem = 7;
}

UpdateCollectionDataProposal

UpdateCollectionDataProposal - updating collection data information.

message UpdateCollectionDataProposal {
  string title = 1;
  string description = 2;

  repeated CollectionData data = 3;
}

AddCollectionDataProposal

AddCollectionDataProposal - adding collection data (which means support of new chain for collection)

message AddCollectionDataProposal {
  string title = 1;
  string description = 2;

  repeated CollectionData data = 3;
}

RemoveCollectionDataProposal

RemoveCollectionDataProposal - removing collection data (which means disabling of certain chain for collection)

message RemoveCollectionDataProposal {
  string title = 1;
  string description = 2;

  repeated CollectionDataIndex index = 3;
}

RemoveCollectionProposal

RemoveCollectionProposal - removing the hole collection

message RemoveCollectionProposal {
  string title = 1;
  string description = 2;

  string index = 3;
}

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func ExportGenesis

func ExportGenesis(ctx sdk.Context, k keeper.Keeper) *types.GenesisState

ExportGenesis returns the capability module's exported genesis.

func InitGenesis

func InitGenesis(ctx sdk.Context, k keeper.Keeper, genState types.GenesisState)

InitGenesis initializes the capability module's state from a provided genesis state.

func NewHandler

func NewHandler(k keeper.Keeper) sdk.Handler

NewHandler ...

func NewProposalHandler

func NewProposalHandler(k keeper.Keeper) govv1beta1.Handler

Types

type AppModule

type AppModule struct {
	AppModuleBasic
	// contains filtered or unexported fields
}

AppModule implements the AppModule interface for the capability module.

func NewAppModule

func NewAppModule(
	cdc codec.Codec,
	keeper keeper.Keeper,
	accountKeeper types.AccountKeeper,
	bankKeeper types.BankKeeper,
) AppModule

func (AppModule) BeginBlock

func (am AppModule) BeginBlock(_ sdk.Context, _ abci.RequestBeginBlock)

BeginBlock executes all ABCI BeginBlock logic respective to the capability module.

func (AppModule) ConsensusVersion

func (AppModule) ConsensusVersion() uint64

ConsensusVersion implements ConsensusVersion.

func (AppModule) EndBlock

EndBlock executes all ABCI EndBlock logic respective to the capability module. It returns no validator updates.

func (AppModule) ExportGenesis

func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.RawMessage

ExportGenesis returns the capability module's exported genesis state as raw JSON bytes.

func (AppModule) GenerateGenesisState

func (AppModule) GenerateGenesisState(simState *module.SimulationState)

GenerateGenesisState creates a randomized GenState of the module

func (AppModule) InitGenesis

func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, gs json.RawMessage) []abci.ValidatorUpdate

InitGenesis performs the capability module's genesis initialization It returns no validator updates.

func (AppModule) LegacyQuerierHandler

func (am AppModule) LegacyQuerierHandler(legacyQuerierCdc *codec.LegacyAmino) sdk.Querier

LegacyQuerierHandler returns the capability module's Querier.

func (AppModule) Name

func (am AppModule) Name() string

Name returns the capability module's name.

func (AppModule) ProposalContents

ProposalContents doesn't return any content functions for governance proposals

func (AppModule) QuerierRoute

func (AppModule) QuerierRoute() string

QuerierRoute returns the capability module's query routing key.

func (AppModule) RandomizedParams

func (am AppModule) RandomizedParams(_ *rand.Rand) []simtypes.ParamChange

RandomizedParams creates randomized param changes for the simulator

func (AppModule) RegisterInvariants

func (am AppModule) RegisterInvariants(_ sdk.InvariantRegistry)

RegisterInvariants registers the capability module's invariants.

func (AppModule) RegisterServices

func (am AppModule) RegisterServices(cfg module.Configurator)

RegisterServices registers a GRPC query service to respond to the module-specific GRPC queries.

func (AppModule) RegisterStoreDecoder

func (am AppModule) RegisterStoreDecoder(_ sdk.StoreDecoderRegistry)

RegisterStoreDecoder registers a decoder

func (AppModule) Route

func (am AppModule) Route() sdk.Route

Route returns the capability module's message routing key.

func (AppModule) WeightedOperations

func (am AppModule) WeightedOperations(simState module.SimulationState) []simtypes.WeightedOperation

WeightedOperations returns the all the gov module operations with their respective weights.

type AppModuleBasic

type AppModuleBasic struct {
	// contains filtered or unexported fields
}

AppModuleBasic implements the AppModuleBasic interface for the capability module.

func NewAppModuleBasic

func NewAppModuleBasic(cdc codec.BinaryCodec) AppModuleBasic

func (AppModuleBasic) DefaultGenesis

func (AppModuleBasic) DefaultGenesis(cdc codec.JSONCodec) json.RawMessage

DefaultGenesis returns the capability module's default genesis state.

func (AppModuleBasic) GetQueryCmd

func (AppModuleBasic) GetQueryCmd() *cobra.Command

GetQueryCmd returns the capability module's root query command.

func (AppModuleBasic) GetTxCmd

func (a AppModuleBasic) GetTxCmd() *cobra.Command

GetTxCmd returns the capability module's root tx command.

func (AppModuleBasic) Name

func (AppModuleBasic) Name() string

Name returns the capability module's name.

func (AppModuleBasic) RegisterCodec

func (AppModuleBasic) RegisterCodec(cdc *codec.LegacyAmino)

func (AppModuleBasic) RegisterGRPCGatewayRoutes

func (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux)

RegisterGRPCGatewayRoutes registers the gRPC Gateway routes for the module.

func (AppModuleBasic) RegisterInterfaces

func (a AppModuleBasic) RegisterInterfaces(reg cdctypes.InterfaceRegistry)

RegisterInterfaces registers the module's interface types

func (AppModuleBasic) RegisterLegacyAminoCodec

func (AppModuleBasic) RegisterLegacyAminoCodec(cdc *codec.LegacyAmino)

func (AppModuleBasic) RegisterRESTRoutes

func (AppModuleBasic) RegisterRESTRoutes(clientCtx client.Context, rtr *mux.Router)

RegisterRESTRoutes registers the capability module's REST service handlers.

func (AppModuleBasic) ValidateGenesis

func (AppModuleBasic) ValidateGenesis(cdc codec.JSONCodec, config client.TxEncodingConfig, bz json.RawMessage) error

ValidateGenesis performs genesis state validation for the capability module.

Directories

Path Synopsis
client
cli
Package types is a reverse proxy.
Package types is a reverse proxy.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL