Pular para o conteúdo

Ripple State

[Fonte]

O tipo de objeto RippleState conecta duas contas em uma única moeda. Conceitualmente, um objeto RippleState representa duas linhas de confiança entre as contas, uma de cada lado. Cada conta pode alterar as configurações do seu lado do objeto RippleState, mas o saldo é um único valor compartilhado. Uma linha de confiança que está inteiramente em seu estado padrão é considerada igual a uma linha de confiança que não existe, portanto o rippled exclui objetos RippleState quando suas propriedades são inteiramente padrão.

Só pode haver um objeto RippleState por moeda para qualquer par de contas. Como nenhuma conta tem privilégios no Xahau, um objeto RippleState ordena os endereços de conta numericamente, para garantir uma forma canônica. O endereço que for numericamente menor quando decodificado é considerado a “conta baixa” e o outro é a “conta alta”. O saldo líquido da linha de confiança é armazenado da perspectiva da conta baixa.

O “emissor” do saldo em uma linha de confiança depende de o saldo ser positivo ou negativo. Se um objeto RippleState mostrar um saldo positivo, a conta alta é o emissor. Se o saldo for negativo, a conta baixa é o emissor. Frequentemente, o emissor tem seu limite definido como 0 e a outra conta tem um limite positivo, mas isso não é confiável porque os limites podem mudar sem afetar um saldo existente.

{
"Balance": {
"currency": "USD",
"issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji",
"value": "-10"
},
"Flags": 393216,
"HighLimit": {
"currency": "USD",
"issuer": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
"value": "110"
},
"HighNode": "0000000000000000",
"LedgerEntryType": "RippleState",
"LowLimit": {
"currency": "USD",
"issuer": "rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW",
"value": "0"
},
"LowNode": "0000000000000000",
"PreviousTxnID": "E3FE6EA3D48F0C2B639448020EA4F03D4F4F8FFDB243A852A0F59177921B4879",
"PreviousTxnLgrSeq": 14090896,
"LockCount": 1,
"LockedBalance": {
"currency": "USD",
"issuer": "rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW",
"value": "10"
}
"index": "9CA88CDEDFF9252B3DE183CE35B038F57282BC9503CDFA1923EF9A95DF0D6F7B"
}

Um objeto RippleState tem os seguintes campos:

NomeTipo JSONTipo InternoObrigatório?Descrição
BalanceObjectAmountSimO saldo da linha de confiança, da perspectiva da conta baixa. Um saldo negativo indica que a conta alta possui tokens emitidos pela conta baixa. O emissor aqui é sempre definido como o valor neutro ACCOUNT_ONE.
FlagsNumberUInt32SimUm mapa de bits de opções booleanas habilitadas para este objeto.
HighLimitObjectAmountSimO limite que a conta alta definiu na linha de confiança. O issuer é o endereço da conta alta que definiu este limite.
HighNodeStringUInt64Sim(Omitido em alguns ledgers históricos) Uma dica indicando qual página do diretório do proprietário da conta alta aponta para este objeto, caso o diretório consista em múltiplas páginas.
HighQualityInNumberUInt32NãoA qualidade de entrada definida pela conta alta, como um inteiro na razão implícita HighQualityIn:1.000.000.000. Como caso especial, o valor 0 equivale a 1 bilhão, ou valor nominal.
HighQualityOutNumberUInt32NãoA qualidade de saída definida pela conta alta, como um inteiro na razão implícita HighQualityOut:1.000.000.000. Como caso especial, o valor 0 equivale a 1 bilhão, ou valor nominal.
LedgerEntryTypeStringUInt16SimO valor 0x0072, mapeado para a string RippleState, indica que este objeto é um objeto RippleState.
LowLimitObjectAmountSimO limite que a conta baixa definiu na linha de confiança. O issuer é o endereço da conta baixa que definiu este limite.
LowNodeStringUInt64Sim(Omitido em alguns ledgers históricos) Uma dica indicando qual página do diretório do proprietário da conta baixa aponta para este objeto, caso o diretório consista em múltiplas páginas.
LowQualityInNumberUInt32NãoA qualidade de entrada definida pela conta baixa, como um inteiro na razão implícita LowQualityIn:1.000.000.000. Como caso especial, o valor 0 equivale a 1 bilhão, ou valor nominal.
LowQualityOutNumberUInt32NãoA qualidade de saída definida pela conta baixa, como um inteiro na razão implícita LowQualityOut:1.000.000.000. Como caso especial, o valor 0 equivale a 1 bilhão, ou valor nominal.
PreviousTxnIDStringHash256SimO hash identificador da transação que mais recentemente modificou este objeto.
PreviousTxnLgrSeqNumberUInt32SimO [índice do ledger][Índice de Ledger] que contém a transação que mais recentemente modificou este objeto.
LockCountNumberUInt32NãoO número total de saldos bloqueados em um objeto de ledger RippleState.
LockedBalanceObjectAmountNãoO valor atual de tokens bloqueados para uma linha de confiança específica.

