diff --git a/packages/packages.json b/packages/packages.json index 23659f66..1f7ec53d 100644 --- a/packages/packages.json +++ b/packages/packages.json @@ -1,11 +1,11 @@ { "dev": { - "skill/valory/market_manager_abci/0.1.0": "bafybeihosbo5jkviuy2bdgbt4gll3ba4hgxwgbkj6lup23z5wiopb7vf7q", - "skill/valory/decision_maker_abci/0.1.0": "bafybeia52wpwgnqxb3bm4mgbb5y2cq6lvuuhv2uvmfvsg6qglmrbfsdkru", - "skill/valory/trader_abci/0.1.0": "bafybeigpnlzqcktz6b43l4azljemu4lobsastxdzfdbzhukzctb5tusxly", + "skill/valory/market_manager_abci/0.1.0": "bafybeihdw263vfkzvopfmsatnlrcky5ohcq6grjeurr6opcmm6kcqqfkba", + "skill/valory/decision_maker_abci/0.1.0": "bafybeigdlxygxlxtubwwbninvhcm7m44fe634kp6fjhsdsvsubbti44kzy", + "skill/valory/trader_abci/0.1.0": "bafybeiaf76cioo47imacxziiqnvzmzq5tculaxk3q2sa53mrpuvszur2ji", "contract/valory/market_maker/0.1.0": "bafybeifihhoertnx3itmfzbuf4lazclzjuctxurayajguyn7ggsddolhte", - "agent/valory/trader/0.1.0": "bafybeibuasbe47gl3nbo2wsvpzls5fpu5nmbsakuodc3hh3zbv65wwj26u", - "service/valory/trader/0.1.0": "bafybeieqtx6toktbm6injnm26maeiqtplyttcjp5xao6445fytaubkucdy" + "agent/valory/trader/0.1.0": "bafybeief3ecqswbtah7iiweyw4afpnh7k3txn2jslhbf5ykkhvvpkhzrbu", + "service/valory/trader/0.1.0": "bafybeibkgt7tb4oy7ismczzzcxaw32v2ijefd4upr7z6ri4rharlgvethi" }, "third_party": { "protocol/open_aea/signing/1.0.0": "bafybeibqlfmikg5hk4phzak6gqzhpkt6akckx7xppbp53mvwt6r73h7tk4", diff --git a/packages/valory/agents/trader/aea-config.yaml b/packages/valory/agents/trader/aea-config.yaml index a7cc4f4e..2f070245 100644 --- a/packages/valory/agents/trader/aea-config.yaml +++ b/packages/valory/agents/trader/aea-config.yaml @@ -33,9 +33,9 @@ skills: - valory/reset_pause_abci:0.1.0:bafybeibqz7y3i4aepuprhijwdydkcsbqjtpeea6gdzpp5fgc6abrvjz25a - valory/termination_abci:0.1.0:bafybeieb3gnvjxxsh73g67m7rivzknwb63xu4qeagpkv7f4mqz33ecikem - valory/transaction_settlement_abci:0.1.0:bafybeihdpac4ayfgop3ixflimlb3zzyeejlpqtljfptdak6tc7aq4u5fzi -- valory/market_manager_abci:0.1.0:bafybeihosbo5jkviuy2bdgbt4gll3ba4hgxwgbkj6lup23z5wiopb7vf7q -- valory/decision_maker_abci:0.1.0:bafybeia52wpwgnqxb3bm4mgbb5y2cq6lvuuhv2uvmfvsg6qglmrbfsdkru -- valory/trader_abci:0.1.0:bafybeigpnlzqcktz6b43l4azljemu4lobsastxdzfdbzhukzctb5tusxly +- valory/market_manager_abci:0.1.0:bafybeihdw263vfkzvopfmsatnlrcky5ohcq6grjeurr6opcmm6kcqqfkba +- valory/decision_maker_abci:0.1.0:bafybeigdlxygxlxtubwwbninvhcm7m44fe634kp6fjhsdsvsubbti44kzy +- valory/trader_abci:0.1.0:bafybeiaf76cioo47imacxziiqnvzmzq5tculaxk3q2sa53mrpuvszur2ji default_ledger: ethereum required_ledgers: - ethereum diff --git a/packages/valory/services/trader/service.yaml b/packages/valory/services/trader/service.yaml index 71a80a74..10fd2c53 100644 --- a/packages/valory/services/trader/service.yaml +++ b/packages/valory/services/trader/service.yaml @@ -7,7 +7,7 @@ license: Apache-2.0 fingerprint: README.md: bafybeigtuothskwyvrhfosps2bu6suauycolj67dpuxqvnicdrdu7yhtvq fingerprint_ignore_patterns: [] -agent: valory/trader:0.1.0:bafybeibuasbe47gl3nbo2wsvpzls5fpu5nmbsakuodc3hh3zbv65wwj26u +agent: valory/trader:0.1.0:bafybeief3ecqswbtah7iiweyw4afpnh7k3txn2jslhbf5ykkhvvpkhzrbu number_of_agents: 4 deployment: {} --- diff --git a/packages/valory/skills/decision_maker_abci/behaviours/base.py b/packages/valory/skills/decision_maker_abci/behaviours/base.py index ab16a286..1a3b8475 100644 --- a/packages/valory/skills/decision_maker_abci/behaviours/base.py +++ b/packages/valory/skills/decision_maker_abci/behaviours/base.py @@ -39,7 +39,7 @@ def params(self) -> DecisionMakerParams: @property def synchronized_data(self) -> SynchronizedData: """Return the synchronized data.""" - return cast(SynchronizedData, super().synchronized_data) + return SynchronizedData(super().synchronized_data.db) def finish_behaviour(self, payload: BaseTxPayload) -> Generator: """Finish the behaviour.""" diff --git a/packages/valory/skills/decision_maker_abci/behaviours/sampling.py b/packages/valory/skills/decision_maker_abci/behaviours/sampling.py index 6a57e2fd..37df8858 100644 --- a/packages/valory/skills/decision_maker_abci/behaviours/sampling.py +++ b/packages/valory/skills/decision_maker_abci/behaviours/sampling.py @@ -19,14 +19,18 @@ """This module contains the behaviour for sampling a bet.""" -from typing import Generator, Iterator +from typing import Generator, Iterator, Optional from packages.valory.skills.decision_maker_abci.behaviours.base import ( DecisionMakerBaseBehaviour, ) from packages.valory.skills.decision_maker_abci.payloads import SamplingPayload from packages.valory.skills.decision_maker_abci.states.sampling import SamplingRound -from packages.valory.skills.market_manager_abci.bets import Bet, BetStatus +from packages.valory.skills.market_manager_abci.bets import ( + Bet, + BetStatus, + serialize_bets, +) class SamplingBehaviour(DecisionMakerBaseBehaviour): @@ -53,9 +57,17 @@ def sampled_bet_idx(self) -> int: max_lq = max(self.available_bets, key=lambda bet: bet.usdLiquidityMeasure) return self.synchronized_data.bets.index(max_lq) + def set_processed(self, idx: int) -> Optional[str]: + """Update the bet's status for the given id to `PROCESSED`, and return the updated bets list, serialized.""" + bets = self.synchronized_data.bets + bets[idx].status = BetStatus.PROCESSED + return serialize_bets(bets) + def async_act(self) -> Generator: """Do the action.""" with self.context.benchmark_tool.measure(self.behaviour_id).local(): - payload = SamplingPayload(self.context.agent_address, self.sampled_bet_idx) + idx = self.sampled_bet_idx + bets = self.set_processed(idx) + payload = SamplingPayload(self.context.agent_address, bets, idx) yield from self.finish_behaviour(payload) diff --git a/packages/valory/skills/decision_maker_abci/fsm_specification.yaml b/packages/valory/skills/decision_maker_abci/fsm_specification.yaml index ee53781c..6eb39841 100644 --- a/packages/valory/skills/decision_maker_abci/fsm_specification.yaml +++ b/packages/valory/skills/decision_maker_abci/fsm_specification.yaml @@ -15,6 +15,7 @@ final_states: - ImpossibleRound label: DecisionMakerAbciApp start_states: +- BlacklistingRound - SamplingRound states: - BetPlacementRound diff --git a/packages/valory/skills/decision_maker_abci/payloads.py b/packages/valory/skills/decision_maker_abci/payloads.py index 1092b2ad..37c7cf2c 100644 --- a/packages/valory/skills/decision_maker_abci/payloads.py +++ b/packages/valory/skills/decision_maker_abci/payloads.py @@ -23,6 +23,7 @@ from typing import Optional from packages.valory.skills.abstract_round_abci.base import BaseTxPayload +from packages.valory.skills.market_manager_abci.payloads import UpdateBetsPayload @dataclass(frozen=True) @@ -36,7 +37,7 @@ class DecisionMakerPayload(BaseTxPayload): @dataclass(frozen=True) -class SamplingPayload(BaseTxPayload): +class SamplingPayload(UpdateBetsPayload): """Represents a transaction payload for the sampling of a bet.""" index: int diff --git a/packages/valory/skills/decision_maker_abci/rounds.py b/packages/valory/skills/decision_maker_abci/rounds.py index 350f6dad..91fb116b 100644 --- a/packages/valory/skills/decision_maker_abci/rounds.py +++ b/packages/valory/skills/decision_maker_abci/rounds.py @@ -25,8 +25,12 @@ AbciApp, AbciAppTransitionFunction, AppState, + get_name, +) +from packages.valory.skills.decision_maker_abci.states.base import ( + Event, + SynchronizedData, ) -from packages.valory.skills.decision_maker_abci.states.base import Event from packages.valory.skills.decision_maker_abci.states.bet_placement import ( BetPlacementRound, ) @@ -52,7 +56,7 @@ class DecisionMakerAbciApp(AbciApp[Event]): Initial round: SamplingRound - Initial states: {SamplingRound} + Initial states: {BlacklistingRound, SamplingRound} Transition states: 0. SamplingRound @@ -90,7 +94,7 @@ class DecisionMakerAbciApp(AbciApp[Event]): """ initial_round_cls: AppState = SamplingRound - initial_states: Set[AppState] = {SamplingRound} + initial_states: Set[AppState] = {SamplingRound, BlacklistingRound} transition_function: AbciAppTransitionFunction = { SamplingRound: { Event.DONE: DecisionMakerRound, @@ -134,10 +138,16 @@ class DecisionMakerAbciApp(AbciApp[Event]): Event.ROUND_TIMEOUT: 30.0, } db_pre_conditions: Dict[AppState, Set[str]] = { + BlacklistingRound: { + get_name(SynchronizedData.bets), + }, SamplingRound: set(), } db_post_conditions: Dict[AppState, Set[str]] = { - FinishedDecisionMakerRound: set(), - FinishedWithoutDecisionRound: set(), + FinishedDecisionMakerRound: { + get_name(SynchronizedData.sampled_bet_index), + get_name(SynchronizedData.most_voted_tx_hash), + }, + FinishedWithoutDecisionRound: {get_name(SynchronizedData.sampled_bet_index)}, ImpossibleRound: set(), } diff --git a/packages/valory/skills/decision_maker_abci/skill.yaml b/packages/valory/skills/decision_maker_abci/skill.yaml index 04df8527..ca352a4f 100644 --- a/packages/valory/skills/decision_maker_abci/skill.yaml +++ b/packages/valory/skills/decision_maker_abci/skill.yaml @@ -9,25 +9,25 @@ fingerprint: README.md: bafybeia367zzdwndvlhw27rvnwodytjo3ms7gbc3q7mhrrjqjgfasnk47i __init__.py: bafybeih563ujnigeci2ldzh7hakbau6a222vsed7leg3b7lq32vcn3nm4a behaviours/__init__.py: bafybeih6ddz2ocvm6x6ytvlbcz6oi4snb5ee5xh5h65nq4w2qf7fd7zfky - behaviours/base.py: bafybeihpxgeu6bkjyfhnayz27jvmm44h4cogia3erl2ihm4bdle6ribpiy + behaviours/base.py: bafybeiftzkqcn2abil4ljzoppcl52zrztplymwqbnydm6ippn7kzhgjexy behaviours/bet_placement.py: bafybeigs7rzfms4axsdrqayo6vjomrxfu4vb2xu7yemizqehqimmdejx4e behaviours/blacklisting.py: bafybeicvespraci44y2dtddy4wi7cdhjuyk6crjs7ztnssm2rcrovha3hm behaviours/decision_maker.py: bafybeia7uxg4z2orig42t7k2s6bi2236jhlbgfwz2airwbpsuujbr3l6by behaviours/round_behaviour.py: bafybeieoumnukyl3zojpud5ojmjder5lkncxwsxnhtfvwrbvs52bl4gj7a - behaviours/sampling.py: bafybeicx24iw2k4ps2eqmokqtnkndii7togl2cgfr65vjiegoxflzj5ekq + behaviours/sampling.py: bafybeiejyrqf2evjtct35eq3vwjw3f3ymeank2utsa62u5zytbj7y4l7tm dialogues.py: bafybeigpwuzku3we7axmxeamg7vn656maww6emuztau5pg3ebsoquyfdqm - fsm_specification.yaml: bafybeierfujdtrnzl72b3vdsdiqcah6anroerqa4m763erxe6m6aq3tw3y + fsm_specification.yaml: bafybeiggebf4simuob5koqhtwnigt6yvnhe5fvr5px7gzci6kcx7tn6elm handlers.py: bafybeihj33szgrcxnpd73s4nvluyxwwsvhjum2cuq3ilhhe6vfola3k7vy models.py: bafybeiggylwxzknh4duj6cid3qoodm5wg7ip6ui5hxptvjgkpuaqcuewbq - payloads.py: bafybeihc2t4biela7hktwltwfjatihsxbsu4dutj4jcciiizgsgxwy2nxe - rounds.py: bafybeihr6psedc6gcd4pjtnp5mqhu5a2rvgiofha43kr4w4hmnhaaftrvm + payloads.py: bafybeibq2my4qz2z7frtevwpafstmltrl3xh3a355unge5q6cli3uneuja + rounds.py: bafybeia6xznked22dam43rol2otqbqjt73yic33rnrdlz52xat6gotwblm states/__init__.py: bafybeid23llnyp6j257dluxmrnztugo5llsrog7kua53hllyktz4dqhqoy - states/base.py: bafybeidbtfxqgy6xek4ehoco5mvmhmcmx5nl4nrmjac4pit4243bfah4ee + states/base.py: bafybeiflaaefherbp2jvmevonqmarpctuzcchi4uv25ghn6mjll4cnjgwi states/bet_placement.py: bafybeiafuxdellvnnocttnelnyi75sqrlnkobh6wr57mqysyrsyzirkaya states/blacklisting.py: bafybeiao747i4z7owk6dmwfuzdijag55m3ryj3nowfoggvczpgk3koza44 - states/decision_maker.py: bafybeicspctxyok4h2rssbg7a5fb7iduf4hwr2snglsjmqpldzim3p5e3i + states/decision_maker.py: bafybeiaqehtdzivhswlurqzxx2bxqjnrmeo6bfyvr2zn55ng3qpwbokauy states/final_states.py: bafybeicruy5dbfzxtx5nvihcpxr5pfbgxxwbosy7x7d5wbqudtooxjsoqi - states/sampling.py: bafybeigehqnkr2hhc2hpagbj4ffiewzjqfwyj7cwkm6fvaoqvntburkxaq + states/sampling.py: bafybeidnvdogjlthjfe7jpaiuezm3xydrbxxukyoss4gx6t5fdin52rsta tasks.py: bafybeidgfoukqknzwxc3aeu5ifhpygo5nwl6t37ezy362itx4wjslto5be fingerprint_ignore_patterns: [] connections: [] @@ -38,7 +38,7 @@ protocols: - valory/contract_api:1.0.0:bafybeidv6wxpjyb2sdyibnmmum45et4zcla6tl63bnol6ztyoqvpl4spmy skills: - valory/abstract_round_abci:0.1.0:bafybeiac62ennpw54gns2quk4g3yoaili2mb72nj6c52czobz5dcwj4mwi -- valory/market_manager_abci:0.1.0:bafybeihosbo5jkviuy2bdgbt4gll3ba4hgxwgbkj6lup23z5wiopb7vf7q +- valory/market_manager_abci:0.1.0:bafybeihdw263vfkzvopfmsatnlrcky5ohcq6grjeurr6opcmm6kcqqfkba - valory/transaction_settlement_abci:0.1.0:bafybeihdpac4ayfgop3ixflimlb3zzyeejlpqtljfptdak6tc7aq4u5fzi behaviours: main: diff --git a/packages/valory/skills/decision_maker_abci/states/base.py b/packages/valory/skills/decision_maker_abci/states/base.py index 65c57dd8..9c1c3d1e 100644 --- a/packages/valory/skills/decision_maker_abci/states/base.py +++ b/packages/valory/skills/decision_maker_abci/states/base.py @@ -69,7 +69,8 @@ def non_binary(self) -> bool: @property def vote(self) -> Optional[int]: """Get the bet's vote index.""" - return int(self.db.get_strict("vote")) + vote = self.db.get_strict("vote") + return int(vote) if vote is not None else None @property def confidence(self) -> float: diff --git a/packages/valory/skills/decision_maker_abci/states/decision_maker.py b/packages/valory/skills/decision_maker_abci/states/decision_maker.py index 4d11731f..0ba5b6f8 100644 --- a/packages/valory/skills/decision_maker_abci/states/decision_maker.py +++ b/packages/valory/skills/decision_maker_abci/states/decision_maker.py @@ -43,9 +43,9 @@ class DecisionMakerRound(CollectSameUntilThresholdRound): no_majority_event = Event.NO_MAJORITY selection_key = ( get_name(SynchronizedData.non_binary), + get_name(SynchronizedData.is_profitable), get_name(SynchronizedData.vote), get_name(SynchronizedData.confidence), - get_name(SynchronizedData.is_profitable), ) collection_key = get_name(SynchronizedData.participant_to_decision) diff --git a/packages/valory/skills/decision_maker_abci/states/sampling.py b/packages/valory/skills/decision_maker_abci/states/sampling.py index bca706e3..f3ca025f 100644 --- a/packages/valory/skills/decision_maker_abci/states/sampling.py +++ b/packages/valory/skills/decision_maker_abci/states/sampling.py @@ -38,5 +38,8 @@ class SamplingRound(CollectSameUntilThresholdRound): done_event = Event.DONE none_event = Event.NONE no_majority_event = Event.NO_MAJORITY - selection_key = get_name(SynchronizedData.sampled_bet_index) + selection_key = ( + get_name(SynchronizedData.bets), + get_name(SynchronizedData.sampled_bet_index), + ) collection_key = get_name(SynchronizedData.participant_to_sampling) diff --git a/packages/valory/skills/market_manager_abci/bets.py b/packages/valory/skills/market_manager_abci/bets.py index ad00c267..4906cbb1 100644 --- a/packages/valory/skills/market_manager_abci/bets.py +++ b/packages/valory/skills/market_manager_abci/bets.py @@ -20,6 +20,7 @@ """Structures for the bets.""" +import builtins import dataclasses import json from enum import Enum, auto @@ -51,7 +52,7 @@ class Bet: outcomeTokenAmounts: List[int] outcomeTokenMarginalPrices: List[float] outcomes: Optional[List[str]] - usdLiquidityMeasure: int + usdLiquidityMeasure: float status: BetStatus = BetStatus.UNPROCESSED blacklist_expiration: float = -1 @@ -68,7 +69,17 @@ def __post_init__(self) -> None: self.outcomes = None if isinstance(self.status, int): - super().__setattr__("status", BetStatus(self.status)) + self.status = BetStatus(self.status) + + types_to_cast = ("int", "float", "str") + str_to_type = {getattr(builtins, type_): type_ for type_ in types_to_cast} + for field, hinted_type in self.__annotations__.items(): + uncasted = getattr(self, field) + for type_to_cast, type_name in str_to_type.items(): + if hinted_type == type_to_cast: + setattr(self, field, hinted_type(uncasted)) + if f"{str(List)}[{type_name}]" == str(hinted_type): + setattr(self, field, list(type_to_cast(val) for val in uncasted)) def get_outcome(self, index: int) -> str: """Get an outcome given its index.""" diff --git a/packages/valory/skills/market_manager_abci/payloads.py b/packages/valory/skills/market_manager_abci/payloads.py index a388de88..8846fb33 100644 --- a/packages/valory/skills/market_manager_abci/payloads.py +++ b/packages/valory/skills/market_manager_abci/payloads.py @@ -22,13 +22,11 @@ from dataclasses import dataclass from typing import Optional -from packages.valory.skills.abstract_round_abci.base import ( - BaseTxPayload as BaseMarketManagerPayload, -) +from packages.valory.skills.abstract_round_abci.base import BaseTxPayload @dataclass(frozen=True) -class UpdateBetsPayload(BaseMarketManagerPayload): +class UpdateBetsPayload(BaseTxPayload): """A transaction payload for the updated bets.""" bets: Optional[str] diff --git a/packages/valory/skills/market_manager_abci/skill.yaml b/packages/valory/skills/market_manager_abci/skill.yaml index 02e3bac4..5831f94e 100644 --- a/packages/valory/skills/market_manager_abci/skill.yaml +++ b/packages/valory/skills/market_manager_abci/skill.yaml @@ -9,7 +9,7 @@ fingerprint: README.md: bafybeie6miwn67uin3bphukmf7qgiifh4xtm42i5v3nuyqxzxtehxsqvcq __init__.py: bafybeigrtedqzlq5mtql2ssjsdriw76ml3666m4e2c3fay6vmyzofl6v6e behaviours.py: bafybeidzzyssdo6gsqtsvr6xbh5chszkev6fnnheuyhgmqsbl2ae6lhs5a - bets.py: bafybeifopryrvcynp2t6dxdvudeok3zag2hz7d5fuptxv2g33qmd6h3n6y + bets.py: bafybeifycdeosqn32wyids6rymjhwdjjebbavi5vcn2a5hrt3ho3aa3bfy dialogues.py: bafybeiebofyykseqp3fmif36cqmmyf3k7d2zbocpl6t6wnlpv4szghrxbm fsm_specification.yaml: bafybeic5cvwfbiu5pywyp3h5s2elvu7jqdrcwayay7o3v3ow47vu2jw53q graph_tooling/__init__.py: bafybeigzo7nhbzafyq3fuhrlewksjvmzttiuk4vonrggtjtph4rw4ncpk4 @@ -18,7 +18,7 @@ fingerprint: graph_tooling/requests.py: bafybeifkwmfjhxbmfexolos3umq3k4gsrn5ajhdgq4iht7ne3yge4llfjq handlers.py: bafybeihot2i2yvfkz2gcowvt66wdu6tkjbmv7hsmc4jzt4reqeaiuphbtu models.py: bafybeidhhhp2obt36iatytckybywdm55pzmefpyccakfw3ufyz732ydigy - payloads.py: bafybeihkxngjzlmorqpckhf7avdaczmzecpawa4ne6ewz7zhfcsw6trbeu + payloads.py: bafybeiamavgddfbzofpsjthmw6j7g2dyxm7fb6hvdb47kweyrx4w2ihcfi rounds.py: bafybeib3kjtz6lpx7vczrmnanj6c2z4jrbvbdw6l3jvq5z3ecyglugiwmy fingerprint_ignore_patterns: [] connections: [] diff --git a/packages/valory/skills/trader_abci/composition.py b/packages/valory/skills/trader_abci/composition.py index 0d13a9ba..7531637f 100644 --- a/packages/valory/skills/trader_abci/composition.py +++ b/packages/valory/skills/trader_abci/composition.py @@ -24,6 +24,9 @@ chain, ) from packages.valory.skills.decision_maker_abci.rounds import DecisionMakerAbciApp +from packages.valory.skills.decision_maker_abci.states.blacklisting import ( + BlacklistingRound, +) from packages.valory.skills.decision_maker_abci.states.final_states import ( FinishedDecisionMakerRound, FinishedWithoutDecisionRound, @@ -49,13 +52,21 @@ from packages.valory.skills.termination_abci.rounds import BackgroundRound from packages.valory.skills.termination_abci.rounds import Event as TerminationEvent from packages.valory.skills.termination_abci.rounds import TerminationAbciApp +from packages.valory.skills.transaction_settlement_abci.rounds import ( + FailedRound, + FinishedTransactionSubmissionRound, + RandomnessTransactionSubmissionRound, + TransactionSubmissionAbciApp, +) abci_app_transition_mapping: AbciAppTransitionMapping = { FinishedRegistrationRound: UpdateBetsRound, FinishedMarketManagerRound: SamplingRound, FailedMarketManagerRound: ResetAndPauseRound, - FinishedDecisionMakerRound: ResetAndPauseRound, + FinishedDecisionMakerRound: RandomnessTransactionSubmissionRound, + FinishedTransactionSubmissionRound: ResetAndPauseRound, + FailedRound: BlacklistingRound, FinishedWithoutDecisionRound: ResetAndPauseRound, FinishedResetAndPauseRound: UpdateBetsRound, FinishedResetAndPauseErrorRound: RegistrationRound, @@ -66,6 +77,7 @@ AgentRegistrationAbciApp, DecisionMakerAbciApp, MarketManagerAbciApp, + TransactionSubmissionAbciApp, ResetPauseAbciApp, ), abci_app_transition_mapping, diff --git a/packages/valory/skills/trader_abci/fsm_specification.yaml b/packages/valory/skills/trader_abci/fsm_specification.yaml index 43c54596..c7f1d4a8 100644 --- a/packages/valory/skills/trader_abci/fsm_specification.yaml +++ b/packages/valory/skills/trader_abci/fsm_specification.yaml @@ -1,14 +1,25 @@ alphabet_in: +- CHECK_HISTORY +- CHECK_LATE_ARRIVING_MESSAGE +- CHECK_TIMEOUT - DONE - FETCH_ERROR +- FINALIZATION_FAILED +- FINALIZE_TIMEOUT +- INCORRECT_SERIALIZATION +- INSUFFICIENT_FUNDS - MECH_RESPONSE_ERROR +- NEGATIVE - NONE - NON_BINARY - NO_MAJORITY - RESET_AND_PAUSE_TIMEOUT +- RESET_TIMEOUT - ROUND_TIMEOUT +- SUSPICIOUS_ACTIVITY - TIE - UNPROFITABLE +- VALIDATE_TIMEOUT default_start_state: RegistrationStartupRound final_states: - ImpossibleRound @@ -19,15 +30,26 @@ start_states: states: - BetPlacementRound - BlacklistingRound +- CheckLateTxHashesRound +- CheckTransactionHistoryRound +- CollectSignatureRound - DecisionMakerRound +- FinalizationRound - ImpossibleRound +- RandomnessTransactionSubmissionRound - RegistrationRound - RegistrationStartupRound - ResetAndPauseRound +- ResetRound - SamplingRound +- SelectKeeperTransactionSubmissionARound +- SelectKeeperTransactionSubmissionBAfterTimeoutRound +- SelectKeeperTransactionSubmissionBRound +- SynchronizeLateMessagesRound - UpdateBetsRound +- ValidateTransactionRound transition_func: - (BetPlacementRound, DONE): ResetAndPauseRound + (BetPlacementRound, DONE): RandomnessTransactionSubmissionRound (BetPlacementRound, NONE): ImpossibleRound (BetPlacementRound, NO_MAJORITY): BetPlacementRound (BetPlacementRound, ROUND_TIMEOUT): BetPlacementRound @@ -36,6 +58,21 @@ transition_func: (BlacklistingRound, NONE): ImpossibleRound (BlacklistingRound, NO_MAJORITY): BlacklistingRound (BlacklistingRound, ROUND_TIMEOUT): BlacklistingRound + (CheckLateTxHashesRound, CHECK_LATE_ARRIVING_MESSAGE): SynchronizeLateMessagesRound + (CheckLateTxHashesRound, CHECK_TIMEOUT): CheckLateTxHashesRound + (CheckLateTxHashesRound, DONE): ResetAndPauseRound + (CheckLateTxHashesRound, NEGATIVE): BlacklistingRound + (CheckLateTxHashesRound, NONE): BlacklistingRound + (CheckLateTxHashesRound, NO_MAJORITY): BlacklistingRound + (CheckTransactionHistoryRound, CHECK_LATE_ARRIVING_MESSAGE): SynchronizeLateMessagesRound + (CheckTransactionHistoryRound, CHECK_TIMEOUT): CheckTransactionHistoryRound + (CheckTransactionHistoryRound, DONE): ResetAndPauseRound + (CheckTransactionHistoryRound, NEGATIVE): SelectKeeperTransactionSubmissionBRound + (CheckTransactionHistoryRound, NONE): BlacklistingRound + (CheckTransactionHistoryRound, NO_MAJORITY): CheckTransactionHistoryRound + (CollectSignatureRound, DONE): FinalizationRound + (CollectSignatureRound, NO_MAJORITY): ResetRound + (CollectSignatureRound, ROUND_TIMEOUT): CollectSignatureRound (DecisionMakerRound, DONE): BetPlacementRound (DecisionMakerRound, MECH_RESPONSE_ERROR): BlacklistingRound (DecisionMakerRound, NON_BINARY): ImpossibleRound @@ -43,17 +80,52 @@ transition_func: (DecisionMakerRound, ROUND_TIMEOUT): DecisionMakerRound (DecisionMakerRound, TIE): BlacklistingRound (DecisionMakerRound, UNPROFITABLE): BlacklistingRound + (FinalizationRound, CHECK_HISTORY): CheckTransactionHistoryRound + (FinalizationRound, CHECK_LATE_ARRIVING_MESSAGE): SynchronizeLateMessagesRound + (FinalizationRound, DONE): ValidateTransactionRound + (FinalizationRound, FINALIZATION_FAILED): SelectKeeperTransactionSubmissionBRound + (FinalizationRound, FINALIZE_TIMEOUT): SelectKeeperTransactionSubmissionBAfterTimeoutRound + (FinalizationRound, INSUFFICIENT_FUNDS): SelectKeeperTransactionSubmissionBRound + (RandomnessTransactionSubmissionRound, DONE): SelectKeeperTransactionSubmissionARound + (RandomnessTransactionSubmissionRound, NO_MAJORITY): RandomnessTransactionSubmissionRound + (RandomnessTransactionSubmissionRound, ROUND_TIMEOUT): RandomnessTransactionSubmissionRound (RegistrationRound, DONE): UpdateBetsRound (RegistrationRound, NO_MAJORITY): RegistrationRound (RegistrationStartupRound, DONE): UpdateBetsRound (ResetAndPauseRound, DONE): UpdateBetsRound (ResetAndPauseRound, NO_MAJORITY): RegistrationRound (ResetAndPauseRound, RESET_AND_PAUSE_TIMEOUT): RegistrationRound + (ResetRound, DONE): RandomnessTransactionSubmissionRound + (ResetRound, NO_MAJORITY): BlacklistingRound + (ResetRound, RESET_TIMEOUT): BlacklistingRound (SamplingRound, DONE): DecisionMakerRound (SamplingRound, NONE): ImpossibleRound (SamplingRound, NO_MAJORITY): SamplingRound (SamplingRound, ROUND_TIMEOUT): SamplingRound + (SelectKeeperTransactionSubmissionARound, DONE): CollectSignatureRound + (SelectKeeperTransactionSubmissionARound, INCORRECT_SERIALIZATION): BlacklistingRound + (SelectKeeperTransactionSubmissionARound, NO_MAJORITY): ResetRound + (SelectKeeperTransactionSubmissionARound, ROUND_TIMEOUT): SelectKeeperTransactionSubmissionARound + (SelectKeeperTransactionSubmissionBAfterTimeoutRound, CHECK_HISTORY): CheckTransactionHistoryRound + (SelectKeeperTransactionSubmissionBAfterTimeoutRound, CHECK_LATE_ARRIVING_MESSAGE): SynchronizeLateMessagesRound + (SelectKeeperTransactionSubmissionBAfterTimeoutRound, DONE): FinalizationRound + (SelectKeeperTransactionSubmissionBAfterTimeoutRound, INCORRECT_SERIALIZATION): BlacklistingRound + (SelectKeeperTransactionSubmissionBAfterTimeoutRound, NO_MAJORITY): ResetRound + (SelectKeeperTransactionSubmissionBAfterTimeoutRound, ROUND_TIMEOUT): SelectKeeperTransactionSubmissionBAfterTimeoutRound + (SelectKeeperTransactionSubmissionBRound, DONE): FinalizationRound + (SelectKeeperTransactionSubmissionBRound, INCORRECT_SERIALIZATION): BlacklistingRound + (SelectKeeperTransactionSubmissionBRound, NO_MAJORITY): ResetRound + (SelectKeeperTransactionSubmissionBRound, ROUND_TIMEOUT): SelectKeeperTransactionSubmissionBRound + (SynchronizeLateMessagesRound, DONE): CheckLateTxHashesRound + (SynchronizeLateMessagesRound, NONE): SelectKeeperTransactionSubmissionBRound + (SynchronizeLateMessagesRound, ROUND_TIMEOUT): SynchronizeLateMessagesRound + (SynchronizeLateMessagesRound, SUSPICIOUS_ACTIVITY): BlacklistingRound (UpdateBetsRound, DONE): SamplingRound (UpdateBetsRound, FETCH_ERROR): ResetAndPauseRound (UpdateBetsRound, NO_MAJORITY): UpdateBetsRound (UpdateBetsRound, ROUND_TIMEOUT): UpdateBetsRound + (ValidateTransactionRound, DONE): ResetAndPauseRound + (ValidateTransactionRound, NEGATIVE): CheckTransactionHistoryRound + (ValidateTransactionRound, NONE): SelectKeeperTransactionSubmissionBRound + (ValidateTransactionRound, NO_MAJORITY): ValidateTransactionRound + (ValidateTransactionRound, VALIDATE_TIMEOUT): SelectKeeperTransactionSubmissionBRound diff --git a/packages/valory/skills/trader_abci/models.py b/packages/valory/skills/trader_abci/models.py index 399d60f9..516726ef 100644 --- a/packages/valory/skills/trader_abci/models.py +++ b/packages/valory/skills/trader_abci/models.py @@ -21,6 +21,7 @@ from typing import Dict, Type, Union, cast +from packages.valory.skills.abstract_round_abci.models import ApiSpecs from packages.valory.skills.abstract_round_abci.models import ( BenchmarkTool as BaseBenchmarkTool, ) @@ -63,6 +64,10 @@ MARGIN = 5 +class RandomnessApi(ApiSpecs): + """A model for randomness api specifications.""" + + class TraderParams(DecisionMakerParams, TerminationParams): """A model to represent the trader params.""" diff --git a/packages/valory/skills/trader_abci/skill.yaml b/packages/valory/skills/trader_abci/skill.yaml index 623542b5..751b80fc 100644 --- a/packages/valory/skills/trader_abci/skill.yaml +++ b/packages/valory/skills/trader_abci/skill.yaml @@ -9,11 +9,11 @@ fingerprint: README.md: bafybeiab4xgadptz4mhvno4p6xvkh7p4peg7iuhotabydriu74dmj6ljga __init__.py: bafybeido7wa33h4dtleap57vzgyb4fsofk4vindsqcekyfo5i56i2rll2a behaviours.py: bafybeihxxsqctxptcch2pl2u4egpbrwukpggr7abrkcukzf6ant57wsqrq - composition.py: bafybeidtwoiy4wwatsbjxxob5tjqhu6glxgc3cgdal4efnh4rwpl3kyb2u + composition.py: bafybeiankmqnq3pns5f2zeclzoij2skpy35hly5evzqpjsh6hfe34ahwza dialogues.py: bafybeiebofyykseqp3fmif36cqmmyf3k7d2zbocpl6t6wnlpv4szghrxbm - fsm_specification.yaml: bafybeicmkn23fgw45r7qovwzo2cooiujjsafgr6kqaczyab2s466t5ek5a + fsm_specification.yaml: bafybeiewykne3nhzw7er25z3ywoi7wpdshkos66yzrstzilm5ywksswbu4 handlers.py: bafybeicamc6vmozij5dwvkxmbxjazsgf3sacojhstbjtq7vfggszxugvey - models.py: bafybeihee6sik7fdoclzztjrrrmlzw4sdemk326omzv2rvonchhb2j6jaq + models.py: bafybeigro3coqmff2xd7hbnuxq7qi4pcirpr6v526zw6fstko3dsgce63u fingerprint_ignore_patterns: [] connections: [] contracts: [] @@ -24,8 +24,8 @@ skills: - valory/reset_pause_abci:0.1.0:bafybeibqz7y3i4aepuprhijwdydkcsbqjtpeea6gdzpp5fgc6abrvjz25a - valory/transaction_settlement_abci:0.1.0:bafybeihdpac4ayfgop3ixflimlb3zzyeejlpqtljfptdak6tc7aq4u5fzi - valory/termination_abci:0.1.0:bafybeieb3gnvjxxsh73g67m7rivzknwb63xu4qeagpkv7f4mqz33ecikem -- valory/market_manager_abci:0.1.0:bafybeihosbo5jkviuy2bdgbt4gll3ba4hgxwgbkj6lup23z5wiopb7vf7q -- valory/decision_maker_abci:0.1.0:bafybeia52wpwgnqxb3bm4mgbb5y2cq6lvuuhv2uvmfvsg6qglmrbfsdkru +- valory/market_manager_abci:0.1.0:bafybeihdw263vfkzvopfmsatnlrcky5ohcq6grjeurr6opcmm6kcqqfkba +- valory/decision_maker_abci:0.1.0:bafybeigdlxygxlxtubwwbninvhcm7m44fe634kp6fjhsdsvsubbti44kzy behaviours: main: args: {} @@ -163,6 +163,17 @@ models: retries: 5 url: https://api.thegraph.com/subgraphs/name/protofire/omen-xdai class_name: OmenSubgraph + randomness_api: + args: + api_id: cloudflare + headers: {} + method: GET + parameters: {} + response_key: null + response_type: dict + retries: 5 + url: https://drand.cloudflare.com/public/latest + class_name: RandomnessApi requests: args: {} class_name: Requests