Skip to content

Commit a7cbbc7

Browse files
committed
Refactor staking and transaction utilities to use integers for amounts and timestamps in Python SDK and solve some issues with default values
1 parent 75750b5 commit a7cbbc7

File tree

6 files changed

+126
-69
lines changed

6 files changed

+126
-69
lines changed

packages/sdk/python/human-protocol-sdk/human_protocol_sdk/escrow/escrow_utils.py

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -292,15 +292,17 @@ def get_escrows(
292292
chain_id=chain_id,
293293
id=escrow.get("id", ""),
294294
address=escrow.get("address", ""),
295-
amount_paid=int(escrow.get("amountPaid", 0)),
296-
balance=int(escrow.get("balance", 0)),
297-
count=int(escrow.get("count", 0)),
295+
amount_paid=int(escrow.get("amountPaid") or 0),
296+
balance=int(escrow.get("balance") or 0),
297+
count=int(escrow.get("count") or 0),
298298
factory_address=escrow.get("factoryAddress", ""),
299299
launcher=escrow.get("launcher", ""),
300300
status=escrow.get("status", ""),
301301
token=escrow.get("token", ""),
302-
total_funded_amount=int(escrow.get("totalFundedAmount", 0)),
303-
created_at=datetime.fromtimestamp(int(escrow.get("createdAt", 0))),
302+
total_funded_amount=int(escrow.get("totalFundedAmount") or 0),
303+
created_at=datetime.fromtimestamp(
304+
int(escrow.get("createdAt") or 0)
305+
),
304306
final_results_url=escrow.get("finalResultsUrl", None),
305307
final_results_hash=escrow.get("finalResultsHash", None),
306308
intermediate_results_url=escrow.get("intermediateResultsUrl", None),
@@ -393,15 +395,15 @@ def get_escrow(
393395
chain_id=chain_id,
394396
id=escrow.get("id", ""),
395397
address=escrow.get("address", ""),
396-
amount_paid=int(escrow.get("amountPaid", 0)),
397-
balance=int(escrow.get("balance", 0)),
398-
count=int(escrow.get("count", 0)),
398+
amount_paid=int(escrow.get("amountPaid") or 0),
399+
balance=int(escrow.get("balance") or 0),
400+
count=int(escrow.get("count") or 0),
399401
factory_address=escrow.get("factoryAddress", ""),
400402
launcher=escrow.get("launcher", ""),
401403
status=escrow.get("status", ""),
402404
token=escrow.get("token", ""),
403-
total_funded_amount=int(escrow.get("totalFundedAmount", 0)),
404-
created_at=datetime.fromtimestamp(int(escrow.get("createdAt", 0))),
405+
total_funded_amount=int(escrow.get("totalFundedAmount") or 0),
406+
created_at=datetime.fromtimestamp(int(escrow.get("createdAt") or 0)),
405407
final_results_url=escrow.get("finalResultsUrl", None),
406408
final_results_hash=escrow.get("finalResultsHash", None),
407409
intermediate_results_url=escrow.get("intermediateResultsUrl", None),

packages/sdk/python/human-protocol-sdk/human_protocol_sdk/operator/operator_utils.py

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -240,18 +240,18 @@ def get_operators(filter: OperatorFilter) -> List[OperatorData]:
240240
network["address"] for network in operator["reputationNetworks"]
241241
]
242242

243-
staker = operator.get("staker", {})
243+
staker = operator.get("staker") or {}
244244
operators.append(
245245
OperatorData(
246246
chain_id=filter.chain_id,
247247
id=operator.get("id", ""),
248248
address=operator.get("address", ""),
249-
staked_amount=int(staker.get("stakedAmount", 0)),
250-
locked_amount=int(staker.get("lockedAmount", 0)),
251-
locked_until_timestamp=int(staker.get("lockedUntilTimestamp", 0)),
252-
withdrawn_amount=int(staker.get("withdrawnAmount", 0)),
253-
slashed_amount=int(staker.get("slashedAmount", 0)),
254-
amount_jobs_processed=int(operator.get("amountJobsProcessed", 0)),
249+
staked_amount=int(staker.get("stakedAmount") or 0),
250+
locked_amount=int(staker.get("lockedAmount") or 0),
251+
locked_until_timestamp=int(staker.get("lockedUntilTimestamp") or 0),
252+
withdrawn_amount=int(staker.get("withdrawnAmount") or 0),
253+
slashed_amount=int(staker.get("slashedAmount") or 0),
254+
amount_jobs_processed=int(operator.get("amountJobsProcessed") or 0),
255255
role=operator.get("role", None),
256256
fee=int(operator.get("fee")) if operator.get("fee", None) else None,
257257
public_key=operator.get("publicKey", None),
@@ -338,17 +338,17 @@ def get_operator(
338338
network["address"] for network in operator["reputationNetworks"]
339339
]
340340

341-
staker = operator.get("staker", {})
341+
staker = operator.get("staker") or {}
342342
return OperatorData(
343343
chain_id=chain_id,
344344
id=operator.get("id", ""),
345345
address=operator.get("address", ""),
346-
staked_amount=int(staker.get("stakedAmount", 0)),
347-
locked_amount=int(staker.get("lockedAmount", 0)),
348-
locked_until_timestamp=int(staker.get("lockedUntilTimestamp", 0)),
349-
withdrawn_amount=int(staker.get("withdrawnAmount", 0)),
350-
slashed_amount=int(staker.get("slashedAmount", 0)),
351-
amount_jobs_processed=int(operator.get("amountJobsProcessed", 0)),
346+
staked_amount=int(staker.get("stakedAmount") or 0),
347+
locked_amount=int(staker.get("lockedAmount") or 0),
348+
locked_until_timestamp=int(staker.get("lockedUntilTimestamp") or 0),
349+
withdrawn_amount=int(staker.get("withdrawnAmount") or 0),
350+
slashed_amount=int(staker.get("slashedAmount") or 0),
351+
amount_jobs_processed=int(operator.get("amountJobsProcessed") or 0),
352352
role=operator.get("role", None),
353353
fee=int(operator.get("fee")) if operator.get("fee", None) else None,
354354
public_key=operator.get("publicKey", None),
@@ -429,13 +429,13 @@ def get_reputation_network_operators(
429429
id=operator.get("id", ""),
430430
address=operator.get("address", ""),
431431
staked_amount=int(
432-
(staker := operator.get("staker") or {}).get("stakedAmount", 0)
432+
(staker := operator.get("staker") or {}).get("stakedAmount") or 0
433433
),
434-
locked_amount=int(staker.get("lockedAmount", 0)),
435-
locked_until_timestamp=int(staker.get("lockedUntilTimestamp", 0)),
436-
withdrawn_amount=int(staker.get("withdrawnAmount", 0)),
437-
slashed_amount=int(staker.get("slashedAmount", 0)),
438-
amount_jobs_processed=int(operator.get("amountJobsProcessed", 0)),
434+
locked_amount=int(staker.get("lockedAmount") or 0),
435+
locked_until_timestamp=int(staker.get("lockedUntilTimestamp") or 0),
436+
withdrawn_amount=int(staker.get("withdrawnAmount") or 0),
437+
slashed_amount=int(staker.get("slashedAmount") or 0),
438+
amount_jobs_processed=int(operator.get("amountJobsProcessed") or 0),
439439
role=operator.get("role", None),
440440
fee=int(operator.get("fee")) if operator.get("fee", None) else None,
441441
public_key=operator.get("publicKey", None),
@@ -516,7 +516,7 @@ def get_rewards_info(chain_id: ChainId, slasher: str) -> List[RewardData]:
516516
return [
517517
RewardData(
518518
escrow_address=reward_added_event.get("escrowAddress", ""),
519-
amount=int(reward_added_event.get("amount", 0)),
519+
amount=int(reward_added_event.get("amount") or 0),
520520
)
521521
for reward_added_event in reward_added_events
522522
]

packages/sdk/python/human-protocol-sdk/human_protocol_sdk/staking/staking_utils.py

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,12 @@ def __init__(
3939
self,
4040
id: str,
4141
address: str,
42-
staked_amount: str,
43-
locked_amount: str,
44-
withdrawn_amount: str,
45-
slashed_amount: str,
46-
locked_until_timestamp: str,
47-
last_deposit_timestamp: str,
42+
staked_amount: int,
43+
locked_amount: int,
44+
withdrawn_amount: int,
45+
slashed_amount: int,
46+
locked_until_timestamp: int,
47+
last_deposit_timestamp: int,
4848
):
4949
self.id = id
5050
self.address = address
@@ -84,12 +84,12 @@ def get_staker(chain_id: ChainId, address: str) -> Optional[StakerData]:
8484
return StakerData(
8585
id=staker.get("id", ""),
8686
address=staker.get("address", ""),
87-
staked_amount=staker.get("stakedAmount", ""),
88-
locked_amount=staker.get("lockedAmount", ""),
89-
withdrawn_amount=staker.get("withdrawnAmount", ""),
90-
slashed_amount=staker.get("slashedAmount", ""),
91-
locked_until_timestamp=staker.get("lockedUntilTimestamp", ""),
92-
last_deposit_timestamp=staker.get("lastDepositTimestamp", ""),
87+
staked_amount=int(staker.get("stakedAmount") or 0),
88+
locked_amount=int(staker.get("lockedAmount") or 0),
89+
withdrawn_amount=int(staker.get("withdrawnAmount") or 0),
90+
slashed_amount=int(staker.get("slashedAmount") or 0),
91+
locked_until_timestamp=int(staker.get("lockedUntilTimestamp") or 0),
92+
last_deposit_timestamp=int(staker.get("lastDepositTimestamp") or 0),
9393
)
9494

9595
@staticmethod
@@ -129,12 +129,12 @@ def get_stakers(filter: StakersFilter) -> List[StakerData]:
129129
StakerData(
130130
id=staker.get("id", ""),
131131
address=staker.get("address", ""),
132-
staked_amount=staker.get("stakedAmount", ""),
133-
locked_amount=staker.get("lockedAmount", ""),
134-
withdrawn_amount=staker.get("withdrawnAmount", ""),
135-
slashed_amount=staker.get("slashedAmount", ""),
136-
locked_until_timestamp=staker.get("lockedUntilTimestamp", ""),
137-
last_deposit_timestamp=staker.get("lastDepositTimestamp", ""),
132+
staked_amount=int(staker.get("stakedAmount") or 0),
133+
locked_amount=int(staker.get("lockedAmount") or 0),
134+
withdrawn_amount=int(staker.get("withdrawnAmount") or 0),
135+
slashed_amount=int(staker.get("slashedAmount") or 0),
136+
locked_until_timestamp=int(staker.get("lockedUntilTimestamp") or 0),
137+
last_deposit_timestamp=int(staker.get("lastDepositTimestamp") or 0),
138138
)
139139
for staker in stakers_raw
140140
]

packages/sdk/python/human-protocol-sdk/human_protocol_sdk/transaction/transaction_utils.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ def __init__(
3838
self,
3939
from_address: str,
4040
to_address: str,
41-
value: str,
41+
value: int,
4242
method: str,
4343
receiver: str,
4444
escrow: str,
@@ -62,7 +62,7 @@ def __init__(
6262
from_address: str,
6363
to_address: str,
6464
timestamp: int,
65-
value: str,
65+
value: int,
6666
method: str,
6767
receiver: str,
6868
escrow: str,
@@ -141,12 +141,12 @@ def get_transaction(chain_id: ChainId, hash: str) -> Optional[TransactionData]:
141141

142142
return TransactionData(
143143
chain_id=chain_id,
144-
block=transaction.get("block", 0),
144+
block=int(transaction.get("block", 0) or 0),
145145
tx_hash=transaction.get("txHash", ""),
146146
from_address=transaction.get("from", ""),
147147
to_address=transaction.get("to", ""),
148-
timestamp=transaction.get("timestamp", 0),
149-
value=transaction.get("value", ""),
148+
timestamp=int(transaction.get("timestamp") or 0),
149+
value=int(transaction.get("value") or 0),
150150
method=transaction.get("method", ""),
151151
receiver=transaction.get("receiver", ""),
152152
escrow=transaction.get("escrow", ""),
@@ -155,7 +155,7 @@ def get_transaction(chain_id: ChainId, hash: str) -> Optional[TransactionData]:
155155
InternalTransaction(
156156
from_address=internal_tx.get("from", ""),
157157
to_address=internal_tx.get("to", ""),
158-
value=internal_tx.get("value", ""),
158+
value=int(internal_tx.get("value") or 0),
159159
method=internal_tx.get("method", ""),
160160
receiver=internal_tx.get("receiver", ""),
161161
escrow=internal_tx.get("escrow", ""),
@@ -239,12 +239,12 @@ def get_transactions(filter: TransactionFilter) -> List[TransactionData]:
239239
[
240240
TransactionData(
241241
chain_id=filter.chain_id,
242-
block=transaction.get("block", 0),
242+
block=int(transaction.get("block", 0) or 0),
243243
tx_hash=transaction.get("txHash", ""),
244244
from_address=transaction.get("from", ""),
245245
to_address=transaction.get("to", ""),
246-
timestamp=transaction.get("timestamp", 0),
247-
value=transaction.get("value", ""),
246+
timestamp=int(transaction.get("timestamp") or 0),
247+
value=int(transaction.get("value") or 0),
248248
method=transaction.get("method", ""),
249249
receiver=transaction.get("receiver", ""),
250250
escrow=transaction.get("escrow", ""),
@@ -253,7 +253,7 @@ def get_transactions(filter: TransactionFilter) -> List[TransactionData]:
253253
InternalTransaction(
254254
from_address=internal_tx.get("from", ""),
255255
to_address=internal_tx.get("to", ""),
256-
value=internal_tx.get("value", ""),
256+
value=int(internal_tx.get("value") or 0),
257257
method=internal_tx.get("method", ""),
258258
receiver=internal_tx.get("receiver", ""),
259259
escrow=internal_tx.get("escrow", ""),

packages/sdk/python/human-protocol-sdk/test/human_protocol_sdk/staking/test_staking_utils.py

Lines changed: 56 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,50 @@ def test_get_stakers(self):
7373
self.assertEqual(len(stakers), 2)
7474
self.assertIsInstance(stakers[0], StakerData)
7575
self.assertEqual(stakers[0].id, "1")
76+
self.assertEqual(stakers[0].address, mock_staker_1["address"])
77+
self.assertEqual(
78+
stakers[0].staked_amount, int(mock_staker_1["stakedAmount"])
79+
)
80+
self.assertEqual(
81+
stakers[0].locked_amount, int(mock_staker_1["lockedAmount"])
82+
)
83+
self.assertEqual(
84+
stakers[0].withdrawn_amount, int(mock_staker_1["withdrawnAmount"])
85+
)
86+
self.assertEqual(
87+
stakers[0].slashed_amount, int(mock_staker_1["slashedAmount"])
88+
)
89+
self.assertEqual(
90+
stakers[0].locked_until_timestamp,
91+
int(mock_staker_1["lockedUntilTimestamp"]),
92+
)
93+
self.assertEqual(
94+
stakers[0].last_deposit_timestamp,
95+
int(mock_staker_1["lastDepositTimestamp"]),
96+
)
97+
self.assertIsInstance(stakers[1], StakerData)
7698
self.assertEqual(stakers[1].id, "2")
99+
self.assertEqual(stakers[1].address, mock_staker_2["address"])
100+
self.assertEqual(
101+
stakers[1].staked_amount, int(mock_staker_2["stakedAmount"])
102+
)
103+
self.assertEqual(
104+
stakers[1].locked_amount, int(mock_staker_2["lockedAmount"])
105+
)
106+
self.assertEqual(
107+
stakers[1].withdrawn_amount, int(mock_staker_2["withdrawnAmount"])
108+
)
109+
self.assertEqual(
110+
stakers[1].slashed_amount, int(mock_staker_2["slashedAmount"])
111+
)
112+
self.assertEqual(
113+
stakers[1].locked_until_timestamp,
114+
int(mock_staker_2["lockedUntilTimestamp"]),
115+
)
116+
self.assertEqual(
117+
stakers[1].last_deposit_timestamp,
118+
int(mock_staker_2["lastDepositTimestamp"]),
119+
)
77120

78121
def test_get_stakers_empty_response(self):
79122
with patch(
@@ -120,7 +163,19 @@ def test_get_staker(self):
120163
)
121164
self.assertIsInstance(staker, StakerData)
122165
self.assertEqual(staker.id, "1")
123-
self.assertEqual(staker.address, "0x123")
166+
self.assertEqual(staker.address, mock_staker["address"])
167+
self.assertEqual(staker.staked_amount, int(mock_staker["stakedAmount"]))
168+
self.assertEqual(staker.locked_amount, int(mock_staker["lockedAmount"]))
169+
self.assertEqual(
170+
staker.withdrawn_amount, int(mock_staker["withdrawnAmount"])
171+
)
172+
self.assertEqual(staker.slashed_amount, int(mock_staker["slashedAmount"]))
173+
self.assertEqual(
174+
staker.locked_until_timestamp, int(mock_staker["lockedUntilTimestamp"])
175+
)
176+
self.assertEqual(
177+
staker.last_deposit_timestamp, int(mock_staker["lastDepositTimestamp"])
178+
)
124179

125180
def test_get_staker_empty_data(self):
126181
with patch(

packages/sdk/python/human-protocol-sdk/test/human_protocol_sdk/transaction/test_transaction_utils.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,11 @@ def test_get_transactions(self):
1919
"human_protocol_sdk.transaction.transaction_utils.get_data_from_subgraph"
2020
) as mock_function:
2121
mock_transaction_1 = {
22-
"block": 123,
22+
"block": "123",
2323
"txHash": "0x1234567890123456789012345678901234567890123456789012345678901234",
2424
"from": "0x1234567890123456789012345678901234567890",
2525
"to": "0x9876543210987654321098765432109876543210",
26-
"timestamp": 1622700000,
26+
"timestamp": "1622700000",
2727
"value": "1000000000000000000",
2828
"method": "transfer",
2929
"internalTransactions": [
@@ -36,11 +36,11 @@ def test_get_transactions(self):
3636
],
3737
}
3838
mock_transaction_2 = {
39-
"block": 456,
39+
"block": "456",
4040
"txHash": "0x9876543210987654321098765432109876543210987654321098765432109876",
4141
"from": "0x9876543210987654321098765432109876543210",
4242
"to": "0x1234567890123456789012345678901234567890",
43-
"timestamp": 1622800000,
43+
"timestamp": "1622800000",
4444
"value": "2000000000000000000",
4545
"method": "transfer",
4646
"internalTransactions": [
@@ -151,11 +151,11 @@ def test_get_transaction(self):
151151
"human_protocol_sdk.transaction.transaction_utils.get_data_from_subgraph"
152152
) as mock_function:
153153
mock_transaction = {
154-
"block": 123,
154+
"block": "123",
155155
"txHash": "0x1234567890123456789012345678901234567890123456789012345678901234",
156156
"from": "0x1234567890123456789012345678901234567890",
157157
"to": "0x9876543210987654321098765432109876543210",
158-
"timestamp": 1622700000,
158+
"timestamp": "1622700000",
159159
"value": "1000000000000000000",
160160
"method": "transfer",
161161
"internalTransactions": [
@@ -184,12 +184,12 @@ def test_get_transaction(self):
184184
)
185185
self.assertIsNotNone(transaction)
186186
self.assertEqual(transaction.chain_id, ChainId.POLYGON_AMOY)
187-
self.assertEqual(transaction.block, mock_transaction["block"])
187+
self.assertEqual(transaction.block, int(mock_transaction["block"]))
188188
self.assertEqual(transaction.tx_hash, mock_transaction["txHash"])
189189
self.assertEqual(transaction.from_address, mock_transaction["from"])
190190
self.assertEqual(transaction.to_address, mock_transaction["to"])
191-
self.assertEqual(transaction.timestamp, mock_transaction["timestamp"])
192-
self.assertEqual(transaction.value, mock_transaction["value"])
191+
self.assertEqual(transaction.timestamp, int(mock_transaction["timestamp"]))
192+
self.assertEqual(transaction.value, int(mock_transaction["value"]))
193193
self.assertEqual(transaction.method, mock_transaction["method"])
194194

195195
def test_get_transaction_empty_data(self):

0 commit comments

Comments
 (0)