Skip to content

Commit e33ea8c

Browse files
committed
fix: DagAccount() transfer() would request last reference 2x
1 parent e24cd64 commit e33ea8c

File tree

3 files changed

+42
-129
lines changed

3 files changed

+42
-129
lines changed

pypergraph/account/dag_account.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,7 @@ async def transfer(
234234
)
235235

236236
signed_tx, hash_ = await self.generate_signed_transaction(
237-
to_address, amount, fee
237+
to_address, amount, fee, last_ref
238238
)
239239
tx_hash = await self.network.post_transaction(signed_tx)
240240

pypergraph/account/tests/conftest.py

Lines changed: 0 additions & 126 deletions
Original file line numberDiff line numberDiff line change
@@ -32,129 +32,3 @@ def metagraph_account():
3232
def mock_shared_responses():
3333
return {"balance": {"ordinal": 4493725, "balance": 218000000}}
3434

35-
36-
@pytest.fixture
37-
def mock_metagraph_responses():
38-
return {
39-
"transactions_by_address": {
40-
"data": [
41-
{
42-
"hash": "39b73f07984301a30bb3d16d5d5f32a004b65d23df958c39cfb13fd0ab1f8da7",
43-
"ordinal": 147,
44-
"amount": 10000000,
45-
"source": "DAG0zJW14beJtZX2BY2KA9gLbpaZ8x6vgX4KVPVX",
46-
"destination": "DAG5WLxvp7hQgumY7qEFqWZ9yuRghSNzLddLbxDN",
47-
"fee": 2000000,
48-
"parent": {
49-
"hash": "a7b0f25c3b445464bf819fbcb500503bf41e3c085410ae4b171f6fb28884de13",
50-
"ordinal": 146,
51-
},
52-
"salt": 211479158172002,
53-
"blockHash": "e03954438db9368561a74b57da8895da7f74f42dbeb823b4541aa3a009d4c1df",
54-
"snapshotHash": "0cc3efe3135aacf80ccb16e5b67d56cc6b60a52a3d2d8713f08cd717d7950b17",
55-
"snapshotOrdinal": 1506586,
56-
"transactionOriginal": {
57-
"value": {
58-
"fee": 2000000,
59-
"salt": 211479158172002,
60-
"amount": 10000000,
61-
"parent": {
62-
"hash": "a7b0f25c3b445464bf819fbcb500503bf41e3c085410ae4b171f6fb28884de13",
63-
"ordinal": 146,
64-
},
65-
"source": "DAG0zJW14beJtZX2BY2KA9gLbpaZ8x6vgX4KVPVX",
66-
"destination": "DAG5WLxvp7hQgumY7qEFqWZ9yuRghSNzLddLbxDN",
67-
},
68-
"proofs": [
69-
{
70-
"id": "4462191fb1056699c28607c7e8e03b73602fa070b78cad863b5f84d08a577d5d0399ccd90ba1e69f34382d678216d4b2a030d98e38c0c960447dc49514f92ad7",
71-
"signature": "3044022032d2d61e4d29c012fd302fd18d86c439d0ac6528b408160796289268295d451e02205248def09471b061a4d98853c856a3086428f441b9c025148470acf380a2e13d",
72-
}
73-
],
74-
},
75-
"timestamp": "2025-06-10T08:47:16.999Z",
76-
"globalSnapshotHash": "a8c04a9550365949057ec8dbc2f4a3b6665c77bc5c4ba89c1198b0119b923826",
77-
"globalSnapshotOrdinal": 4521225,
78-
},
79-
{
80-
"hash": "a7b0f25c3b445464bf819fbcb500503bf41e3c085410ae4b171f6fb28884de13",
81-
"ordinal": 146,
82-
"amount": 10000000,
83-
"source": "DAG0zJW14beJtZX2BY2KA9gLbpaZ8x6vgX4KVPVX",
84-
"destination": "DAG5WLxvp7hQgumY7qEFqWZ9yuRghSNzLddLbxDN",
85-
"fee": 2000000,
86-
"parent": {
87-
"hash": "96bd897261ba7f1475281450ce6fb0bfa1a1ac27a075264737996f8ce9ca1172",
88-
"ordinal": 145,
89-
},
90-
"salt": 127252911002285,
91-
"blockHash": "2be1e95618dd8d654cdc3d0ab0780bd86f77c09d37cc0c8bcd800a81e6e4871a",
92-
"snapshotHash": "fc599d337ef7509fa4af6f5385c6a536c27d918e193ccef3fa38628a5388820f",
93-
"snapshotOrdinal": 1506584,
94-
"transactionOriginal": {
95-
"value": {
96-
"fee": 2000000,
97-
"salt": 127252911002285,
98-
"amount": 10000000,
99-
"parent": {
100-
"hash": "96bd897261ba7f1475281450ce6fb0bfa1a1ac27a075264737996f8ce9ca1172",
101-
"ordinal": 145,
102-
},
103-
"source": "DAG0zJW14beJtZX2BY2KA9gLbpaZ8x6vgX4KVPVX",
104-
"destination": "DAG5WLxvp7hQgumY7qEFqWZ9yuRghSNzLddLbxDN",
105-
},
106-
"proofs": [
107-
{
108-
"id": "4462191fb1056699c28607c7e8e03b73602fa070b78cad863b5f84d08a577d5d0399ccd90ba1e69f34382d678216d4b2a030d98e38c0c960447dc49514f92ad7",
109-
"signature": "3045022100ed22bc974579574c72707cd56ee3a7be4c175e28f49365b44f9915a383e5eddb022052e9c028ca7745ada8ddbf49c0ae09d73c1f55a3d022527bfe1234aec0c76281",
110-
}
111-
],
112-
},
113-
"timestamp": "2025-06-10T08:47:16.999Z",
114-
"globalSnapshotHash": "a8c04a9550365949057ec8dbc2f4a3b6665c77bc5c4ba89c1198b0119b923826",
115-
"globalSnapshotOrdinal": 4521225,
116-
},
117-
{
118-
"hash": "96bd897261ba7f1475281450ce6fb0bfa1a1ac27a075264737996f8ce9ca1172",
119-
"ordinal": 145,
120-
"amount": 10000000,
121-
"source": "DAG0zJW14beJtZX2BY2KA9gLbpaZ8x6vgX4KVPVX",
122-
"destination": "DAG5WLxvp7hQgumY7qEFqWZ9yuRghSNzLddLbxDN",
123-
"fee": 2000000,
124-
"parent": {
125-
"hash": "85bfbb22b3f9789407811c086ce10d9500ceb91bf41051ca0a551ce7551a290a",
126-
"ordinal": 144,
127-
},
128-
"salt": 93680649930862,
129-
"blockHash": "8a2b223651d23df27cc5b024c4b1cf33a327aa68158fa07a5d31cd160530026d",
130-
"snapshotHash": "4bc3ee6bfa0fafd49fef374e58ff58043b040d749b88f3a2d8708ed2af90aac8",
131-
"snapshotOrdinal": 1506560,
132-
"transactionOriginal": {
133-
"value": {
134-
"fee": 2000000,
135-
"salt": 93680649930862,
136-
"amount": 10000000,
137-
"parent": {
138-
"hash": "85bfbb22b3f9789407811c086ce10d9500ceb91bf41051ca0a551ce7551a290a",
139-
"ordinal": 144,
140-
},
141-
"source": "DAG0zJW14beJtZX2BY2KA9gLbpaZ8x6vgX4KVPVX",
142-
"destination": "DAG5WLxvp7hQgumY7qEFqWZ9yuRghSNzLddLbxDN",
143-
},
144-
"proofs": [
145-
{
146-
"id": "4462191fb1056699c28607c7e8e03b73602fa070b78cad863b5f84d08a577d5d0399ccd90ba1e69f34382d678216d4b2a030d98e38c0c960447dc49514f92ad7",
147-
"signature": "304402205c299c5c353eb0488e11b7203ff87681ca04da9ef4bc5b0359c91579753a567d0220187b52cec247154b37fc457083be86cfb56be49fb9cc137a4d73151378cf1cf4",
148-
}
149-
],
150-
},
151-
"timestamp": "2025-06-10T08:39:36.646Z",
152-
"globalSnapshotHash": "c9c08164eaeccb3b482b69803a8c90ad220f7a0725ac4c155c80964b649c050f",
153-
"globalSnapshotOrdinal": 4521195,
154-
},
155-
],
156-
"meta": {
157-
"next": "eyJoYXNoIjoiNjQzY2NjYjlkMDIzNjA0NzdlNmM1MjNjMGNiMDNiYWNhYzVjZGJhNTUxYjA1MTUxY2Y0Y2EzZjg2NTU3ZmYzMCJ9"
158-
},
159-
}
160-
}

