genlayer-test 2.0.0__tar.gz → 2.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/PKG-INFO +1 -1
  2. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/genlayer_test.egg-info/PKG-INFO +1 -1
  3. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/gltest/contracts/contract.py +13 -5
  4. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/gltest/contracts/contract_factory.py +25 -7
  5. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/gltest/contracts/contract_functions.py +9 -6
  6. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/gltest/types.py +1 -0
  7. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/gltest_cli/config/plugin.py +2 -2
  8. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/pyproject.toml +1 -1
  9. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/tests/examples/tests/test_intelligent_oracle_factory.py +5 -21
  10. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/LICENSE +0 -0
  11. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/README.md +0 -0
  12. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/genlayer_test.egg-info/SOURCES.txt +0 -0
  13. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/genlayer_test.egg-info/dependency_links.txt +0 -0
  14. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/genlayer_test.egg-info/entry_points.txt +0 -0
  15. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/genlayer_test.egg-info/requires.txt +0 -0
  16. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/genlayer_test.egg-info/top_level.txt +0 -0
  17. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/gltest/__init__.py +0 -0
  18. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/gltest/accounts.py +0 -0
  19. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/gltest/artifacts/__init__.py +0 -0
  20. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/gltest/artifacts/contract.py +0 -0
  21. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/gltest/assertions.py +0 -0
  22. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/gltest/clients.py +0 -0
  23. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/gltest/contracts/__init__.py +0 -0
  24. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/gltest/contracts/method_stats.py +0 -0
  25. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/gltest/contracts/stats_collector.py +0 -0
  26. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/gltest/contracts/utils.py +0 -0
  27. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/gltest/exceptions.py +0 -0
  28. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/gltest/fixtures.py +0 -0
  29. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/gltest/helpers/__init__.py +0 -0
  30. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/gltest/helpers/fixture_snapshot.py +0 -0
  31. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/gltest/helpers/take_snapshot.py +0 -0
  32. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/gltest/logging.py +0 -0
  33. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/gltest_cli/config/__init__.py +0 -0
  34. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/gltest_cli/config/constants.py +0 -0
  35. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/gltest_cli/config/general.py +0 -0
  36. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/gltest_cli/config/pytest_context.py +0 -0
  37. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/gltest_cli/config/types.py +0 -0
  38. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/gltest_cli/config/user.py +0 -0
  39. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/gltest_cli/logging.py +0 -0
  40. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/gltest_cli/main.py +0 -0
  41. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/setup.cfg +0 -0
  42. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/tests/__init__.py +0 -0
  43. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/tests/conftest.py +0 -0
  44. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/tests/examples/contracts/football_prediction_market.py +0 -0
  45. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/tests/examples/contracts/intelligent_oracle.py +0 -0
  46. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/tests/examples/contracts/intelligent_oracle_factory.py +0 -0
  47. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/tests/examples/contracts/llm_erc20.py +0 -0
  48. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/tests/examples/contracts/log_indexer.py +0 -0
  49. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/tests/examples/contracts/multi_file_contract/__init__.py +0 -0
  50. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/tests/examples/contracts/multi_file_contract/other.py +0 -0
  51. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/tests/examples/contracts/multi_read_erc20.py +0 -0
  52. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/tests/examples/contracts/multi_tenant_storage.py +0 -0
  53. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/tests/examples/contracts/read_erc20.py +0 -0
  54. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/tests/examples/contracts/storage.py +0 -0
  55. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/tests/examples/contracts/user_storage.py +0 -0
  56. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/tests/examples/contracts/wizard_of_coin.py +0 -0
  57. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/tests/examples/tests/test_football_prediction_market.py +0 -0
  58. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/tests/examples/tests/test_llm_erc20.py +0 -0
  59. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/tests/examples/tests/test_llm_erc20_analyze.py +0 -0
  60. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/tests/examples/tests/test_log_indexer.py +0 -0
  61. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/tests/examples/tests/test_multi_file_contract.py +0 -0
  62. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/tests/examples/tests/test_multi_file_contract_legacy.py +0 -0
  63. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/tests/examples/tests/test_multi_read_erc20.py +0 -0
  64. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/tests/examples/tests/test_multi_tenant_storage.py +0 -0
  65. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/tests/examples/tests/test_read_erc20.py +0 -0
  66. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/tests/examples/tests/test_storage.py +0 -0
  67. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/tests/examples/tests/test_storage_legacy.py +0 -0
  68. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/tests/examples/tests/test_user_storage.py +0 -0
  69. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/tests/examples/tests/test_wizard_of_coin.py +0 -0
  70. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/tests/gltest/__init__.py +0 -0
  71. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/tests/gltest/artifact/__init__.py +0 -0
  72. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/tests/gltest/artifact/contracts/duplicate_ic_contract_1.py +0 -0
  73. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/tests/gltest/artifact/contracts/duplicate_ic_contract_2.py +0 -0
  74. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/tests/gltest/artifact/contracts/not_ic_contract.py +0 -0
  75. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/tests/gltest/artifact/test_contract_definition.py +0 -0
  76. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/tests/gltest/assertions/test_assertions.py +0 -0
  77. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/tests/gltest_cli/__init__.py +0 -0
  78. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/tests/gltest_cli/config/test_config_integration.py +0 -0
  79. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/tests/gltest_cli/config/test_general_config.py +0 -0
  80. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/tests/gltest_cli/config/test_plugin.py +0 -0
  81. {genlayer_test-2.0.0 → genlayer_test-2.1.0}/tests/gltest_cli/config/test_user.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: genlayer-test
