Skip to content

Commit b9cfe43

Browse files
authored
Fix/get token account balance (#106)
* fix solana getTokenAccountBalance * add Solana support in sync-lag-monitor - change monitor name from head-lag-monitor to sync-lag-monitor - add support for tracking Solana sync lag * Update .pre-commit-config.yaml * linting
1 parent dc4ec35 commit b9cfe43

File tree

6 files changed

+276
-36
lines changed

6 files changed

+276
-36
lines changed

.pre-commit-config.yaml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,25 @@
11
repos:
22
- repo: https://github.com/psf/black
3-
rev: 24.3.0
3+
rev: 24.10.0
44
hooks:
55
- id: black
66
language_version: python3.10
77
- repo: https://github.com/pre-commit/mirrors-mypy
8-
rev: v1.2.0 # Updated to the desired version of mypy
8+
rev: v1.13.0 # Updated to the desired version of mypy
99
hooks:
1010
- id: mypy
1111
language_version: python3.10
1212
- repo: https://github.com/python-poetry/poetry
13-
rev: 1.4.0
13+
rev: 1.8.2
1414
hooks:
1515
- id: poetry-check
1616
- repo: https://github.com/pycqa/flake8
17-
rev: 6.0.0
17+
rev: 6.1.0
1818
hooks:
1919
- id: flake8
2020
additional_dependencies: [Flake8-pyproject]
2121
- repo: https://github.com/pycqa/isort
22-
rev: 5.12.0
22+
rev: 5.13.2
2323
hooks:
2424
- id: isort
2525
name: isort (python)

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -195,12 +195,12 @@ Chainbench will keep the test data up to date by running a background process th
195195

196196
### Monitors
197197
Monitors are separate processes that run during the test to collect or process some additional data and metrics relevant to the test.
198-
For example, head-lag-monitor will collect the latest block information from the node under test, check the timestamp and compare it to current time to calculate how much the node lags behind.
198+
For example, sync-lag-monitor will collect the latest block information from the node under test, check the timestamp and compare it to current time to calculate how much the node lags behind.
199199
You may include monitors in your test by using the `-m` or `--monitor` option and specifying the name of the monitor. At the moment, monitors only work in headless mode.
200200

201201
Here's an example:
202202
```shell
203-
chainbench start --profile evm.light --users 50 --workers 2 --test-time 12h --target https://node-url --headless --autoquit -m head-lag-monitor
203+
chainbench start --profile evm.light --users 50 --workers 2 --test-time 12h --target https://node-url --headless --autoquit -m sync-lag-monitor
204204
```
205205

206206

chainbench/main.py

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,10 @@
88
import click
99
import gevent.pool
1010
from click import Context, Parameter
11+
from locust.argument_parser import parse_locustfile_paths
12+
from locust.util.load_locustfile import load_locustfile
1113

12-
from chainbench.user import get_subclass_tasks
14+
from chainbench.user import EvmUser, SolanaUser, get_subclass_tasks
1315
from chainbench.user.common import all_method_classes, all_methods
1416
from chainbench.util.cli import (
1517
ContextData,
@@ -148,7 +150,7 @@ def validate_profile(ctx: Context, param: Parameter, value: str) -> str:
148150
default=[],
149151
help="Add a monitor to collect additional data or metrics. "
150152
"You may specify this option multiple times for different monitors",
151-
type=click.Choice(["head-lag-monitor"], case_sensitive=False),
153+
type=click.Choice(["sync-lag-monitor"], case_sensitive=False),
152154
multiple=True,
153155
)
154156
@click.option(
@@ -251,18 +253,16 @@ def start(
251253
click.echo(f"Profile path {profile_path} does not exist.")
252254
sys.exit(1)
253255

256+
user_classes = {}
257+
for locustfile in parse_locustfile_paths([profile_path.__str__()]):
258+
_, _user_classes, _ = load_locustfile(locustfile)
259+
for key, value in _user_classes.items():
260+
user_classes[key] = value
261+
test_data_types = set()
262+
for user_class in user_classes.values():
263+
test_data_types.add(type(getattr(user_class, "test_data")).__name__)
264+
254265
if test_by_directory:
255-
from locust.argument_parser import parse_locustfile_paths
256-
from locust.util.load_locustfile import load_locustfile
257-
258-
user_classes = {}
259-
test_data_types = set()
260-
for locustfile in parse_locustfile_paths([profile_path.__str__()]):
261-
_, _user_classes, _ = load_locustfile(locustfile)
262-
for key, value in _user_classes.items():
263-
user_classes[key] = value
264-
for user_class in user_classes.values():
265-
test_data_types.add(type(getattr(user_class, "test_data")).__name__)
266266
if len(test_data_types) > 1:
267267
click.echo(
268268
"Error occurred: Multiple test data types detected. "
@@ -384,9 +384,14 @@ def start(
384384
tags=["loudspeaker"],
385385
)
386386

387+
if list(test_data_types)[0] == "SolanaTestData":
388+
user: type[SolanaUser] | type[EvmUser] = SolanaUser
389+
else:
390+
user = EvmUser
391+
387392
unique_monitors: set[str] = set(monitor)
388393
for m in unique_monitors:
389-
p = Process(target=monitors[m], args=(target, results_path, test_time))
394+
p = Process(target=monitors[m], args=(user, target, results_path, test_time))
390395
click.echo(f"Starting monitor {m}")
391396
p.start()
392397
ctx.obj.monitors.append(p)
@@ -505,7 +510,7 @@ def shapes() -> None:
505510
)
506511
def methods() -> None:
507512
for method_class in all_method_classes:
508-
click.echo(f"\nMethods for {method_class.__name__}:")
513+
click.echo(f"\nMethods for {method_class.__name__}: ")
509514
task_list = get_subclass_tasks(method_class)
510515
for task in task_list:
511516
click.echo(f"- {method_class.task_to_method(task.name)}")

chainbench/test_data/solana.py

Lines changed: 194 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ def get_random_account(self, rng: RNG | None = None) -> Account:
153153
return self.get_random_block(rng).get_random_account(rng)
154154

155155
@staticmethod
156-
def get_random_token_address(self, rng: RNG | None = None) -> Account:
156+
def get_random_token_address(rng: RNG | None = None) -> Account:
157157
if rng is None:
158158
rng = get_rng()
159159
token_addresses = [
@@ -162,5 +162,198 @@ def get_random_token_address(self, rng: RNG | None = None) -> Account:
162162
"5fTwKZP2AK39LtFN9Ayppu6hdCVKfMGVm79F2EgHCtsi", # WHEYO
163163
"NeonTjSjsuo3rexg9o6vHuMXw62f9V7zvmu8M8Zut44", # Neon EVM
164164
"8BMzMi2XxZn9afRaMx5Z6fauk9foHXqV5cLTCYWRcVje", # Staika
165+
"EKpQGSJtjMFqKZ9KQanSqYXRcF8fBopzLHYxdM65zcjm", # dogwifhat
166+
"JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN", # Jupiter
167+
"DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263", # Bonk
168+
"HZ1JovNiVvGrGNiiYvEozEVgZ58xaU3RKwX8eACQBCt3", # Pyth
165169
]
166170
return rng.random.choice(token_addresses)
171+
172+
@staticmethod
173+
def get_random_token_account(rng: RNG | None = None) -> Account:
174+
if rng is None:
175+
rng = get_rng()
176+
token_accounts = [
177+
"CF34PLYZfTMteS2mR3VzxsHjk6VXfCTnAcnwaEGJrknt",
178+
"97DxJzDxY71ofivxpNuNyKYcZy824zJWAXYemM5Md4Dt",
179+
"FE2BNorsuDMFDQ8XNkDfxp5x2H59qviowi39RVBzPf2S",
180+
"2CR6HNJrq8g6auzwpQiVP2TcbE2gAPZxGT16pTU6h13g",
181+
"4ZFd7tmfZzoyinBR1mWSr5FfmjdyvmbZ7DMMhUjrx7jW",
182+
"FTUTbTrWdxctBh4DrYTK8Scrtnj52KMSYbc1RS9ytF6J",
183+
"2eZAfcCyxPwxxqK9gVfzPcJH1jrnfa2xZggy1RFEiDHd",
184+
"6ttf7G7FR9GWqxiyCLFNaBTvwYzTLPdbbrNcRvShaqtS",
185+
"62KEKuC6yPmKy7M1PJjk8EWuouuF1srk4rxwPptsoySh",
186+
"EaDGsTov6CvsZZeo16cbrrtUE8J9gjkSPis5c6SiSHEH",
187+
"FcTsmtRX9wNFhiviJbW5YgG3PKXDNQtemQA5zNL2W1pW",
188+
"HmrKnggYYcNVwF8S7L1nno7LCKzobDBjX5UBuzFZukYj",
189+
"5nox3B41bSNtJV3s7gFPWVK8JtdaZ4QxCVxrhpGgnw4B",
190+
"GoBAZzgSLnoc5mXuUHgMLKsqYX7BFrdgwQYJL2cApgmX",
191+
"3GXyFi89uNvGPngFi65NYsWxxHTWDbJQtM1ntjGfn2gK",
192+
"4T6FHkAmoW21ia1GWDT5KBMd83kjwrPiXx4QYTkxz899",
193+
"FwrCxkDG1vahAHeGi1Wr5mBgLyayUvCy3d1tbnhsAQ99",
194+
"EYVDkQXrjNwwpxw3m2EojnFJgyTVuan77XxMs2hbBk34",
195+
"4BedR6CnQRtHq3aMVcHcFaU9sT1Wns2vEKah7ATFimY7",
196+
"3eApKHDU4GpXD2L1uZ3CQGMj2bAq6grhdZz9zsf9xacr",
197+
"8gesfhmNebstEuFovKzFgaeq5LPtjM2esrq6JA4eQadJ",
198+
"ANjPXGaMSho5dp5A78osdTAYhWrt8o2DVQEjPhd2pZrW",
199+
"EvcsKVtsH92KvvAfA6SbWGA4ShTTTsWZt48KTdCuCd3Y",
200+
"7znyJ3N4K26BmispS6z7TNWfar61KzFiqbx4pYmtG4dN",
201+
"3zQXNfbzwp9L3UbwMe3JsSjB6eT9Wcx8B5RQ2VS1G2fL",
202+
"7mfvcxhqSzqQ9iTHqDqugC3HVBcnvoFsdgWEjLyykx3E",
203+
"GJscPZ2xzayPa8QXW2Xi2WJPHaj2k1TQDShbhYJUHR94",
204+
"3shgyeu9cy8xkkRwDENKnsYXxsCUkc5suq3aYXi912XW",
205+
"3FGoU3eRepLeK5ZD1jA4GhSWw7GUYhsJwPBB5Qfihrmt",
206+
"3voYsgqCZEWvyG8xSkNhgqYb9ciKNjzXX91JwesqdasT",
207+
"G58QLCn2H2TvtoPT5uwT8tjpYAUa1CzWsbKJXUPqMaJ4",
208+
"J5jtM83Eoyn1TQdxu1hRC96dLy4ZgenN9vf6Fk5jLe9V",
209+
"GvZ4emMJfgW9U2nfw145FraS2BMJyGsmoji8eWi11d6j",
210+
"DugPkEmWHgTSXNMGAD9r3SbL7MgDrnuHuSeH695tN8FQ",
211+
"39uZe8NUJJVnNmQ6nA6VxQFwQ3GqypvtVrnhSLbByRBr",
212+
"8zBEBGcPZBVqu6fRmxsiXCEG4ehvh3TEiy8gq6q6E6YL",
213+
"4bEcyAvz5zSzFwAnEAHGSsUG1EASMnbJSDPSipPKStti",
214+
"DTbktzGachmQVW1sH7sNxCYrs3YpcEtyDuBcHAWr6y3t",
215+
"HQvP9mRNpZBXi3CMsp2vP2H8qaGAFeQobArX455Ugoh9",
216+
"4iSr7wAsfe9ohXSS2Z6v2icV94X81hPtPLLvt6ss84yb",
217+
"3d1Vr3n7cdzhk3vrSn2eXm8H3gqSircLVqwqcEKc4AX2",
218+
"4zHS6gTzBRXpJojhJgHQRCVYhMAdDBHW2QSU7SNMtXh9",
219+
"JguSE1vBoUUSN7MxZBHKJHjXxECW7d12xLPLzVV7SYi",
220+
"zGWrqUkuhmtHA8G7JJ3mxbbAxxRYpC2GXWnKyYMFDM2",
221+
"4ehpyuufJtzt49CtJYaN3HLDYYMotvR34WKkFBNe4fDv",
222+
"HsrDHXyWT6gNPnHPSMgoHpQxLSqMcsyJCXLvp4oxhoV7",
223+
"B4kZTkeZCTnHf3J6pWC9deHUx4BWU8cZPewY6PtWYS3s",
224+
"HjVvBA8HX3ZxA9wAziApGXTQsZnLTtDxQa9ymSCkke64",
225+
"8M23uCAp1Wc3jTKhq7nzTxqKK54XVdDwSLspv1x4Yigs",
226+
"DW8awKneKxcep9iouLeNwWRAzC6rz9sLKAgENpXL6BBd",
227+
"HU5CJ61HKmWfBzK6jrD2q6o17iwrkf3T9xqrdBgPBR5F",
228+
"2yobwT8wsq6y4fbEkdnZk5Mj42hiAZW6tyiLU4KjhPVc",
229+
"9vujwMDWRHfXSHs1oTEUXcUUwWmev4gf2mzJ2FzNbmkq",
230+
"2wkdLjUEmaQ88Ut1hi5vRFoFgSpovz8x9xj8nhURTKJB",
231+
"Cdigh3iZD8DvHTnNyC4Sm7uiNhiFmY2EcpfCviLG2AEC",
232+
"7ZHAcG8T12tWeSgvvTNDE3hskFfXRaVe3PRMjvEAzCC4",
233+
"5m1gS9Sphbvt4zDCu6gqFqVcekCX8eAtfwJjPDMUVvxJ",
234+
"9HHMyRMeYSyeR45LSnHHvpofq8cnX2dShUg5zmHsDpiA",
235+
"4WMDNjMpKLEbC4oqAeTchN5WjwjJrnZdTzmpTqdeJoc8",
236+
"r1RNBu4Grexhe9AsK1cakgyzh93uxmXzeKk7jApVhKf",
237+
"CfE7AzLsSsEBSsQgWAvXes9qfQmE7WYJTdApMefu8ZaM",
238+
"HSizfxkFyeUssoVvzgjkgArQ4RFyKZWMmHU554Ya9V6R",
239+
"9okWmESkYFw3Jmk3KxRijp2TMM21YHAGaUFRZNUoDFjP",
240+
"FRojFj9xyuFtePNn4xuqPzZU8CLyLpAaYPwf7aG8gotJ",
241+
"A5zrmTFMPpTWhSxay8gDr3rLr4WguCPYp8um5ywRFeCT",
242+
"8VWPNtQvjSGrot14cgBSgNDKJhLvFaodcpY9dFGZJx1z",
243+
"3PqVf4rm7Yx1GqdND9Q6mMormXfFZRvTJdBFwBEGdobB",
244+
"C3EJkyHWfAn9mZBi6SneEp57VvpYNxVnqE9AtwmvAuo",
245+
"9x2FRfDMAiDBSZPR5HJje6bpAH8XHkeqedBopbwu9g1H",
246+
"gi9vP3V2p5mDYURGNo7CPcEfR1tMp3sxjbQ1AHvpyxZ",
247+
"BbLCUYHyYcRJCfzgoow96MSMb3EKdHWL4ALq3YNJpA2z",
248+
"HfAK56UE6pLwBM1kQxn1vAk5W6sRBrSE8KrndCooR5Kx",
249+
"G6g2193UQA3N8byF9D7cDn5tYhAt6gbNB9zLNHZYJJaH",
250+
"3MXL9RNyHJcg3wYUBsbDLQyNTyJJRftZMzg7bxPsdFGf",
251+
"3bFoTw6XoeuYd1qMCQCQTf7EJoQHXjgJUB8W9FoSESY1",
252+
"BxQSVGUcfWt2k5AZ58rKxwxdCau2NXa9yt9osmDWU9hJ",
253+
"GSHsTFMNMtAyFP6PxDKvTHDDBzzZYUFQnqFumtcLFicc",
254+
"Fm5iBQMZxuH5XMNMd7RcfYxQuxhGNXsLZ5SZ5rLXnCGF",
255+
"6Y7xRKGwL1ok12NnkwNhAtumqb7ugZ9xvCYrnMB8Xviv",
256+
"H4BdrSaFofoeQRUH4g5fY9tgRc1yqCdEryETKnW26tbm",
257+
"CTh1akv2g7hRsBUFdjLrNW6TzAe34AukJBNsYw5sUH5s",
258+
"6fbPJiBdXAoN4qkXuxMwUNZUF77WxfeDPCznWCxVPdL2",
259+
"C4hXRxKmfucqNDndwYASSDm7EbPcoXG3LPFULdXP5MUh",
260+
"8kfrPrNzFv3ouvQBP4JwmA9upRu4uDAXf8WP7gmsRevA",
261+
"8PvETn7pxGE7ZwLUxQbob3zXcx8SFYEaKujWXkVdyzy8",
262+
"86nsBYZV6UyuiRqK5PyMKpbJAMkay7aLyfBieYjFw383",
263+
"7LBGStihbxoBAWtqDiVzTSg8ci6y74Ws2bbd2xiyXk35",
264+
"DGKpmnNkmKzgMsrJQsP9dYzxRChcf5PbhDA8Z24Mm9L9",
265+
"3Xjac1TpCgtW8U5RBenzmWwUfsNXhNAn7jdvvgURDped",
266+
"GLVvAEsrWc5vhknQdkVyDkyzgQ2kFzh4NhfqADYxzLZb",
267+
"9YzDwNLK5C7ZEKhYiNt27gbNejpdEoeTfKyTFwDsjfgy",
268+
"7Xi29v2bqBx4DNbVq1LA8WJPuyLiRPqCxxBBZBnNsumu",
269+
"BKqEQy6E4Pa2yAEssbQS1PfbjQCfKSmrjqNCtemY8dKk",
270+
"TsG1nsBvMxKULXtiAgH3iUatrFzihw9MgHyz6VGHSSJ",
271+
"HthTrkvsRA1sAuWRJmP4UAB37VT2RTgT7QFWvWKMRey",
272+
"5SR9UtKUJpXRFd3W1bnNjS44vJuoFQyAznoESzGA7M1r",
273+
"Eqz4J57GkmPq2P2U8yWGQspUB8FWBLnidoPhMcvWS1Jx",
274+
"A6JCe9BDEby7fsevUbzTqU9jFBbkHwSuDmJGhoPLy44L",
275+
"Grh57JBjPDYeTwSqNsQ8i3ks2HJsq5HxCFHpqhNcWiDi",
276+
"CDeni3XaGkCrbN8Wm2PwmFHnk3ce9cEFbitRC1NNxxrE",
277+
"7XX64f8UKE1nxNCSwncCUj3c2FJYdXHmDV5xd5DRdFky",
278+
"EHDnHqX6PtnSdPfsnnr1oWtmQbenDwqZAKUo5QAq9Ro3",
279+
"1LLLyMZvAdimbcsC4Xp7GVWiJScztEpfXVR9upyxq5G",
280+
"DsxpGaCZ13aUfDDz2CSjuzCA8XJJYLuGsV65KXdyLWdW",
281+
"Fm7yBTcuUDBdzj2PbP6tr8uiFAJwS53kNQbwEERHP65A",
282+
"EdhM4qGK29P2X1GsRYZtF8E5v9rkd52NRXEh1d8BzUc8",
283+
"4kT3EXc5dDVndUU9mV6EH3Jh3CSEvpcCZjuMkwqrtxUy",
284+
"GqzXwoPv8TJtxqDDB1G3Q35MQpor6433fdB18vdNYfqC",
285+
"AaJyLPfJoJFcUHHH7VDWsqyVPb7aMAwcRHB2Z7YXt2La",
286+
"6sJ9tDgWmQxkEZSk8xihYiJUpmFL3fdgLQ6DayCSDR2U",
287+
"7VKFsPJooGLrWvMqyjvfTucUQRKzop6iErPGw4S2r69K",
288+
"DNnGKYfnrQirEr2Z1145WLLtRCwtaZh8PpzijrWUDKMr",
289+
"3MWHzLgLQ98n4htEJXKJWNUNUfbeexWEDnksRFxDsLeS",
290+
"6fafNTqhRyQ4Q3cwD9VVhXZAVCtL1YYW2kSKTD3ytBse",
291+
"AUmMMDCvmghtsrn5T6EzcJBiaSApv5P4d2XVQdZAg1vp",
292+
"BADVD1RWzAXDd62Fj6RPTnmFwXxviRjxpvSaidarHDc9",
293+
"2Dyj8L9kv4wSK4sXyfcduoYoPUouSQWsuv9THm11cvEh",
294+
"GygCQjU9eTr3WivrstviJhJqbDL4tnoAjGXCGo1XzEub",
295+
"CBzCGSmuNKKrGjMQLQ1ihkbVUJRATavcsd6rdiZ2CFv7",
296+
"pC2qrgQNnKZ87JxBrULrZiLhEQim8SpchAxAKnqDnya",
297+
"26ddLrqXDext6caX1gRxARePN4kzajyGiAUz9JmzmTGQ",
298+
"6G4XDSge4txj5tBkA5gZqefXXE3BRxqA37Yb1pmrHv6N",
299+
"7bEL9XkPGNg7a3oSiUERKsZtFoJMqKh6VhGDCmMCPqdg",
300+
"K6U4dQ8jANMEqQQycXYiDcf3172NGefpQBzdDbavQbA",
301+
"GDijXRGfd1jhk5GkRPp1TDnEH2FfHURSRZeB5um3pUWk",
302+
"DWVtxR7oo3uTiuM3o1cCxTJ5wM8Wnjvu1apwMkQhdedY",
303+
"B3NG3yTDwf3sL1oCUvf39HtdzWbtYoinNWqKDoRJTeuH",
304+
"CeLRs4kchQbWEcqZf7ctGrYhXwbU89fVxRs4Q34XeiHq",
305+
"GQrdtzmAsXpb5pPsENC68jXF6YwmME235ZJpRoKh5F5R",
306+
"ASehmX2sjG1Qz7MQyLJu8wBoV2Xx8cCV3uU8VbBDGQJQ",
307+
"649KG5AEPic6MDVdbXjLPWj3vy6Lc466qGjV9d5Y3VyZ",
308+
"FGHwSJMx8yvMMmfiZSd5jmL7KbbbubVpNrhYX7NXPCdu",
309+
"E6FLdjDBtHvzhMGihcbec34KfcAqSYW67kfJV8RAKH1f",
310+
"mGmik7Qf2YdrSZjTsS3ciZn4xyqiVHYUP7cfjQDT5he",
311+
"6QxycVhn6Zak2ky4HAEEanz85ockBaEfHxgtqPP7Mo1a",
312+
"FErFdzAFoA26ASDz9zh4Jan3hV2wRb32Mc1MFMXr7n51",
313+
"Ek7bER9cRJZVHE7Zzmig31PbqT9KkkjAKAgqnyof6JAk",
314+
"EbX6N2wuAAiF6WMnQPG15kq18nx2yApg9ikawxDHBi7j",
315+
"2V9CYburvmC2X2w96HFreUd9iEcW7BdWTFTJCt46tuai",
316+
"AbJpTjriAPp4Vuv5xjoWQHjh68NVSw36Wmky2hQVJJzP",
317+
"F8FqZuUKfoy58aHLW6bfeEhfW9sTtJyqFTqnxVmGZ6dU",
318+
"5hpfC9VBxVcoW9opCnM2PqR6YWRLBzrBpabJTZnwwNiw",
319+
"4XHP9YQeeXPXHAjNXuKio1na1ypcxFSqFYBHtptQticd",
320+
"JDPR4RP95CdtwLcjqe3E4cVthzCmkASfs4yamN9MZyPR",
321+
"CDV3tvd7XwNez9crbEmJpPjdNXceM1Ro5iHqTiaUKt2w",
322+
"6xAckK4UWmaX4CKu27oPzHLxMKzaDMj73WA9xKpqSFQ1",
323+
"9Vfbb8i2Z6WjDJwZEfmhwTk4paCpTYcyJgNFdns2GV2s",
324+
"2UfAKNkmBWjad3qKnFCRfzbHwwhgU5eBs2DDXSJBMVSb",
325+
"9uEDvRyhqygr6SrmvddRDaFbdsazQzuPQCsDewpwfbqh",
326+
"7FdQsXmCW3N5JQbknj3F9Yqq73er9VZJjGhEEMS8Ct2A",
327+
"AoEkWJKHXzrPsgsoawYTLG3aKb9L8oLmVqM9EXFtiPN7",
328+
"7a7iBY13WPKfSpkA1WMpoJB59NE2zr255THWg7GyVb1q",
329+
"7csLUpezHQH7f5uha3s93ruKutcniNQmxjmapRsrfxaR",
330+
"6jFRDDFQDCasLcWVMtixuu1eQCDnMhCttXktVeL7cEYM",
331+
"ATbwzBwGNM8QjLwPGk8PJz8FgCmfWfRud1zB8Zs6tLEb",
332+
"HJbmekvxyMuVjTV2gZKgdBYx94Bumugtt1GrWKBkTv5X",
333+
"AsBeRcytoLArFXwzovGH2gamp9by5B9V1TemMT5LDyQH",
334+
"3pY1zLGNXnQedWwCQeaaHK9dQCsfqMCRPzVD3DnZwSsd",
335+
"29zZdccuHktabvWwJaEokASw6pPBDVpqBDZxTicMhM1R",
336+
"GKD5CK5SqpB66taGqTwGy1FCTyzKrxhyrY7V68aKpoVC",
337+
"Eq9dm4pHewdSVaKdpVJogjLW6upd9hNkiboX2eSncmFV",
338+
"23KfDBTdpaBqfn8aUeoEDgfGJ5368gpnyYGfNkKcECqM",
339+
"5ULtZcyfuWvKuwB555WN4W1vsVW4F3yHU9UW1Gd7kAWy",
340+
"ADBN766ykF4HdkNa7Az8BVrpaQdvSpaMMULufBAs8U1B",
341+
"61YcP8msC5F3ZTLy99VWM2oom6y47UzNmSQQdXMmdCG1",
342+
"984XkyV6X29LUYSi476KC5cTFNMyegrx81EfHj6qWSeV",
343+
"DXu8wVJigvqBLNf18QYQbHn7hcvVWnCpCMoYAPuQGEyr",
344+
"7p1D1WBPr3sK9TYwrRwVcjYwacXhMH3WdJqqyowbvD1f",
345+
"52AXihP4T7dgtfxFMjjLBFVGucNvHmxMW5GkvM1vQyFU",
346+
"HmBHnMwfmsuEFZ4pFpYAXeAkcdnbWzCGEwZ2SXjY8W3N",
347+
"3XSoALqyVbG1ZMgmTwNcuUf294LzjUj7Mvy7MgA7YNVk",
348+
"Gnyw7rZykLq9FjLMzsu6nAryMJijy5FjCEbxxdkymRwk",
349+
"4QJg58aV3UUi2CJ99kiqCMizY81w513qvaQoNgPERHBn",
350+
"FQ2yHp7D3SBYQoe2crFATJdhsazJKJ9Yvq4xFbTzCMYx",
351+
"GSmbMHXC6czx77qXWT3UH1jg2jW6SWdD6D6mFFx3rYmY",
352+
"JDFgtub1sDznJgJRYbHZu1tGQsnhrz17gv8Arq8Zc1SL",
353+
"6BQsUwpVwmPyjGfpE3BAUsNmmbcVy9ygyDYXfpFZ785Z",
354+
"ACthtigKSdBXfCKLUfZNjQzLMmKHzjbSafqpa1NJ3M7J",
355+
"9omg1BYxdA3hhM1rmx3tpMnTf9aqzBRUE9bV6i77b88M",
356+
"HwyjTsHYceVsnhH3Suda9VSqtXftuN9wwjt4aUEx6C3T",
357+
]
358+
359+
return rng.random.choice(token_accounts)

chainbench/user/protocol/solana.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,9 @@ def _random_account_params_factory(self, rng: RNG) -> list[Account | dict]:
9191
{"commitment": "processed"},
9292
]
9393

94+
def _random_token_account_params_factory(self, rng: RNG) -> list[Account | dict]:
95+
return [self.test_data.get_random_token_account(rng)]
96+
9497
def _get_signature_statuses_params_factory(self, rng: RNG) -> list[list[TxHash] | dict]:
9598
return [
9699
[self.test_data.get_random_tx_hash(rng) for _ in range(2, 2 + rng.random.randint(0, 3))],
@@ -420,11 +423,10 @@ def get_supply() -> RpcCall:
420423
method="getSupply",
421424
)
422425

423-
# TODO: Fix "Invalid param: not a Token account" and "Invalid param: could not find account" errors
424426
def get_token_account_balance(self) -> RpcCall:
425427
return RpcCall(
426428
method="getTokenAccountBalance",
427-
params=self._random_account_params_factory(self.rng.get_rng()),
429+
params=self._random_token_account_params_factory(self.rng.get_rng()),
428430
)
429431

430432
def get_token_accounts_by_delegate(self) -> RpcCall:

0 commit comments

Comments
 (0)