
Anteriormente, introduzi o Contrato inteligente de ontologia em
Parte 1: Blockchain e API de bloco e
Parte 2: API de armazenamentoParte 3: API de tempo de execuçãoHoje, vamos falar sobre como invocar um contrato inteligente nativo da Ontologia por meio da
API nativa . Uma das funções mais típicas da chamada de contrato nativo é a transferência de ativos.
1. Introdução
A API nativa possui apenas uma API. Ao usar a função Invoke, você precisa usar a função de estado interno para ajudá-lo a encapsular os parâmetros. Veja abaixo para aprender como usar as funções.

Agora vamos entrar em mais detalhes sobre como usar essas 2 APIs. Antes disso, você pode criar um novo contrato na ferramenta de desenvolvimento de contratos inteligentes Ontology
SmartX e siga as instruções abaixo. Como de costume, no final do artigo, fornecerei um link para o código-fonte.
Como usar a API nativa
Como de costume, você precisa importar as 2 funções da seguinte maneira antes de usá-las.
from ontology.interop.Ontology.Native import Invoke from ontology.builtins import state
Lista de contratos nativos de ontologia
Atualmente, existem 6 contratos nativos de ontologia disponíveis para desenvolvedores. Abaixo está a lista dos 6 contratos nativos que podem ser chamados pela API nativa.

No contrato, você só precisa converter o endereço do contrato em um formato de bytearray e invocá-lo.
Por exemplo , quando você precisar chamar um contrato do ONT Token, poderá primeiro converter o endereço do contrato do ONT Token para o formato bytearray e depois chamar a função Invoke. Ao chamar a função Invoke, os parâmetros importados são o número da versão, o endereço do contrato, o método do contrato invocado e os parâmetros relacionados à transferência encapsulados pela função state.
Um ponto particular a ser observado aqui é que, ao fazer uma transferência de contrato para uma ONG, a quantidade preenchida é 10 vezes a quantidade real. Ou seja, se você precisar transferir 10 ONGs, a quantidade precisa ser preenchida é 10¹⁰. Ao usar uma carteira, como ONTO ou Cyano para transferir, a quantidade inserida é o valor da transferência.
contract_address_ONT = bytearray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01') param = state(from_acct, to_acct, ont_amount) res = Invoke(1, contract_address_ONT, 'transfer', [param])
Código do contrato de transferência
Abaixo, apresentamos um exemplo detalhado de como usar o Python para
transferir ONT e ONG . No código abaixo, o tipo de parâmetro da conta de envio importada e o endereço de recebimento é uma sequência. Além disso, também pode ser entregue com um tipo de endereço de parâmetro de conta, economizando a taxa de Gás por invocar o contrato. O processo é o seguinte:
- Defina as variáveis de endereço do contrato contract_address_ONT e contract_address_ONG;
- Converta o endereço de envio e recebimento do formato base58 para o formato bytearray;
- Verifique a assinatura e confirme se o endereço de envio é o mesmo que o endereço de chamada do contrato;
- A função state encapsula os parâmetros relacionados à transferência;
- A função Invoke chama o contrato nativo ONT Token e ONG Token para transferência;
- Determine se a transferência foi bem-sucedida retornando res. Se o valor de retorno for b '\ x01', a transferência será bem-sucedida e o evento "transferência bem-sucedida" será enviado.
from ontology.interop.System.Runtime import Notify, CheckWitness from ontology.interop.Ontology.Runtime import Base58ToAddress from ontology.interop.Ontology.Native import Invoke from ontology.builtins import state
Prática em SmartX
Você também pode compilar e executar o exemplo de código acima no
SmarX, seguindo as etapas abaixo:
- Compile o contrato. Primeiro, crie um projeto no SmartX e compile o código neste projeto.

- Implante o contrato. Se você precisar de um token de teste para implantar o contrato, inscreva-se aqui . O resultado da implantação é o seguinte:

- Execute a função de transferência. Antes de executar a função de transferência, você precisa configurar os parâmetros conforme necessário. No exemplo abaixo, você precisa inserir o endereço de envio, o endereço de recebimento e a quantidade transferida de ONT e ONG:

- Transferência realizada. Depois de configurar os parâmetros corretamente, a transferência será bem-sucedida ao executar a função de transferência. O token transferido será exibido no endereço de recebimento acima:

Sumário
Neste artigo, introduzimos a
API nativa da blockchain Ontology. Os desenvolvedores podem usar essa API para invocar contratos nativos da Ontologia. No próximo artigo, apresentaremos a
API de atualização para explorar como atualizar o contrato nos contratos inteligentes da Ontologia.
Encontre o tutorial no GitHub
aqui .
Este é um tutorial oficial publicado anteriormente no blog Ontology Medium
Você é desenvolvedor? Verifique se você se juntou à nossa comunidade de tecnologia no
Discord . Além disso, dê uma olhada no
Developer Center em nosso site. Lá você encontra ferramentas, documentação e muito mais para desenvolvedores.
Encontre ontologia em outro lugar
Site de ontologiaGithub /
discordTelegrama
Inglês /
RussoTwitter /
Reddit