3
- Version: 2.0.0
3
+ Version: 2.1.0
4
4
  Summary: GenLayer Testing Suite
5
5
  Author: GenLayer
6
6
  License-Expression: MIT
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: genlayer-test
3
- Version: 2.0.0
3
+ Version: 2.1.0
4
4
  Summary: GenLayer Testing Suite
5
5
  Author: GenLayer
6
6
  License-Expression: MIT
@@ -2,7 +2,12 @@ import types
2
2
  from eth_account.signers.local import LocalAccount
3
3
  from dataclasses import dataclass
4
4
  from gltest.clients import get_gl_client
5
- from gltest.types import CalldataEncodable, GenLayerTransaction, TransactionStatus
5
+ from gltest.types import (
6
+ CalldataEncodable,
7
+ GenLayerTransaction,
8
+ TransactionStatus,
9
+ TransactionHashVariant,
10
+ )
6
11
  from typing import List, Any, Optional, Dict, Callable
7
12
  from gltest_cli.config.general import get_general_config
8
13
  from .contract_functions import ContractFunction
@@ -18,13 +23,16 @@ def read_contract_wrapper(
18
23
  Wrapper to the contract read method.
19
24
  """
20
25
 
21
- def call_method():
26
+ def call_method(
27
+ transaction_hash_variant: TransactionHashVariant = TransactionHashVariant.LATEST_NONFINAL,
28
+ ):
22
29
  client = get_gl_client()
23
30
  return client.read_contract(
24
31
  address=self.address,
25
32
  function_name=method_name,
26
33
  account=self.account,
27
34
  args=args,
35
+ transaction_hash_variant=transaction_hash_variant,
28
36
  )
29
37
 
30
38
  return ContractFunction(
@@ -46,11 +54,11 @@ def write_contract_wrapper(
46
54
  def transact_method(
47
55
  value: int = 0,
48
56
  consensus_max_rotations: Optional[int] = None,
49
- wait_transaction_status: TransactionStatus = TransactionStatus.FINALIZED,
57
+ wait_transaction_status: TransactionStatus = TransactionStatus.ACCEPTED,
50
58
  wait_interval: Optional[int] = None,
51
59
  wait_retries: Optional[int] = None,
52
- wait_triggered_transactions: bool = True,
53
- wait_triggered_transactions_status: TransactionStatus = TransactionStatus.FINALIZED,
60
+ wait_triggered_transactions: bool = False,
61
+ wait_triggered_transactions_status: TransactionStatus = TransactionStatus.ACCEPTED,
54
62
  ):
55
63
  """
56
64
  Transact the contract method.
@@ -109,16 +109,24 @@ class ContractFactory:
109
109
  consensus_max_rotations: Optional[int] = None,
110
110
  wait_interval: Optional[int] = None,
111
111
  wait_retries: Optional[int] = None,
112
- wait_transaction_status: TransactionStatus = TransactionStatus.FINALIZED,
112
+ wait_transaction_status: TransactionStatus = TransactionStatus.ACCEPTED,
113
+ wait_triggered_transactions: bool = False,
114
+ wait_triggered_transactions_status: TransactionStatus = TransactionStatus.ACCEPTED,
113
115
  ) -> Contract:
