Add AENS.lookup
Also move Pointee-constructors inside AENS namespace.
This commit is contained in:
parent
db01e237c1
commit
c3426f0e65
@ -390,6 +390,7 @@ global_env() ->
|
|||||||
SignFun = fun(Ts, T) -> {type_sig, [stateful|Ann], none, [Signature], Ts, T} end,
|
SignFun = fun(Ts, T) -> {type_sig, [stateful|Ann], none, [Signature], Ts, T} end,
|
||||||
TTL = {qid, Ann, ["Chain", "ttl"]},
|
TTL = {qid, Ann, ["Chain", "ttl"]},
|
||||||
Pointee = {qid, Ann, ["AENS", "pointee"]},
|
Pointee = {qid, Ann, ["AENS", "pointee"]},
|
||||||
|
AENSName = {qid, Ann, ["AENS", "name"]},
|
||||||
Fr = {qid, Ann, ["MCL_BLS12_381", "fr"]},
|
Fr = {qid, Ann, ["MCL_BLS12_381", "fr"]},
|
||||||
Fp = {qid, Ann, ["MCL_BLS12_381", "fp"]},
|
Fp = {qid, Ann, ["MCL_BLS12_381", "fp"]},
|
||||||
Fp2 = {tuple_t, Ann, [Fp, Fp]},
|
Fp2 = {tuple_t, Ann, [Fp, Fp]},
|
||||||
@ -410,10 +411,6 @@ global_env() ->
|
|||||||
%% TTL constructors
|
%% TTL constructors
|
||||||
{"RelativeTTL", Fun1(Int, TTL)},
|
{"RelativeTTL", Fun1(Int, TTL)},
|
||||||
{"FixedTTL", Fun1(Int, TTL)},
|
{"FixedTTL", Fun1(Int, TTL)},
|
||||||
%% AENS pointee constructors
|
|
||||||
{"AccountPointee", Fun1(Address, Pointee)},
|
|
||||||
{"OraclePointee", Fun1(Address, Pointee)},
|
|
||||||
{"ContractPointee", Fun1(Address, Pointee)},
|
|
||||||
%% Abort
|
%% Abort
|
||||||
{"abort", Fun1(String, A)},
|
{"abort", Fun1(String, A)},
|
||||||
{"require", Fun([Bool, String], Unit)}])
|
{"require", Fun([Bool, String], Unit)}])
|
||||||
@ -476,8 +473,17 @@ global_env() ->
|
|||||||
{"claim", SignFun([Address, String, Int, Int], Unit)},
|
{"claim", SignFun([Address, String, Int, Int], Unit)},
|
||||||
{"transfer", SignFun([Address, Address, String], Unit)},
|
{"transfer", SignFun([Address, Address, String], Unit)},
|
||||||
{"revoke", SignFun([Address, String], Unit)},
|
{"revoke", SignFun([Address, String], Unit)},
|
||||||
{"update", SignFun([Address, String, Option(TTL), Option(Int), Option(Map(String, Pointee))], Unit)}])
|
{"update", SignFun([Address, String, Option(TTL), Option(Int), Option(Map(String, Pointee))], Unit)},
|
||||||
, types = MkDefs([{"pointee", 0}]) },
|
{"lookup", Fun([String], option_t(Ann, AENSName))},
|
||||||
|
%% AENS pointee constructors
|
||||||
|
{"AccountPt", Fun1(Address, Pointee)},
|
||||||
|
{"OraclePt", Fun1(Address, Pointee)},
|
||||||
|
{"ContractPt", Fun1(Address, Pointee)},
|
||||||
|
{"ChannelPt", Fun1(Address, Pointee)},
|
||||||
|
%% Name object constructor
|
||||||
|
{"Name", Fun([Address, TTL, Map(String, Pointee)], AENSName)}
|
||||||
|
])
|
||||||
|
, types = MkDefs([{"pointee", 0}, {"name", 0}]) },
|
||||||
|
|
||||||
MapScope = #scope
|
MapScope = #scope
|
||||||
{ funs = MkDefs(
|
{ funs = MkDefs(
|
||||||
|
@ -185,9 +185,11 @@ init_env(Options) ->
|
|||||||
["Some"] => #con_tag{ tag = 1, arities = [0, 1] },
|
["Some"] => #con_tag{ tag = 1, arities = [0, 1] },
|
||||||
["RelativeTTL"] => #con_tag{ tag = 0, arities = [1, 1] },
|
["RelativeTTL"] => #con_tag{ tag = 0, arities = [1, 1] },
|
||||||
["FixedTTL"] => #con_tag{ tag = 1, arities = [1, 1] },
|
["FixedTTL"] => #con_tag{ tag = 1, arities = [1, 1] },
|
||||||
["AccountPointee"] => #con_tag{ tag = 0, arities = [1, 1, 1] },
|
["AENS", "AccountPt"] => #con_tag{ tag = 0, arities = [1, 1, 1, 1] },
|
||||||
["OraclePointee"] => #con_tag{ tag = 1, arities = [1, 1, 1] },
|
["AENS", "OraclePt"] => #con_tag{ tag = 1, arities = [1, 1, 1, 1] },
|
||||||
["ContractPointee"] => #con_tag{ tag = 2, arities = [1, 1, 1] }
|
["AENS", "ContractPt"] => #con_tag{ tag = 2, arities = [1, 1, 1, 1] },
|
||||||
|
["AENS", "ChannelPt"] => #con_tag{ tag = 3, arities = [1, 1, 1, 1] },
|
||||||
|
["AENS", "Name"] => #con_tag{ tag = 0, arities = [3] }
|
||||||
},
|
},
|
||||||
options => Options,
|
options => Options,
|
||||||
functions => #{} }.
|
functions => #{} }.
|
||||||
@ -208,7 +210,7 @@ builtins() ->
|
|||||||
{"respond", 4}, {"extend", 3}, {"get_answer", 2},
|
{"respond", 4}, {"extend", 3}, {"get_answer", 2},
|
||||||
{"check", 1}, {"check_query", 2}]},
|
{"check", 1}, {"check_query", 2}]},
|
||||||
{["AENS"], [{"resolve", 2}, {"preclaim", 3}, {"claim", 5}, {"transfer", 4},
|
{["AENS"], [{"resolve", 2}, {"preclaim", 3}, {"claim", 5}, {"transfer", 4},
|
||||||
{"revoke", 3}, {"update", 6}]},
|
{"revoke", 3}, {"update", 6}, {"lookup", 1}]},
|
||||||
{["Map"], [{"from_list", 1}, {"to_list", 1}, {"lookup", 2},
|
{["Map"], [{"from_list", 1}, {"to_list", 1}, {"lookup", 2},
|
||||||
{"lookup_default", 3}, {"delete", 2}, {"member", 2}, {"size", 1}]},
|
{"lookup_default", 3}, {"delete", 2}, {"member", 2}, {"size", 1}]},
|
||||||
{["Crypto"], [{"verify_sig", 3}, {"verify_sig_secp256k1", 3},
|
{["Crypto"], [{"verify_sig", 3}, {"verify_sig_secp256k1", 3},
|
||||||
@ -253,7 +255,8 @@ init_type_env() ->
|
|||||||
["map"] => ?type(K, V, {map, K, V}),
|
["map"] => ?type(K, V, {map, K, V}),
|
||||||
["option"] => ?type(T, {variant, [[], [T]]}),
|
["option"] => ?type(T, {variant, [[], [T]]}),
|
||||||
["Chain", "ttl"] => ?type({variant, [[integer], [integer]]}),
|
["Chain", "ttl"] => ?type({variant, [[integer], [integer]]}),
|
||||||
["AENS", "pointee"] => ?type({variant, [[address], [address], [address]]}),
|
["AENS", "pointee"] => ?type({variant, [[address], [address], [address], [address]]}),
|
||||||
|
["AENS", "name"] => ?type({variant, [[address, {variant, [[integer], [integer]]}, {map, string, {variant, [[address], [address], [address], [address]]}}]]}),
|
||||||
["MCL_BLS12_381", "fr"] => ?type({bytes, 32}),
|
["MCL_BLS12_381", "fr"] => ?type({bytes, 32}),
|
||||||
["MCL_BLS12_381", "fp"] => ?type({bytes, 48})
|
["MCL_BLS12_381", "fp"] => ?type({bytes, 48})
|
||||||
}.
|
}.
|
||||||
|
@ -541,6 +541,8 @@ builtin_to_scode(Env, aens_revoke, [_Sign, _Account, _Name] = Args) ->
|
|||||||
builtin_to_scode(Env, aens_update, [_Sign, _Account, _NameString, _TTL, _ClientTTL, _Pointers] = Args) ->
|
builtin_to_scode(Env, aens_update, [_Sign, _Account, _NameString, _TTL, _ClientTTL, _Pointers] = Args) ->
|
||||||
call_to_scode(Env, [aeb_fate_ops:aens_update(?a, ?a, ?a, ?a, ?a, ?a),
|
call_to_scode(Env, [aeb_fate_ops:aens_update(?a, ?a, ?a, ?a, ?a, ?a),
|
||||||
tuple(0)], Args);
|
tuple(0)], Args);
|
||||||
|
builtin_to_scode(Env, aens_lookup, [_Name] = Args) ->
|
||||||
|
call_to_scode(Env, aeb_fate_ops:aens_lookup(?a, ?a), Args);
|
||||||
builtin_to_scode(_Env, auth_tx_hash, []) ->
|
builtin_to_scode(_Env, auth_tx_hash, []) ->
|
||||||
[aeb_fate_ops:auth_tx_hash(?a)].
|
[aeb_fate_ops:auth_tx_hash(?a)].
|
||||||
|
|
||||||
@ -889,6 +891,7 @@ attributes(I) ->
|
|||||||
{'AENS_UPDATE', A, B, C, D, E, F} -> Impure(none, [A, B, C, D, E, F]);
|
{'AENS_UPDATE', A, B, C, D, E, F} -> Impure(none, [A, B, C, D, E, F]);
|
||||||
{'AENS_TRANSFER', A, B, C, D} -> Impure(none, [A, B, C, D]);
|
{'AENS_TRANSFER', A, B, C, D} -> Impure(none, [A, B, C, D]);
|
||||||
{'AENS_REVOKE', A, B, C} -> Impure(none, [A, B, C]);
|
{'AENS_REVOKE', A, B, C} -> Impure(none, [A, B, C]);
|
||||||
|
{'AENS_LOOKUP', A, B} -> Impure(A, [B]);
|
||||||
{'BLS12_381_G1_NEG', A, B} -> Pure(A, [B]);
|
{'BLS12_381_G1_NEG', A, B} -> Pure(A, [B]);
|
||||||
{'BLS12_381_G1_NORM', A, B} -> Pure(A, [B]);
|
{'BLS12_381_G1_NORM', A, B} -> Pure(A, [B]);
|
||||||
{'BLS12_381_G1_VALID', A, B} -> Pure(A, [B]);
|
{'BLS12_381_G1_VALID', A, B} -> Pure(A, [B]);
|
||||||
|
@ -154,6 +154,7 @@ compilable_contracts() ->
|
|||||||
"bytes_to_x",
|
"bytes_to_x",
|
||||||
"bytes_concat",
|
"bytes_concat",
|
||||||
"aens",
|
"aens",
|
||||||
|
"aens_update",
|
||||||
"tuple_match",
|
"tuple_match",
|
||||||
"cyclic_include",
|
"cyclic_include",
|
||||||
"stdlib_include",
|
"stdlib_include",
|
||||||
@ -170,7 +171,7 @@ compilable_contracts() ->
|
|||||||
].
|
].
|
||||||
|
|
||||||
not_yet_compilable(fate) -> [];
|
not_yet_compilable(fate) -> [];
|
||||||
not_yet_compilable(aevm) -> ["pairing_crypto"].
|
not_yet_compilable(aevm) -> ["pairing_crypto", "aens_update"].
|
||||||
|
|
||||||
%% Contracts that should produce type errors
|
%% Contracts that should produce type errors
|
||||||
|
|
||||||
|
17
test/contracts/aens_update.aes
Normal file
17
test/contracts/aens_update.aes
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
contract AENSUpdate =
|
||||||
|
stateful entrypoint update_name(owner : address, name : string) =
|
||||||
|
let p1 : AENS.pointee = AENS.AccountPt(Call.caller)
|
||||||
|
let p2 : AENS.pointee = AENS.OraclePt(Call.caller)
|
||||||
|
let p3 : AENS.pointee = AENS.ContractPt(Call.caller)
|
||||||
|
let p4 : AENS.pointee = AENS.ChannelPt(Call.caller)
|
||||||
|
AENS.update(owner, name, None, None,
|
||||||
|
Some({ ["account_pubkey"] = p1, ["oracle_pubkey"] = p2,
|
||||||
|
["contract_pubkey"] = p3, ["misc"] = p4 }))
|
||||||
|
|
||||||
|
entrypoint get_ttl(name : string) =
|
||||||
|
switch(AENS.lookup(name))
|
||||||
|
Some(AENS.Name(_, FixedTTL(ttl), _)) => ttl
|
||||||
|
|
||||||
|
entrypoint expiry(o : oracle(int, int)) : int =
|
||||||
|
Oracle.expiry(o)
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user