Merge pull request #214 from aeternity/GH-188-AENS_lookup
Add AENS.lookup and Oracle.expiry
This commit is contained in:
commit
34c10e1518
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
{erl_opts, [debug_info]}.
|
{erl_opts, [debug_info]}.
|
||||||
|
|
||||||
{deps, [ {aebytecode, {git, "https://github.com/aeternity/aebytecode.git", {ref,"e4b09d7"}}}
|
{deps, [ {aebytecode, {git, "https://github.com/aeternity/aebytecode.git", {ref,"8a9c9de"}}}
|
||||||
, {getopt, "1.0.1"}
|
, {getopt, "1.0.1"}
|
||||||
, {eblake2, "1.0.0"}
|
, {eblake2, "1.0.0"}
|
||||||
, {jsx, {git, "https://github.com/talentdeficit/jsx.git",
|
, {jsx, {git, "https://github.com/talentdeficit/jsx.git",
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
{"1.1.0",
|
{"1.1.0",
|
||||||
[{<<"aebytecode">>,
|
[{<<"aebytecode">>,
|
||||||
{git,"https://github.com/aeternity/aebytecode.git",
|
{git,"https://github.com/aeternity/aebytecode.git",
|
||||||
{ref,"e4b09d7c5c85030636b3b88df7dd9f89f3d1e2cb"}},
|
{ref,"8a9c9dec956b1d2322b38490b2759e53a91affab"}},
|
||||||
0},
|
0},
|
||||||
{<<"aeserialization">>,
|
{<<"aeserialization">>,
|
||||||
{git,"https://github.com/aeternity/aeserialization.git",
|
{git,"https://github.com/aeternity/aeserialization.git",
|
||||||
|
@ -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)}])
|
||||||
@ -459,6 +456,7 @@ global_env() ->
|
|||||||
OracleScope = #scope
|
OracleScope = #scope
|
||||||
{ funs = MkDefs(
|
{ funs = MkDefs(
|
||||||
[{"register", SignFun([Address, Fee, TTL], Oracle(Q, R))},
|
[{"register", SignFun([Address, Fee, TTL], Oracle(Q, R))},
|
||||||
|
{"expiry", Fun([Oracle(Q, R)], Fee)},
|
||||||
{"query_fee", Fun([Oracle(Q, R)], Fee)},
|
{"query_fee", Fun([Oracle(Q, R)], Fee)},
|
||||||
{"query", StateFun([Oracle(Q, R), Q, Fee, TTL, TTL], Query(Q, R))},
|
{"query", StateFun([Oracle(Q, R), Q, Fee, TTL, TTL], Query(Q, R))},
|
||||||
{"get_question", Fun([Oracle(Q, R), Query(Q, R)], Q)},
|
{"get_question", Fun([Oracle(Q, R), Query(Q, R)], Q)},
|
||||||
@ -475,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 => #{} }.
|
||||||
@ -204,11 +206,11 @@ builtins() ->
|
|||||||
{["Contract"], [{"address", none}, {"balance", none}, {"creator", none}]},
|
{["Contract"], [{"address", none}, {"balance", none}, {"creator", none}]},
|
||||||
{["Call"], [{"origin", none}, {"caller", none}, {"value", none}, {"gas_price", none},
|
{["Call"], [{"origin", none}, {"caller", none}, {"value", none}, {"gas_price", none},
|
||||||
{"gas_left", 0}]},
|
{"gas_left", 0}]},
|
||||||
{["Oracle"], [{"register", 4}, {"query_fee", 1}, {"query", 5}, {"get_question", 2},
|
{["Oracle"], [{"register", 4}, {"expiry", 1}, {"query_fee", 1}, {"query", 5}, {"get_question", 2},
|
||||||
{"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})
|
||||||
}.
|
}.
|
||||||
|
@ -498,6 +498,8 @@ builtin_to_scode(_Env, call_gas_left, []) ->
|
|||||||
[aeb_fate_ops:gas(?a)];
|
[aeb_fate_ops:gas(?a)];
|
||||||
builtin_to_scode(Env, oracle_register, [_Sign,_Account,_QFee,_TTL,_QType,_RType] = Args) ->
|
builtin_to_scode(Env, oracle_register, [_Sign,_Account,_QFee,_TTL,_QType,_RType] = Args) ->
|
||||||
call_to_scode(Env, aeb_fate_ops:oracle_register(?a, ?a, ?a, ?a, ?a, ?a, ?a), Args);
|
call_to_scode(Env, aeb_fate_ops:oracle_register(?a, ?a, ?a, ?a, ?a, ?a, ?a), Args);
|
||||||
|
builtin_to_scode(Env, oracle_expiry, [_Oracle] = Args) ->
|
||||||
|
call_to_scode(Env, aeb_fate_ops:oracle_expiry(?a, ?a), Args);
|
||||||
builtin_to_scode(Env, oracle_query_fee, [_Oracle] = Args) ->
|
builtin_to_scode(Env, oracle_query_fee, [_Oracle] = Args) ->
|
||||||
call_to_scode(Env, aeb_fate_ops:oracle_query_fee(?a, ?a), Args);
|
call_to_scode(Env, aeb_fate_ops:oracle_query_fee(?a, ?a), Args);
|
||||||
builtin_to_scode(Env, oracle_query, [_Oracle, _Question, _QFee, _QTTL, _RTTL, _QType, _RType] = Args) ->
|
builtin_to_scode(Env, oracle_query, [_Oracle, _Question, _QFee, _QTTL, _RTTL, _QType, _RType] = Args) ->
|
||||||
@ -539,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)].
|
||||||
|
|
||||||
@ -880,12 +884,14 @@ attributes(I) ->
|
|||||||
{'ORACLE_GET_ANSWER', A, B, C, D, E} -> Pure(A, [B, C, D, E]);
|
{'ORACLE_GET_ANSWER', A, B, C, D, E} -> Pure(A, [B, C, D, E]);
|
||||||
{'ORACLE_GET_QUESTION', A, B, C, D, E}-> Pure(A, [B, C, D, E]);
|
{'ORACLE_GET_QUESTION', A, B, C, D, E}-> Pure(A, [B, C, D, E]);
|
||||||
{'ORACLE_QUERY_FEE', A, B} -> Pure(A, [B]);
|
{'ORACLE_QUERY_FEE', A, B} -> Pure(A, [B]);
|
||||||
{'AENS_RESOLVE', A, B, C, D} -> Pure(A, [B, C, D]);
|
{'ORACLE_EXPIRY', A, B} -> Impure(A, [B]);
|
||||||
|
{'AENS_RESOLVE', A, B, C, D} -> Impure(A, [B, C, D]);
|
||||||
{'AENS_PRECLAIM', A, B, C} -> Impure(none, [A, B, C]);
|
{'AENS_PRECLAIM', A, B, C} -> Impure(none, [A, B, C]);
|
||||||
{'AENS_CLAIM', A, B, C, D, E} -> Impure(none, [A, B, C, D, E]);
|
{'AENS_CLAIM', A, B, C, D, E} -> Impure(none, [A, B, C, D, E]);
|
||||||
{'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)
|
||||||
|
|
@ -25,6 +25,9 @@ contract ChannelOnChainContractOracle =
|
|||||||
Some(_value) =>
|
Some(_value) =>
|
||||||
"bet_already_taken"
|
"bet_already_taken"
|
||||||
|
|
||||||
|
public function expiry() =
|
||||||
|
Oracle.expiry(state.oracle)
|
||||||
|
|
||||||
public function query_fee() =
|
public function query_fee() =
|
||||||
Oracle.query_fee(state.oracle)
|
Oracle.query_fee(state.oracle)
|
||||||
|
|
||||||
|
@ -21,6 +21,7 @@ contract UnappliedBuiltins =
|
|||||||
function b_abort() = abort
|
function b_abort() = abort
|
||||||
function b_require() = require
|
function b_require() = require
|
||||||
function oracle_query_fee() = Oracle.query_fee
|
function oracle_query_fee() = Oracle.query_fee
|
||||||
|
function oracle_expiry() = Oracle.expiry
|
||||||
stateful function oracle_query() = Oracle.query : (o, _, _, _, _) => _
|
stateful function oracle_query() = Oracle.query : (o, _, _, _, _) => _
|
||||||
function oracle_get_question() = Oracle.get_question : (o, _) => _
|
function oracle_get_question() = Oracle.get_question : (o, _) => _
|
||||||
function oracle_get_answer() = Oracle.get_answer : (o, _) => _
|
function oracle_get_answer() = Oracle.get_answer : (o, _) => _
|
||||||
|
Loading…
x
Reference in New Issue
Block a user