Merge pull request #61 from aeternity/PT-166927306-names-as-strings

Pt 166927306 names as strings
This commit is contained in:
Tobias Lindahl 2019-06-28 13:48:42 +02:00 committed by GitHub
commit 76ae61b66c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 42 additions and 29 deletions

View File

@ -202,23 +202,36 @@ format_kvs(List) ->
%% Total order of FATE terms. %% Total order of FATE terms.
%% Integers < Booleans < Address < Channel < Contract < Oracle %% Integers < Booleans < Address < Channel < Contract < Oracle
%% < Hash < Signature < Bits < String < Tuple < Map < List < Variant %% < Hash < Signature < Bits < String < Tuple < Map < List < Variant
-define(ORD_INTEGER , 0).
-define(ORD_BOOLEAN , 1).
-define(ORD_ADDRESS , 2).
-define(ORD_CHANNEL , 3).
-define(ORD_CONTRACT , 4).
-define(ORD_ORACLE , 5).
-define(ORD_BYTES , 6).
-define(ORD_BITS , 7).
-define(ORD_STRING , 8).
-define(ORD_TUPLE , 9).
-define(ORD_MAP , 10).
-define(ORD_LIST , 11).
-define(ORD_VARIANT , 12).
-define(ORD_ORACLE_Q , 13).
-spec ordinal(fate_type()) -> integer(). -spec ordinal(fate_type()) -> integer().
ordinal(T) when ?IS_FATE_INTEGER(T) -> 0; ordinal(T) when ?IS_FATE_INTEGER(T) -> ?ORD_INTEGER;
ordinal(T) when ?IS_FATE_BOOLEAN(T) -> 1; ordinal(T) when ?IS_FATE_BOOLEAN(T) -> ?ORD_BOOLEAN;
ordinal(T) when ?IS_FATE_ADDRESS(T) -> 2; ordinal(T) when ?IS_FATE_ADDRESS(T) -> ?ORD_ADDRESS;
ordinal(T) when ?IS_FATE_CHANNEL(T) -> 3; ordinal(T) when ?IS_FATE_CHANNEL(T) -> ?ORD_CHANNEL;
ordinal(T) when ?IS_FATE_CONTRACT(T) -> 4; ordinal(T) when ?IS_FATE_CONTRACT(T) -> ?ORD_CONTRACT;
%% 5 ordinal(T) when ?IS_FATE_ORACLE(T) -> ?ORD_ORACLE;
ordinal(T) when ?IS_FATE_ORACLE(T) -> 6; ordinal(T) when ?IS_FATE_BYTES(T) -> ?ORD_BYTES;
ordinal(T) when ?IS_FATE_BYTES(T) -> 7; ordinal(T) when ?IS_FATE_BITS(T) -> ?ORD_BITS;
%% 8; ordinal(T) when ?IS_FATE_STRING(T) -> ?ORD_STRING;
ordinal(T) when ?IS_FATE_BITS(T) -> 9; ordinal(T) when ?IS_FATE_TUPLE(T) -> ?ORD_TUPLE;
ordinal(T) when ?IS_FATE_STRING(T) -> 10; ordinal(T) when ?IS_FATE_MAP(T) -> ?ORD_MAP;
ordinal(T) when ?IS_FATE_TUPLE(T) -> 11; ordinal(T) when ?IS_FATE_LIST(T) -> ?ORD_LIST;
ordinal(T) when ?IS_FATE_MAP(T) -> 12; ordinal(T) when ?IS_FATE_VARIANT(T) -> ?ORD_VARIANT;
ordinal(T) when ?IS_FATE_LIST(T) -> 13; ordinal(T) when ?IS_FATE_ORACLE_Q(T) -> ?ORD_ORACLE_Q.
ordinal(T) when ?IS_FATE_VARIANT(T) -> 14;
ordinal(T) when ?IS_FATE_ORACLE_Q(T) -> 15.
-spec lt(fate_type(), fate_type()) -> boolean(). -spec lt(fate_type(), fate_type()) -> boolean().
@ -230,12 +243,12 @@ lt(A, B) ->
end. end.
%% Integers are ordered as usual. %% Integers are ordered as usual.
lt(0, A, B) when ?IS_FATE_INTEGER(A), ?IS_FATE_INTEGER(B) -> lt(?ORD_INTEGER, A, B) when ?IS_FATE_INTEGER(A), ?IS_FATE_INTEGER(B) ->
?FATE_INTEGER_VALUE(A) < ?FATE_INTEGER_VALUE(B); ?FATE_INTEGER_VALUE(A) < ?FATE_INTEGER_VALUE(B);
%% false is smaller than true (true also for erlang booleans). %% false is smaller than true (true also for erlang booleans).
lt(1, A, B) when ?IS_FATE_BOOLEAN(A), ?IS_FATE_BOOLEAN(B) -> lt(?ORD_BOOLEAN, A, B) when ?IS_FATE_BOOLEAN(A), ?IS_FATE_BOOLEAN(B) ->
?FATE_BOOLEAN_VALUE(A) < ?FATE_BOOLEAN_VALUE(B); ?FATE_BOOLEAN_VALUE(A) < ?FATE_BOOLEAN_VALUE(B);
lt(9, A, B) when ?IS_FATE_BITS(A), ?IS_FATE_BITS(B) -> lt(?ORD_BITS, A, B) when ?IS_FATE_BITS(A), ?IS_FATE_BITS(B) ->
BitsA = ?FATE_BITS_VALUE(A), BitsA = ?FATE_BITS_VALUE(A),
BitsB = ?FATE_BITS_VALUE(B), BitsB = ?FATE_BITS_VALUE(B),
if BitsA < 0 -> if BitsA < 0 ->
@ -246,7 +259,7 @@ lt(9, A, B) when ?IS_FATE_BITS(A), ?IS_FATE_BITS(B) ->
true; true;
true -> BitsA < BitsB true -> BitsA < BitsB
end; end;
lt(10,?FATE_STRING(A), ?FATE_STRING(B)) -> lt(?ORD_STRING,?FATE_STRING(A), ?FATE_STRING(B)) ->
SizeA = size(A), SizeA = size(A),
SizeB = size(B), SizeB = size(B),
case SizeA - SizeB of case SizeA - SizeB of
@ -254,23 +267,23 @@ lt(10,?FATE_STRING(A), ?FATE_STRING(B)) ->
N -> N < 0 N -> N < 0
end; end;
lt(11,?FATE_TUPLE(A), ?FATE_TUPLE(B)) -> lt(?ORD_TUPLE,?FATE_TUPLE(A), ?FATE_TUPLE(B)) ->
SizeA = size(A), SizeA = size(A),
SizeB = size(B), SizeB = size(B),
case SizeA - SizeB of case SizeA - SizeB of
0 -> tuple_elements_lt(0, A, B, SizeA); 0 -> tuple_elements_lt(0, A, B, SizeA);
N -> N < 0 N -> N < 0
end; end;
lt(12, ?FATE_MAP_VALUE(A), ?FATE_MAP_VALUE(B)) -> lt(?ORD_MAP, ?FATE_MAP_VALUE(A), ?FATE_MAP_VALUE(B)) ->
SizeA = maps:size(A), SizeA = maps:size(A),
SizeB = maps:size(B), SizeB = maps:size(B),
case SizeA - SizeB of case SizeA - SizeB of
0 -> maps_lt(A, B); 0 -> maps_lt(A, B);
N -> N < 0 N -> N < 0
end; end;
lt(13, ?FATE_LIST_VALUE(_), ?FATE_LIST_VALUE([])) -> false; lt(?ORD_LIST, ?FATE_LIST_VALUE(_), ?FATE_LIST_VALUE([])) -> false;
lt(13, ?FATE_LIST_VALUE([]), ?FATE_LIST_VALUE(_)) -> true; lt(?ORD_LIST, ?FATE_LIST_VALUE([]), ?FATE_LIST_VALUE(_)) -> true;
lt(13, ?FATE_LIST_VALUE([A|RA]), ?FATE_LIST_VALUE([B|RB])) -> lt(?ORD_LIST, ?FATE_LIST_VALUE([A|RA]), ?FATE_LIST_VALUE([B|RB])) ->
O1 = ordinal(A), O1 = ordinal(A),
O2 = ordinal(B), O2 = ordinal(B),
if O1 == O2 -> if O1 == O2 ->
@ -279,7 +292,7 @@ lt(13, ?FATE_LIST_VALUE([A|RA]), ?FATE_LIST_VALUE([B|RB])) ->
end; end;
true -> O1 < O2 true -> O1 < O2
end; end;
lt(14, ?FATE_VARIANT(AritiesA, TagA, TA), lt(?ORD_VARIANT, ?FATE_VARIANT(AritiesA, TagA, TA),
?FATE_VARIANT(AritiesB, TagB, TB)) -> ?FATE_VARIANT(AritiesB, TagB, TB)) ->
if length(AritiesA) < length(AritiesB) -> true; if length(AritiesA) < length(AritiesB) -> true;
length(AritiesA) > length(AritiesB) -> false; length(AritiesA) > length(AritiesB) -> false;

