convex-sdk 0.3.2__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 (42) hide show
  1. convex_sdk-0.3.2/CHANGELOG.md +97 -0
  2. convex_sdk-0.3.2/LICENSE +201 -0
  3. convex_sdk-0.3.2/MANIFEST.in +7 -0
  4. convex_sdk-0.3.2/PKG-INFO +272 -0
  5. convex_sdk-0.3.2/README.md +206 -0
  6. convex_sdk-0.3.2/convex_sdk/__init__.py +12 -0
  7. convex_sdk-0.3.2/convex_sdk/account.py +192 -0
  8. convex_sdk-0.3.2/convex_sdk/contract.py +211 -0
  9. convex_sdk-0.3.2/convex_sdk/convex.py +813 -0
  10. convex_sdk-0.3.2/convex_sdk/exceptions.py +23 -0
  11. convex_sdk-0.3.2/convex_sdk/key_pair.py +570 -0
  12. convex_sdk-0.3.2/convex_sdk/models.py +86 -0
  13. convex_sdk-0.3.2/convex_sdk/py.typed +0 -0
  14. convex_sdk-0.3.2/convex_sdk/registry.py +85 -0
  15. convex_sdk-0.3.2/convex_sdk/tool/__init__.py +0 -0
  16. convex_sdk-0.3.2/convex_sdk/tool/command/__init__.py +0 -0
  17. convex_sdk-0.3.2/convex_sdk/tool/command/account_balance_command.py +60 -0
  18. convex_sdk-0.3.2/convex_sdk/tool/command/account_command.py +68 -0
  19. convex_sdk-0.3.2/convex_sdk/tool/command/account_create_command.py +92 -0
  20. convex_sdk-0.3.2/convex_sdk/tool/command/account_fund_command.py +68 -0
  21. convex_sdk-0.3.2/convex_sdk/tool/command/account_info_command.py +59 -0
  22. convex_sdk-0.3.2/convex_sdk/tool/command/account_name_register_command.py +81 -0
  23. convex_sdk-0.3.2/convex_sdk/tool/command/account_name_resolve_command.py +56 -0
  24. convex_sdk-0.3.2/convex_sdk/tool/command/account_topup_command.py +60 -0
  25. convex_sdk-0.3.2/convex_sdk/tool/command/argparse_typing.py +35 -0
  26. convex_sdk-0.3.2/convex_sdk/tool/command/command_base.py +136 -0
  27. convex_sdk-0.3.2/convex_sdk/tool/command/help_command.py +29 -0
  28. convex_sdk-0.3.2/convex_sdk/tool/command/peer_command.py +55 -0
  29. convex_sdk-0.3.2/convex_sdk/tool/command/peer_create_command.py +105 -0
  30. convex_sdk-0.3.2/convex_sdk/tool/command/query_command.py +66 -0
  31. convex_sdk-0.3.2/convex_sdk/tool/command/submit_command.py +65 -0
  32. convex_sdk-0.3.2/convex_sdk/tool/convex_tool.py +110 -0
  33. convex_sdk-0.3.2/convex_sdk/tool/output.py +68 -0
  34. convex_sdk-0.3.2/convex_sdk.egg-info/PKG-INFO +272 -0
  35. convex_sdk-0.3.2/convex_sdk.egg-info/SOURCES.txt +41 -0
  36. convex_sdk-0.3.2/convex_sdk.egg-info/dependency_links.txt +1 -0
  37. convex_sdk-0.3.2/convex_sdk.egg-info/not-zip-safe +1 -0
  38. convex_sdk-0.3.2/convex_sdk.egg-info/requires.txt +33 -0
  39. convex_sdk-0.3.2/convex_sdk.egg-info/top_level.txt +1 -0
  40. convex_sdk-0.3.2/setup.cfg +16 -0
  41. convex_sdk-0.3.2/setup.py +90 -0
  42. convex_sdk-0.3.2/tools/convex_tools.py +13 -0