Existem várias opções que podem ser habilitadas ou desabilitadas para uma linha de confiança. Essas opções podem ser alteradas com uma [transação TrustSet][]. No ledger, os flags são representados como valores binários que podem ser combinados com operações bitwise-or. Os valores de bits para os flags no ledger são diferentes dos valores usados para habilitar ou desabilitar esses flags em uma transação. Os flags de ledger têm nomes que começam com lsf.

Objetos RippleState podem ter os seguintes valores de flag:

Nome do FlagValor HexValor DecimalFlag TrustSet CorrespondenteDescrição
lsfLowReserve0x0001000065536(Nenhum)Este objeto RippleState contribui para a reserva do proprietário da conta baixa.
lsfHighReserve0x00020000131072(Nenhum)Este objeto RippleState contribui para a reserva do proprietário da conta alta.
lsfLowAuth0x00040000262144tfSetAuthA conta baixa autorizou a conta alta a deter tokens emitidos pela conta baixa.
lsfHighAuth0x00080000524288tfSetAuthA conta alta autorizou a conta baixa a deter tokens emitidos pela conta alta.
lsfLowNoRipple0x001000001048576tfSetNoRippleA conta baixa desabilitou o rippling a partir desta linha de confiança.
lsfHighNoRipple0x002000002097152tfSetNoRippleA conta alta desabilitou o rippling a partir desta linha de confiança.
lsfLowFreeze0x004000004194304tfSetFreezeA conta baixa congelou a linha de confiança, impedindo a conta alta de transferir o ativo.
lsfHighFreeze0x008000008388608tfSetFreezeA conta alta congelou a linha de confiança, impedindo a conta baixa de transferir o ativo.
lsfLowDeepFreeze0x0200000033554432tfSetDeepFreezeA conta baixa aplicou deep-freeze na linha de confiança, impedindo a conta alta de enviar e receber o ativo. (Requer a [emenda DeepFreeze][])
lsfHighDeepFreeze0x0400000067108864tfSetDeepFreezeA conta alta aplicou deep-freeze na linha de confiança, impedindo a conta baixa de enviar e receber o ativo. (Requer a [emenda DeepFreeze][])

Se uma conta modificar uma linha de confiança para colocá-la em um estado não padrão, essa linha de confiança conta para a reserva do proprietário da conta. Em um objeto RippleState, os flags lsfLowReserve e lsfHighReserve indicam quais conta(s) são responsáveis pela reserva do proprietário. O servidor rippled define automaticamente esses flags quando modifica uma linha de confiança.

Os valores que contam para o estado não padrão de uma linha de confiança são os seguintes:

A conta alta é responsável se…A conta baixa é responsável se…
Balance é negativo (a conta alta detém moeda)Balance é positivo (a conta baixa detém moeda)
HighLimit não é 0LowLimit não é 0
LowQualityIn não é 0 e não é 1000000000HighQualityIn não é 0 e não é 1000000000
LowQualityOut não é 0 e não é 1000000000HighQualityOut não é 0 e não é 1000000000
O flag lsfHighNoRipple não está em seu estado padrãoO flag lsfLowNoRipple não está em seu estado padrão
O flag lsfHighFreeze está habilitadoO flag lsfLowFreeze está habilitado

Os flags lsfLowAuth e lsfHighAuth não contam contra o estado padrão, pois não podem ser desabilitados.

O estado padrão dos dois flags No Ripple depende do estado do flag lsfDefaultRipple nos objetos AccountRoot correspondentes. Se o Default Ripple estiver desabilitado (o padrão), o estado padrão do flag lsfNoRipple é habilitado para todas as linhas de confiança de uma conta. Se uma conta habilitar o Default Ripple, o flag lsfNoRipple é desabilitado (rippling habilitado) para as linhas de confiança da conta por padrão.

Nota: Antes da introdução do flag Default Ripple na versão 0.27.3 do rippled (10 de março de 2015), o estado padrão para todas as linhas de confiança era com ambos os flags No Ripple desabilitados (rippling habilitado).

Felizmente, o rippled usa avaliação lazy para calcular a reserva do proprietário. Isso significa que mesmo que uma conta altere o estado padrão de todas as suas linhas de confiança alterando o flag Default Ripple, a reserva dessa conta permanece a mesma inicialmente. Se uma conta modificar uma linha de confiança, o rippled reavalia se essa linha de confiança individual está em seu estado padrão e se deve contribuir para a reserva do proprietário.

O ID de um objeto RippleState é o SHA-512Half dos seguintes valores, concatenados em ordem:

  • A chave de espaço RippleState (0x0072)
  • O AccountID da conta baixa
  • O AccountID da conta alta
  • O código de moeda de 160 bits da(s) linha(s) de confiança