Lançamento da versão 1.3 do protocolo Waves em Stagenet
Após quatro meses e meio de desenvolvimento, a versão 1.3 do protocolo Waves está disponível em stagenet.
A versão atualizada apresenta a implementação de duas propostas de aprimoramento, WEP-11 e WEP-12, assim como uma nova versão da biblioteca padrão da linguagem Ride.
A atualização contém uma funcionalidade única para operar aplicativos descentralizados, que não existe em nenhum outro protocolo.
Você pode encontrar mais detalhes sobre todas as melhorias na página de lançamento AQUI.
Melhorias no Protocolo
Continuations
Uma das melhorias do protocolo são as continuations (cálculos contínuos), um conceito descrito originalmente por Ilya Smagin no final de 2019.
Graças às continuations, você poderá escrever scripts com uma complexidade máxima superior a 4.000 (que é o limite atual para scripts na mainnet).
Anteriormente, para executar cálculos complexos, a lógica do aplicativo tinha que ser dividida em vários métodos e invocá-los, um por um, em transações separadas.
Graças às continuations, a execução de um script com uma complexidade superior a 4.000 é dividida em vários estágios: o primeiro estágio é executado dentro de uma transação invoke script e os estágios restantes são gerados sem o envolvimento do usuário nas transações de cálculos contínuos.
I am really amped for the Ride smart contract language update on #waves coming on testnet this year and on mainnet early spring 2021.
We will have smart contracts interaction, flash loan etc but on top of that it will be possible to execute smart contracts of any complexity!!
— Sasha.waves (@sasha35625) November 22, 2020
Estou empolgado com a atualização da linguagem do contrato inteligente Ride na #waves que chegará a testnet este ano e a mainnet no início da primavera de 2021.
Teremos interação de contratos inteligentes, empréstimo instantâneo etc, mas além disso será possível executar contratos inteligentes de qualquer complexidade !!
Chamar um DApp através de outro
A função @Callable
do script de um aplicativo descentralizado (dApp) pode executar chamadas em anexo. A partir de um dApp, outro dApp ou a função @Callable pode ser chamada, ou seja, essa função tem o poder de chamar a si mesma. Todas as funções chamadas são executadas na mesma transação invoke script. A complexidade dos scripts executáveis é limitada.
Graças a essa melhoria, dois dApps podem se comunicar não apenas por meio do armazenamento da conta, mas também se conectando diretamente.
Mudanças para desenvolvedores
Para dar suporte as melhorias descritas acima, foram adicionadas ao protocolo alterações para desenvolvedores. Primeiramente, foi adicionado um novo tipo de transação: continuation transaction (“transação de continuação”), criada automaticamente por um gerador de bloco, em caso de rede de computação incompleta. Uma continuation transaction não pode ser enviada por um usuário.
Além disso, na versão 3 também foi adicionada a transação invoke script, permitindo chamar scripts com uma complexidade superior a 4.000.
Mudanças na linguagem Ride
Foi lançada a versão 5 da biblioteca padrão, na qual foi adicionada a função Invoke para chamar um dApp a partir de outro dApp, o que poderia ocorrer da seguinte maneira:
strict z = Invoke(dapp,func,args,[AttachedPayment(unit,100000000)])
// Invoke(dApp: Address|Alias, function: String, arguments: List[Boolean|ByteVector|Int|String|List[Boolean|ByteVector|Int|String]], payments: List[AttachedPayments]): T|Unit
Variáveis Eager, chamadas com a palavra-chave strict
foram adicionadas. Elas são diferentes das variáveis regulares ‘lazy’, chamadas com a palavra-chave let
, e são calculadas até a próxima expressão, para garantir a ordem de execução e aplicação dos scripts de funções que podem ser chamadas.
O formato do resultado da função @Callable
foi alterado: adicionou-se um valor devolvido como parte final de uma tupla:
(
[
ScriptTransfer(i.caller,100,unit)
],
42
)
Na versão 1.2, novas ações de script foram adicionadas, incluindo Issue
, Burn
e Reissue
, mas estavam ausentes Lease
e LeaseCancel
, ações que a função callable poderia executar. Na nova versão, essas funções foram adicionadas e, graças a isso, um contrato inteligente pode iniciar ou cancelar o leasing de WAVES.
Graças as funções Lease
e LeaseCancel
, um valor de leasing pode ser alterado ou parte do valor total locado pode ser retirado. Se em uma invocação de script, é cancelado o leasing de uma quantia grande, e um quantia pequena é alugada para o mesmo destinatário, o saldo da geração diminuirá em um. No entanto, se duas transações separadas forem enviadas – uma transação de cancelamento e uma transação de leasing, – e elas forem adicionadas a blocos diferentes, o saldo de geração diminuirá imediatamente pelo valor do leasing cancelado, e o novo valor será adicionado ao leasing somente após 1.000 blocos.
Em outras palavras, é possível o cancelamento parcial do leasing graças ao suporte para Lease
e LeaseCancel
.
Para a conveniência das operações de leasing, a função integrada calculateLeaseId foi adicionada para receber um ID de leasing, formado pela Lease structure. O uso de calculateLeaseId é idêntico ao de calculateAssetId
.
Na nova versão da Ride, funções para armazenamento de dados de conta foram adicionadas, permitindo que um script dApp leia dados de seu próprio armazenamento em qualquer estágio de computação:
getBinary(key: String): ByteVector|Unit
getBinaryValue(key: String): ByteVector
getBoolean(key: String): Boolean|Unit
getBooleanValue(key: String): Boolean
getInteger(key: String): Int|Unit
getIntegerValue(key: String): Int
getString(key: String): String|Unit
getStringValue(key: String): String
Outra grande melhoria é a adição de outros tipos de dados – Any. Este é um supertipo para todos os tipos: um valor de qualquer tipo pode ser uma linha, um número, uma unidade, uma estrutura, uma lista, uma tupla, etc.
func findString(a: Any) = {
match a {
case a: String => a
case a: List[Any] =>
match a[0] {
case b: String => b
case _ => throw("Data is not a string")
}
case _ => throw("Data is not a string")
}
}
Fique atento às mudanças na API REST, que quebram a compatibilidade com versões anteriores. Uma descrição detalhada está disponível na página de lançamento no Github.
Como testar?
Os novos recursos, chamar um dApp a partir de outro dApp e as continuations, levaram a mudanças substanciais no desenvolvimento de aplicativos na Waves. Você pode começar a testar seus dApps no stagenet.
Para fazer isso, use o IDE Waves para Stagenet e nós da pool Stagenet.
Se você tiver dúvidas ou problemas, entre no grupo do Telegram para devs https://t.me/waves_ride_dapps_dev
Se você tiver ideias para melhorar essas funcionalidades, entre no fórum de discussão para propostas de aprimoramento da Waves: