Contratos inteligentes
As transacções Iroha executam cargas úteis de Executable.
Executable::Instructions: um conjunto ordenado de instruções especiais de IrohaExecutable::ContractCall: uma chamada de referência para uma instância de contrato implantadaExecutable::Ivm: código de byte Iroha VMExecutable::IvmProved: código de byte Iroha VM com uma sobreposição de instruções pré-computada e compromissos de prova.
Kotodama é a linguagem de contratos inteligentes de alto nível da Iroha. Um arquivo-fonte .ko é compilado em bytecode IVM determinístico, convencionalmente armazenado como um artefato .to para implantação. Kotodama tem como único alvo a IVM. Não tem como alvo RISC-V nem WebAssembly.
A primeira versão oferece suporte apenas à versão 1 da ABI. A política de syscall e pointer-ABI é aplicada incondicionalmente na admissão e execução de contratos; não existe um seletor de compatibilidade em tempo de execução.
Quando usar contratos inteligentes
Usar instruções normais quando a transacção puder ser expressa diretamente:
- Objetos de registo ou não registados
- Activos de menta, queimadura ou transferência
- atualização de metadados
- conceder ou revogar permissões
- executar um gatilho
- Parâmetros definidos na cadeia
Usar um contrato inteligente quando a transação precisa de lógica embalada que é difícil expressar como uma sequência de instruções estáticas, ou quando uma instância de contrato implantada deve ser chamada por referência.
IVM Executáveis
Executable::Ivm carrega código de byte bruto IVM. Os nós executam esse código dentro dos limites de tempo de execução configurados para a cadeia. Mantenha o código de bytes pequeno e determinista; os contratos fazem parte da execução das transações e, portanto, afetam o consenso.
O Executable::IvmProved é destinado a fluxos transportadores de prova e transporta:
- Código de byte IVM
- uma sobreposição de instruções deterministas
- um compromisso de execução de eventos
- um compromisso em matéria de política de gás
A prova liga a sobreposição ao bytecode executado. Dependendo da política de pipeline, os validadores podem verificar a execução da prova e reproduzir como uma verificação de segurança adicional.
Aplicações de contrato implantadas
Executable::ContractCall invoca uma instância de contrato implantada por endereço. Use-a quando o código do contrato é registado separadamente e as transacções devem chamá-lo por referência em vez de carregar o código de byte sempre.
Orientações operacionais
- Mantenha os contratos deterministas. O comportamento do contrato não deve depender do tempo local do relógio de parede, estado do sistema de arquivos hospedado, chamadas de rede ou outras entradas peer-local.
- Mantenha as cargas úteis compactas. Um grande código de byte aumenta o tamanho da transação e os custos de propagação do bloco.
- Prefere-se a instruções digitadas para mudanças simples no livro, que são mais fáceis de verificar e mais baratas de executar.
- Tratar a atualização dos contratos e as autorizações de registo como controles operacionais de alto risco.
Veja também: