Эта серия статей будет включать простые примеры кодирования блокчейна Neo с использованием онлайн-инструмента Neo Compiler Eco - https://neocompiler.io

В этой статье мы создадим смарт-контракт, который получает логическое значение и возвращает отрицание этого значения. Пример: пользователь отправляет True, а контракт отвечает False; пользователь отправляет False, а контракт возвращает True.

** этот пример основан на коде, предложенном пользователем github devhawk

Шаг 1. Откройте neocompiler.io

Шаг 2: выберите язык C # и напишите следующий код

using Neo.SmartContract.Framework;

namespace NegatorContract
{
    public class Contract1 : SmartContract
    {
        public static bool Main(bool value)
        {
            return !value;
        }
    }
}

Шаг 3. Нажмите «Скомпилировать».

Будет создан следующий сценарий AVM: 51c56b6c766b00527ac46a00c3009c616c7566

* Примечание: более новые версии компилятора с новейшими методами оптимизации могут создавать несколько другие AVM. Для этого примера давайте рассмотрим это.

Этот AVM эквивалентен следующему ScriptHash: fd217ab3777ce71e349e878e8b50c1b92cc58404

Шаг 4. Перейдите на вкладку «Развертывание / вызов» и нажмите «Развернуть».

Ожидаемая обратная связь от сети - это нормально.

На вкладке «Активность» должна быть записана транзакция развертывания. Ожидаемый хороший результат: HALT, BREAK

Шаг 5. Перейдите на вкладку Deploy / Invoke и нажмите «Invoke» после передачи целочисленного значения 1 (эквивалентного значению True).

В действии этот вызов тоже должен быть записан.

Если вы нажмете HALT, BREAK, вы будете перенаправлены на экран Raw RPC, и ожидается следующий результат:

[
{
«jsonrpc»: «2.0»,
«id»: 5,
«результат»: {
«txid»: «0x59c07c53ed2335f5cc913fc803b68494ff406cace5fd3180e92e51b93b220d0e», < br /> «выполнение»: [
{
«триггер»: «Приложение»,
«контракт»: «0x7b3d2001e772612a8f3421afd8d46bd0a5453e8a»,
«vmstate»: «HALT, BREAK» ,
«gas_consumed»: «0.023»,
«stack»: [
{
«type»: «Boolean»,
«value»: false
}
],
«уведомления»: []
}
]
}
}
]

Значение: {«type»: «Boolean», «value»: false} указывает, что возвращается False (нормально, поскольку параметр был True).

Шаг 6 - Сделайте то же самое, передав параметр Invoke False (целое число 0)

После повторного нажатия кнопки HALT, BREAK ожидаемый Raw RPC будет:

[
{
«jsonrpc»: «2.0»,
«id»: 5,
«результат»: {
«txid»: «0xc453a757082e584d5d705e28e5beb748f1539b7c14cba5f9e719228a97daf4a4» br /> «выполнение»: [
{
«триггер»: «Приложение»,
«контракт»: «0x8b6ee4afcdd46f15195ff6ff8c654f9d8858c395»,
«vmstate»: «HALT, BREAK» ,
«gas_consumed»: «0.023»,
«stack»: [
{
«type»: «Boolean»,
«value»: true
}
],
«уведомления»: []
}
]
}
}
]

Часть {«type»: «Boolean», «value»: true} указывает, что контракт вернул True.

— — — — — — — — — — — — — — —

Это все, есть вопросы? Не стесняйтесь комментировать. :)