pypergraph/account/tests/test_account.py

Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from pypergraph.network.models.transaction import PendingTransaction
88

99
from conftest import dag_account
10+
from pypergraph.network.tests.conftest import mock_block_explorer_responses, mock_l1_api_responses
1011

1112

1213
@pytest.mark.account
@@ -167,15 +168,53 @@ async def test_get_balance(
167168

168169
@pytest.mark.asyncio
169170
async def test_get_currency_transactions(
170-
self, metagraph_account, httpx_mock: HTTPXMock, mock_metagraph_responses
171+
self, metagraph_account, httpx_mock: HTTPXMock, mock_block_explorer_responses
171172
):
172173
httpx_mock.add_response(
173174
url="https://be-mainnet.constellationnetwork.io/currency/DAG7ChnhUF7uKgn8tXy45aj4zn9AFuhaZr8VXY43/addresses/DAG0zJW14beJtZX2BY2KA9gLbpaZ8x6vgX4KVPVX/transactions?limit=3",
174-
json=mock_metagraph_responses["transactions_by_address"],
175+
json=mock_block_explorer_responses["transactions_limit_3"],
175176
)
176177
r = await metagraph_account.get_transactions(limit=3)
177178
assert len(r) == 3
178179

180+
@pytest.mark.asyncio
181+
async def test_currency_transfer(self, dag_account, httpx_mock: HTTPXMock, mock_l1_api_responses):
182+
from secret import to_address
183+
dag_account.connect(network_id="integrationnet")
184+
httpx_mock.add_response(
185+
method="GET",
186+
url="https://l1-lb-integrationnet.constellationnetwork.io/transactions/last-reference/DAG0zJW14beJtZX2BY2KA9gLbpaZ8x6vgX4KVPVX",
187+
json=mock_l1_api_responses["last_ref"],
188+
)
189+
httpx_mock.add_response(
190+
method="POST",
191+
url="https://l1-lb-integrationnet.constellationnetwork.io/transactions", # adjust if needed
192+
json={"data": {"hash": "b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9"}},
193+
status_code=200,
194+
)
195+
r = await dag_account.transfer(
196+
to_address=to_address, amount=100000000, fee=200000
197+
)
198+
assert isinstance(r, PendingTransaction)
199+
200+
# metagraph_account = MetagraphTokenClient(
201+
# account=account,
202+
# metagraph_id="DAG7ChnhUF7uKgn8tXy45aj4zn9AFuhaZr8VXY43",
203+
# # l0_host="http://elpaca-l0-2006678808.us-west-1.elb.amazonaws.com:9100",
204+
# currency_l1_host="http://elpaca-cl1-1512652691.us-west-1.elb.amazonaws.com:9200",
205+
# )
206+
#
207+
# try:
208+
# r = await metagraph_account.transfer(
209+
# to_address=to_address, amount=10000000, fee=2000000
210+
# )
211+
# assert isinstance(r, dict)
212+
# except (NetworkError, httpx.ReadError):
213+
# failed.append("El Paca Metagraph: Network or HTTPX ReadError (timeout)")
214+
#
215+
# if failed:
216+
# pytest.skip(", ".join(str(x) for x in failed))
217+
179218

180219
@pytest.mark.integration
181220
class TestIntegrationAccount:

0 commit comments

Comments
 (0)