paint-brush
Transações orientadas a ativos da Radix: tornando as transações significativasby@RadixDLT
9,804
9,804

Transações orientadas a ativos da Radix: tornando as transações significativas

Radix Publishing12m2023/06/28
Read on Terminal Reader

A arquitetura de contrato inteligente da Radix oferece tudo na plataforma para tudo. As transações Radix contêm um “manifesto” de instruções orientadas a ativos que tornam as transações compreensíveis, combináveis e incrivelmente poderosas. O design das transações da Radix partiu desses primeiros princípios de expectativa e controle intuitivos do usuário.
featured image - Transações orientadas a ativos da Radix: tornando as transações significativas
Radix Publishing HackerNoon profile picture


No artigo anterior , falamos sobre como o conceito de transações blockchain de hoje torna impossível resolver vários problemas sérios que os usuários e desenvolvedores DeFi encontram - problemas que bloqueiam o potencial mainstream de DeFi e Web3.


O design da maioria das plataformas L-1 de contratos inteligentes limita as transações a serem simplesmente uma mensagem enviada para um contrato inteligente de caixa preta, e essa limitação significa que as transações simplesmente não podem ser flexíveis, poderosas ou transparentes o suficiente .


A única maneira de realmente corrigir o problema é redefinir o que significa uma transação em um blockchain, e é exatamente isso que a Radix fez. Transações Radix (na rede Babylon que inclui Capacidade exclusiva de contrato inteligente da Radix ) contêm um “manifesto” de instruções orientadas a ativos que tornam as transações compreensíveis, combináveis e incrivelmente poderosas.


Vamos falar sobre o que é uma transação Radix e algumas das coisas incríveis que elas tornam possíveis para usuários e desenvolvedores.

Redefinindo uma “Transação”

Esquecendo a tecnologia por um momento, o que uma transação deveria ser idealmente?


O que ele deve conter para ser flexível o suficiente para fazer tudo o que torna o Web3 e o DeFi empolgantes e também compreensíveis e seguros para os usuários?


Como ponto de partida, vejamos uma transação do mundo real que faz algo útil e já é bastante compreensível para qualquer pessoa. Veja o exemplo de usar a versão do mundo real de um DEX: um quiosque de câmbio.


Imagine que eu sou o cliente, caminhando até um balcão de câmbio no aeroporto para trocar moedas. Eu poderia descrever a transação desta maneira:


  • Tiro 20 dólares da carteira e coloco no balcão.

  • Eu informo ao caixa da bolsa que gostaria de trocar esses 20 USD por GBP .

  • O caixa pega meus dólares , digita em seu computador por um momento e coloca 16,08 libras esterlinas no balcão.

  • Estou satisfeito com a taxa de câmbio que recebi, pego o GBP e coloco na minha carteira.


Nesse cenário típico do mundo real, embora eu não esteja no controle de como a bolsa faz negócios internamente, estou totalmente no controle do que é importante para mim: tirar ativos da minha carteira, dar ativos à bolsa com instruções para o que eu quero, aceitando (ou rejeitando) o que eles me devolvem e colocando os ativos de volta na minha carteira.


Esse conhecimento e controle do que é importante para mim são uma expectativa natural e óbvia sempre que estou interagindo com alguém e meus bens estão envolvidos. Eu controlo quais ativos saem da minha carteira, especifico para quem entrego e o que quero, e posso ver o que volta para mim e aprovo. Isso é fundamentalmente o que a palavra “transação” significa para mim no mundo real. Não seria bom se as transações blockchain funcionassem assim?


Em Radix, eles fazem. O design das transações da Radix partiu desses primeiros princípios de expectativa e controle intuitivos do usuário e transações modeladas na rede Radix da mesma maneira.

Tornar as transações significativas

A coisa mais importante para mim sobre a transação do mundo real acima é que ela é uma descrição direta dos movimentos de ativos entre minha carteira e a bolsa. Para fazer as transações do Radix funcionarem assim, o design da plataforma deve começar com ativos. E, felizmente, uma das características definidoras do design da plataforma Radix (do Máquina virtual do Radix Engine para o Linguagem de contrato inteligente de criptografia ) é que a rede tem uma compreensão nativa dos ativos e do comportamento dos ativos .


Essa arquitetura “orientada para ativos” oferece a tudo na plataforma um comportamento intuitivo quando se trata de propriedade digital. Tokens e NFTs não são saldos em contratos inteligentes; eles agem como objetos físicos que se movem de um lugar para outro. As contas de usuário não são apenas pares de chaves; são contêineres de ativos onde o usuário tem o poder de sacar ou gerenciar as regras sobre quais tipos de depósitos aceitará. Os contratos inteligentes não se limitam a aceitar mensagens; eles podem aceitar “baldes” de ativos como insumos – como empurrar dinheiro no balcão da bolsa.


