From 31dba63c3924fa5f35bdc338736b05bddd97506b Mon Sep 17 00:00:00 2001 From: vpanchal-supra Date: Thu, 18 Sep 2025 15:50:02 +0530 Subject: [PATCH 1/2] [WIP] --- pyproject.toml | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index ed4162d..14e687d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,11 +5,18 @@ build-backend = "uv_build" [project] name = "supra-sdk" version = "0.1.0" -description = "Supra SDK" +description = "A Python SDK for seamless interaction with the Supra-L1 network, supporting Move-VM operations and transactions." requires-python = ">=3.12" license = "Apache-2.0" readme = "README.md" -keywords = ["supra", "supra-l1", "supra-move", "move"] +keywords = [ + "supra-python-sdk", + "supra", + "supra-network", + "supra-l1", + "supra-move", +] +authors = [{ name = "The Supra Development Team" }] dependencies = [ "httpx[http2]>=0.28.1,<0.29.0", "PyNaCl>=1.5.0,<2.0.0", @@ -19,8 +26,8 @@ dependencies = [ ] [project.urls] -Homepage = "https://github.com/Entropy-Foundation/aptos-python-sdk/" -Repository = "https://github.com/Entropy-Foundation/aptos-python-sdk/" +Homepage = "https://github.com/Entropy-Foundation/supra-python-sdk" +Repository = "https://github.com/Entropy-Foundation/supra-python-sdk.git" [tool.ruff] line-length = 88 From 4333c596e2050c5648a9e6d74e5bcc646d4a2dc2 Mon Sep 17 00:00:00 2001 From: vpanchal-supra Date: Thu, 18 Sep 2025 18:41:52 +0530 Subject: [PATCH 2/2] Updated docs and integrated license --- LICENSE | 203 ++++++++++++++++++++++++++++++++++++ README.md | 63 ++--------- docs/_static/supra_logo.png | Bin 0 -> 25179 bytes docs/conf.py | 2 + docs/index.rst | 15 ++- docs/supra_sdk.clients.rst | 2 +- docs/supra_sdk.rst | 2 +- examples/README.md | 30 ++++++ pyproject.toml | 5 +- 9 files changed, 265 insertions(+), 57 deletions(-) create mode 100644 LICENSE create mode 100644 docs/_static/supra_logo.png create mode 100644 examples/README.md diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..6a781b1 --- /dev/null +++ b/LICENSE @@ -0,0 +1,203 @@ +Copyright © Supra +Parts of the project are originally copyright © Aptos Foundation +SPDX-License-Identifier: Apache-2.0 + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/README.md b/README.md index 282af94..5b277c8 100644 --- a/README.md +++ b/README.md @@ -4,64 +4,23 @@ The `supra-python-sdk` provides a seamless interface for interacting with the Supra-L1 network. It offers comprehensive support for `move-vm` operations and transactions, enabling developers to both query on-chain data and submit `move-vm` based transactions with ease. -## Requirements +- Python 3.12+ support -This SDK uses [uv](https://docs.astral.sh/uv/) for packaging and dependency management. +## Installation -### Step 1: Install `uv` - -Follow the official [installation guide](https://docs.astral.sh/uv/getting-started/installation/). - -### Step 2: Set up the environment - -Once `uv` is installed, run the following command to create a virtual environment and install all dependencies: - -```bash -uv sync -``` - -## Run and Test SDK - -> Since the Supra-L1 network codebase is not publicly available, the test cases in `async_client.py` uses testnet rpc-url by default. However, if you are an internal contributor with access to the codebase, you can replace the testnet rpc-url with a localnet rpc-url to run the tests with a local network. - -Follow to run the local network using `smr-moonshot`: - -```bash -cd remote_env/ -make killall -./local_test.sh -t daemon -n -``` - -> Unit tests - -```bash -make test -``` - -> Test coverage - -```bash -make test-coverage +```sh +python -m pip install supra-sdk ``` -> Run examples +## Usage -```bash -make examples -``` - -## Autoformatting +Check [examples](https://github.com/Entropy-Foundation/supra-python-sdk/blob/master/examples/README.md) section. -```bash -make fmt -``` +## Reference Docs -## Autolinting - -```bash -make lint -``` +For the function specific documentation, check out the `supra-python-sdk` [reference documentation](https://supra-python-sdk.docs.supra.com/). -## Semantic versioning +## Contributing -This project follows [semver](https://semver.org/) as closely as possible +If you found a bug or would like to request a feature, please file an [issue](https://github.com/Entropy-Foundation/supra-python-sdk/issues/new). +If, based on the discussion on an issue, you would like to offer a code change, please make a [pull request](https://github.com/Entropy-Foundation/supra-python-sdk/pulls). diff --git a/docs/_static/supra_logo.png b/docs/_static/supra_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..63f582f5d1853f5506217f1aa5ca38e60c88ce62 GIT binary patch literal 25179 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 F_#cswW4QnT literal 0 HcmV?d00001 diff --git a/docs/conf.py b/docs/conf.py index 921a19e..8781b43 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -19,6 +19,8 @@ html_theme = "sphinx_rtd_theme" html_static_path = ["_static"] +html_static_path = ['_static'] +html_favicon = '_static/supra_logo.png' html_theme_options = { "navigation_depth": 8, diff --git a/docs/index.rst b/docs/index.rst index 88060e2..106ede0 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -6,8 +6,21 @@ supra-sdk The `supra-python-sdk` provides a seamless interface for interacting with the Supra-L1 network. It offers comprehensive support for `move-vm` operations and transactions, enabling developers to both query on-chain data and submit `move-vm` based transactions with ease. + +Installation +------------ +.. code-block:: bash + + python -m pip install supra-sdk + + +Usage +----- +Check `examples `_ section. + + .. toctree:: - :maxdepth: 8 + :maxdepth: 2 :caption: Supra-SDK supra_sdk diff --git a/docs/supra_sdk.clients.rst b/docs/supra_sdk.clients.rst index a6c44f0..af82d94 100644 --- a/docs/supra_sdk.clients.rst +++ b/docs/supra_sdk.clients.rst @@ -2,7 +2,7 @@ Clients ========================== .. toctree:: - :maxdepth: 8 + :maxdepth: 2 :caption: Rest supra_sdk.clients.rest diff --git a/docs/supra_sdk.rst b/docs/supra_sdk.rst index f46cf5a..f501153 100644 --- a/docs/supra_sdk.rst +++ b/docs/supra_sdk.rst @@ -2,7 +2,7 @@ API ================== .. toctree:: - :maxdepth: 8 + :maxdepth: 2 :caption: Clients supra_sdk.clients diff --git a/examples/README.md b/examples/README.md new file mode 100644 index 0000000..098a79b --- /dev/null +++ b/examples/README.md @@ -0,0 +1,30 @@ +# Examples + +This section provides **practical, real-world examples** demonstrating how to use the **`supra-python-sdk`** for most of the significant operations. + +Each example is **self-contained**, focusing on a single use case, making it easy to understand and adapt for your own projects. + +## Requirements + +Before running the examples, ensure you have the following: + +- **Python 3.12+** installed on your system. +- **[`uv`](https://docs.astral.sh/uv/)** – used for packaging and dependency management. + +### Installing `uv` + +Follow the official [installation guide](https://docs.astral.sh/uv/getting-started/installation/) to install `uv` on your system. + +## Running an Example + +You can run any example using the following syntax: + +```bash +uv run python -m examples. +``` + +Running `transfer_coin.py` example: + +```bash +bash uv run python -m examples.transfer_coin +``` diff --git a/pyproject.toml b/pyproject.toml index 14e687d..b323418 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,7 +7,7 @@ name = "supra-sdk" version = "0.1.0" description = "A Python SDK for seamless interaction with the Supra-L1 network, supporting Move-VM operations and transactions." requires-python = ">=3.12" -license = "Apache-2.0" +license = { file = "LICENSE" } readme = "README.md" keywords = [ "supra-python-sdk", @@ -16,7 +16,7 @@ keywords = [ "supra-l1", "supra-move", ] -authors = [{ name = "The Supra Development Team" }] +authors = [{ name = "Supra", email = "opensource@supra.com" }] dependencies = [ "httpx[http2]>=0.28.1,<0.29.0", "PyNaCl>=1.5.0,<2.0.0", @@ -27,6 +27,7 @@ dependencies = [ [project.urls] Homepage = "https://github.com/Entropy-Foundation/supra-python-sdk" +Documentation = "https://supra-python-sdk.docs.supra.com/" Repository = "https://github.com/Entropy-Foundation/supra-python-sdk.git" [tool.ruff]