Эта серия статей будет включать простые примеры кодирования блокчейна 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.
— — — — — — — — — — — — — — —
Это все, есть вопросы? Не стесняйтесь комментировать. :)