Esses recursos de plataforma fornecem as ferramentas necessárias para reformular a definição de transações no Radix para que funcionem de forma intuitiva e previsível, semelhantes às transações do mundo real.


As transações da Radix são um “manifesto” de instruções que descrevem diretamente as movimentações de ativos entre contas e componentes (a forma de contrato inteligente da Radix).


Aqui está um manifesto de transação real (sem endereços, para maior clareza) descrevendo uma negociação como nosso exemplo de troca do mundo real:



Observe que você não está olhando para um resumo - na verdade , é assim que o conteúdo de uma transação real do Radix se parece! Semelhante a como um usuário descreveria uma transação no mundo real, o manifesto descreve a transação em termos dos movimentos de ativos que são importantes para o usuário.


Aqui está o que está acontecendo nas 4 instruções deste manifesto:


  1. Eu digo a uma das minhas contas para sacar tokens de 20 USD. (Espero que os tokens de 20 USD sejam devolvidos a algo chamado “banco de trabalho da transação”, que você pode imaginar como o balcão de câmbio. É apenas um local temporário para os ativos ficarem quando estão sendo movidos durante uma transação.)
  2. Eu varro aqueles 20 dólares da bancada e os coloco em um “balde”. (Baldes são apenas contêineres de ativos que posso passar para outras coisas.)
  3. Eu passo diretamente o balde de USD para o método de “negociação” do componente de câmbio. (Espero que a bolsa descubra a taxa de câmbio e devolva alguns tokens GBP à bancada.)
  4. Eu coloco o conteúdo da bancada de volta na minha carteira.


Eu assino esta transação – que é como minha conta sabe que tenho permissão para sacar os tokens de 20 USD – e a envio para a rede.


Como no cenário do mundo real, embora eu não tenha controle do funcionamento interno da bolsa, tenho controle direto sobre o que é importante para mim: os tokens entrando e saindo de minhas contas e com o que desejo interagir.


Isso já é uma grande melhoria em relação a uma transação que está apenas enviando uma mensagem para um contrato inteligente. Mas falta algo…

Colocando o usuário no controle

No exemplo do mundo real, certifiquei-me de receber 16,08 libras esterlinas (talvez com base na taxa de câmbio atual e nas taxas esperadas) pelos meus 20 dólares antes de aceitar a transação. Eu não deveria esperar ser capaz de fazer o mesmo com uma transação Radix antes de assiná-la e enviá-la?


Na verdade, eu (com a ajuda do meu software de carteira) posso fazer a mesma coisa adicionando uma instrução ao manifesto da transação. É a penúltima instrução “ASSERT_WORKTOP_CONTAINS_BY_AMOUNT” aqui:



A instrução no manifesto está “afirmando” que a bancada contém pelo menos 16,08 fichas de GBP antes de eu fazer o depósito de volta em minha conta. Isso significa que, quando essa transação for processada pela rede, se essa afirmação não for verdadeira (digamos, se a troca retornou apenas 15 GBP ou se retornou o tipo de token totalmente errado), a transação será rejeitada pela rede . A coisa toda não vai acontecer porque não consegui o que esperava.


Isso funciona porque os manifestos de transação são atômicos . Essa é apenas uma maneira elegante de dizer que tudo no manifesto da transação deve ser executado com êxito sem problemas ou nada disso acontecerá.


Isso é incrivelmente poderoso. Como na troca do mundo real, não preciso me preocupar com a lógica interna da troca. Obtenho proteção contra coisas como derrapagem ou antecipação de um resultado que não queria de uma forma totalmente sob meu controle, sem depender da lógica do contrato inteligente.


A Radix Wallet pode adicionar diretamente minhas expectativas como usuário ao manifesto da transação para mim, e a rede garantirá que todas essas expectativas sejam respeitadas - ou então meus fundos nunca sairão do meu bolso.

Corrigindo a experiência do usuário da transação

Ter transações estruturadas dessa maneira também é exatamente o que é necessário para permitir que a Carteira Radix forneça aos usuários o tipo de UX que as transações de ativos Web3 precisam para estarem prontas para o mainstream.


Para ver o que isso significa, veja como nossa transação de troca seria apresentada ao usuário na Carteira Radix:



