76 lines
3.0 KiB
Plaintext
Raw Normal View History

2023-02-14 08:38:15 +04:00
import "@fluencelabs/aqua-lib/builtin.aqua"
export randomLoadBalancingEth, roundRobinEth, Counter, Logger
data EthResult:
2023-02-09 14:07:18 +04:00
value: string
success: bool
error: string
2023-02-21 16:31:21 +04:00
data QuorumResult:
value: string
results: []EthResult
error: string
2023-02-09 14:07:18 +04:00
service Logger("logger"):
log(s: []string)
2023-02-14 08:38:15 +04:00
logCall(s: string)
service NumOp("op"):
identity(n: u64) -> i64
service Counter("counter"):
incrementAndReturn() -> u32
2023-02-21 16:31:21 +04:00
service QuorumChecker("quorum"):
check(results: []EthResult, minResults: u32) -> QuorumResult
2023-02-14 08:38:15 +04:00
func empty() -> EthResult:
<- EthResult(value = "", success = true, error = "")
2023-02-09 14:07:18 +04:00
service EthCaller:
2023-02-14 08:38:15 +04:00
eth_call(uri: string, method: string, jsonArgs: []string) -> EthResult
2023-02-09 14:07:18 +04:00
2023-02-14 08:38:15 +04:00
func call(uri: string, method: string, jsonArgs: []string, serviceId: string) -> EthResult:
2023-02-09 14:07:18 +04:00
EthCaller serviceId
on HOST_PEER_ID:
2023-02-14 08:38:15 +04:00
res <- EthCaller.eth_call(uri, method, jsonArgs)
<- res
func randomLoadBalancing(uris: []string, method: string, jsonArgs: []string, serviceId: string, callFunc: string, string, []string, string -> EthResult) -> EthResult:
on INIT_PEER_ID:
time <- NumOp.identity(Peer.timestamp_sec())
providerNumber = time % Op.array_length(uris)
Logger.logCall(uris[providerNumber])
<- callFunc(uris[providerNumber], method, jsonArgs, serviceId)
func randomLoadBalancingEth(uris: []string, method: string, jsonArgs: []string, serviceId: string) -> EthResult:
<- randomLoadBalancing(uris, method, jsonArgs, serviceId, call)
func roundRobin(uris: []string, method: string, jsonArgs: []string, serviceId: string, counterServiceId: string, counterPeerId: string, callFunc: string, string, []string, string -> EthResult) -> EthResult:
on counterPeerId:
Counter counterServiceId
requestNumber <- Counter.incrementAndReturn()
on INIT_PEER_ID:
2023-02-21 11:44:13 +04:00
providerNumber = requestNumber % uris.length
2023-02-14 08:38:15 +04:00
Logger.logCall(uris[providerNumber])
<- callFunc(uris[providerNumber], method, jsonArgs, serviceId)
func roundRobinEth(uris: []string, method: string, jsonArgs: []string, serviceId: string, counterServiceId: string, counterPeerId: string) -> EthResult:
2023-02-21 16:31:21 +04:00
<- roundRobin(uris, method, jsonArgs, serviceId, counterServiceId, counterPeerId, call)
func quorum(uris: []string, quorumNumber: u32, timeout: u32, method: string, jsonArgs: []string, serviceId: string, quorumServiceId: string, quorumPeerId: string,
callFunc: string, string, []string, string -> EthResult) -> QuorumResult:
results: *EthResult
on INIT_PEER_ID:
for uri <- uris par:
results <- callFunc(uri, method, jsonArgs, serviceId)
join results[uris.length - 1]
par Peer.timeout(timeout, "")
on quorumPeerId:
Counter quorumServiceId
quorumResult <- QuorumChecker.check(results, quorumNumber)
<- quorumResult
func quorumEth(uris: []string, quorumNumber: u32, timeout: u32, method: string, jsonArgs: []string, serviceId: string, quorumServiceId: string, quorumPeerId: string) -> QuorumResult:
<- quorum(uris, quorumNumber, timeout, method, jsonArgs, serviceId, quorumServiceId, quorumPeerId, call)