Skip to content

Commit f36ea7d

Browse files
authored
Merge pull request #9 from curvefi/fix/xdao
Fix XYZ(xdao) message passing
2 parents a2e7655 + 6e733c1 commit f36ea7d

File tree

1 file changed

+32
-6
lines changed

1 file changed

+32
-6
lines changed

contracts/xyz/XYZBroadcaster.vy

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,19 @@
22
"""
33
@title XYZ Broadcaster
44
@author CurveFi
5+
@license MIT
6+
@custom:version 0.0.2
7+
@custom:security [email protected]
58
"""
69

10+
version: public(constant(String[8])) = "0.0.2"
711

812
event Broadcast:
9-
agent: Agent
10-
chain_id: uint256
13+
agent: indexed(Agent)
14+
chain_id: indexed(uint256)
1115
nonce: uint256
1216
digest: bytes32
17+
deadline: uint256
1318

1419
event ApplyAdmins:
1520
admins: AdminSet
@@ -37,6 +42,8 @@ struct Message:
3742
MAX_BYTES: constant(uint256) = 1024
3843
MAX_MESSAGES: constant(uint256) = 8
3944

45+
DAY: constant(uint256) = 86400
46+
WEEK: constant(uint256) = 7 * DAY
4047

4148
admins: public(AdminSet)
4249
future_admins: public(AdminSet)
@@ -45,6 +52,7 @@ agent: HashMap[address, Agent]
4552

4653
nonce: public(HashMap[Agent, HashMap[uint256, uint256]]) # agent -> chainId -> nonce
4754
digest: public(HashMap[Agent, HashMap[uint256, HashMap[uint256, bytes32]]]) # agent -> chainId -> nonce -> messageDigest
55+
deadline: public(HashMap[Agent, HashMap[uint256, HashMap[uint256, uint256]]]) # agent -> chainId -> nonce -> deadline
4856

4957

5058
@external
@@ -62,23 +70,41 @@ def __init__(_admins: AdminSet):
6270
log ApplyAdmins(_admins)
6371

6472

73+
@internal
74+
@pure
75+
def _get_ttl(agent: Agent, ttl: uint256) -> uint256:
76+
if agent == Agent.EMERGENCY:
77+
# Emergency votes should be brisk
78+
if ttl == 0:
79+
ttl = DAY # default
80+
assert ttl <= WEEK
81+
else:
82+
if ttl == 0:
83+
ttl = WEEK # default
84+
assert DAY <= ttl and ttl <= 3 * WEEK
85+
return ttl
86+
87+
6588
@external
66-
def broadcast(_chain_id: uint256, _messages: DynArray[Message, MAX_MESSAGES]):
89+
def broadcast(_chain_id: uint256, _messages: DynArray[Message, MAX_MESSAGES], _ttl: uint256=0):
6790
"""
68-
@notice Broadcast a sequence of messeages.
91+
@notice Broadcast a sequence of messages.
6992
@param _chain_id The chain id to have messages executed on.
7093
@param _messages The sequence of messages to broadcast.
94+
@param _ttl Time-to-leave for message if it's not executed. 0 will use default values.
7195
"""
7296
agent: Agent = self.agent[msg.sender]
73-
assert agent != empty(Agent)
97+
assert agent != empty(Agent) and len(_messages) > 0
98+
ttl: uint256 = self._get_ttl(agent, _ttl)
7499

75100
digest: bytes32 = keccak256(_abi_encode(_messages))
76101
nonce: uint256 = self.nonce[agent][_chain_id]
77102

78103
self.digest[agent][_chain_id][nonce] = digest
79104
self.nonce[agent][_chain_id] = nonce + 1
105+
self.deadline[agent][_chain_id][nonce] = block.timestamp + ttl
80106

81-
log Broadcast(agent, _chain_id, nonce, digest)
107+
log Broadcast(agent, _chain_id, nonce, digest, block.timestamp + ttl)
82108

83109

84110
@external

0 commit comments

Comments
 (0)