@@ -0,0 +1,97 @@
1
+ ## Change log
2
+
3
+ ### 0.3.2
4
+ + **Renamed package to `convex-sdk`** — PyPI distribution `convex-api-py` → `convex-sdk` and import package `convex_api` → `convex_sdk` (`pip install convex-sdk`; `import convex_sdk`). The GitHub repository stays `convex-api-py`; the predecessor `convex-api-py` PyPI package remains frozen at 0.3.1.
5
+ + Fix malformed `__version__` string in `convex_sdk/__init__.py` (also restores `bumpversion` matching)
6
+ + Fix `KeyPair.remove_0x_prefix` to pass `re.IGNORECASE` as `flags` (it was silently passed as `count`, so `0X` prefixes were not stripped)
7
+ + Surface CVM errors returned from `transaction/prepare` as `ConvexAPIError`, consistent with submit and query
8
+ + Correct README examples (`KeyPair()` not `KeyPair.create()`, `convex` variable name, `Account(...)` constructor, real account-info fields)
9
+ + Add PyPI trusted-publishing release workflow (`.github/workflows/publish.yml`, fires on `v*` tags) and remove the stale commented-out publish block from the docs deploy workflow; see `.github/PUBLISHING.md`
10
+ + Bump development status classifier from Pre-Alpha to Beta and declare Python 3.11–3.13 support
11
+
12
+ ### 0.3.1
13
+ + Minor fixes and sync from 0.3.0
14
+
15
+ ### 0.3.0
16
+ + Add type hints for all the things
17
+ + Rename `Address` method `is_address` to `has_address`
18
+ + Move `convex_api.utils.is_address` to `Address` static method `is_address`
19
+ + Move `convex_api.utils.to_address` to `Address` static method `to_address`
20
+ + Move `convex_api.utils.is_public_key_hex` to `KeyPair` static method `is_public_key_hex`
21
+ + Move `convex_api.utils.is_public_key` to `KeyPair` static method `is_public_key`
22
+ + Move `convex_api.utils.to_public_key_checksum` to `KeyPair` static method `to_public_key_checksum`
23
+ + Move `convex_api.utils.is_hexstr` to `KeyPair` static method `is_hexstr`
24
+ + Move `convex_api.utils.add_0x_prefix` to `KeyPair` static method `add_0x_prefix`
25
+ + Move `convex_api.utils.remove_0x_prefix` to `KeyPair` static method `remove_0x_prefix`
26
+ + Move `convex_api.utils.to_bytes` to `KeyPair` static methods `to_bytes` for `data: bytes` argument use case and `to_` for `hexstr: string` argument use case
27
+ + Move `convex_api.utils.to_hex` to `KeyPair` static method `to_hex`
28
+ + Add pydantic dependency
29
+
30
+ ### 0.2.6
31
+ + Add cr, tab to contract text encoding
32
+
33
+ ### 0.2.5
34
+ + Rename contract 'register' to 'register_contract_name'
35
+
36
+ ### 0.2.4
37
+ + Add escape_string to Contract class, to escape string data
38
+
39
+ ### 0.2.3
40
+ + New Contract class, to allow for easier contract deployment and usage
41
+
42
+ ### 0.2.2
43
+ + Upgrade to use Alpha-RC4 Convex
44
+ + Add all address fields to have a prefix of #
45
+ + Fix registry conversion issues
46
+
47
+ ### 0.2.1
48
+ + Remove Convex Scrypt language
49
+
50
+ ### 0.2.0
51
+ + Add KeyPair class, now you have to pass a KeyPair object to the `create_account` method.
52
+ + Rename ConvexAPI to API
53
+
54
+ ### 0.1.4
55
+ + Add address '#' identifier before each address number.
56
+
57
+ ### 0.1.3
58
+ + Add transfer_account, the ability to change your account public key for a given account address
59
+ + Remove eth-utils library dependency
60
+ + Improve CLI to do account create / topup / fund / balance / info / name registration / name resolve, query and submit
61
+
62
+ ### 0.1.2
63
+ + Improve registration of account names and resolving account names from the CNS registry
64
+
65
+ ### 0.1.1
66
+ + Incease minimum topup_account funds to 10,000,000
67
+ + Allow to register and load accounts using a name
68
+
69
+ ### 0.1.0
70
+ + Now need to use ConvexAPI.create_account method to create a new account, and get the address number
71
+ + Internal bug fixes, and name conventions for the API calls
72
+
73
+ ### 0.0.8
74
+ + Rebuild with new release
75
+
76
+ ### 0.0.7
77
+ + Rename Account create_new to create
78
+ + Rename Account create_from_bytes to import_from_bytes
79
+
80
+ ### 0.0.6
81
+ + Add topup_account method to api
82
+
83
+ ### 0.0.5
84
+ + Add a 0x prefix to retuned addresses
85
+
86
+ ### 0.0.4
87
+ + Import/export account private keys as a word phrase
88
+ + Convex Wallet tool
89
+
90
+ ### 0.0.3
91
+ + Pre-alpha release
92
+
93
+ ### 0.0.2
94
+ + Add retry sending a transcation during a SEQUENCE error
95
+
96
+ ### 0.0.1
97
+ + Initial Alpha Release
@@ -0,0 +1,201 @@
1
+ Apache License
2
+ Version 2.0, January 2004
3
+ http://www.apache.org/licenses/
4
+
5
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6
+
7
+ 1. Definitions.
8
+
9
+ "License" shall mean the terms and conditions for use, reproduction,
10
+ and distribution as defined by Sections 1 through 9 of this document.
11
+
12
+ "Licensor" shall mean the copyright owner or entity authorized by
13
+ the copyright owner that is granting the License.
14
+
15
+ "Legal Entity" shall mean the union of the acting entity and all
16
+ other entities that control, are controlled by, or are under common
17
+ control with that entity. For the purposes of this definition,
18
+ "control" means (i) the power, direct or indirect, to cause the
19
+ direction or management of such entity, whether by contract or
20
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
21
+ outstanding shares, or (iii) beneficial ownership of such entity.
22
+
23
+ "You" (or "Your") shall mean an individual or Legal Entity
24
+ exercising permissions granted by this License.
25
+
26
+ "Source" form shall mean the preferred form for making modifications,
27
+ including but not limited to software source code, documentation
28
+ source, and configuration files.
29
+
30
+ "Object" form shall mean any form resulting from mechanical
31
+ transformation or translation of a Source form, including but
32
+ not limited to compiled object code, generated documentation,
33
+ and conversions to other media types.
34
+
35
+ "Work" shall mean the work of authorship, whether in Source or
36
+ Object form, made available under the License, as indicated by a
37
+ copyright notice that is included in or attached to the work
38
+ (an example is provided in the Appendix below).
39
+
40
+ "Derivative Works" shall mean any work, whether in Source or Object
41
+ form, that is based on (or derived from) the Work and for which the
42
+ editorial revisions, annotations, elaborations, or other modifications
43
+ represent, as a whole, an original work of authorship. For the purposes
44
+ of this License, Derivative Works shall not include works that remain
45
+ separable from, or merely link (or bind by name) to the interfaces of,
46
+ the Work and Derivative Works thereof.
47
+
48
+ "Contribution" shall mean any work of authorship, including
49
+ the original version of the Work and any modifications or additions
50
+ to that Work or Derivative Works thereof, that is intentionally
51
+ submitted to Licensor for inclusion in the Work by the copyright owner
52
+ or by an individual or Legal Entity authorized to submit on behalf of
53
+ the copyright owner. For the purposes of this definition, "submitted"
54
+ means any form of electronic, verbal, or written communication sent
55
+ to the Licensor or its representatives, including but not limited to
56
+ communication on electronic mailing lists, source code control systems,
57
+ and issue tracking systems that are managed by, or on behalf of, the
58
+ Licensor for the purpose of discussing and improving the Work, but
59
+ excluding communication that is conspicuously marked or otherwise
60
+ designated in writing by the copyright owner as "Not a Contribution."
61
+
62
+ "Contributor" shall mean Licensor and any individual or Legal Entity
63
+ on behalf of whom a Contribution has been received by Licensor and
64
+ subsequently incorporated within the Work.
65
+
66
+ 2. Grant of Copyright License. Subject to the terms and conditions of
67
+ this License, each Contributor hereby grants to You a perpetual,
68
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69
+ copyright license to reproduce, prepare Derivative Works of,
70
+ publicly display, publicly perform, sublicense, and distribute the
71
+ Work and such Derivative Works in Source or Object form.
72
+
73
+ 3. Grant of Patent License. Subject to the terms and conditions of
74
+ this License, each Contributor hereby grants to You a perpetual,
75
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76
+ (except as stated in this section) patent license to make, have made,
77
+ use, offer to sell, sell, import, and otherwise transfer the Work,
78
+ where such license applies only to those patent claims licensable
79
+ by such Contributor that are necessarily infringed by their
80
+ Contribution(s) alone or by combination of their Contribution(s)
81
+ with the Work to which such Contribution(s) was submitted. If You
82
+ institute patent litigation against any entity (including a
83
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
84
+ or a Contribution incorporated within the Work constitutes direct
85
+ or contributory patent infringement, then any patent licenses
86
+ granted to You under this License for that Work shall terminate
87
+ as of the date such litigation is filed.
88
+
89
+ 4. Redistribution. You may reproduce and distribute copies of the
90
+ Work or Derivative Works thereof in any medium, with or without
91
+ modifications, and in Source or Object form, provided that You
92
+ meet the following conditions:
93
+
94
+ (a) You must give any other recipients of the Work or
95
+ Derivative Works a copy of this License; and
96
+
97
+ (b) You must cause any modified files to carry prominent notices
98
+ stating that You changed the files; and
99
+
100
+ (c) You must retain, in the Source form of any Derivative Works
101
+ that You distribute, all copyright, patent, trademark, and
102
+ attribution notices from the Source form of the Work,
103
+ excluding those notices that do not pertain to any part of
104
+ the Derivative Works; and
105
+
106
+ (d) If the Work includes a "NOTICE" text file as part of its
107
+ distribution, then any Derivative Works that You distribute must
108
+ include a readable copy of the attribution notices contained
109
+ within such NOTICE file, excluding those notices that do not
110
+ pertain to any part of the Derivative Works, in at least one
111
+ of the following places: within a NOTICE text file distributed
112
+ as part of the Derivative Works; within the Source form or
113
+ documentation, if provided along with the Derivative Works; or,
114
+ within a display generated by the Derivative Works, if and
115
+ wherever such third-party notices normally appear. The contents
116
+ of the NOTICE file are for informational purposes only and
117
+ do not modify the License. You may add Your own attribution
118
+ notices within Derivative Works that You distribute, alongside
119
+ or as an addendum to the NOTICE text from the Work, provided
120
+ that such additional attribution notices cannot be construed
121
+ as modifying the License.
122
+
123
+ You may add Your own copyright statement to Your modifications and
124
+ may provide additional or different license terms and conditions
125
+ for use, reproduction, or distribution of Your modifications, or
126
+ for any such Derivative Works as a whole, provided Your use,
127
+ reproduction, and distribution of the Work otherwise complies with
128
+ the conditions stated in this License.
129
+
130
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
131
+ any Contribution intentionally submitted for inclusion in the Work
132
+ by You to the Licensor shall be under the terms and conditions of
133
+ this License, without any additional terms or conditions.
134
+ Notwithstanding the above, nothing herein shall supersede or modify
135
+ the terms of any separate license agreement you may have executed
136
+ with Licensor regarding such Contributions.
137
+
138
+ 6. Trademarks. This License does not grant permission to use the trade
139
+ names, trademarks, service marks, or product names of the Licensor,
140
+ except as required for reasonable and customary use in describing the
141
+ origin of the Work and reproducing the content of the NOTICE file.
142
+
143
+ 7. Disclaimer of Warranty. Unless required by applicable law or
144
+ agreed to in writing, Licensor provides the Work (and each
145
+ Contributor provides its Contributions) on an "AS IS" BASIS,
146
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147
+ implied, including, without limitation, any warranties or conditions
148
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149
+ PARTICULAR PURPOSE. You are solely responsible for determining the
150
+ appropriateness of using or redistributing the Work and assume any
151
+ risks associated with Your exercise of permissions under this License.
152
+
153
+ 8. Limitation of Liability. In no event and under no legal theory,
154
+ whether in tort (including negligence), contract, or otherwise,
155
+ unless required by applicable law (such as deliberate and grossly
156
+ negligent acts) or agreed to in writing, shall any Contributor be
157
+ liable to You for damages, including any direct, indirect, special,
158
+ incidental, or consequential damages of any character arising as a
159
+ result of this License or out of the use or inability to use the
160
+ Work (including but not limited to damages for loss of goodwill,
161
+ work stoppage, computer failure or malfunction, or any and all
162
+ other commercial damages or losses), even if such Contributor
163
+ has been advised of the possibility of such damages.
164
+
165
+ 9. Accepting Warranty or Additional Liability. While redistributing
166
+ the Work or Derivative Works thereof, You may choose to offer,
167
+ and charge a fee for, acceptance of support, warranty, indemnity,
168
+ or other liability obligations and/or rights consistent with this
169
+ License. However, in accepting such obligations, You may act only
170
+ on Your own behalf and on Your sole responsibility, not on behalf
171
+ of any other Contributor, and only if You agree to indemnify,
172
+ defend, and hold each Contributor harmless for any liability
173
+ incurred by, or claims asserted against, such Contributor by reason
174
+ of your accepting any such warranty or additional liability.
175
+
176
+ END OF TERMS AND CONDITIONS
177
+
178
+ APPENDIX: How to apply the Apache License to your work.
179
+
180
+ To apply the Apache License to your work, attach the following
181
+ boilerplate notice, with the fields enclosed by brackets "[]"
182
+ replaced with your own identifying information. (Don't include
183
+ the brackets!) The text should be enclosed in the appropriate
184
+ comment syntax for the file format. We also recommend that a
185
+ file or class name and description of purpose be included on the
186
+ same "printed page" as the copyright notice for easier
187
+ identification within third-party archives.
188
+
189
+ Copyright [yyyy] [name of copyright owner]
190
+
191
+ Licensed under the Apache License, Version 2.0 (the "License");
192
+ you may not use this file except in compliance with the License.
193
+ You may obtain a copy of the License at
194
+
195
+ http://www.apache.org/licenses/LICENSE-2.0
196
+
197
+ Unless required by applicable law or agreed to in writing, software
198
+ distributed under the License is distributed on an "AS IS" BASIS,
199
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200
+ See the License for the specific language governing permissions and
201
+ limitations under the License.
@@ -0,0 +1,7 @@
1
+ include CHANGELOG.md
2
+ include LICENSE
3
+ include README.md
4
+
5
+ recursive-exclude * __pycache__
6
+ recursive-exclude * *.py[co]
7
+
@@ -0,0 +1,272 @@
1
+ Metadata-Version: 2.4
2
+ Name: convex-sdk
3
+ Version: 0.3.2
4
+ Summary: Convex api
5
+ Home-page: https://github.com/Convex-Dev/convex-api-py
6
+ Author: dex-company
7
+ Author-email: devops@dex.sg
8
+ License: Apache Software License 2.0
9
+ Keywords: convex api
10
+ Classifier: Development Status :: 4 - Beta
11
+ Classifier: Intended Audience :: Developers
12
+ Classifier: License :: OSI Approved :: Apache Software License
13
+ Classifier: Natural Language :: English
14
+ Classifier: Programming Language :: Python :: 3.10
15
+ Classifier: Programming Language :: Python :: 3.11
16
+ Classifier: Programming Language :: Python :: 3.12
17
+ Classifier: Programming Language :: Python :: 3.13
18
+ Requires-Python: >=3.10
19
+ Description-Content-Type: text/markdown
20
+ License-File: LICENSE
21
+ Requires-Dist: cryptography~=39.0
22
+ Requires-Dist: requests~=2.28
23
+ Requires-Dist: mnemonic~=0.2
24
+ Requires-Dist: pydantic~=2.0
25
+ Provides-Extra: test
26
+ Requires-Dist: flake8; extra == "test"
27
+ Requires-Dist: pytest; extra == "test"
28
+ Requires-Dist: isort; extra == "test"
29
+ Requires-Dist: mypy; extra == "test"
30
+ Provides-Extra: docs
31
+ Requires-Dist: Sphinx; extra == "docs"
32
+ Requires-Dist: sphinx-rtd-theme; extra == "docs"
33
+ Requires-Dist: sphinxcontrib-apidoc; extra == "docs"
34
+ Requires-Dist: sphinxcontrib-plantuml; extra == "docs"
35
+ Requires-Dist: sphinx-automodapi; extra == "docs"
36
+ Requires-Dist: pygments; extra == "docs"
37
+ Requires-Dist: devtools[pygments]; extra == "docs"
38
+ Provides-Extra: dev
39
+ Requires-Dist: bumpversion; extra == "dev"
40
+ Requires-Dist: isort; extra == "dev"
41
+ Requires-Dist: mypy; extra == "dev"
42
+ Requires-Dist: flake8; extra == "dev"
43
+ Requires-Dist: pytest; extra == "dev"
44
+ Requires-Dist: isort; extra == "dev"
45
+ Requires-Dist: mypy; extra == "dev"
46
+ Requires-Dist: Sphinx; extra == "dev"
47
+ Requires-Dist: sphinx-rtd-theme; extra == "dev"
48
+ Requires-Dist: sphinxcontrib-apidoc; extra == "dev"
49
+ Requires-Dist: sphinxcontrib-plantuml; extra == "dev"
50
+ Requires-Dist: sphinx-automodapi; extra == "dev"
51
+ Requires-Dist: pygments; extra == "dev"
52
+ Requires-Dist: devtools[pygments]; extra == "dev"
53
+ Dynamic: author
54
+ Dynamic: author-email
55
+ Dynamic: classifier
56
+ Dynamic: description
57
+ Dynamic: description-content-type
58
+ Dynamic: home-page
59
+ Dynamic: keywords
60
+ Dynamic: license
61
+ Dynamic: license-file
62
+ Dynamic: provides-extra
63
+ Dynamic: requires-dist
64
+ Dynamic: requires-python
65
+ Dynamic: summary
66
+
67
+ # Convex Python SDK
68
+
69
+ ![](https://github.com/Convex-Dev/convex-api-py/workflows/testing/badge.svg)
70
+ [![Checked with pyright](https://microsoft.github.io/pyright/img/pyright_badge.svg)](https://microsoft.github.io/pyright/)
71
+ [![PyPI version](https://badge.fury.io/py/convex-sdk.svg)](https://badge.fury.io/py/convex-sdk)
72
+
73
+ The official Python client library for interacting with the [Convex](https://convex.world) decentralised lattice network.
74
+
75
+ ## 📚 Documentation
76
+
77
+ **Official documentation is available at [docs.convex.world/docs/tutorial/client-sdks/python](https://docs.convex.world/docs/tutorial/client-sdks/python)**
78
+
79
+ - [Quickstart Guide](https://docs.convex.world/docs/tutorial/client-sdks/python/quickstart) - Build your first Python app
80
+ - [Query Guide](https://docs.convex.world/docs/tutorial/client-sdks/python/queries) - Read network state
81
+ - [Transaction Guide](https://docs.convex.world/docs/tutorial/client-sdks/python/transactions) - Submit transactions
82
+ - [Account Management](https://docs.convex.world/docs/tutorial/client-sdks/python/accounts) - Manage keys and accounts
83
+
84
+ ## Installation
85
+
86
+ ```bash
87
+ pip install convex-sdk
88
+ ```
89
+
90
+ ## Quick Example
91
+
92
+ ```python
93
+ from convex_sdk import Convex, KeyPair
94
+
95
+ # Connect to the network
96
+ convex = Convex('https://peer.convex.live')
97
+
98
+ # Create a new account
99
+ key_pair = KeyPair()
100
+ account = convex.create_account(key_pair)
101
+
102
+ # Request test funds
103
+ convex.request_funds(100_000_000, account)
104
+
105
+ # Query balance
106
+ balance = convex.get_balance(account)
107
+ print(f'Balance: {balance / 1_000_000_000} Convex Coins')
108
+ ```
109
+
110
+ ## Resources
111
+
112
+ - **[Official Documentation](https://docs.convex.world/docs/tutorial/client-sdks/python)** - Complete SDK guide
113
+ - **[PyPI Package](https://pypi.org/project/convex-sdk/)** - Python Package Index
114
+ - **[Convex Network](https://convex.world)** - Main website
115
+ - **[Discord Community](https://discord.com/invite/xfYGq4CT7v)** - Get help and share ideas
116
+
117
+ ---
118
+
119
+ ### Development Setup
120
+
121
+ To set up the project for development, follow these steps:
122
+
123
+ **Prerequisites:**
124
+ - Python 3.10 or higher
125
+ - pip (Python package installer)
126
+
127
+ **Setup Steps:**
128
+
129
+ 1. **Create a virtual environment:**
130
+ ```bash
131
+ python -m venv .venv
132
+ ```
133
+
134
+ This creates a virtual environment in a `.venv` directory.
135
+
136
+ 2. **Activate the virtual environment:**
137
+
138
+ - **On Windows (PowerShell or Command Prompt):**
139
+ ```bash
140
+ .venv\Scripts\activate
141
+ ```
142
+
143
+ - **On Windows (Git Bash):**
144
+ ```bash
145
+ source .venv/Scripts/activate
146
+ ```
147
+
148
+ - **On Linux/Mac:**
149
+ ```bash
150
+ source .venv/bin/activate
151
+ ```
152
+
153
+ When activated, you should see `(venv)` at the beginning of your command prompt.
154
+
155
+ 3. **Upgrade pip (recommended):**
156
+ ```bash
157
+ python -m pip install --upgrade pip
158
+ ```
159
+
160
+ 4. **Install the package in development mode with all dependencies:**
161
+
162
+ Option 1 - Using setup.py extras (recommended):
163
+ ```bash
164
+ pip install -e ".[dev,test,docs]"
165
+ ```
166
+
167
+ Option 2 - Using requirements files:
168
+ ```bash
169
+ pip install -r requirements-dev.txt
170
+ pip install -e .
171
+ ```
172
+
173
+ 5. **Verify the installation:**
174
+ ```bash
175
+ pytest tests
176
+ ```
177
+
178
+ **Deactivating the virtual environment:**
179
+ When you're done working, you can deactivate the virtual environment by running:
180
+ ```bash
181
+ deactivate
182
+ ```
183
+
184
+ **Note:** Always activate your virtual environment before working on the project. The virtual environment ensures that dependencies are isolated from your system Python installation.
185
+
186
+ ### Quick Start
187
+
188
+ First you need to download the convex-sdk package from the python package index PyPi.
189
+
190
+ pip install convex-sdk
191
+
192
+ You can now access the convex network, and get a balance from an existing account on the network by doing the following:
193
+
194
+ >>> from convex_sdk import Convex, KeyPair
195
+ >>> convex = Convex('https://peer.convex.live')
196
+ >>> convex.get_balance(9)
197
+ 99396961137042
198
+
199
+ You can create a new empty account, with no balance:
200
+
201
+ >>> key_pair = KeyPair()
202
+ >>> account = convex.create_account(key_pair)
203
+ >>> account.address
204
+ 809
205
+
206
+ You can request some funds to the new account and then get the account information:
207
+
208
+ >>> convex.request_funds(1000000, account)
209
+ 1000000
210
+ >>> convex.get_account_info(account)
211
+ AccountDetailsResponse(sequence=0, address=809, memorySize=42, balance=1000000, allowance=0, type='user')
212
+
213
+
214
+ You can export the accounts private key encoded as PKCS8 encrypt the key with a password:
215
+
216
+ >>> account.key_pair.export_to_text('secret')
217
+ '-----BEGIN ENCRYPTED PRIVATE KEY-----\nMIGbMFcGCSqGSIb3DQEFDTBKMCkGCSqGSIb3DQEFDDAcBAiMY42UY4PXHAICCAAw\nDAYIKoZIhvcNAgkFADAdBglghkgBZQMEASoEEJpwDMicGbGj2iSJesktIVYEQBsp\nKMTAHzvUyw8jZRr8WSrmxH7938sjma8XWI6lgd9jwTZzcGamog7p3zatw0Wp+jFK\nKruWAZmIqhBZ/2ezDv8=\n-----END ENCRYPTED PRIVATE KEY-----\n'
218
+
219
+ >>> account.address
220
+ 809
221
+
222
+ To re-use your account again you need to import the encrypted private key and set the correct account address
223
+
224
+ >>> from convex_sdk import Account, KeyPair
225
+ >>> key_pair = KeyPair.import_from_file('my_key.dat', 'secret')
226
+ >>> account = Account(key_pair, 809)
227
+
228
+ To create a new address with the same account keys in your new or imported account object, you can do:
229
+
230
+ >>> new_account = convex.create_account(key_pair)
231
+ >>> account.address
232
+ 809
233
+ >>> new_account.address
234
+ 934
235
+
236
+ To use account names, where an account name is resolved to a fixed address. You can create or load
237
+ an account based on it's name by doing the following:
238
+
239
+ >>> account = convex.setup_account('my-account-name', key_pair)
240
+ >>> account.address
241
+ 934
242
+
243
+ >>> convex.resolve_account_name('my-account-name')
244
+ 934
245
+
246
+ >>> same_account = convex.setup_account('my-account-name', key_pair)
247
+ >>> same_account.address
248
+ 934
249
+
250
+ To submit a transaction, use Convex.transact(). This will cost a small amount of juice, and reduce your balance
251
+
252
+ >>> convex.request_funds(1000000, account)
253
+ 1000000
254
+ >>> convex.transact('(map inc [1 2 3 4])', account)
255
+ {'value': [2, 3, 4, 5]}
256
+ >>> convex.get_balance(account)
257
+ 996360
258
+
259
+ To send a query a transaction, this is free and can be performed by any valid account address.
260
+ So for example to query a balance of an account:
261
+
262
+ >>> convex.query(f'(balance {account.address})', account)
263
+ {'value': 996360}
264
+
265
+ # this is the same as above
266
+ >>> convex.query(f'(balance {account.address})', account.address)
267
+ {'value': 996360}
268
+
269
+ # get the balance using one of the standard account addresses (#1)
270
+ >>> convex.query(f'(balance {account.address})', 1)
271
+ {'value': 996360}
272
+