-
Notifications
You must be signed in to change notification settings - Fork 0
/
multiquery.lua
60 lines (44 loc) · 1.21 KB
/
multiquery.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
-------------------------------------------------------------------
-- MULTI-QUERY CONTRACT
-------------------------------------------------------------------
function aggregate(...)
local args = {...}
local results = {}
if type(args[1][1]) == 'table' then
args = args[1]
end
for i,call in ipairs(args) do
results[i] = contract.call(unpack(call))
end
return results
end
function force_aggregate(...)
local args = {...}
local results = {}
if type(args[1][1]) == 'table' then
args = args[1]
end
for i,call in ipairs(args) do
local success, result = pcall(contract.call, unpack(call))
results[i] = {success, result}
end
return results
end
abi.register_view(aggregate, force_aggregate)
-- Helper Functions - they can also be called via the aggregator above
function getBlockheight()
return system.getBlockheight()
end
function getPrevBlockHash()
return system.getPrevBlockHash()
end
function getTimestamp()
return system.getTimestamp()
end
function getAergoBalance(address)
return contract.balance(address)
end
function isContract(address)
return system.isContract(address)
end
abi.register_view(getBlockheight, getPrevBlockHash, getTimestamp, getAergoBalance, isContract)