Pular para o conteúdo

Fraco e Forte

Partes Interessadas Transacionais (TSH, do inglês Transactional Stake Holders) são partes que de alguma forma têm interesse ou são afetadas por uma transação. Seu interesse particular pode ser fraco ou forte. O grau de conexão com a transação determina se a parte tem o direito de ter seus Hooks executados e quem deve pagar por essa execução.

Por exemplo:

  • Em uma transação de Pagamento XAH direta convencional, os dois TSH são a conta de origem e a conta de destino.
  • Em uma transação SetSignerList, os TSH são a conta de origem e cada conta cujo endereço aparece na lista de signatários, onde tais contas estão ativas no ledger.
  • Em uma transação OfferCreate, as ofertas de outras contas que são cruzadas pela transação de origem são todas TSH fracas e podem optar pela execução fraca.
  • Com a emenda IOUIssuerWeakTSH, os emissores de moeda têm seus hooks executados em transações de terceiros que tocam ou mencionam sua moeda, se optaram pela execução fraca.

Devido à natureza heterogênea das transações no Xahau, os TSH vêm em todas as formas e tamanhos e podem ser exóticos e não intuitivos. Isso se torna mais verdadeiro à medida que o tempo passa e mais tipos de transação são adicionados ao Ledger.

Cada TSH tem uma conexão fraca ou forte com a transação.

Uma conexão Forte significa:

  1. A transação de origem deve pagar a taxa pela execução da Cadeia de Hooks do TSH
  2. O TSH tem o direito de reverter toda a transação chamando rollback() de seu Hook durante a execução.

Uma conexão Fraca significa:

  1. A transação de origem não paga pela execução da Cadeia de Hooks do TSH.
  2. O TSH paga pela execução de sua própria Cadeia de Hooks através de um recurso chamado Chamada Coletiva de Hooks.
  3. O TSH deve ter definido um flag de conta asfTshCollect antes da execução da transação de origem.
  4. O TSH não tem o direito de reverter toda a transação chamando rollback() de seu Hook durante a execução (mas ainda pode modificar seu próprio estado de Hook e emitir transações).

Os TSH Fortes têm seus hooks executados antes de a transação de origem ser aplicada ao ledger. Isso significa que têm a capacidade de reverter a transação (porque ainda não foi aplicada). Isso dá aos hooks fortemente executados a capacidade de bloquear completamente uma transação de ocorrer.

Os TSH Fracos têm seus hooks executados após a transação de origem ter sido aplicada ao ledger. Isso significa que têm acesso aos metadados da transação, mas não podem impedir que a transação ocorra.

O parâmetro uint32_t em hook(uint32_t) e cbak(uint32_t) carrega informações importantes de contexto da Emenda de Hooks para seu Hook.

Durante a execução de hook:

  • 0 significa que o Hook está sendo executado fortemente
  • 1 significa que o Hook está sendo executado fracamente
  • 2 significa que o Hook está sendo executado fracamente após ter sido executado fortemente devido a uma chamada hook_again.

Durante a execução de cbak:

  • 0 significa que o Hook está sendo chamado de volta após uma transação que emitiu ter sido aceita com sucesso em um ledger.
  • 1 significa que o Hook está sendo chamado de volta após uma transação que emitiu ter sido marcada como nunca podendo ser aplicada a qualquer ledger (EmitFailure).

Se um Tipo de Transação não aparece na tabela, então ele não tem TSHes além de sua conta de origem.

