From ec80998d448b432603908fdef77281a1dbe0d70e Mon Sep 17 00:00:00 2001 From: ccamel Date: Sun, 19 Mar 2023 17:20:58 +0100 Subject: [PATCH] refactor(logic)!: allow predicates blacklisting configuration --- proto/logic/{v1beta => v1beta2}/genesis.proto | 4 +-- proto/logic/{v1beta => v1beta2}/params.proto | 28 ++++++++++++++----- proto/logic/{v1beta => v1beta2}/query.proto | 6 ++-- proto/logic/{v1beta => v1beta2}/tx.proto | 2 +- proto/logic/{v1beta => v1beta2}/types.proto | 2 +- 5 files changed, 28 insertions(+), 14 deletions(-) rename proto/logic/{v1beta => v1beta2}/genesis.proto (83%) rename proto/logic/{v1beta => v1beta2}/params.proto (61%) rename proto/logic/{v1beta => v1beta2}/query.proto (95%) rename proto/logic/{v1beta => v1beta2}/tx.proto (90%) rename proto/logic/{v1beta => v1beta2}/types.proto (98%) diff --git a/proto/logic/v1beta/genesis.proto b/proto/logic/v1beta2/genesis.proto similarity index 83% rename from proto/logic/v1beta/genesis.proto rename to proto/logic/v1beta2/genesis.proto index c8ba1981..0d63b6dd 100644 --- a/proto/logic/v1beta/genesis.proto +++ b/proto/logic/v1beta2/genesis.proto @@ -1,9 +1,9 @@ syntax = "proto3"; -package logic.v1beta; +package logic.v1beta2; import "gogoproto/gogo.proto"; -import "logic/v1beta/params.proto"; +import "logic/v1beta2/params.proto"; option go_package = "github.com/okp4/okp4d/x/logic/types"; diff --git a/proto/logic/v1beta/params.proto b/proto/logic/v1beta2/params.proto similarity index 61% rename from proto/logic/v1beta/params.proto rename to proto/logic/v1beta2/params.proto index 8a10f4fb..24ab8602 100644 --- a/proto/logic/v1beta/params.proto +++ b/proto/logic/v1beta2/params.proto @@ -1,6 +1,6 @@ syntax = "proto3"; -package logic.v1beta; +package logic.v1beta2; import "gogoproto/gogo.proto"; @@ -60,17 +60,31 @@ message Limits { message Interpreter { option (gogoproto.goproto_stringer) = true; - // registered_predicates specifies the list of registered predicates/operators, in the form of: `/`. - // For instance: `findall/3`. - // If not specified, the default set of predicates/operators will be registered. - repeated string registered_predicates = 1 [ + // predicates_whitelist specifies a list of prolog predicates that are allowed and can be used by the interpreter. + // The predicates are represented as `/[]`, for example: `findall/3`, or `call`. If a predicate name without arity + // is included in this list, then all predicates with that name will be considered regardless of arity. For example, if `call` is included + // in the whitelist, then all predicates `call/1`, `call/2`, `call/3`... will be allowed. + // If this field is not specified, the interpreter will use the default set of predicates. + repeated string predicates_whitelist = 1 [ (gogoproto.nullable) = true, - (gogoproto.moretags) = "yaml:\"registered_predicates\"" + (gogoproto.moretags) = "yaml:\"predicates_whitelist\"" + ]; + + // predicates_blacklist specifies a list of prolog predicates that are excluded from the set of registered predicates + // and can never be executed by the interpreter. + // The predicates are represented as `/[]`, for example: `findall/3`, or `call`. If a predicate name without arity + // is included in this list, then all predicates with that name will be considered regardless of arity. For example, if `call` is included + // in the blacklist, then all predicates `call/1`, `call/2`, `call/3`... will be excluded. + // If a predicate is included in both whitelist and blacklist, it will be excluded. This means that blacklisted predicates prevails + // on whitelisted predicates. + repeated string predicates_blacklist = 2 [ + (gogoproto.nullable) = true, + (gogoproto.moretags) = "yaml:\"predicates_blacklist\"" ]; // bootstrap specifies the initial program to run when booting the logic interpreter. // If not specified, the default boot sequence will be executed. - string bootstrap = 2 [ + string bootstrap = 3 [ (gogoproto.nullable) = true, (gogoproto.moretags) = "yaml:\"bootstrap\"" ]; diff --git a/proto/logic/v1beta/query.proto b/proto/logic/v1beta2/query.proto similarity index 95% rename from proto/logic/v1beta/query.proto rename to proto/logic/v1beta2/query.proto index 7b096121..c92073cd 100644 --- a/proto/logic/v1beta/query.proto +++ b/proto/logic/v1beta2/query.proto @@ -1,11 +1,11 @@ syntax = "proto3"; -package logic.v1beta; +package logic.v1beta2; import "gogoproto/gogo.proto"; import "google/api/annotations.proto"; -import "logic/v1beta/params.proto"; -import "logic/v1beta/types.proto"; +import "logic/v1beta2/params.proto"; +import "logic/v1beta2/types.proto"; option go_package = "github.com/okp4/okp4d/x/logic/types"; diff --git a/proto/logic/v1beta/tx.proto b/proto/logic/v1beta2/tx.proto similarity index 90% rename from proto/logic/v1beta/tx.proto rename to proto/logic/v1beta2/tx.proto index aceba258..36d6ab03 100644 --- a/proto/logic/v1beta/tx.proto +++ b/proto/logic/v1beta2/tx.proto @@ -1,6 +1,6 @@ syntax = "proto3"; -package logic.v1beta; +package logic.v1beta2; option go_package = "github.com/okp4/okp4d/x/logic/types"; diff --git a/proto/logic/v1beta/types.proto b/proto/logic/v1beta2/types.proto similarity index 98% rename from proto/logic/v1beta/types.proto rename to proto/logic/v1beta2/types.proto index b7daed30..8dfe42fe 100644 --- a/proto/logic/v1beta/types.proto +++ b/proto/logic/v1beta2/types.proto @@ -1,6 +1,6 @@ syntax = "proto3"; -package logic.v1beta; +package logic.v1beta2; import "gogoproto/gogo.proto";