114
116
  """
115
117
  Deploy the contract
116
118
  """
117
119
  general_config = get_general_config()
118
- if wait_interval is None:
119
- wait_interval = general_config.get_default_wait_interval()
120
- if wait_retries is None:
121
- wait_retries = general_config.get_default_wait_retries()
120
+ actual_wait_interval = (
121
+ wait_interval
122
+ if wait_interval is not None
123
+ else general_config.get_default_wait_interval()
124
+ )
125
+ actual_wait_retries = (
126
+ wait_retries
127
+ if wait_retries is not None
128
+ else general_config.get_default_wait_retries()
129
+ )
122
130
  leader_only = (
123
131
  general_config.get_leader_only()
124
132
  if general_config.check_studio_based_rpc()
@@ -137,14 +145,24 @@ class ContractFactory:
137
145
  tx_receipt = client.wait_for_transaction_receipt(
138
146
  transaction_hash=tx_hash,
139
147
  status=wait_transaction_status,
140
- interval=wait_interval,
141
- retries=wait_retries,
148
+ interval=actual_wait_interval,
149
+ retries=actual_wait_retries,
142
150
  )
143
151
  if tx_execution_failed(tx_receipt):
144
152
  raise ValueError(
145
153
  f"Deployment transaction finalized with error: {tx_receipt}"
146
154
  )
147
155
 
156
+ if wait_triggered_transactions:
157
+ triggered_transactions = tx_receipt["triggered_transactions"]
158
+ for triggered_transaction in triggered_transactions:
159
+ client.wait_for_transaction_receipt(
160
+ transaction_hash=triggered_transaction,
161
+ status=wait_triggered_transactions_status,
162
+ interval=actual_wait_interval,
163
+ retries=actual_wait_retries,
164
+ )
165
+
148
166
  if (
149
167
  "tx_data_decoded" in tx_receipt
150
168
  and "contract_address" in tx_receipt["tx_data_decoded"]
@@ -1,6 +1,6 @@
1
1
  from dataclasses import dataclass
2
2
  from typing import Callable, Optional, Dict, Any
3
- from gltest.types import TransactionStatus
3
+ from gltest.types import TransactionStatus, TransactionHashVariant
4
4
 
5
5
 
6
6
  @dataclass
@@ -11,20 +11,23 @@ class ContractFunction:
11
11
  analyze_method: Optional[Callable] = None
12
12
  transact_method: Optional[Callable] = None
13
13
 
14
- def call(self):
14
+ def call(
15
+ self,
16
+ transaction_hash_variant: TransactionHashVariant = TransactionHashVariant.LATEST_NONFINAL,
17
+ ):
15
18
  if not self.read_only:
16
19
  raise ValueError("call() not implemented for non-readonly method")
17
- return self.call_method()
20
+ return self.call_method(transaction_hash_variant=transaction_hash_variant)
18
21
 
19
22
  def transact(
20
23
  self,
21
24
  value: int = 0,
22
25
  consensus_max_rotations: Optional[int] = None,
23
- wait_transaction_status: TransactionStatus = TransactionStatus.FINALIZED,
26
+ wait_transaction_status: TransactionStatus = TransactionStatus.ACCEPTED,
24
27
  wait_interval: Optional[int] = None,
25
28
  wait_retries: Optional[int] = None,
26
- wait_triggered_transactions: bool = True,
27
- wait_triggered_transactions_status: TransactionStatus = TransactionStatus.FINALIZED,
29
+ wait_triggered_transactions: bool = False,
30
+ wait_triggered_transactions_status: TransactionStatus = TransactionStatus.ACCEPTED,
28
31
  ):
29
32
  if self.read_only:
30
33
  raise ValueError("Cannot transact read-only method")
@@ -4,4 +4,5 @@ from genlayer_py.types import (
4
4
  GenLayerTransaction,
5
5
  TransactionStatus,
6
6
  CalldataEncodable,
7
+ TransactionHashVariant,
7
8
  )
@@ -32,14 +32,14 @@ def pytest_addoption(parser):
32
32
  group.addoption(
33
33
  "--default-wait-interval",
34
34
  action="store",
35
- default=10000,
35
+ default=3000,
36
36
  help="Default interval (ms) between transaction receipt checks",
37
37
  )
38
38
 
39
39
  group.addoption(
40
40
  "--default-wait-retries",
41
41
  action="store",
42
- default=15,
42
+ default=50,
43
43
  help="Default number of retries for transaction receipt checks",
44
44
  )
45
45
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "genlayer-test"
7
- version = "2.0.0"
7
+ version = "2.1.0"
8
8
  description = "GenLayer Testing Suite"
9
9
  authors = [
10
10
  { name = "GenLayer" }
@@ -1,24 +1,10 @@
1
- import time
2
1
  import json
2
+ from gltest.types import TransactionStatus
3
3
 
4
4
  from gltest import get_contract_factory
5
5
  from gltest.assertions import tx_execution_succeeded
6
6
 
7
7
 
8
- def wait_for_contract_deployment(intelligent_oracle_contract, max_retries=10, delay=5):
9
- """
10
- Wait for intelligent oracle contract to be fully deployed by attempting to call a method.
11
- This is used to check if the triggered deployment did deploy the contract.
12
- """
13
- for _ in range(max_retries):
14
- try:
15
- intelligent_oracle_contract.get_dict(args=[]).call()
16
- return True # If successful, contract is deployed
17
- except Exception:
18
- time.sleep(delay)
19
- return False
20
-
21
-
22
8
  def create_mock_response(markets_data):
23
9
  reasoning_single_source_marathon = "The HTML content contains the results of the Madrid Marathon 2024, which occurred on April 28, 2024. Mitku Tafa won and matches the name 'Tafa Mitku' in the list of potential outcomes."
24
10
  reasoning_all_sources_marathon = "The URL indicates that the Madrid Marathon 2024 has occurred on April 28, 2024, and Mitku Tafa was the winner. The name matches one of the potential outcomes. There are no conflicting sources."
@@ -124,7 +110,10 @@ def test_intelligent_oracle_factory_pattern(setup_validators):
124
110
  market_data["resolution_urls"],
125
111
  market_data["earliest_resolution_date"],
126
112
  ],
127
- ).transact()
113
+ ).transact(
114
+ wait_triggered_transactions=True,
115
+ wait_triggered_transactions_status=TransactionStatus.ACCEPTED,
116
+ )
128
117
  assert tx_execution_succeeded(create_result)
129
118
 
130
119
  # Get the latest contract address from factory
@@ -135,11 +124,6 @@ def test_intelligent_oracle_factory_pattern(setup_validators):
135
124
  market_contract = intelligent_oracle_factory.build_contract(new_market_address)
136
125
  created_market_contracts.append(market_contract)
137
126
 
138
- # Wait for the new market contract to be deployed
139
- assert wait_for_contract_deployment(
140
- market_contract
141
- ), f"Market contract deployment timeout for {market_data['prediction_market_id']}"
142
-
143
127
  # Verify all markets were registered
144
128
  assert len(registered_addresses) == len(markets_data)
145
129
 
File without changes
File without changes
File without changes