Instruções especiais Iroha
Quando falamos sobre Como Iroha operação, Nós dissemos que Iroha As instruções especiais são a única maneira de modificar o estado mundial. Que tipo de instruções especiais temos? Se tiverem lido os guias específicos da língua neste tutorial, Você já viu algumas instruções: Register<Account> e Mint<Numeric>.
Esta é a lista completa das instruções especiais Iroha:
| Instrução | Descrições |
|---|---|
| Registo/Desregistro | Dê um ID para uma nova entidade no blockchain. |
| Mint/Burn | Ativos numéricos de moeda/queima ou repetições de desencadeamento. |
| SetKeyValue/RemoveKeyValue | Atualize os metadados de objetos da blockchain. |
| SetParameter | Defina um parâmetro de largura da cadeia. |
| Subsídio/Revocação | Dar ou remover permissões e papéis. |
| Transferência | Transferência de propriedade ou valor do activo. |
| Localizações de garantia e activos nativos | Bloquear ativos numéricos na custódia do protocolo. |
| ExecuteTrigger | Execução de gatilhos. |
| Log/Custom/Upgrade | Registrar, estender ou atualizar o comportamento do tempo de execução. |
Vamos começar com um resumo de Iroha Instruções Especiais; quais objetos cada instrução pode ser chamada para e que instruções estão disponíveis para cada objeto.
Resumo
Para cada instrução, há uma lista de objetos sobre os quais esta instrução pode ser executada. Por exemplo, as variantes de transferência cobrem objetos do livro-razão e ativos numéricos possíveis, enquanto o minting cobre ativos numéreos e desencadeia repetições.
Algumas instruções exigem que se especifique um destino. Por exemplo, se transferir activos, é sempre necessário especificar em que conta os está a transferir. Por outro lado, quando você está registrando algo, tudo o que você precisa é do objeto que deseja registrar.
| Instrução | Objetos | Destino |
|---|---|---|
| EnsureAlias | domínio ordinário, alias de espaço de dados e alias de conta | |
| Registo/Desregistro | contas, definições de activos, NFTs, funções, desencadeadores, pares; remoção do domínio | |
| Mint/Burn | Ativos numéricos, repetições de desencadeamento | Contas ou desencadeadores |
| SetKeyValue/RemoveKeyValue | Objetos que possuem metadados: domínios, contas, definições de ativos, NFTs, RWAs, gatilhos | |
| SetParameter | Parâmetros da cadeia | |
| Subsídio/Revocação | funções, tokens de permissão | Contas ou funções |
| Transferência | Domínios, definições de activos, ativos numéricos, NFTs | contas |
| Localizações de garantia e activos nativos | Ativos numéricos em garantia, bloqueio de activos, compromissos anônimos em garantia | compradores, destinos ou divisões de litígios |
| ExecuteTrigger | gatilhos . | |
| Log/Custom/Upgrade | registos, cargas úteis específicas para executores, atualizações de executores |
Há também uma outra maneira de ver ISI, em termos do objeto do livro-razão que eles tocam:
| Alvo . | Instruções |
|---|---|
| Conta | registar/desinscrever contas, receber ativos, atualizar metadados da conta, conceder ou revogar as permissões e funções |
| Domínio . | garantir a configuração de domínios, desinscrever domínios, transferir a propriedade do domínio, atualizar os metadados do domínio |
| Definição de activos | definições de registo/desregistro, transferência de propriedade, atualização dos metadados |
| Ativos | quantidade numérica da menta/queimadura, quantidade numerica de transferência |
| Escrow | Abrir, aceitar, marcar o pagamento enviado, liberar, cancelar, disputar, resolver, retirar ou expirar registos nativos de custódia. |
| NFT | Registo/desregistro NFTs, transferência de propriedade, atualização de metadados |
| RWA | registar lotes, quantidade de transferência, manter/libertar, congelar/descongelar, resgatar, fundir, atualizar metadados e controlos |
| Trigger . | registar/desinscrever, repetições do gatilho de moeda/queimação, executar o gatilho, atualizar os metadados do gatilha |
| Mundo | registar/desregistrar pares e papéis, definir parâmetros, atualizar o executor |
CLI exemplos
Os exemplos desta página supõem que você está executando comandos do espaço de trabalho Iroha upstream contra a configuração local padrão do cliente:
cargo run --bin iroha -- --config ./defaults/client.toml <command>Se você instalou o binário iroha, use iroha --config ./defaults/client.toml em vez disso. Substitua os titulares de lugar abaixo com valores da sua rede:
export ALICE="<ALICE_ACCOUNT_I105>"
export BOB="<BOB_ACCOUNT_I105>"
export ASSET_DEF="<ASSET_DEFINITION_BASE58>"
export PEER_KEY="<BLS_PUBLIC_KEY_MULTIHASH>"
export PEER_POP="<PROOF_OF_POSSESSION_HEX>"Ao atingir o público Taira Testnet, usar um Taira Configuração do cliente. Antes de executar exemplos de pagamento, salvar o auxiliar da torneira de Obtenha o Testnet XOR sobre Taira como taira_faucet_claim.py, em seguida, a rede de teste da reivindicação XOR a partir da torneira:
export TAIRA_ACCOUNT_ID="<TAIRA_I105_ACCOUNT_ID>"
export TAIRA_FEE_ASSET="6TEAJqbb8oEPmLncoNiMRbLEK6tw"
curl -fsS https://taira.sora.org/v1/accounts/faucet/puzzle | jq .
python3 taira_faucet_claim.py "$TAIRA_ACCOUNT_ID"
iroha --config ./taira.client.toml ledger asset get \
--definition "$TAIRA_FEE_ASSET" \
--account "$TAIRA_ACCOUNT_ID"Após a visualização do ativo financiado pela torneira, anexar os metadados necessários dos activos de gás para escrever as transações:
printf '{"gas_asset_id":"%s"}\n' "$TAIRA_FEE_ASSET" > taira.tx-metadata.json
cargo run --bin iroha -- \
--config ./taira.client.toml \
--metadata ./taira.tx-metadata.json \
<command>EnsureAlias
EnsureAlias é o caminho comum de primeira versão para a criação de domínios e seus SNS arrendamentos. Ele vincula declarativamente o espaço de dados exato, proprietário, prazo de arrendamento e guarda de citação, então cria ou repara todos os estados necessários atomicamente. Utilize o ponto final autenticado POST /v1/aliases/setup/plan ou o fluxo de trabalho correspondente CLI:
cargo run --bin iroha -- --config ./defaults/client.toml \
app alias setup plan \
--intent-file ./domain.intent.json \
--plan-file ./domain.plan.json
cargo run --bin iroha -- --config ./defaults/client.toml \
app alias setup apply --plan-file ./domain.plan.jsonA intenção e o plano são livres de segredos, mas aplicam sinais de passo e enviam uma transação comum com a conta configurada. Um plano está vinculado à sua cadeia, autoridade, âncora do estado vivo e prazo; nunca reutilize um em outra rede.
(Un) Registo
Registro e não registo são as instruções utilizadas para dar uma ID a uma nova entidade no blockchain.
Tudo o que pode ser registrado é tanto Registrable como Identifiable, mas nem tudo o que é Identifiable é Registrable. A maioria das coisas são registradas diretamente, mas em alguns casos a representação na blockchain tem consideravelmente mais dados. Por razões de segurança e desempenho, usamos construtores para tais estruturas de dados (por exemplo NewAccount), e o registro de pares tem uma instrução dedicada de prova de posse.
Você pode registrar contas, definições de ativos, NFTs, pares, funções e gatilhos. Configuração de domínio utiliza EnsureAlias; o crudo Register::Domain a carga útil é reservada para genesis/bootstrap. RegisterPeerWithPop, que carrega uma prova de posse para a chave. Convenções de nomeamento Para saber sobre as restrições impostas aos nomes das entidades.
Os lotes RWA são criados através da instrução específica RegisterRwa. O código atual não expõe uma instrução UnregisterRwa; use RedeemRwa para retirar a quantidade representada.
INFO
Observe que, dependendo da forma como você decidir configurar o seu Bloco de Gênesis em genesis.json (especificamente, se incluir ou não o registo de tokens de permissão), O processo de registo de uma conta pode ser muito diferente. Em geral, podemos resumir isto assim:
- Em um blockchain público, qualquer pessoa deve ser capaz de registrar uma conta.
- Em um blockchain privado, pode haver um processo único para o registro de contas. em um blockchain privado típico, ou seja, um blockchain sem quaisquer processos únicos para o registo de contas, você precisa de uma conta para registrar outra conta.
Discutiremos estas diferenças em grande detalhe quando Comparar cadeias de blocos públicas e privadas.
INFO
O registo de um peer é atualmente a única maneira de adicionar pares que não faziam parte do original peer confiável definido para a rede.
Use um guia específico de língua para registrar objetos blockchain:
| Linguagem | Guia |
|---|---|
| CLI | Use o Iroha CLI para criar domínios e registrar contas e ativos. |
| Rust | Use o tutorial Rust . |
| Kotlin/Java | Use o Kotlin/Java tutorial. |
| Python | Use o tutorial Python . |
| JavaScript/TypeScript | Use o tutorial JavaScript/TypeScript . |
Planejar e aplicar configuração de domínio comum, em seguida, desinscrever o domínio quando não for mais necessário:
cargo run --bin iroha -- --config ./defaults/client.toml \
app alias setup plan \
--intent-file ./docs-domain.intent.json \
--plan-file ./docs-domain.plan.json
cargo run --bin iroha -- --config ./defaults/client.toml \
app alias setup apply --plan-file ./docs-domain.plan.json
cargo run --bin iroha -- --config ./defaults/client.toml \
ledger domain unregister --id docs.universalContas de registo e não registadas:
cargo run --bin iroha -- --config ./defaults/client.toml \
ledger account register --id "$BOB"
cargo run --bin iroha -- --config ./defaults/client.toml \
ledger account unregister --id "$BOB"Definições de activos para registo e não registo:
cargo run --bin iroha -- --config ./defaults/client.toml \
ledger asset definition register \
--id "$ASSET_DEF" \
--name docs_token \
--alias docs_token#docs.universal \
--scale 0
cargo run --bin iroha -- --config ./defaults/client.toml \
ledger asset definition unregister --id "$ASSET_DEF"Registro e desregisto NFTs. O registo NFT lê o seu conteúdo JSON a partir da entrada padrão:
printf '{"kind":"badge","level":"intro"}\n' |
cargo run --bin iroha -- --config ./defaults/client.toml \
ledger nft register --id 'badge$docs.universal'
cargo run --bin iroha -- --config ./defaults/client.toml \
ledger nft unregister --id 'badge$docs.universal'Funções de registo e não de registo:
cargo run --bin iroha -- --config ./defaults/client.toml \
ledger role register --id operators
cargo run --bin iroha -- --config ./defaults/client.toml \
ledger role unregister --id operatorsRegistre e desregistre os gatilhos. O registro do gatilho precisa de um código IVM compilado ou uma lista de instruções serializada. Este exemplo constrói uma instrução Log com o CLI e a envia para o registo do gatilhos:
cargo run --bin iroha -- --config ./defaults/client.toml -o \
ledger transaction ping --log-level INFO --msg "hourly cleanup" |
cargo run --bin iroha -- --config ./defaults/client.toml \
ledger trigger register --id hourly_cleanup \
--instructions-stdin \
--filter time \
--time-start 5m \
--time-period-ms 3600000
cargo run --bin iroha -- --config ./defaults/client.toml \
ledger trigger unregister --id hourly_cleanupRegistre e desregistre os pares. Gerencie a chave BLS e PoP com kagami, se ainda não tiverem:
cargo run --bin kagami -- keys --algorithm bls_normal --pop --json
cargo run --bin iroha -- --config ./defaults/client.toml \
ledger peer register --key "$PEER_KEY" --pop "$PEER_POP"
cargo run --bin iroha -- --config ./defaults/client.toml \
ledger peer unregister --key "$PEER_KEY"Menta/Burn
A moagem e a queima podem referir-se a activos numéricos e desencadeios com um número limitado de repetições. Alguns activos podem ser declarados como não moáveis, o que significa que só podem ser moídos uma vez após o registro.
Os ativos são montados em uma conta específica, geralmente aquela que registrou o ativo em primeiro lugar. As quantidades de ativos não são negativas, então você nunca pode ter um $-1.0 de um ativo ou queimar uma quantidade negativa e obter uma moeda.
Use um guia específico de língua para minar os ativos da blockchain:
Aqui estão exemplos de ativos queimados:
Ativos numéricos de moeda e de queima:
cargo run --bin iroha -- --config ./defaults/client.toml \
ledger asset mint \
--definition "$ASSET_DEF" \
--account "$ALICE" \
--quantity 100
cargo run --bin iroha -- --config ./defaults/client.toml \
ledger asset burn \
--definition "$ASSET_DEF" \
--account "$ALICE" \
--quantity 10Repetições do gatilho de hortelã e da queima:
cargo run --bin iroha -- --config ./defaults/client.toml \
ledger trigger mint --id hourly_cleanup --repetitions 5
cargo run --bin iroha -- --config ./defaults/client.toml \
ledger trigger burn --id hourly_cleanup --repetitions 1Transferência
Transferências transferem a propriedade ou o valor entre contas. As variantes genéricas de transferência abrangem domínios, definições de ativos, ativos numéricos e NFTs. RWA O movimento de quantidade utiliza o TransferRwa e ForceTransferRwa instruções descritas em O mundo real Ativos .
Para este efeito, é necessário conceder uma conta à Permissão para a transferência de activos. Referir-se a um exemplo de como transferir activos com: CLI ou Rust.
Transferência de activos numéricos:
cargo run --bin iroha -- --config ./defaults/client.toml \
ledger asset transfer \
--definition "$ASSET_DEF" \
--account "$ALICE" \
--to "$BOB" \
--quantity 25Transferência de domínio, definição de ativo e propriedade NFT:
cargo run --bin iroha -- --config ./defaults/client.toml \
ledger domain transfer --id docs.universal --from "$ALICE" --to "$BOB"
cargo run --bin iroha -- --config ./defaults/client.toml \
ledger asset definition transfer --id "$ASSET_DEF" --from "$ALICE" --to "$BOB"
cargo run --bin iroha -- --config ./defaults/client.toml \
ledger nft transfer --id 'badge$docs.universal' --from "$ALICE" --to "$BOB"Localizações de empréstimos e ativos nativos
As instruções de custódia nativa bloqueiam os ativos numéricos na custódia do protocolo gerenciado por um livro-razão. Eles são usados para liquidação ao estilo de mercado, bloqueios genéricos de ativos e fluxos anônimos de custódie protegidos.
Utilizações de empréstimos no mercado OpenAssetEscrow, AcceptAssetEscrow, MarkEscrowPaymentSent, ReleaseAssetEscrow, CancelAssetEscrow, OpenEscrowDispute, e ResolveEscrowDispute. Utilização de bloqueios genéricos de activos OpenAssetLock, DrawdownAssetLock, CancelAssetLock, e ExpireAssetLock. O escrow anônimo reflete o ciclo de vida do mercado com OpenAnonymousAssetEscrow, AcceptAnonymousAssetEscrow, MarkAnonymousEscrowPaymentSent, ReleaseAnonymousAssetEscrow, CancelAnonymousAssetEscrow, OpenAnonymousEscrowDispute, e ResolveAnonymousEscrowDispute.
Estes ISIs atualmente não possuem comandos de primeira classe CLI. Use construtores de instruções SDK tipografados ou cargas de instrução serializadas, e veja Native Asset Escrow para detalhes do ciclo de vida, permissões, consultas, eventos e exemplos de Rust.
Subvenção/Revocação
As instruções de concessão e revogação são utilizadas para as autorizações e funções da conta .
Grant é utilizado para conceder permanentemente a um utilizador uma única permissão ou um grupo de permissões (uma "função"). As funções e as permissões concedidas só podem ser removidas através da Revoke Como tal, essas instruções devem ser utilizadas com cuidado.
Conceder e revogar um papel em uma conta:
cargo run --bin iroha -- --config ./defaults/client.toml \
ledger account role grant --id "$BOB" --role operators
cargo run --bin iroha -- --config ./defaults/client.toml \
ledger account role revoke --id "$BOB" --role operatorsConceder e revogar os tokens de permissão. Os comandos de permissões lêem um objeto de permisso da entrada padrão:
printf '{"name":"CanSetParameters","payload":null}\n' |
cargo run --bin iroha -- --config ./defaults/client.toml \
ledger account permission grant --id "$BOB"
printf '{"name":"CanSetParameters","payload":null}\n' |
cargo run --bin iroha -- --config ./defaults/client.toml \
ledger account permission revoke --id "$BOB"Conceder e revogar as permissões de um papel:
printf '{"name":"CanRegisterDomain","payload":null}\n' |
cargo run --bin iroha -- --config ./defaults/client.toml \
ledger role permission grant --id operators
printf '{"name":"CanRegisterDomain","payload":null}\n' |
cargo run --bin iroha -- --config ./defaults/client.toml \
ledger role permission revoke --id operatorsSetKeyValue/RemoveKeyValue
Estas instruções atualizam os metadados objeto . Use SetKeyValue para inserir ou substituir uma entrada de metadados e RemoveKeyValue para excluir um.
Os comandos de metadados set lêem o valor JSON a partir da entrada padrão:
printf '"production"\n' |
cargo run --bin iroha -- --config ./defaults/client.toml \
ledger domain meta set --id docs.universal --key environment
cargo run --bin iroha -- --config ./defaults/client.toml \
ledger domain meta remove --id docs.universal --key environmentO mesmo padrão está disponível para contas, definições de ativos, NFTs, RWAs, e desencadeadores:
printf '{"display_name":"Alice"}\n' |
cargo run --bin iroha -- --config ./defaults/client.toml \
ledger account meta set --id "$ALICE" --key profile
printf '{"issuer":"docs"}\n' |
cargo run --bin iroha -- --config ./defaults/client.toml \
ledger asset definition meta set --id "$ASSET_DEF" --key issuer
printf '{"color":"blue"}\n' |
cargo run --bin iroha -- --config ./defaults/client.toml \
ledger nft meta set --id 'badge$docs.universal' --key traits
printf '{"owner":"ops"}\n' |
cargo run --bin iroha -- --config ./defaults/client.toml \
ledger trigger meta set --id hourly_cleanup --key ownerSetParameter
SetParameter altera os parâmetros em toda a cadeia expostos pelo modelo de dados ativo e pelo executor.
Estabelecer um parâmetro através da passagem de um único objeto JSON em entrada padrão:
printf '{"Sumeragi":{"BlockTimeMs":1000}}\n' |
cargo run --bin iroha -- --config ./defaults/client.toml \
ledger parameter setExecuteTrigger
Esta instrução é utilizada para executar os gatilhos .
O CLI pode registrar gatilhos e subscrever os eventos de execução do gatilho diretamente. Não fornece um comando execute trigger digitado, por isso enviar uma instrução manual ExecuteTrigger gerar uma série InstructionBox com uma ferramenta SDK ou executor e passar a matriz resultante JSON através de ledger transaction stdin:
printf '["<BASE64_EXECUTE_TRIGGER_INSTRUCTION_BOX>"]\n' |
cargo run --bin iroha -- --config ./defaults/client.toml \
ledger transaction stdin
cargo run --bin iroha -- --config ./defaults/client.toml \
ledger events trigger-execute --timeout 30sOutras instruções
Iroha expõe também instruções de nível inferior para a integração do tempo de execução e do executor:
Log: emitir uma entrada no registro durante a execuçãoCustomInstruction: transporte de cargas úteis específicas do executor JSONUpgrade: ativar uma atualização do executor
Enviar uma instrução Log com o assistente de ping:
cargo run --bin iroha -- --config ./defaults/client.toml \
ledger transaction ping --log-level INFO --msg "hello from docs"Envie uma instrução de executor personalizada como um InstructionBox serializado. A forma da carga útil é específica para o executor, então gerar a instrução com a combinação SDK ou ferramenta executor:
printf '["<BASE64_CUSTOM_INSTRUCTION_BOX>"]\n' |
cargo run --bin iroha -- --config ./defaults/client.toml \
ledger transaction stdinAtualizar o executor a partir de um arquivo compilado IVM código de byte:
cargo run --bin iroha -- --config ./defaults/client.toml \
ops executor upgrade --path ./target/ivm/executor.ivm