Что такое предикаты?

В функциональном программировании предикаты — это функции, которые возвращают логическое значение True или False. Это возвращаемое значение указывает, было ли выполнено данное условие функции или нет. Предикаты могут быть очень простыми функциями, такими как проверка того, является ли ввод символом или нет, или более сложными, и проверка выполнения определенного списка условий.

Для лучшего понимания, вот несколько примеров типичного использования предикатов:

  • Проверка состояний переменных в объектно-ориентированном программировании
  • Фильтрация списков по заданному условию
  • Сортировка списков по заданному условию

Вот пример на Java:

public class predicate {

    public static void main(String[] args) {

        // char variables
        char ch1, ch2;

        // assign values to ch1, ch2
        ch1 = 'A';
        ch2 = '1';

        // boolean variables that will hold predicate return values
        boolean b1, b2;

        // ask predicate function if ch1 and ch2 are characters
        b1 = Character.isLetter(ch1);
        b2 = Character.isLetter(ch2);


        String str1 = "Is " + ch1 + " a letter?    The predicate returns " + b1;
        String str2 = "Is " + ch2 + " a letter?    The predicate returns " + b2;

        // print b1, b2 values
        System.out.println("Output:");
        System.out.println(str1);
        System.out.println(str2);
    }

}

Выход:

Is A a letter?    The predicate returns true
Is 1 a letter?    The predicate returns false

Прост в своей конструкции или нет, но предикат можно описать как условное выполнение, означающее, что что-то произойдет только в том случае, если условие будет выполнено. Это способ абстрагироваться от полезности предикатов и лучше понять их использование.

С концептуальной точки зрения предикаты не являются чем-то новым для программистов. Однако Fuel берет их и превращает в интуитивно понятное взаимодействие между предикатами и пользователем.

Предикаты в топливе

В контексте Топлива предикаты в концепции вполне ожидаемы. Это чистые функции, которые оцениваются как True или False при заданном условии. Однако есть и другие вещи, которые стоит отметить, и некоторые характеристики, которые уникальны для топлива. Предикаты не имеют состояния, они не могут читать или записывать состояние любого контракта, они не могут получить доступ к хранилищу контрактов и не могут создавать журналы. Поскольку предикаты могут существовать сами по себе, это дает большую свободу в их реализации.

В Fuel байт-код предиката берется и хэшируется в уникальную строку, напоминающую адрес, который затем представляет предикат. Это называется корнем предиката или корнем байт-кода. Этот корень предиката может быть отправлен UTXO монеты, которые затем можно потратить не на действие действительной подписи, а если предоставленный предикат транзакции имеет корень, который соответствует их владельцу и оценивается как True.

Важно отметить, что эти корни предикатов не следует рассматривать так же, как адрес учетной записи. Скорее, предикаты являются входными данными для транзакций, подобных монетам. Они не работают как учетная запись кошелька, а служат способом подписания транзакции.

Благодаря такой функциональности некоторые функции, такие как торговля и хранение монет, не нужно хранить в смарт-контракте и, следовательно, не нужно развертывать. Развертывание смарт-контракта может быть дорогостоящим и закрепить их как существующие на постоянной основе. Предикаты, однако, не являются постоянными и исчезают после удовлетворения.

Заявка на внебиржевой своп (OTC)

Одним из наиболее легко демонстрируемых приложений являются внебиржевые сделки. В мире финансов внебиржевые (OTC) сделки — это сделки, которые происходят между двумя сторонами без посредников или централизованных структур. Все происходит непосредственно между людьми, которые покупают, и людьми, которые продают.

В случае с Fuel приложение OTC Swap использует эту концепцию, сводя к минимуму риск в ненадежной природе. Предикаты действуют как внебиржевые заказы, которые любой может выполнить, имея возможность принимать аргументы во время выполнения. Пользователь может перевести монеты в корень предиката, который затем может быть разблокирован и может быть потрачен любой транзакцией, которая имеет выход True, таким образом удовлетворяя заказ.

Например, представьте, что есть предикат, который возвращает True, если указанное количество токенов отправлено указанному получателю. Если есть транзакция, удовлетворяющая этому условию, предикат вернет значение True, и она будет считаться расходующей транзакцией. Это позволяет предикату подписать транзакцию и выполнить другую часть сделки.

Условие в предикате жестко закодировано, поэтому нет ошибки в том, как будет действовать байт-код, что сделает весь процесс ненадежным. Наконец, заказы не могут быть выполнены частично, так как предикат работает в булевой системе. В этом случае «тейкер» ордера должен заплатить всю сумму аска, чтобы выполнить определенные условия предиката и завершить сделку.

Это приложение позволяет совершать простые или сложные внебиржевые сделки с возможностью замены функции подписи на любую, которую вы хотите, предоставляя пользователю свободу.

Заглядывая вперед

На таких примерах, как внебиржевой своп, легко увидеть огромные возможности, которые открывают предикаты. Прелесть этих конструкций в Fuel заключается в том, что вы можете определить набор условий, позволяющих подписывать транзакцию. Это по сравнению с единым криптографическим условием расходования монет посредством проверки указанного кошелька, что сильно ограничивает современные протоколы. Введение предикатов открывает множество возможностей для инноваций и неисследованных подходов к использованию транзакций.

Заключение

Использование предикатов в Fuel помогает заложить важную основу для развития среди программистов и опыта для пользователей, демонстрируя при этом проницательный и хорошо проработанный взгляд на текущий ландшафт блокчейна. Это достигается благодаря продуманным и эффективно разработанным конструкциям, которые меняют парадигму протокола. Предикаты являются строительными блоками для тех, кто хочет создать пространство для интуитивно понятного и разумного будущего.

Узнать больше