From 487e0872879bc56d37245e177a2885528977cb7a Mon Sep 17 00:00:00 2001 From: Tobias Lindahl Date: Wed, 26 Jun 2019 15:33:24 +0200 Subject: [PATCH 1/2] Use string instead of name hash for transfer and revoke --- src/aeb_fate_generate_ops.erl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/aeb_fate_generate_ops.erl b/src/aeb_fate_generate_ops.erl index e9afe17..83b5184 100644 --- a/src/aeb_fate_generate_ops.erl +++ b/src/aeb_fate_generate_ops.erl @@ -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_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_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_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_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, 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."} %% 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."} -- 2.30.2 From edea526f3804f30fe634b7317554738c37f6352e Mon Sep 17 00:00:00 2001 From: Tobias Lindahl Date: Fri, 28 Jun 2019 11:22:33 +0200 Subject: [PATCH 2/2] Renum ordinals --- src/aeb_fate_data.erl | 67 ++++++++++++++++++++++++++----------------- 1 file changed, 40 insertions(+), 27 deletions(-) diff --git a/src/aeb_fate_data.erl b/src/aeb_fate_data.erl index 94a6343..2660386 100644 --- a/src/aeb_fate_data.erl +++ b/src/aeb_fate_data.erl @@ -202,23 +202,36 @@ format_kvs(List) -> %% Total order of FATE terms. %% Integers < Booleans < Address < Channel < Contract < Oracle %% < 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(). -ordinal(T) when ?IS_FATE_INTEGER(T) -> 0; -ordinal(T) when ?IS_FATE_BOOLEAN(T) -> 1; -ordinal(T) when ?IS_FATE_ADDRESS(T) -> 2; -ordinal(T) when ?IS_FATE_CHANNEL(T) -> 3; -ordinal(T) when ?IS_FATE_CONTRACT(T) -> 4; -%% 5 -ordinal(T) when ?IS_FATE_ORACLE(T) -> 6; -ordinal(T) when ?IS_FATE_BYTES(T) -> 7; -%% 8; -ordinal(T) when ?IS_FATE_BITS(T) -> 9; -ordinal(T) when ?IS_FATE_STRING(T) -> 10; -ordinal(T) when ?IS_FATE_TUPLE(T) -> 11; -ordinal(T) when ?IS_FATE_MAP(T) -> 12; -ordinal(T) when ?IS_FATE_LIST(T) -> 13; -ordinal(T) when ?IS_FATE_VARIANT(T) -> 14; -ordinal(T) when ?IS_FATE_ORACLE_Q(T) -> 15. +ordinal(T) when ?IS_FATE_INTEGER(T) -> ?ORD_INTEGER; +ordinal(T) when ?IS_FATE_BOOLEAN(T) -> ?ORD_BOOLEAN; +ordinal(T) when ?IS_FATE_ADDRESS(T) -> ?ORD_ADDRESS; +ordinal(T) when ?IS_FATE_CHANNEL(T) -> ?ORD_CHANNEL; +ordinal(T) when ?IS_FATE_CONTRACT(T) -> ?ORD_CONTRACT; +ordinal(T) when ?IS_FATE_ORACLE(T) -> ?ORD_ORACLE; +ordinal(T) when ?IS_FATE_BYTES(T) -> ?ORD_BYTES; +ordinal(T) when ?IS_FATE_BITS(T) -> ?ORD_BITS; +ordinal(T) when ?IS_FATE_STRING(T) -> ?ORD_STRING; +ordinal(T) when ?IS_FATE_TUPLE(T) -> ?ORD_TUPLE; +ordinal(T) when ?IS_FATE_MAP(T) -> ?ORD_MAP; +ordinal(T) when ?IS_FATE_LIST(T) -> ?ORD_LIST; +ordinal(T) when ?IS_FATE_VARIANT(T) -> ?ORD_VARIANT; +ordinal(T) when ?IS_FATE_ORACLE_Q(T) -> ?ORD_ORACLE_Q. -spec lt(fate_type(), fate_type()) -> boolean(). @@ -230,12 +243,12 @@ lt(A, B) -> end. %% 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); %% 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); -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), BitsB = ?FATE_BITS_VALUE(B), if BitsA < 0 -> @@ -246,7 +259,7 @@ lt(9, A, B) when ?IS_FATE_BITS(A), ?IS_FATE_BITS(B) -> true; true -> BitsA < BitsB end; -lt(10,?FATE_STRING(A), ?FATE_STRING(B)) -> +lt(?ORD_STRING,?FATE_STRING(A), ?FATE_STRING(B)) -> SizeA = size(A), SizeB = size(B), case SizeA - SizeB of @@ -254,23 +267,23 @@ lt(10,?FATE_STRING(A), ?FATE_STRING(B)) -> N -> N < 0 end; -lt(11,?FATE_TUPLE(A), ?FATE_TUPLE(B)) -> +lt(?ORD_TUPLE,?FATE_TUPLE(A), ?FATE_TUPLE(B)) -> SizeA = size(A), SizeB = size(B), case SizeA - SizeB of 0 -> tuple_elements_lt(0, A, B, SizeA); N -> N < 0 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), SizeB = maps:size(B), case SizeA - SizeB of 0 -> maps_lt(A, B); N -> N < 0 end; -lt(13, ?FATE_LIST_VALUE(_), ?FATE_LIST_VALUE([])) -> false; -lt(13, ?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(_), ?FATE_LIST_VALUE([])) -> false; +lt(?ORD_LIST, ?FATE_LIST_VALUE([]), ?FATE_LIST_VALUE(_)) -> true; +lt(?ORD_LIST, ?FATE_LIST_VALUE([A|RA]), ?FATE_LIST_VALUE([B|RB])) -> O1 = ordinal(A), O2 = ordinal(B), if O1 == O2 -> @@ -279,8 +292,8 @@ lt(13, ?FATE_LIST_VALUE([A|RA]), ?FATE_LIST_VALUE([B|RB])) -> end; true -> O1 < O2 end; -lt(14, ?FATE_VARIANT(AritiesA, TagA, TA), - ?FATE_VARIANT(AritiesB, TagB, TB)) -> +lt(?ORD_VARIANT, ?FATE_VARIANT(AritiesA, TagA, TA), + ?FATE_VARIANT(AritiesB, TagB, TB)) -> if length(AritiesA) < length(AritiesB) -> true; length(AritiesA) > length(AritiesB) -> false; true -> -- 2.30.2