View File

@ -153,8 +153,8 @@ ops_defs() ->
, { 'AENS_PRECLAIM', 16#69, false, false, 3, [a,a,a], aens_preclaim, {signature, address, hash}, none, "Preclaim the hash in Arg2 for address in Arg1. Arg0 contains delegation signature."} , { 'AENS_PRECLAIM', 16#69, false, false, 3, [a,a,a], aens_preclaim, {signature, address, hash}, none, "Preclaim the hash in Arg2 for address in Arg1. Arg0 contains delegation signature."}
, { 'AENS_CLAIM', 16#6a, false, false, 3, [a,a,a,a], aens_claim, {signature, address, string, integer}, none, "Claim the name in Arg2 for address in Arg1. Arg3 contains the salt used to hash the preclaim. Arg0 contains delegation signature."} , { 'AENS_CLAIM', 16#6a, false, false, 3, [a,a,a,a], aens_claim, {signature, address, string, integer}, none, "Claim the name in Arg2 for address in Arg1. Arg3 contains the salt used to hash the preclaim. Arg0 contains delegation signature."}
, { 'AENS_UPDATE', 16#6b, false, false, 3, [], aens_update, {}, none, "NYI"} , { 'AENS_UPDATE', 16#6b, false, false, 3, [], aens_update, {}, none, "NYI"}
, { 'AENS_TRANSFER', 16#6c, false, false, 3, [a,a,a,a], aens_transfer, {signature, address, address, hash}, none, "Transfer ownership of name Arg3 from account Arg1 to Arg2. Arg0 contains delegation signature."} , { 'AENS_TRANSFER', 16#6c, false, false, 3, [a,a,a,a], aens_transfer,{signature, address, address, string}, none, "Transfer ownership of name Arg3 from account Arg1 to Arg2. Arg0 contains delegation signature."}
, { 'AENS_REVOKE', 16#6d, false, false, 3, [a,a,a], aens_revoke, {signature, address, hash}, none, "Revoke the name in Arg2 from owner Arg1. Arg0 contains delegation signature."} , { 'AENS_REVOKE', 16#6d, false, false, 3, [a,a,a], aens_revoke, {signature, address, string}, none, "Revoke the name in Arg2 from owner Arg1. Arg0 contains delegation signature."}
, { 'BALANCE_OTHER', 16#6e, false, true, 3, [a,a], balance_other, {address}, integer, "Arg0 := The balance of address Arg1."} , { 'BALANCE_OTHER', 16#6e, false, true, 3, [a,a], balance_other, {address}, integer, "Arg0 := The balance of address Arg1."}
%% TODO: Reorder these before documenting the specification %% TODO: Reorder these before documenting the specification
, { 'MAP_SIZE', 16#6f, false, true, 3, [a,a], map_size_, {map}, integer, "Arg0 := The size of the map Arg1."} , { 'MAP_SIZE', 16#6f, false, true, 3, [a,a], map_size_, {map}, integer, "Arg0 := The size of the map Arg1."}