Esta visualização não foi criada pelo dApp de troca. Esta é a própria Carteira Radix resumindo com segurança o que importa para mim, lendo diretamente o conteúdo da própria transação . E se você olhar novamente para o manifesto da transação acima, provavelmente poderá ver como o Radix Wallet é capaz de traduzi-lo automaticamente na interface do usuário de resumo para o usuário:


  • RETIRADA: As retiradas de contas são mostradas diretamente e a carteira pode ver quais contas pertencem ao usuário da carteira.
  • Usando dApps: Outros componentes que estão envolvidos na transação são listados como dApps compreensíveis pelo usuário. (Para saber como a Radix Wallet faz isso, dê uma olhada no Radix's Sistema de definição dApp que permite que um desenvolvedor associe componentes com uma descrição clara de seu dApp.)
  • DEPOSITANDO: Os depósitos nas contas do usuário também são mostrados diretamente. Qualquer depósito que não tenha uma quantidade especificada no manifesto da transação é “estimado” por meio de uma execução prévia da transação e uma “garantia” (a instrução “declarar” que descrevemos anteriormente) é adicionada automaticamente de acordo com as preferências do usuário.
  • TAXA DE TRANSAÇÃO: E, claro, a carteira mostra a taxa de transação exigida (mais sobre isso abaixo).


O resultado é um resumo da transação que é significativo e relevante para o usuário, com garantia de precisão e totalmente confiável . O usuário sabe exatamente o que acontecerá com suas contas e ativos se assinar – como seria de esperar. Quando todas as partes da pilha são projetadas para funcionar juntas para permitir um produto compatível com o mainstream, você não precisa desistir de um bom UX para se tornar descentralizado.

Autenticação clara e flexível

Vamos falar sobre outra ferramenta na caixa de ferramentas de transação do Radix.


A máquina virtual Radix Engine inclui um poderoso sistema de autenticação integrado para componentes que usam “crachás”. Assim como um cartão de membro em sua carteira, os crachás são ativos que você possui e que pode “apresentar” como prova em uma transação. Os componentes podem verificar se você apresentou uma determinada prova como pré-requisito para fazer algo.


Apresentar um comprovante de crachá é apenas mais uma instrução no manifesto da transação que solicita esse comprovante da conta que possui o crachá. É como tirar um cartão de membro da minha carteira real para mostrar a alguém.


Isso significa que mais uma vez a Carteira Radix pode mostrar ao usuário exatamente o que está acontecendo. Imagine que nosso dApp de troca precise ver a prova de que possuo um crachá que indica que concluí algumas verificações KYC de terceiros. O resultado é uma transação que é apresentada assim:



Mais uma vez, recebo uma apresentação clara de que um determinado crachá está sendo apresentado e posso decidir se estou confortável com ele antes de assinar.

Possibilidade de composição atômica sem código e sob demanda

Agora vamos falar sobre a flexibilidade e o poder das transações Radix. Uma das superpotências do manifesto da transação é a capacidade de “compor” vários dApps em uma única transação atômica – sem código de contrato inteligente.


Imagine que eu queira tomar um empréstimo de um contrato inteligente dApp de empréstimo e, em seguida, usar esse empréstimo para fazer uma determinada negociação de um contrato inteligente DEX. Talvez eu queira ter certeza de que só faço o empréstimo se for realmente capaz de fazer essa negociação.


Em outras redes, você só tem uma opção: escrever e implantar um contrato inteligente especial que você pode chamar e que funciona nessa lógica. Depois de implantado, esse contrato inteligente receberia sua solicitação em uma transação, chamaria o contrato inteligente de empréstimo, tentaria chamar o DEX (supondo que eu recebi os fundos do empréstimo) e certifique-se de verificar se a troca de DEX foi bem-sucedida. Este é um processo de várias etapas que requer experiência em contratos inteligentes, leva tempo, é de propósito único e geralmente é caro em taxas de rede.


No Radix, é apenas um manifesto de transação com algumas instruções:


  • Chame o componente de empréstimo para fazer o empréstimo
  • Coloque os tokens emprestados em um balde e passe para o DEX
  • Afirme que o DEX retornou o que você esperava (a transação falha se isso não for verdade)
  • Deposite os resultados em sua conta


Você pode criar esse manifesto de transação simples, sob demanda, em um front-end da Web simples. Sem código de contrato inteligente ou implantação antecipada, sem verificações elaboradas nos resultados do contrato inteligente; você apenas descreve como deseja que os ativos se movam entre sua conta e os componentes do dApp e envie.


Isso abre uma série de novas possibilidades. Segmentos inteiros de DeFi dApps que ajudam os usuários a encontrar as melhores rotas para negociações podem ser criados puramente como front-ends de sites, por desenvolvedores que nunca tocam no código de contrato inteligente. Combinações altamente complexas de protocolos financeiros podem ser unidas em tempo real para aproveitar as oportunidades efêmeras. E usando proteções de “asserção” em transações, limites claros e diretos podem ser colocados no resultado final desejado sem preocupação com o funcionamento interno dos componentes que estão sendo chamados.

Taxas de rede pagas por dApp

Aqui está outro recurso importante das transações Radix para desenvolvedores. Muitos desenvolvedores dApp gostariam de considerar as taxas de rede um custo de infraestrutura que eles arcam com seus usuários, para que os usuários nunca precisem pensar nelas. Por exemplo: talvez seus usuários desejem apenas fazer transações em USDC e nunca tocar em ETH, ou talvez apenas desejem oferecer isso como um benefício invisível aos usuários, como um comerciante pagando a taxa de transação Visa ao executar o cartão de débito de um cliente.


As transações atuais tornam isso impossível – o signatário deve ser o pagador da taxa. No Radix, o pagamento das taxas é muito mais flexível; qualquer coisa pode pagá-lo no decorrer da transação.


Na verdade, eu estava trapaceando um pouco quando mostrei a você os manifestos de transação anteriormente. No caso típico em que o usuário paga a taxa de transação, há uma instrução de manifesto extra para uma das contas do usuário para “bloquear” a taxa de rede para a transação. Mas o usuário que bloqueia essa taxa não é necessário se outra pessoa estiver disposta a fazer esse bloqueio de taxa no decorrer da transação.


Por exemplo: imagine que sou um usuário conhecido e registrado em um dApp de troca e eles gostariam de pagar as taxas de rede para mim quando eu usar o sistema deles. Eles me emitem um ativo de crachá de usuário que possuo em uma de minhas contas que representa meu registro. Agora, nas transações, posso apresentar esse crachá ao componente de troca (assim como vimos anteriormente com o crachá KYC), e a troca pode verificar essa prova e, em seguida, bloquear a taxa para a transação. Se fizer isso, minha Carteira Radix vê que nenhuma taxa extra de bloqueio é necessária e é como se a taxa de rede fosse magicamente zero.

Uma nota final sobre fragmentação

Para aqueles que gostam de se aprofundar na tecnologia, há outro benefício maravilhoso do modelo de transação da Radix: ele fragmenta bem.


Olhando para a atualização da rede de Xi'an quando o protocolo de consenso Cerberus massivamente paralelizado da Radix ( recentemente revisado por pares ) será lançado para oferecer escalabilidade ilimitada, é crucial que o modelo de transação se encaixe.


Para permitir o paralelismo massivo, Cerberus conta com a capacidade de separar o estado de contas e componentes através de um número virtualmente ilimitado de shards (ou “threads” pode ser um termo mais descritivo), enquanto é capaz de saber especificamente quais desses shards devem ser reunidos para consenso para cada transação .


Isso pode soar superficialmente como Cardano, que fragmenta seu estado em bits de estado chamados “eUTXOs”. As transações Cardano então (semelhantes ao Bitcoin) incluem uma especificação direta de quais eUTXOs devem ser usados para criar o resultado de uma determinada transação. O problema com isso é que ele cria contenção . Um determinado contrato inteligente (como, digamos, um DEX) pode ter um conjunto de tokens com os quais muitas pessoas estão tentando interagir ao mesmo tempo. Se as transações estão escolhendo tokens eUTXOs individuais para usar dentro desse pool, é quase garantido que os clientes frequentemente escolherão os mesmos eUTXOs e, portanto, farão com que muitas transações falhem, mesmo que haja muitos tokens no pool para atender aos desejos de todos.


Em vez disso, no Radix, a lista de instruções em um manifesto de transação é uma expressão de intenção . Não preciso especificar as partes individuais do estado a serem usadas; Eu só tenho que especificar com quais contas e componentes eu quero interagir – como eu naturalmente quero fazer de qualquer maneira.


Então, quando a transação é realmente processada pela rede Radix, essa intenção pode ser traduzida de forma determinística em uma definição de qual estado precisa ser atualizado – e, por sua vez, quais fragmentos devem estar envolvidos no consenso. Isso significa que duas transações interagindo com o mesmo contrato inteligente não criarão automaticamente uma corrida em que apenas uma poderá ter sucesso. 10 pessoas podem enviar uma transação de forma confiável para retirar 5 tokens de um pool de 50 ao mesmo tempo, e todos passarão um após o outro sem problemas.

Conclusão

Ao redefinir como todas as transações funcionam no Radix, fazendo uso dos recursos nativamente orientados a ativos do Radix, vários problemas de desenvolvedores e usuários desaparecem. Esse tipo de solução não pode ser corrigido em uma rede existente – todas as suposições sobre como os contratos inteligentes, ativos e transações funcionam já estão inseridas em seu protocolo e no design da máquina virtual.


A nova forma de transações da Radix está sendo introduzida junto com a capacidade de contrato inteligente Scrypto e a novíssima Carteira Radix na rede principal Radix em seu lançamento “Babylon”.