Tipo de TransaçãoTipo TSHQuem é o TSH
AccountDeleteForteConta de destino para a qual os fundos são pagos após a exclusão
AccountSetNenhumN/A
CheckCancelFracoConta de destino
CheckCashNenhumN/A
CheckCreateForteConta de destino
ClaimRewardForteConta Emissora
DepositPreauthForteConta autorizada
EscrowCancelFracoConta de destino
EscrowCreateForteConta de destino
EscrowFinishForteConta de destino
GenesisMintFracoCada Destino no Array GenesisMints
ImportForteConta Emissora
InvokeForteConta de destino
OfferCancelNenhumN/A
OfferCreateFracoContas cujas ofertas foram cruzadas por esta ação.
PaymentForte + FracoForte: Conta de destino. Fraco: Qualquer não-emissor pelo qual o pagamento é roteado.
PaymentChannelClaimFracoConta de destino
PaymentChannelCreateForteConta de destino
PaymentChannelFundFracoConta de destino
SetHookNenhumN/A
SetRegularKeyForteA conta cujo endereço está sendo definido como a chave.
SignerListSetForteContas cujos endereços são definidos como chaves de assinatura (se existirem e tiverem Hooks instalados).
TicketCreateNenhumN/A
TrustSetFracoConta emissora
URITokenCancelSellOfferNenhumN/A
URITokenCreateSellOfferForteConta de destino, Emissor se o Flag tfBurnable estiver definido
URITokenBurnForteEmissor se o Flag tfBurnable estiver definido
URITokenBuyForteConta do proprietário, Emissor se o Flag tfBurnable estiver definido
URITokenMintNenhumN/A

AccountSet

OTXNTSHAccountSet
AccountAccountForte

AccountDelete

OTXNTSHAccountDelete
AccountAccountNenhum
AccountBeneficiaryForte

Check

OTXNTSHCheckCancelCheckCreateCheckCash
AccountAccountForteForteNenhum
AccountDestinationFracoForteNenhum
DestinationDestinationForteNenhumForte
DestinationAccountFracoNenhumFraco

ClaimReward

OTXNTSHClaimReward
AccountAccountForte
AccountIssuerForte

DepositPreauth

OTXNTSHDepositPreauth
AccountAccountForte
AccountAuthorizedForte

Escrow

OTXNTSHEscrowCancelEscrowCreateEscrowFinish
AccountAccountForteForteForte
AccountDestinationFracoForteFraco
DestinationDestinationForteNenhumForte
DestinationAccountFracoNenhumFraco

GenesisMint

OTXNTSHGenesisMint
AccountAccountForte
AccountDestinationForte
AccountBeneficiaryFraco

Import

OTXNTSHImport
AccountAccountForte
AccountIssuerForte

Invoke

OTXNTSHInvoke
AccountAccountForte
AccountDestinationFraco

Offer

OTXNTSHOfferCancelOfferCreate
AccountAccountForteForte
AccountCrossedNenhumFraco

Payment

OTXNTSHPayment
AccountAccountForte
AccountDestinationForte
AccountCrossedFraco

PaymentChannel

OTXNTSHPaymentChannelClaimPaymentChannelCreatePaymentChannelFund
AccountAccountForteForteForte
AccountDestinationFracoForteFraco
DestinationDestinationForteNenhumNenhum
DestinationAccountFracoNenhumNenhum

SetHook

OTXNTSHSetHook
AccountAccountForte

SetRegularKey

OTXNTSHSetRegularKey
AccountAccountForte
AccountRegularKeyForte

SignerListSet

OTXNTSHSignerListSet
AccountAccountForte
AccountSignerForte

Ticket

OTXNTSHTicketCreate
AccountAccountForte

TrustSet

OTXNTSHTrustSet
AccountAccountForte
AccountIssuerFraco

URIToken

OTXNBurnableTSHMintBurnBuySellCancel
OwnerFalseOwnerNenhumForteForteForteForte
OwnerFalseIssuerNenhumFracoFracoFracoNenhum
OwnerFalseBuyerNenhumNenhumNenhumForteFraco
OwnerTrueBuyerNenhumNenhumNenhumForteFraco
OwnerTrueOwnerNenhumForteForteForteForte
OwnerTrueIssuerNenhumFracoForteForteNenhum
IssuerFalseOwnerNenhumNenhumNenhumNenhumNenhum
IssuerFalseIssuerForteNenhumNenhumNenhumNenhum
IssuerFalseBuyerFracoNenhumNenhumNenhumNenhum
IssuerTrueOwnerNenhumFracoNenhumNenhumNenhum
IssuerTrueIssuerForteForteNenhumNenhumNenhum
IssuerTrueBuyerFracoNenhumNenhumNenhumNenhum
BuyerTrueBuyerNenhumNenhumForteNenhumNenhum
BuyerTrueOwnerNenhumNenhumFracoNenhumNenhum