Este é um artigo da documentação da Ledger.com traduzido por Fernando T. Barros. O original em inglês pode ser encontrado aqui.
O pacote @ledgerhq/cryptoassets contém todas as definições de criptoativos que podem ser úteis para o Ledger Live.
O Ledger Live lida com diferentes tipos de moedas e ativos: moedas fiduciárias, criptomoedas e tokens. Todos eles compartilham conceitos semelhantes, mas têm especificidades, que são definidas como um modelo de moeda.
Todos os tipos podem ser encontrados em @ledgerhq/cryptoassets/src/types.ts
O modelo Currency (Moeda)
Essencialmente, todas as moedas compartilham esse campo comum:
-
name: string
: o nome de exibição de uma moeda. Por exemplo"Bitcoin"
ou"Euro"
. -
ticker: string
: utilizado para o nome do ticker nas corretoras e para taxas (por exemplo, BTC ou EUR). -
countervalueTicker?: string
: um apelido para o ticker (ou ticker alternativo) -
units: Unit[]
: todas unidades disponíveis da moeda (veja abaixo o que é uma Unidade). por convenção, [0] é o padrão e tem a magnitude "mais alta". -
disableCountervalue?: boolean
: se disponível, este campo expressa que devemos assumir que não há valor de contador válido para esta moeda. (porque ou não podemos trocá-la ou não está disponível o suficiente para assumir a ativação de seu valor) -
symbol?: string
: se disponível, é um símbolo curto para a moeda. Na prática, atualmente não é usado e pode ser descartado.
Unidade
type Unit = {
// nome de exibição de uma unidade (exemplo: satoshi)
name: string,
// palavra para usar quando formatar a unidade. como 'BTC' ou 'USD'
code: string,
// número de dígitos após o '.' no contexto desta unidade.
magnitude: number,
// deve imprimir todos os dígitos mesmo quando são 0 (geralmente: verdadeiro para fiduciárias, falso para criptos)
showAllDigits?: boolean
};
Uma unidade descreve uma determinada representação de uma moeda para humanos. Uma moeda pode ter muitas unidades, por exemplo, podemos supor que o Euro tenha euros e centavos. Podemos definir Bitcoin como tendo: bitcoin, mBTC, bit, satoshi (mas isso depende de nós).
Existem, no entanto, duas propriedades essenciais que devemos respeitar:
- a primeira unidade (
[0]
) em um vetor de unidades é a unidade mais alta, normalmente a unidade padrão e comumente usada (euro, bitcoin) - a última unidade deve ter uma magnitude de 0: é a menor unidade que determina a magnitude da moeda (a unidade mais atômica representável nesta moeda) e impulsiona a representação de inteiros.
Aqui está um exemplo de unidades do Bitcoin:
[
{
name: "bitcoin",
code: "BTC",
magnitude: 8
},
{
name: "mBTC",
code: "mBTC",
magnitude: 5
},
{
name: "bit",
code: "bit",
magnitude: 2
},
{
name: "satoshi",
code: "sat",
magnitude: 0
}
];
O campo showAllDigits
é geralmente não definido para todas as criptomoedas e definido para moedas fiduciárias como verdadeiro (mas há exceções). Ele força uma unidade a exibir todos os dígitos, mesmo que sejam todos zeros.
Nós não queremos ‘showAllDigits’ para moedas porque elas geralmente têm muitas magnitudes, por exemplo, Ethereum tem 18 que virariam ETH 42.100000000000000000
. Em vez disso, queremos ETH 42.1
.
Pelo contrário, é comumente desejado que, para moedas fiduciárias populares como o EUR, sempre exibamos EUR 42.10
e nunca EUR 42.1
.
Na biblioteca ‘live-common’, nosso formatador é implementado pelo formatCurrencyUnit
que recebe um valor BigNumber e uma Unit (e muitas outras opções disponíveis).
Campos específicos da CryptoCurrency
O nível CryptoCurrency introduz muitos campos que são exclusivamente específicos para moedas criptográficas.
type CryptoCurrency = CurrencyCommon & {
type: "CryptoCurrency",
// id único interno de uma criptomoeda
id: string,
// define se a cripto é uma bifurcação de outra moeda. ajuda tratar divisão/junção
forkedFrom?: string,
// nome do app que mostra no Manager
managerAppName: string,
// tipo da moeda de acordo com o slip44. ISSO NÃO GARANTE UNICIDADE entre as moedas (ex: testnest,...)
coinType: number,
// o nome do esquema usado para formatar um URI (sem os ':')
scheme: string,
// usado para IU (Interface do Usuário)
color: string,
// um nome para implementação (algumas moedas compartilham uma implementação em comum como bitcoin ou ethereum) - corresponde ao nome do diretório 'family' da biblioteca 'live-commom'
family: string,
// o tempo esperado de um bloco
blockAvgTime?: number, // em segundos
supportsSegwit?: boolean,
supportsNativeSegwit?: boolean,
// se definido, essa moeda é uma testnet pra outra cripto (id);
isTestnetFor?: string,
// deve ser definido para a família bitcoin
bitcoinLikeInfo?: {
P2PKH: number,
P2SH: number
},
// deve ser definido para a família ethereum
ethereumLikeInfo?: {
chainId: number
},
explorerViews: ExplorerView[],
terminated?: {
link: string
}
};
• Dica: CoinType é geralmente encontrado em github.com/satoshilabs/slips/blob/master/slip-0044.md , embora a unicidade não seja garantida em todas as redes (testnets, etc...).
ExplorerView (Visualização do Explorador)
Você pode definir um ou vários exploradores com urls, que serão usados para links externos no Ledger Live.
type ExplorerView = {
// url para transações com parâmetro $hash
tx?: string,
// url para endereços com parâmetro $address
address?: string,
// url para um token com parâmetros $contractAddress e $address
token?: string
};
• Dica: Encontre um explorador confiável. Se você encontrar mais de um explorador, liste-os do mais para o menos popular. O Ledger Live provavelmente usará o primeiro explorador como padrão.
Campos específicos do TokenCurrency
Os tokens também estão disponíveis através do pacote cryptoassets. Regularmente, os tokens ERC20, TRC10 e TRC20 são mantidos automaticamente. Mas se a sua blockchain suporta tokens e você gostaria de adicioná-los, sinta-se à vontade para entrar em contato conosco.
type TokenCurrency = CurrencyCommon & {
type: "TokenCurrency",
id: string,
ledgerSignature?: string,
contractAddress: string,
// a moeda que ele pertence. ex. 'ethereum'
parentCurrency: CryptoCurrency,
// o tipo de token na blockchain que ele pertence. ex. 'erc20'
tokenType: string
};
Adicionando MyCoin
Certifique-se de que antes de integrar sua moeda ao Ledger Live, sua moeda esteja bem definida em @ledgerhq/cryptoassets/src/currencies.js
mycoin: {
type: "CryptoCurrency",
id: "mycoin",
coinType: 8008, // O tipo slip-0044 da moeda, se registrado
name: "MyCoin",
managerAppName: "MyCoin", // nome do nano aplicativo no manager, case-sensitive
ticker: "MYC",
countervalueTicker: "MYC", // dependendo dao api countervaluevalor do contador api
scheme: "mycoin",
color: "#E6007A", // cor a ser exibida na área de trabalho ativaao vivo e no celular
family: "mycoin", // nome da pasta no live-common/desktop e mobile
units: [
{
name: "MYC",
code: "MYC",
magnitude: 8,
},
{
name: "SmallestUnit",
code: "SMALLESTUNIT",
magnitude: 0,
},
],
explorerViews: [
{
address: "https://mycoinexplorer.com/account/$address", // url para explorar um endereço
tx: "https://mycoinexplorer.com/transaction/$hash", // url para explorar uma transação
token: "https://mycoinexplorer.com/token/$contractAddress/?a=$address", // url para explorar um endereço de token
},
],
},
Top comments (0)