Compare commits
29 Commits
lum/easy-t
...
v0.3.3
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fb1ebcf8cd | ||
| 38cfb18527 | |||
| c84517e3db | |||
| dcea763ce5 | |||
| e55b82f529 | |||
|
|
02df3f792e | ||
| d2e55fad0e | |||
|
|
edf312d969 | ||
| 5f22220825 | |||
|
|
067f354905 | ||
| f30076783d | |||
| 60e8ecc41a | |||
| 3c4a86010d | |||
| a9f97a9a5c | |||
|
|
48522d02e7 | ||
| 92794a2e3b | |||
|
|
6f04de8d7e | ||
| 71bf1e15c4 | |||
| 32ba29354a | |||
|
|
fb818a529c | ||
| f7d0503c7b | |||
|
|
a862a73d7c | ||
| f4e370cb5d | |||
|
|
69bbbd7c8b | ||
| b51d1e92d7 | |||
|
|
b77f572b82 | ||
| c832763240 | |||
| 941b9e6b65 | |||
| 0fcf2eb3bc |
@@ -1,4 +0,0 @@
|
|||||||
- 0.0.2
|
|
||||||
* Add executable entry point in package install
|
|
||||||
- 0.0.1
|
|
||||||
* Token creation setup for eth
|
|
||||||
68
CHANGELOG.md
Normal file
68
CHANGELOG.md
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
# Changelog
|
||||||
|
|
||||||
|
<!--next-version-placeholder-->
|
||||||
|
|
||||||
|
## v0.3.3 (2022-04-26)
|
||||||
|
### Fix
|
||||||
|
* It's ok if you already exsist ([`38cfb18`](https://git.grassecon.net/cicnet/cic-cli/commit/38cfb185270fb361ff5d9da9976745e1fecc40f8))
|
||||||
|
* Take the reins off ([`c84517e`](https://git.grassecon.net/cicnet/cic-cli/commit/c84517e3db264f541e6e5a8eef30703bf28d32d0))
|
||||||
|
* Bump deps ([`dcea763`](https://git.grassecon.net/cicnet/cic-cli/commit/dcea763ce5b3d542ed0a50586720fc3a45142e77))
|
||||||
|
* **attachement:** Directory not getting created ([`e55b82f`](https://git.grassecon.net/cicnet/cic-cli/commit/e55b82f5295397b3e4123297bc6b231ca251bc83))
|
||||||
|
|
||||||
|
## v0.3.2 (2022-04-26)
|
||||||
|
### Fix
|
||||||
|
* Update deps ([`d2e55fa`](https://git.grassecon.net/cicnet/cic-cli/commit/d2e55fad0efd13fa7a1de8ed8ab43e703a4aa046))
|
||||||
|
|
||||||
|
## v0.3.1 (2022-04-26)
|
||||||
|
### Fix
|
||||||
|
* Throw if directory exsists ([`5f22220`](https://git.grassecon.net/cicnet/cic-cli/commit/5f22220825f5c485550ca9a21a54598fbe3b3ba3))
|
||||||
|
|
||||||
|
## v0.3.0 (2022-04-26)
|
||||||
|
### Feature
|
||||||
|
* **wizard:** Add csv input flag ([`a9f97a9`](https://git.grassecon.net/cicnet/cic-cli/commit/a9f97a9a5c6908e4d51710e3b121764d2511c0ab))
|
||||||
|
|
||||||
|
### Fix
|
||||||
|
* Tests ([`f300767`](https://git.grassecon.net/cicnet/cic-cli/commit/f30076783d5fc93d91d29e9343d62af4c0fdffaa))
|
||||||
|
* Bump ci ([`60e8ecc`](https://git.grassecon.net/cicnet/cic-cli/commit/60e8ecc41a472dbea25c36d869259c8161145002))
|
||||||
|
|
||||||
|
## v0.2.3 (2022-03-22)
|
||||||
|
### Fix
|
||||||
|
* Remove this ([`92794a2`](https://git.grassecon.net/cicnet/cic-cli/commit/92794a2e3b2fc5ace63f519bbe5b23c542afc853))
|
||||||
|
|
||||||
|
## v0.2.2 (2022-03-22)
|
||||||
|
### Fix
|
||||||
|
* Enfore upper case symbol name ([`71bf1e1`](https://git.grassecon.net/cicnet/cic-cli/commit/71bf1e15c4a217111ae6f6568814985a9d5b960f))
|
||||||
|
|
||||||
|
### Documentation
|
||||||
|
* Update bange urls ([`32ba293`](https://git.grassecon.net/cicnet/cic-cli/commit/32ba29354ae53bf8166bef4d117667aa314a6cfe))
|
||||||
|
|
||||||
|
## v0.2.1 (2022-03-16)
|
||||||
|
### Fix
|
||||||
|
* Update config paths ([`f7d0503`](https://git.grassecon.net/cicnet/cic-cli/commit/f7d0503c7b85d96588bf1a75fdf1cce27acf1460))
|
||||||
|
|
||||||
|
## v0.2.0 (2022-03-16)
|
||||||
|
### Feature
|
||||||
|
* Copy base configs to user configs ([`f4e370c`](https://git.grassecon.net/cicnet/cic-cli/commit/f4e370cb5db79c74abe26179f5b15bd079bdd066))
|
||||||
|
|
||||||
|
## v0.1.1 (2022-03-16)
|
||||||
|
### Fix
|
||||||
|
* Update configs ([`b51d1e9`](https://git.grassecon.net/cicnet/cic-cli/commit/b51d1e92d7ae1e3b91ca50c036ffd58e762df24b))
|
||||||
|
|
||||||
|
## v0.1.0 (2022-03-16)
|
||||||
|
### Feature
|
||||||
|
* Add interactive deployment and switch to poetry' ([#2](https://git.grassecon.net/cicnet/cic-cli/issues/2)) ([`0fcf2eb`](https://git.grassecon.net/cicnet/cic-cli/commit/0fcf2eb3bc807111db02e9e47e469ec0a965797f))
|
||||||
|
* **wizard:** Add ability to select wallet address ([`556366a`](https://git.grassecon.net/cicnet/cic-cli/commit/556366a93384bba51aa617d54bcf50f4473b790a))
|
||||||
|
* Add token symbol proof metadata references ([`a707f12`](https://git.grassecon.net/cicnet/cic-cli/commit/a707f120865186c8e4a7840d53c9dcf5f4257ab3))
|
||||||
|
|
||||||
|
### Fix
|
||||||
|
* Add getpass ([`47a9b25`](https://git.grassecon.net/cicnet/cic-cli/commit/47a9b259ae54c34df9af4aa1fb176070d305296a))
|
||||||
|
* Incorrect var name ([`41dbd5a`](https://git.grassecon.net/cicnet/cic-cli/commit/41dbd5a400287d4687d0830017466b9a43054ecf))
|
||||||
|
* **ext:** Allow loading chain_spec from config ([`1d4b051`](https://git.grassecon.net/cicnet/cic-cli/commit/1d4b0512ad65b4d2903bd7d022e562cda158a592))
|
||||||
|
* Change name to cic-cli ([`40e386d`](https://git.grassecon.net/cicnet/cic-cli/commit/40e386db1175839394f2480a1a3e1bbfc52edea9))
|
||||||
|
* Add missing json import ([`48ee805`](https://git.grassecon.net/cicnet/cic-cli/commit/48ee8050c17edb21b0dc4065bf0018b1502d4a8c))
|
||||||
|
* Broken imports ([`4f219e3`](https://git.grassecon.net/cicnet/cic-cli/commit/4f219e3d1853befa197f46a19dc8a8a76ef26811))
|
||||||
|
|
||||||
|
### Documentation
|
||||||
|
* Add cluter deployment info ([`941b9e6`](https://git.grassecon.net/cicnet/cic-cli/commit/941b9e6b650163c4f35e4b08203fb10c9309ee91))
|
||||||
|
* Rename prod config to testnet ([`67f947a`](https://git.grassecon.net/cicnet/cic-cli/commit/67f947a9af16dc01fb68459a51629320264d281f))
|
||||||
|
* Add badge ([`be5d988`](https://git.grassecon.net/cicnet/cic-cli/commit/be5d988fa4d03dfcd44f71c7c6d4a562b780da09))
|
||||||
51
README.md
51
README.md
@@ -1,28 +1,23 @@
|
|||||||
# CIC Token Deployment Tool
|
# CIC Token Deployment Tool
|
||||||
[](https://ci.grassecon.net/grassrootseconomics/cic)
|
[](https://ci.grassecon.net/grassrootseconomics/cic)
|
||||||
[](https://pypi.org/project/cic/)
|
[](https://pypi.org/project/cic/)
|
||||||
|
|
||||||
CIC-CLI provides tooling to generate and publish metadata in relation to
|
CIC-CLI provides tooling to generate and publish metadata in relation to
|
||||||
token deployments.
|
token deployments.
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
pip install --extra-index-url https://pip.grassrootseconomics.net cic[eth]
|
pip install cic-cli[eth]
|
||||||
```
|
```
|
||||||
## Setup
|
|
||||||
### Importing a wallet from metamask
|
|
||||||
- Export the accounts private key [Instructions](https://metamask.zendesk.com/hc/en-us/articles/360015289632-How-to-Export-an-Account-Private-Key)
|
|
||||||
- Save the private key to a file
|
|
||||||
- Run `eth-keyfile -k <file> > ~/.config/cic/keystore/keyfile.json`
|
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
### Using the wizard
|
### Using the wizard
|
||||||
|
First make sure that you edit the configs below to add your paths for `[auth]keyfile_path` and `[wallet]keyfile`
|
||||||
|
The configs are located in `~/.config/cic/cli/config/`
|
||||||
```
|
```
|
||||||
# Local
|
# Local
|
||||||
cic wizard ./somewhere -c ./config/docker
|
cic wizard ./somewhere -c ~/.config/cic/cli/config/docker
|
||||||
|
|
||||||
# Test Net
|
# Test Net
|
||||||
cic wizard ./somewhere -c ./config/testnet
|
cic wizard ./somewhere -c ~/.config/cic/cli/config/testnet
|
||||||
|
|
||||||
```
|
```
|
||||||
### Modular
|
### Modular
|
||||||
Some of the concepts described below assume familiarity with base
|
Some of the concepts described below assume familiarity with base
|
||||||
@@ -52,7 +47,8 @@ below are limited to the context of the EVM.
|
|||||||
|
|
||||||
## Development
|
## Development
|
||||||
### Requirements
|
### Requirements
|
||||||
- [poetry](https://python-poetry.org/docs/#installation)
|
- Install [poetry](https://python-poetry.org/docs/#installation)
|
||||||
|
|
||||||
### Setup
|
### Setup
|
||||||
|
|
||||||
```
|
```
|
||||||
@@ -68,7 +64,36 @@ below are limited to the context of the EVM.
|
|||||||
```bash
|
```bash
|
||||||
poetry run cic wizard ./somewhere -c ./config/docker
|
poetry run cic wizard ./somewhere -c ./config/docker
|
||||||
```
|
```
|
||||||
|
### Importing a wallet from metamask
|
||||||
|
- Export the accounts private key [Instructions](https://metamask.zendesk.com/hc/en-us/articles/360015289632-How-to-Export-an-Account-Private-Key)
|
||||||
|
- Save the private key to a file
|
||||||
|
- Run `eth-keyfile -k <file> > ~/.config/cic/keystore/keyfile.json`
|
||||||
|
|
||||||
|
### Port Forwarding
|
||||||
|
<details>
|
||||||
|
<summary>Install Kubectl</summary>
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install -y apt-transport-https ca-certificates curl
|
||||||
|
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
|
||||||
|
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install -y kubectl
|
||||||
|
```
|
||||||
|
</details>
|
||||||
|
|
||||||
|
- Download testnet cluster config from https://cloud.digitalocean.com/kubernetes/clusters
|
||||||
|
- Move the config to `$HOME/.kube/`
|
||||||
|
- Run `kubectl -n grassroots --kubeconfig=$HOME/.kube/<config_file_name>.yaml get pods`
|
||||||
|
- Copy the name of the meta pod (e.g `cic-meta-server-67dc7c6468-8rhdq`)
|
||||||
|
- Port foward the meta pod to the local machine using `kubectl port-forward pods/<name_of_meta_pod> 6700:8000 -n grassroots --kubeconfig=$HOME/.kube/<config_file_name>.yaml`
|
||||||
|
- Clone this repository to your local machine
|
||||||
|
- Run `poetry install -E eth` in the repo root
|
||||||
|
- Open `./cic/config/testnet/config.ini` and change
|
||||||
|
- [auth]keyfile_path
|
||||||
|
- [wallet]key_file
|
||||||
|
- Open a new terminal and run `poetry run cic wizard -c ./cic/config/testnet ./somewhere`
|
||||||
### Tests
|
### Tests
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
__version__ = "0.0.2"
|
__version__ = "0.3.3"
|
||||||
|
|||||||
@@ -2,11 +2,13 @@ from __future__ import annotations
|
|||||||
|
|
||||||
# standard import
|
# standard import
|
||||||
import logging
|
import logging
|
||||||
|
import os
|
||||||
|
|
||||||
from chainlib.cli.config import Config
|
from chainlib.cli.config import Config
|
||||||
|
|
||||||
# local imports
|
# local imports
|
||||||
from cic.contract.contract import deploy_contract, generate_contract, load_contract
|
from cic.contract.contract import deploy_contract, generate_contract, load_contract
|
||||||
|
from cic.contract.csv import load_contract_from_csv
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
@@ -20,6 +22,10 @@ def process_args(argparser):
|
|||||||
action="store_true",
|
action="store_true",
|
||||||
help="Skip Deployment",
|
help="Skip Deployment",
|
||||||
)
|
)
|
||||||
|
argparser.add_argument(
|
||||||
|
"--csv",
|
||||||
|
help="Load Voucher from CSV",
|
||||||
|
)
|
||||||
argparser.add_argument(
|
argparser.add_argument(
|
||||||
"--target",
|
"--target",
|
||||||
default="eth",
|
default="eth",
|
||||||
@@ -46,22 +52,31 @@ def validate_args(_args):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
ExtraArgs = {"skip_gen": str, "skip_deploy": str, "target": str, "path": str, "p": str}
|
def execute(
|
||||||
|
config: Config,
|
||||||
|
eargs,
|
||||||
def execute(config: Config, eargs: ExtraArgs):
|
):
|
||||||
directory = eargs.path
|
directory = eargs.path
|
||||||
target = eargs.target
|
target = eargs.target
|
||||||
skip_gen = eargs.skip_gen
|
skip_gen = eargs.skip_gen
|
||||||
skip_deploy = eargs.skip_deploy
|
skip_deploy = eargs.skip_deploy
|
||||||
wallet_keystore = eargs.y
|
wallet_keystore = eargs.y
|
||||||
|
csv_file = eargs.csv
|
||||||
|
|
||||||
if wallet_keystore:
|
if wallet_keystore:
|
||||||
config.add(wallet_keystore, "WALLET_KEY_FILE", exists_ok=True)
|
config.add(wallet_keystore, "WALLET_KEY_FILE", exists_ok=True)
|
||||||
|
|
||||||
if not skip_gen:
|
if skip_gen:
|
||||||
contract = generate_contract(directory, [target], config, interactive=True)
|
|
||||||
else:
|
|
||||||
contract = load_contract(directory)
|
contract = load_contract(directory)
|
||||||
|
else:
|
||||||
|
if os.path.exists(directory):
|
||||||
|
raise Exception(f"Directory {directory} already exists")
|
||||||
|
if csv_file:
|
||||||
|
print(f"Generating from csv:{csv_file} to {directory}")
|
||||||
|
contract = load_contract_from_csv(config, directory, csv_file)
|
||||||
|
else:
|
||||||
|
print("Using Interactive Mode")
|
||||||
|
contract = generate_contract(directory, [target], config, interactive=True)
|
||||||
|
|
||||||
print(contract)
|
print(contract)
|
||||||
|
|
||||||
|
|||||||
15
cic/config.py
Normal file
15
cic/config.py
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
import os
|
||||||
|
import shutil
|
||||||
|
|
||||||
|
default_module_configs = os.path.join(os.path.dirname(os.path.realpath(__file__)), '.', 'configs')
|
||||||
|
|
||||||
|
def ensure_base_configs(config_dir: str):
|
||||||
|
"""
|
||||||
|
Ensure that the base configs are present.
|
||||||
|
"""
|
||||||
|
if not os.path.exists(config_dir):
|
||||||
|
os.makedirs(config_dir)
|
||||||
|
for f in os.listdir(default_module_configs):
|
||||||
|
if not os.path.exists(os.path.join(config_dir, f)):
|
||||||
|
shutil.copytree(os.path.join(default_module_configs, f), os.path.join(config_dir, f))
|
||||||
|
|
||||||
27
cic/configs/mainnet/config.ini
Normal file
27
cic/configs/mainnet/config.ini
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
[cic_core]
|
||||||
|
meta_writer = cic.writers.KVWriter
|
||||||
|
attachment_writer = cic.writers.KVWriter
|
||||||
|
proof_writer = cic.writers.KVWriter
|
||||||
|
ext_writer = cic.writers.KVWriter
|
||||||
|
|
||||||
|
[cic]
|
||||||
|
registry_address = 0xe3e3431BF25b06166513019Ed7B21598D27d05dC
|
||||||
|
|
||||||
|
[meta]
|
||||||
|
url = https://meta.sarafu.network
|
||||||
|
http_origin =
|
||||||
|
|
||||||
|
[rpc]
|
||||||
|
provider = http://142.93.38.53:8545
|
||||||
|
|
||||||
|
[auth]
|
||||||
|
type = gnupg
|
||||||
|
keyfile_path =
|
||||||
|
passphrase =
|
||||||
|
|
||||||
|
[wallet]
|
||||||
|
key_file =
|
||||||
|
passphrase =
|
||||||
|
|
||||||
|
[chain]
|
||||||
|
spec = evm:kitabu:6060:sarafu
|
||||||
@@ -8,7 +8,7 @@ ext_writer = cic.writers.KVWriter
|
|||||||
registry_address = 0xcf60ebc445b636a5ab787f9e8bc465a2a3ef8299
|
registry_address = 0xcf60ebc445b636a5ab787f9e8bc465a2a3ef8299
|
||||||
|
|
||||||
[meta]
|
[meta]
|
||||||
url = http://localhost:6700
|
url = https://meta.grassecon.net
|
||||||
http_origin =
|
http_origin =
|
||||||
|
|
||||||
[rpc]
|
[rpc]
|
||||||
@@ -23,12 +23,12 @@ class Attachment(Data):
|
|||||||
self.path = path
|
self.path = path
|
||||||
self.writer = writer
|
self.writer = writer
|
||||||
self.attachment_path = os.path.join(self.path, "attachments")
|
self.attachment_path = os.path.join(self.path, "attachments")
|
||||||
|
self.start()
|
||||||
if interactive:
|
if interactive:
|
||||||
self.start()
|
|
||||||
input(
|
input(
|
||||||
f"Please add attachment files to '{os.path.abspath(os.path.join(self.path,'attachments'))}' and then press ENTER to continue"
|
f"Please add attachment files to '{os.path.abspath(os.path.join(self.path,'attachments'))}' and then press ENTER to continue"
|
||||||
)
|
)
|
||||||
self.load()
|
self.load()
|
||||||
|
|
||||||
def load(self):
|
def load(self):
|
||||||
"""Loads attachment data from settings."""
|
"""Loads attachment data from settings."""
|
||||||
@@ -45,7 +45,7 @@ class Attachment(Data):
|
|||||||
def start(self):
|
def start(self):
|
||||||
"""Initialize attachment settings from template."""
|
"""Initialize attachment settings from template."""
|
||||||
super(Attachment, self).start()
|
super(Attachment, self).start()
|
||||||
os.makedirs(self.attachment_path)
|
os.makedirs(self.attachment_path, exist_ok=True)
|
||||||
|
|
||||||
def get(self, k):
|
def get(self, k):
|
||||||
"""Get a single attachment by the sha256 hash of the content.
|
"""Get a single attachment by the sha256 hash of the content.
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ from cic.contract.base import Data, data_dir
|
|||||||
from cic.utils import object_to_str
|
from cic.utils import object_to_str
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
logg = logging.getLogger(__name__)
|
logg = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
@@ -22,7 +23,9 @@ class Proof(Data):
|
|||||||
|
|
||||||
It processes inputs from the proof.json file in the session directory.
|
It processes inputs from the proof.json file in the session directory.
|
||||||
|
|
||||||
Optionally, attachment objects can be added to the proof. If added, the resulting proof digest will consists of the attachment digests added to the root digest. These are then are deterministically ordered, regardless of which order attachments were given to the constructor.
|
Optionally, attachment objects can be added to the proof. If added, the resulting proof
|
||||||
|
digest will consists of the attachment digests added to the root digest. These are then
|
||||||
|
are deterministically ordered, regardless of which order attachments were given to the constructor.
|
||||||
|
|
||||||
:param path: Path to settings directory
|
:param path: Path to settings directory
|
||||||
:type path: str
|
:type path: str
|
||||||
@@ -56,7 +59,8 @@ class Proof(Data):
|
|||||||
|
|
||||||
if interactive:
|
if interactive:
|
||||||
self.description = (
|
self.description = (
|
||||||
input(f"Enter Proof Description ({self.description}): ") or self.description
|
input(f"Enter Proof Description ({self.description}): ")
|
||||||
|
or self.description
|
||||||
)
|
)
|
||||||
self.namespace = (
|
self.namespace = (
|
||||||
input(f"Enter Proof Namespace ({self.namespace}): ") or self.namespace
|
input(f"Enter Proof Namespace ({self.namespace}): ") or self.namespace
|
||||||
@@ -67,7 +71,7 @@ class Proof(Data):
|
|||||||
"""Load proof data from settings."""
|
"""Load proof data from settings."""
|
||||||
super(Proof, self).load()
|
super(Proof, self).load()
|
||||||
|
|
||||||
f = open(self.proof_path, "r")
|
f = open(self.proof_path, "r", encoding="utf-8")
|
||||||
o = json.load(f)
|
o = json.load(f)
|
||||||
f.close()
|
f.close()
|
||||||
|
|
||||||
@@ -77,7 +81,7 @@ class Proof(Data):
|
|||||||
self.issuer = o["issuer"]
|
self.issuer = o["issuer"]
|
||||||
self.proofs = o["proofs"]
|
self.proofs = o["proofs"]
|
||||||
|
|
||||||
if self.extra_attachments != None:
|
if self.extra_attachments is not None:
|
||||||
a = self.extra_attachments.asdict()
|
a = self.extra_attachments.asdict()
|
||||||
for k in a.keys():
|
for k in a.keys():
|
||||||
self.attachments[k] = a[k]
|
self.attachments[k] = a[k]
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ class Token(Data):
|
|||||||
):
|
):
|
||||||
super(Token, self).__init__()
|
super(Token, self).__init__()
|
||||||
self.name = name
|
self.name = name
|
||||||
self.symbol = symbol
|
self.symbol = symbol.upper()
|
||||||
self.supply = supply
|
self.supply = supply
|
||||||
self.precision = precision
|
self.precision = precision
|
||||||
self.code = code
|
self.code = code
|
||||||
@@ -57,6 +57,7 @@ class Token(Data):
|
|||||||
|
|
||||||
self.name = input(f"Enter Token Name ({self.name}): ") or self.name
|
self.name = input(f"Enter Token Name ({self.name}): ") or self.name
|
||||||
self.symbol = input(f"Enter Token Symbol ({self.symbol}): ") or self.symbol
|
self.symbol = input(f"Enter Token Symbol ({self.symbol}): ") or self.symbol
|
||||||
|
self.symbol = self.symbol.upper()
|
||||||
self.precision = input(f"Enter Token Precision ({self.precision}): ") or self.precision
|
self.precision = input(f"Enter Token Precision ({self.precision}): ") or self.precision
|
||||||
self.supply = input(f"Enter Token Supply ({self.supply}): ") or self.supply
|
self.supply = input(f"Enter Token Supply ({self.supply}): ") or self.supply
|
||||||
|
|
||||||
@@ -68,7 +69,7 @@ class Token(Data):
|
|||||||
o = json.load(f)
|
o = json.load(f)
|
||||||
|
|
||||||
self.name = o["name"]
|
self.name = o["name"]
|
||||||
self.symbol = o["symbol"]
|
self.symbol = o["symbol"].upper()
|
||||||
self.precision = o["precision"]
|
self.precision = o["precision"]
|
||||||
self.code = o["code"]
|
self.code = o["code"]
|
||||||
self.supply = o["supply"]
|
self.supply = o["supply"]
|
||||||
@@ -100,7 +101,7 @@ class Token(Data):
|
|||||||
with open(token_template_file_path, encoding="utf-8") as f:
|
with open(token_template_file_path, encoding="utf-8") as f:
|
||||||
o = json.load(f)
|
o = json.load(f)
|
||||||
o["name"] = self.name
|
o["name"] = self.name
|
||||||
o["symbol"] = self.symbol
|
o["symbol"] = self.symbol.upper()
|
||||||
o["precision"] = self.precision
|
o["precision"] = self.precision
|
||||||
o["code"] = self.code
|
o["code"] = self.code
|
||||||
o["supply"] = self.supply
|
o["supply"] = self.supply
|
||||||
@@ -115,7 +116,7 @@ class Token(Data):
|
|||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
s = f"name = {self.name}\n"
|
s = f"name = {self.name}\n"
|
||||||
s += f"symbol = {self.symbol}\n"
|
s += f"symbol = {self.symbol.upper()}\n"
|
||||||
s += f"precision = {self.precision}\n"
|
s += f"precision = {self.precision}\n"
|
||||||
s += f"supply = {self.supply}\n"
|
s += f"supply = {self.supply}\n"
|
||||||
for idx, extra in enumerate(self.extra_args):
|
for idx, extra in enumerate(self.extra_args):
|
||||||
|
|||||||
13
cic/contract/constants.py
Normal file
13
cic/contract/constants.py
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
GITABLE_CONTRACT_URL = "https://gitlab.com/cicnet/eth-erc20/-/raw/master/python/giftable_erc20_token/data/GiftableToken"
|
||||||
|
DMR_CONTRACT_URL = "https://gitlab.com/cicnet/erc20-demurrage-token/-/raw/master/python/erc20_demurrage_token/data/DemurrageTokenSingleNocap"
|
||||||
|
|
||||||
|
CONTRACT_URLS = [
|
||||||
|
{
|
||||||
|
"url": GITABLE_CONTRACT_URL,
|
||||||
|
"name": "Giftable Token",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": DMR_CONTRACT_URL,
|
||||||
|
"name": "Demurrage Token Single No Cap",
|
||||||
|
},
|
||||||
|
]
|
||||||
@@ -1,24 +1,20 @@
|
|||||||
# Standard
|
# Standard
|
||||||
import importlib
|
import importlib
|
||||||
import json
|
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
from typing import TYPE_CHECKING, List
|
from typing import List
|
||||||
|
|
||||||
import requests
|
|
||||||
from chainlib.chain import ChainSpec
|
from chainlib.chain import ChainSpec
|
||||||
from chainlib.cli.config import Config
|
from chainlib.cli.config import Config
|
||||||
|
# Local Modules
|
||||||
from cic.contract.components.attachment import Attachment
|
from cic.contract.components.attachment import Attachment
|
||||||
from cic.contract.components.meta import Meta
|
from cic.contract.components.meta import Meta
|
||||||
from cic.contract.components.proof import Proof
|
from cic.contract.components.proof import Proof
|
||||||
from cic.contract.components.token import Token
|
from cic.contract.components.token import Token
|
||||||
from cic.contract.helpers import init_writers_from_config
|
from cic.contract.helpers import init_writers_from_config
|
||||||
from cic.contract.network import Network
|
from cic.contract.network import Network
|
||||||
|
|
||||||
# Local Modules
|
|
||||||
from cic.contract.processor import ContractProcessor
|
from cic.contract.processor import ContractProcessor
|
||||||
from cic.writers import HTTPWriter, KeyedWriterFactory, MetadataWriter, OutputWriter
|
from cic.writers import HTTPWriter, KeyedWriterFactory, MetadataWriter
|
||||||
|
|
||||||
# external imports
|
# external imports
|
||||||
from cic_types.ext.metadata import MetadataRequestsHandler
|
from cic_types.ext.metadata import MetadataRequestsHandler
|
||||||
from cic_types.ext.metadata.signer import Signer as MetadataSigner
|
from cic_types.ext.metadata.signer import Signer as MetadataSigner
|
||||||
@@ -74,37 +70,27 @@ def load_contract(directory) -> Contract:
|
|||||||
def generate_contract(
|
def generate_contract(
|
||||||
directory: str, targets: List[str], config, interactive=True
|
directory: str, targets: List[str], config, interactive=True
|
||||||
) -> Contract:
|
) -> Contract:
|
||||||
if os.path.exists(directory):
|
|
||||||
contine = input(
|
|
||||||
f"Directory {directory} already exists, Would you like to delete it? (y/n): "
|
|
||||||
)
|
|
||||||
if contine.lower() != "y":
|
|
||||||
log.debug("Trying to load existing contract")
|
|
||||||
return load_contract(directory)
|
|
||||||
else:
|
|
||||||
print(f"Deleted {directory}")
|
|
||||||
os.system(f"rm -rf {directory}")
|
|
||||||
os.makedirs(directory)
|
os.makedirs(directory)
|
||||||
log.debug("Generating token")
|
log.info("Generating token")
|
||||||
token = Token(directory, interactive=interactive)
|
token = Token(directory, interactive=interactive)
|
||||||
token.start()
|
token.start()
|
||||||
|
|
||||||
log.debug("Generating proof")
|
log.info("Generating proof")
|
||||||
proof = Proof(directory, interactive=interactive)
|
proof = Proof(directory, interactive=interactive)
|
||||||
proof.start()
|
proof.start()
|
||||||
|
|
||||||
log.debug("Generating meta")
|
log.info("Generating meta")
|
||||||
meta = Meta(directory, interactive=interactive)
|
meta = Meta(directory, interactive=interactive)
|
||||||
meta.start()
|
meta.start()
|
||||||
|
|
||||||
log.debug("Generating attachment")
|
log.info("Generating attachment")
|
||||||
attachment = Attachment(directory, interactive=interactive)
|
attachment = Attachment(directory, interactive=interactive)
|
||||||
|
|
||||||
log.debug("Generating network")
|
log.info("Generating network")
|
||||||
network = Network(directory, targets=targets)
|
network = Network(directory, targets=targets)
|
||||||
network.start()
|
network.start()
|
||||||
|
|
||||||
log.debug(
|
log.info(
|
||||||
f"""Populating infomation from network:
|
f"""Populating infomation from network:
|
||||||
CIC_REGISTRY_ADDRESS: {config.get("CIC_REGISTRY_ADDRESS")}
|
CIC_REGISTRY_ADDRESS: {config.get("CIC_REGISTRY_ADDRESS")}
|
||||||
CHAIN_SPEC: {config.get("CHAIN_SPEC")}
|
CHAIN_SPEC: {config.get("CHAIN_SPEC")}
|
||||||
@@ -118,7 +104,7 @@ def generate_contract(
|
|||||||
signer_hint = config.get("WALLET_KEY_FILE")
|
signer_hint = config.get("WALLET_KEY_FILE")
|
||||||
keys = cmd_mod.list_keys(config, signer_hint)
|
keys = cmd_mod.list_keys(config, signer_hint)
|
||||||
if len(keys) > 1:
|
if len(keys) > 1:
|
||||||
print(f"More than one key found, please select one:")
|
print("More than one key found, please select one:")
|
||||||
for idx, key in enumerate(keys):
|
for idx, key in enumerate(keys):
|
||||||
print(f"{idx} - {key} ")
|
print(f"{idx} - {key} ")
|
||||||
selecting_key = True
|
selecting_key = True
|
||||||
@@ -152,7 +138,6 @@ def deploy_contract(
|
|||||||
target: str,
|
target: str,
|
||||||
contract_directory: str,
|
contract_directory: str,
|
||||||
):
|
):
|
||||||
|
|
||||||
modname = f"cic.ext.{target}"
|
modname = f"cic.ext.{target}"
|
||||||
cmd_mod = importlib.import_module(modname)
|
cmd_mod = importlib.import_module(modname)
|
||||||
|
|
||||||
|
|||||||
197
cic/contract/csv.py
Normal file
197
cic/contract/csv.py
Normal file
@@ -0,0 +1,197 @@
|
|||||||
|
import csv
|
||||||
|
import importlib
|
||||||
|
import logging
|
||||||
|
import os
|
||||||
|
from enum import IntEnum
|
||||||
|
from pathlib import Path
|
||||||
|
from typing import List
|
||||||
|
|
||||||
|
from chainlib.chain import ChainSpec
|
||||||
|
from cic.contract.components.attachment import Attachment
|
||||||
|
from cic.contract.components.meta import Meta
|
||||||
|
from cic.contract.components.proof import Proof
|
||||||
|
from cic.contract.components.token import Token
|
||||||
|
from cic.contract.constants import DMR_CONTRACT_URL
|
||||||
|
from cic.contract.contract import Contract
|
||||||
|
from cic.contract.helpers import download_file
|
||||||
|
from cic.contract.network import Network
|
||||||
|
|
||||||
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
CONTRACT_CSV_HEADER = [
|
||||||
|
"issuer",
|
||||||
|
"namespace",
|
||||||
|
"voucher_name",
|
||||||
|
"symbol",
|
||||||
|
"location",
|
||||||
|
"country_code",
|
||||||
|
"supply",
|
||||||
|
"precision",
|
||||||
|
"token_type",
|
||||||
|
"demurrage",
|
||||||
|
"period_minutes",
|
||||||
|
"phone_number",
|
||||||
|
"email_address",
|
||||||
|
"sink_account",
|
||||||
|
"description",
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
class CSV_Column(IntEnum):
|
||||||
|
issuer = 0
|
||||||
|
namespace = 1
|
||||||
|
voucher_name = 2
|
||||||
|
symbol = 3
|
||||||
|
location = 4
|
||||||
|
country_code = 5
|
||||||
|
supply = 6
|
||||||
|
precision = 7
|
||||||
|
token_type = 8
|
||||||
|
demurrage = 9
|
||||||
|
period_minutes = 10
|
||||||
|
phone_number = 11
|
||||||
|
email_address = 12
|
||||||
|
sink_account = 13
|
||||||
|
description = 14
|
||||||
|
|
||||||
|
|
||||||
|
def load_contracts_from_csv(config, directory, csv_path: str) -> List[Contract]:
|
||||||
|
targets = ["eth"]
|
||||||
|
os.makedirs(directory)
|
||||||
|
contract_rows = []
|
||||||
|
bin_path = os.path.abspath(download_file(DMR_CONTRACT_URL + ".bin"))
|
||||||
|
with open(csv_path, "rt", encoding="utf-8") as file:
|
||||||
|
csvreader = csv.reader(file, delimiter=",")
|
||||||
|
for idx, row in enumerate(csvreader):
|
||||||
|
if idx == 0:
|
||||||
|
if row != CONTRACT_CSV_HEADER:
|
||||||
|
raise Exception(
|
||||||
|
f'Seems you are using the wrong csv format. Expected the header to be: \n\t {", ".join(CONTRACT_CSV_HEADER)}'
|
||||||
|
)
|
||||||
|
continue
|
||||||
|
contract_rows.append(row)
|
||||||
|
contracts = []
|
||||||
|
for idx, contract_row in enumerate(contract_rows):
|
||||||
|
issuer = contract_row[CSV_Column.issuer]
|
||||||
|
namespace = contract_row[CSV_Column.namespace]
|
||||||
|
voucher_name = contract_row[CSV_Column.voucher_name]
|
||||||
|
symbol = contract_row[CSV_Column.symbol]
|
||||||
|
location = contract_row[CSV_Column.location]
|
||||||
|
country_code = contract_row[CSV_Column.country_code]
|
||||||
|
supply = contract_row[CSV_Column.supply]
|
||||||
|
precision = contract_row[CSV_Column.precision]
|
||||||
|
token_type = contract_row[CSV_Column.token_type]
|
||||||
|
demurrage = contract_row[CSV_Column.demurrage]
|
||||||
|
period_minutes = contract_row[CSV_Column.period_minutes]
|
||||||
|
phone_number = contract_row[CSV_Column.phone_number]
|
||||||
|
email_address = contract_row[CSV_Column.email_address]
|
||||||
|
sink_account = contract_row[CSV_Column.sink_account]
|
||||||
|
description = contract_row[CSV_Column.description]
|
||||||
|
|
||||||
|
if token_type != "demurrage":
|
||||||
|
raise Exception(
|
||||||
|
f"Only demurrage tokens are supported at this time. {token_type} is not supported"
|
||||||
|
)
|
||||||
|
|
||||||
|
log.info("Generating token")
|
||||||
|
token = Token(
|
||||||
|
directory,
|
||||||
|
name=voucher_name,
|
||||||
|
symbol=symbol,
|
||||||
|
precision=precision,
|
||||||
|
supply=supply,
|
||||||
|
extra_args=[demurrage, period_minutes, sink_account],
|
||||||
|
extra_args_types=["uint256", "uint256", "address"],
|
||||||
|
code=bin_path,
|
||||||
|
)
|
||||||
|
token.start()
|
||||||
|
|
||||||
|
log.info("Generating proof")
|
||||||
|
proof = Proof(
|
||||||
|
directory,
|
||||||
|
attachments=None,
|
||||||
|
issuer=issuer,
|
||||||
|
description=description,
|
||||||
|
namespace=namespace,
|
||||||
|
)
|
||||||
|
proof.start()
|
||||||
|
|
||||||
|
log.info("Generating meta")
|
||||||
|
meta = Meta(
|
||||||
|
directory,
|
||||||
|
name=issuer,
|
||||||
|
contact={
|
||||||
|
"phone": phone_number,
|
||||||
|
"email": email_address,
|
||||||
|
},
|
||||||
|
country_code=country_code,
|
||||||
|
location=location,
|
||||||
|
)
|
||||||
|
|
||||||
|
meta.start()
|
||||||
|
|
||||||
|
log.info("Generating attachment")
|
||||||
|
attachment = Attachment(directory)
|
||||||
|
|
||||||
|
log.info("Generating network")
|
||||||
|
network = Network(directory, targets=targets)
|
||||||
|
network.start()
|
||||||
|
|
||||||
|
log.info(
|
||||||
|
f"""Populating infomation from network:
|
||||||
|
CIC_REGISTRY_ADDRESS: {config.get("CIC_REGISTRY_ADDRESS")}
|
||||||
|
CHAIN_SPEC: {config.get("CHAIN_SPEC")}
|
||||||
|
RPC_PROVIDER: {config.get("RPC_PROVIDER")}
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
for target in targets:
|
||||||
|
# TODO Clean this up
|
||||||
|
modname = f"cic.ext.{target}"
|
||||||
|
cmd_mod = importlib.import_module(modname)
|
||||||
|
signer_hint = config.get("WALLET_KEY_FILE")
|
||||||
|
if signer_hint is None:
|
||||||
|
raise Exception("No Wallet Keyfile was provided")
|
||||||
|
keys = cmd_mod.list_keys(config, signer_hint)
|
||||||
|
if keys is None or len(keys) == 0:
|
||||||
|
raise Exception(f"No wallet keys found in {signer_hint}")
|
||||||
|
if len(keys) > 1:
|
||||||
|
log.warning(
|
||||||
|
f"More than one key found in the keystore. Using the first one\n - {keys[0]}"
|
||||||
|
)
|
||||||
|
key_account_address = keys[0]
|
||||||
|
|
||||||
|
m = importlib.import_module(f"cic.ext.{target}.start")
|
||||||
|
m.extension_start(
|
||||||
|
network,
|
||||||
|
registry_address=config.get("CIC_REGISTRY_ADDRESS"),
|
||||||
|
chain_spec=ChainSpec.from_chain_str(config.get("CHAIN_SPEC")),
|
||||||
|
rpc_provider=config.get("RPC_PROVIDER"),
|
||||||
|
key_account_address=key_account_address,
|
||||||
|
)
|
||||||
|
network.load()
|
||||||
|
|
||||||
|
contracts.append(
|
||||||
|
Contract(
|
||||||
|
token=token,
|
||||||
|
proof=proof,
|
||||||
|
meta=meta,
|
||||||
|
attachment=attachment,
|
||||||
|
network=network,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
return contracts
|
||||||
|
|
||||||
|
|
||||||
|
def load_contract_from_csv(config, directory, csv_path: str) -> Contract:
|
||||||
|
path = Path(csv_path)
|
||||||
|
if path.is_file():
|
||||||
|
contracts = load_contracts_from_csv(config, directory, csv_path=csv_path)
|
||||||
|
if len(contracts) == 0:
|
||||||
|
raise Exception("No contracts found in CSV")
|
||||||
|
if len(contracts) > 1:
|
||||||
|
log.warning(
|
||||||
|
"Warning multiple contracts found in CSV. Only the first contract will be used"
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
raise Exception("CSV file does not exist")
|
||||||
|
return contracts[0]
|
||||||
@@ -1,32 +1,25 @@
|
|||||||
# standard imports
|
# standard imports
|
||||||
import os
|
|
||||||
import logging
|
|
||||||
import sys
|
|
||||||
import json
|
|
||||||
import requests
|
|
||||||
import importlib
|
|
||||||
import tempfile
|
|
||||||
import hashlib
|
import hashlib
|
||||||
|
import importlib
|
||||||
|
import json
|
||||||
|
import logging
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import tempfile
|
||||||
|
from typing import Callable, TypedDict, Union
|
||||||
|
|
||||||
|
import requests
|
||||||
|
from cic.contract.constants import CONTRACT_URLS
|
||||||
|
|
||||||
# local imports
|
# local imports
|
||||||
from cic.writers import OutputWriter
|
from cic.writers import WritersType
|
||||||
|
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
CONTRACTS = [
|
|
||||||
{
|
|
||||||
"url": "https://gitlab.com/cicnet/eth-erc20/-/raw/master/python/giftable_erc20_token/data/GiftableToken",
|
|
||||||
"name": "Giftable Token",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"url": "https://gitlab.com/cicnet/erc20-demurrage-token/-/raw/master/python/erc20_demurrage_token/data/DemurrageTokenSingleNocap",
|
|
||||||
"name": "Demurrage Token Single No Cap",
|
|
||||||
}
|
|
||||||
]
|
|
||||||
|
|
||||||
# Download File from Url
|
# Download File from Url
|
||||||
def download_file(url: str, filename=None) -> (str, bytes):
|
def download_file(url: str, filename=None) -> str:
|
||||||
directory = tempfile.gettempdir()
|
directory = tempfile.gettempdir()
|
||||||
filename = filename if filename else url.split("/")[-1]
|
filename = filename if filename else url.split("/")[-1]
|
||||||
log.debug(f"Downloading {filename}")
|
log.debug(f"Downloading {filename}")
|
||||||
@@ -38,27 +31,29 @@ def download_file(url: str, filename=None) -> (str, bytes):
|
|||||||
log.debug(f"{filename} downloaded to {path}")
|
log.debug(f"{filename} downloaded to {path}")
|
||||||
return path
|
return path
|
||||||
|
|
||||||
|
|
||||||
def get_contract_args(data: list):
|
def get_contract_args(data: list):
|
||||||
for item in data:
|
for item in data:
|
||||||
if item["type"] == "constructor":
|
if item["type"] == "constructor":
|
||||||
return item["inputs"]
|
return item["inputs"]
|
||||||
raise Exception("No constructor found in contract")
|
raise Exception("No constructor found in contract")
|
||||||
|
|
||||||
|
|
||||||
def select_contract():
|
def select_contract():
|
||||||
print("Contracts:")
|
print("Contracts:")
|
||||||
print("\t C - Custom (path/url to contract)")
|
print("\t C - Custom (path/url to contract)")
|
||||||
for idx, contract in enumerate(CONTRACTS):
|
for idx, contract in enumerate(CONTRACT_URLS):
|
||||||
print(f"\t {idx} - {contract['name']}")
|
print(f"\t {idx} - {contract['name']}")
|
||||||
|
|
||||||
val = input("Select contract (C,0,1..): ")
|
val = input("Select contract (C,0,1..): ")
|
||||||
if val.isdigit() and int(val) < len(CONTRACTS):
|
if val.isdigit() and int(val) < len(CONTRACT_URLS):
|
||||||
contract = CONTRACTS[int(val)]
|
contract = CONTRACT_URLS[int(val)]
|
||||||
bin_path = os.path.abspath(download_file(contract["url"] + ".bin"))
|
bin_path = os.path.abspath(download_file(contract["url"] + ".bin"))
|
||||||
json_path = download_file(contract["url"] + ".json")
|
json_path = download_file(contract["url"] + ".json")
|
||||||
|
|
||||||
elif val == "C":
|
elif val == "C":
|
||||||
possible_bin_location = input("Enter a path or url to a contract.bin: ")
|
possible_bin_location = input("Enter a path or url to a contract.bin: ")
|
||||||
if possible_bin_location.startswith('http'):
|
if possible_bin_location.startswith("http"):
|
||||||
# possible_bin_location is url
|
# possible_bin_location is url
|
||||||
bin_path = download_file(possible_bin_location)
|
bin_path = download_file(possible_bin_location)
|
||||||
else:
|
else:
|
||||||
@@ -99,25 +94,28 @@ def select_contract():
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Writers = {
|
class Writers(TypedDict):
|
||||||
"meta": OutputWriter,
|
meta: Union[WritersType, Callable[..., WritersType]]
|
||||||
"attachment": OutputWriter,
|
attachment: Callable[..., WritersType]
|
||||||
"proof": OutputWriter,
|
proof: Callable[..., WritersType]
|
||||||
"ext": OutputWriter,
|
ext: Union[WritersType, Callable[..., WritersType]]
|
||||||
}
|
|
||||||
|
|
||||||
def init_writers_from_config(config) -> Writers:
|
def init_writers_from_config(config) -> Writers:
|
||||||
writers: Writers = {
|
writers = {}
|
||||||
"meta": None,
|
writer_keys = ["meta", "attachment", "proof", "ext"]
|
||||||
"attachment": None,
|
for key in writer_keys:
|
||||||
"proof": None,
|
|
||||||
"ext": None,
|
|
||||||
}
|
|
||||||
for key in writers:
|
|
||||||
writer_config_name = f"CIC_CORE_{key.upper()}_WRITER"
|
writer_config_name = f"CIC_CORE_{key.upper()}_WRITER"
|
||||||
(module_name, attribute_name) = config.get(writer_config_name).rsplit(".", maxsplit=1)
|
(module_name, attribute_name) = config.get(writer_config_name).rsplit(
|
||||||
|
".", maxsplit=1
|
||||||
|
)
|
||||||
mod = importlib.import_module(module_name)
|
mod = importlib.import_module(module_name)
|
||||||
writer = getattr(mod, attribute_name)
|
writer = getattr(mod, attribute_name)
|
||||||
writers[key] = writer
|
writers[key] = writer
|
||||||
|
|
||||||
return writers
|
return Writers(
|
||||||
|
meta=writers["meta"],
|
||||||
|
attachment=writers["attachment"],
|
||||||
|
proof=writers["proof"],
|
||||||
|
ext=writers["ext"],
|
||||||
|
)
|
||||||
|
|||||||
@@ -5,14 +5,14 @@ proof_writer = cic.writers.KVWriter
|
|||||||
ext_writer = cic.writers.KVWriter
|
ext_writer = cic.writers.KVWriter
|
||||||
|
|
||||||
[cic]
|
[cic]
|
||||||
registry_address = 0xcf60ebc445b636a5ab787f9e8bc465a2a3ef8299
|
registry_address = 0xe3e3431BF25b06166513019Ed7B21598D27d05dC
|
||||||
|
|
||||||
[meta]
|
[meta]
|
||||||
url = https://meta.grassecon.net
|
url = https://meta.sarafu.network
|
||||||
http_origin =
|
http_origin =
|
||||||
|
|
||||||
[auth]
|
[auth]
|
||||||
type = gnupg
|
type = gnupg
|
||||||
keyfile_path =
|
keyfile_path =
|
||||||
passphrase =
|
passphrase =
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,5 @@
|
|||||||
"name": "",
|
"name": "",
|
||||||
"location": "",
|
"location": "",
|
||||||
"country_code": "",
|
"country_code": "",
|
||||||
"contact": {
|
"contact": {}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,77 +1,98 @@
|
|||||||
# standard imports
|
# standard imports
|
||||||
import os
|
|
||||||
import logging
|
|
||||||
import sys
|
|
||||||
import importlib
|
import importlib
|
||||||
|
import logging
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
|
||||||
# external imports
|
# external imports
|
||||||
import chainlib.cli
|
import chainlib.cli
|
||||||
|
import cic.cmd.export as cmd_export
|
||||||
|
import cic.cmd.ext as cmd_ext
|
||||||
|
|
||||||
# local imports
|
# local imports
|
||||||
import cic.cmd.init as cmd_init
|
import cic.cmd.init as cmd_init
|
||||||
import cic.cmd.show as cmd_show
|
import cic.cmd.show as cmd_show
|
||||||
import cic.cmd.ext as cmd_ext
|
|
||||||
import cic.cmd.export as cmd_export
|
|
||||||
import cic.cmd.wizard as cmd_wizard
|
import cic.cmd.wizard as cmd_wizard
|
||||||
|
from cic.config import ensure_base_configs
|
||||||
|
|
||||||
logging.basicConfig(level=logging.WARNING)
|
logging.basicConfig(level=logging.WARNING)
|
||||||
logg = logging.getLogger()
|
logg = logging.getLogger()
|
||||||
|
|
||||||
script_dir = os.path.dirname(os.path.realpath(__file__))
|
script_dir = os.path.dirname(os.path.realpath(__file__))
|
||||||
data_dir = os.path.join(script_dir, '..', 'data')
|
data_dir = os.path.join(script_dir, "..", "data")
|
||||||
base_config_dir = os.path.join(data_dir, 'config')
|
base_config_dir = os.path.join(data_dir, "config")
|
||||||
schema_dir = os.path.join(script_dir, '..', 'schema')
|
schema_dir = os.path.join(script_dir, "..", "schema")
|
||||||
|
user_config_dir = os.path.join(
|
||||||
|
os.path.expanduser("~"), ".config", "cic", "cli", "config"
|
||||||
|
)
|
||||||
|
|
||||||
arg_flags = chainlib.cli.argflag_std_read | chainlib.cli.Flag.SEQ
|
arg_flags = chainlib.cli.argflag_std_read | chainlib.cli.Flag.SEQ
|
||||||
argparser = chainlib.cli.ArgumentParser(
|
argparser = chainlib.cli.ArgumentParser(
|
||||||
env=os.environ,
|
env=os.environ,
|
||||||
arg_flags=arg_flags,
|
arg_flags=arg_flags,
|
||||||
description='CIC cli tool for generating and publishing tokens'
|
description="CIC cli tool for generating and publishing contracts",
|
||||||
)
|
)
|
||||||
|
|
||||||
sub = argparser.add_subparsers()
|
sub = argparser.add_subparsers()
|
||||||
sub.dest = 'command'
|
sub.dest = "command"
|
||||||
|
|
||||||
sub_init = sub.add_parser('init', help='initialize new cic data directory')
|
sub_init = sub.add_parser("init", help="initialize new cic data directory")
|
||||||
cmd_init.process_args(sub_init)
|
cmd_init.process_args(sub_init)
|
||||||
|
|
||||||
sub_show = sub.add_parser('show', help='display summary of current state of cic data directory')
|
sub_show = sub.add_parser(
|
||||||
|
"show", help="display summary of current state of cic data directory"
|
||||||
|
)
|
||||||
cmd_show.process_args(sub_show)
|
cmd_show.process_args(sub_show)
|
||||||
|
|
||||||
sub_export = sub.add_parser('export', help='export cic data directory state to a specified target')
|
sub_export = sub.add_parser(
|
||||||
|
"export", help="export cic data directory state to a specified target"
|
||||||
|
)
|
||||||
cmd_export.process_args(sub_export)
|
cmd_export.process_args(sub_export)
|
||||||
|
|
||||||
sub_ext = sub.add_parser('ext', help='extension helpers')
|
sub_ext = sub.add_parser("ext", help="extension helpers")
|
||||||
cmd_ext.process_args(sub_ext)
|
cmd_ext.process_args(sub_ext)
|
||||||
|
|
||||||
sub_wizard = sub.add_parser('wizard', help='An interactive wizard for creating and publishing contracts')
|
sub_wizard = sub.add_parser(
|
||||||
|
"wizard", help="An interactive wizard for creating and publishing contracts"
|
||||||
|
)
|
||||||
cmd_wizard.process_args(sub_wizard)
|
cmd_wizard.process_args(sub_wizard)
|
||||||
|
|
||||||
args = argparser.parse_args(sys.argv[1:])
|
args = argparser.parse_args(sys.argv[1:])
|
||||||
|
|
||||||
if args.command is None:
|
if args.command is None:
|
||||||
logg.critical('Subcommand missing')
|
logg.critical("Subcommand missing")
|
||||||
sys.stderr.write("\033[;91m" + 'subcommand missing' + "\033[;39m\n")
|
sys.stderr.write("\033[;91m" + "subcommand missing" + "\033[;39m\n")
|
||||||
argparser.print_help(sys.stderr)
|
argparser.print_help(sys.stderr)
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
modname = f'cic.cmd.{args.command}'
|
modname = f"cic.cmd.{args.command}"
|
||||||
logg.debug(f'using module {modname}')
|
logg.debug(f"using module {modname}")
|
||||||
cmd_mod = importlib.import_module(modname)
|
cmd_mod = importlib.import_module(modname)
|
||||||
|
|
||||||
extra_args = {
|
extra_args = {
|
||||||
'p': 'RPC_PROVIDER',
|
"p": "RPC_PROVIDER",
|
||||||
}
|
}
|
||||||
|
ensure_base_configs(user_config_dir)
|
||||||
|
|
||||||
config = chainlib.cli.Config.from_args(args, arg_flags=arg_flags, base_config_dir=base_config_dir, extra_args=extra_args)
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
|
default_config_dir = args.config or os.path.join(user_config_dir, "mainnet")
|
||||||
|
config = chainlib.cli.Config.from_args(
|
||||||
|
args,
|
||||||
|
arg_flags=arg_flags,
|
||||||
|
base_config_dir=base_config_dir,
|
||||||
|
extra_args=extra_args,
|
||||||
|
default_config_dir=default_config_dir,
|
||||||
|
)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
cmd_mod.execute(config, args)
|
cmd_mod.execute(config, args)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logg.exception(e)
|
logg.exception(e)
|
||||||
sys.stderr.write("\033[;91m" + str(e) + "\033[;39m\n")
|
sys.stderr.write("\033[;91m" + str(e) + "\033[;39m\n")
|
||||||
|
argparser.print_help()
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
|
if __name__ == "__main__":
|
||||||
main()
|
main()
|
||||||
|
|||||||
@@ -4,15 +4,15 @@ def object_to_str(obj, keys):
|
|||||||
for key in keys:
|
for key in keys:
|
||||||
value = eval("obj." + key)
|
value = eval("obj." + key)
|
||||||
key = key.replace("()", "")
|
key = key.replace("()", "")
|
||||||
if type(value) == str:
|
if isinstance(value, str):
|
||||||
s += f"{key} = {value}\n"
|
s += f"{key} = {value}\n"
|
||||||
elif type(value) == list:
|
elif isinstance(value, list):
|
||||||
for idx, vv in enumerate(value):
|
for idx, vv in enumerate(value):
|
||||||
if not vv:
|
if not vv:
|
||||||
s += f"{key}[{idx}] = \n"
|
s += f"{key}[{idx}] = \n"
|
||||||
continue
|
continue
|
||||||
s += f"{key}[{idx}] = {vv}\n"
|
s += f"{key}[{idx}] = {vv}\n"
|
||||||
elif type(value) == dict:
|
elif isinstance(value, dict):
|
||||||
for vv_key in value.keys():
|
for vv_key in value.keys():
|
||||||
vv_value = value[vv_key]
|
vv_value = value[vv_key]
|
||||||
if not vv_value:
|
if not vv_value:
|
||||||
|
|||||||
@@ -1,12 +1,13 @@
|
|||||||
# standard imports
|
# standard imports
|
||||||
import base64
|
import base64
|
||||||
|
import json
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
import urllib.request
|
import urllib.request
|
||||||
import json
|
from typing import Type, Union
|
||||||
|
|
||||||
from cic_types.ext.metadata import MetadataRequestsHandler, MetadataPointer
|
from cic_types.ext.metadata import MetadataPointer, MetadataRequestsHandler
|
||||||
|
|
||||||
logg = logging.getLogger(__name__)
|
logg = logging.getLogger(__name__)
|
||||||
|
|
||||||
@@ -31,7 +32,7 @@ class KVWriter(OutputWriter):
|
|||||||
except FileNotFoundError:
|
except FileNotFoundError:
|
||||||
os.makedirs(path)
|
os.makedirs(path)
|
||||||
self.path = path
|
self.path = path
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
def write(self, k, v):
|
def write(self, k, v):
|
||||||
fp = os.path.join(self.path, str(k))
|
fp = os.path.join(self.path, str(k))
|
||||||
logg.debug(f"path write {fp} {str(v)}")
|
logg.debug(f"path write {fp} {str(v)}")
|
||||||
@@ -59,6 +60,7 @@ class KeyedWriter(OutputWriter):
|
|||||||
def __init__(self, writer_keyed, writer_immutable):
|
def __init__(self, writer_keyed, writer_immutable):
|
||||||
self.writer_keyed = writer_keyed
|
self.writer_keyed = writer_keyed
|
||||||
self.writer_immutable = writer_immutable
|
self.writer_immutable = writer_immutable
|
||||||
|
super().__init__()
|
||||||
|
|
||||||
def write(self, k, v):
|
def write(self, k, v):
|
||||||
logg.debug(f"writing keywriter key: {k} value: {v}")
|
logg.debug(f"writing keywriter key: {k} value: {v}")
|
||||||
@@ -72,7 +74,7 @@ class KeyedWriter(OutputWriter):
|
|||||||
|
|
||||||
class KeyedWriterFactory:
|
class KeyedWriterFactory:
|
||||||
def __init__(
|
def __init__(
|
||||||
self, key_writer_constructor, immutable_writer_constructor, *args, **kwargs
|
self, key_writer_constructor, immutable_writer_constructor, *_args, **kwargs
|
||||||
):
|
):
|
||||||
self.key_writer_constructor = key_writer_constructor
|
self.key_writer_constructor = key_writer_constructor
|
||||||
self.immutable_writer_constructor = immutable_writer_constructor
|
self.immutable_writer_constructor = immutable_writer_constructor
|
||||||
@@ -81,7 +83,7 @@ class KeyedWriterFactory:
|
|||||||
logg.debug(f"adding key {k} t keyed writer factory")
|
logg.debug(f"adding key {k} t keyed writer factory")
|
||||||
self.x[k] = v
|
self.x[k] = v
|
||||||
|
|
||||||
def new(self, path=None, *args, **kwargs):
|
def new(self, path=None, *_args, **_kwargs):
|
||||||
writer_keyed = None
|
writer_keyed = None
|
||||||
writer_immutable = None
|
writer_immutable = None
|
||||||
if self.key_writer_constructor is not None:
|
if self.key_writer_constructor is not None:
|
||||||
@@ -112,3 +114,8 @@ class MetadataWriter(OutputWriter):
|
|||||||
r = rq.create(v)
|
r = rq.create(v)
|
||||||
logg.info(f"metadata submitted at {k}")
|
logg.info(f"metadata submitted at {k}")
|
||||||
return r
|
return r
|
||||||
|
|
||||||
|
|
||||||
|
WritersType = Union[
|
||||||
|
Type[OutputWriter], Type[KeyedWriter], Type[MetadataWriter], Type[OutputWriter]
|
||||||
|
]
|
||||||
|
|||||||
@@ -1,27 +0,0 @@
|
|||||||
[cic_core]
|
|
||||||
meta_writer = cic.writers.KVWriter
|
|
||||||
attachment_writer = cic.writers.KVWriter
|
|
||||||
proof_writer = cic.writers.KVWriter
|
|
||||||
ext_writer = cic.writers.KVWriter
|
|
||||||
|
|
||||||
[cic]
|
|
||||||
registry_address = 0x999487d8B1EC2b2ac9F4a9D1A6D35a24D75D7EF4
|
|
||||||
|
|
||||||
[meta]
|
|
||||||
url = https://meta.grassecon.net
|
|
||||||
http_origin =
|
|
||||||
|
|
||||||
[rpc]
|
|
||||||
provider = https://rpc.kitabu.grassecon.net
|
|
||||||
|
|
||||||
[auth]
|
|
||||||
type = gnupg
|
|
||||||
keyfile_path = /home/will/.config/cic/staff-client/user.asc
|
|
||||||
passphrase = queenmarlena
|
|
||||||
|
|
||||||
[wallet]
|
|
||||||
key_file = /home/will/grassroots/cic-internal-integration/apps/contract-migration/keystore
|
|
||||||
passphrase =
|
|
||||||
|
|
||||||
[chain]
|
|
||||||
spec = evm:kitabu:5050:sarafu
|
|
||||||
450
poetry.lock
generated
450
poetry.lock
generated
@@ -1,6 +1,6 @@
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "asn1crypto"
|
name = "asn1crypto"
|
||||||
version = "1.4.0"
|
version = "1.5.1"
|
||||||
description = "Fast ASN.1 parser and serializer with definitions for private keys, public keys, certificates, CRL, OCSP, CMS, PKCS#3, PKCS#7, PKCS#8, PKCS#12, PKCS#5, X.509 and TSP"
|
description = "Fast ASN.1 parser and serializer with definitions for private keys, public keys, certificates, CRL, OCSP, CMS, PKCS#3, PKCS#7, PKCS#8, PKCS#12, PKCS#5, X.509 and TSP"
|
||||||
category = "main"
|
category = "main"
|
||||||
optional = false
|
optional = false
|
||||||
@@ -8,12 +8,12 @@ python-versions = "*"
|
|||||||
|
|
||||||
[package.source]
|
[package.source]
|
||||||
type = "legacy"
|
type = "legacy"
|
||||||
url = "https://pip.grassrootseconomics.net"
|
url = "https://pypi.org/simple"
|
||||||
reference = "grassroots_"
|
reference = "pypi_"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "astroid"
|
name = "astroid"
|
||||||
version = "2.9.3"
|
version = "2.11.3"
|
||||||
description = "An abstract syntax tree for Python with inference support."
|
description = "An abstract syntax tree for Python with inference support."
|
||||||
category = "dev"
|
category = "dev"
|
||||||
optional = false
|
optional = false
|
||||||
@@ -22,7 +22,7 @@ python-versions = ">=3.6.2"
|
|||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
lazy-object-proxy = ">=1.4.0"
|
lazy-object-proxy = ">=1.4.0"
|
||||||
typing-extensions = {version = ">=3.10", markers = "python_version < \"3.10\""}
|
typing-extensions = {version = ">=3.10", markers = "python_version < \"3.10\""}
|
||||||
wrapt = ">=1.11,<1.14"
|
wrapt = ">=1.11,<2"
|
||||||
|
|
||||||
[package.source]
|
[package.source]
|
||||||
type = "legacy"
|
type = "legacy"
|
||||||
@@ -63,7 +63,7 @@ reference = "grassroots_"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "black"
|
name = "black"
|
||||||
version = "22.1.0"
|
version = "22.3.0"
|
||||||
description = "The uncompromising code formatter."
|
description = "The uncompromising code formatter."
|
||||||
category = "dev"
|
category = "dev"
|
||||||
optional = false
|
optional = false
|
||||||
@@ -74,7 +74,7 @@ click = ">=8.0.0"
|
|||||||
mypy-extensions = ">=0.4.3"
|
mypy-extensions = ">=0.4.3"
|
||||||
pathspec = ">=0.9.0"
|
pathspec = ">=0.9.0"
|
||||||
platformdirs = ">=2"
|
platformdirs = ">=2"
|
||||||
tomli = ">=1.1.0"
|
tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""}
|
||||||
typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""}
|
typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""}
|
||||||
|
|
||||||
[package.extras]
|
[package.extras]
|
||||||
@@ -103,17 +103,20 @@ reference = "grassroots_"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "bleach"
|
name = "bleach"
|
||||||
version = "4.1.0"
|
version = "5.0.0"
|
||||||
description = "An easy safelist-based HTML-sanitizing tool."
|
description = "An easy safelist-based HTML-sanitizing tool."
|
||||||
category = "dev"
|
category = "dev"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.6"
|
python-versions = ">=3.7"
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
packaging = "*"
|
|
||||||
six = ">=1.9.0"
|
six = ">=1.9.0"
|
||||||
webencodings = "*"
|
webencodings = "*"
|
||||||
|
|
||||||
|
[package.extras]
|
||||||
|
css = ["tinycss2 (>=1.1.0)"]
|
||||||
|
dev = ["pip-tools (==6.5.1)", "pytest (==7.1.1)", "flake8 (==4.0.1)", "tox (==3.24.5)", "sphinx (==4.3.2)", "twine (==4.0.0)", "wheel (==0.37.1)", "hashin (==0.17.0)", "black (==22.3.0)", "mypy (==0.942)"]
|
||||||
|
|
||||||
[package.source]
|
[package.source]
|
||||||
type = "legacy"
|
type = "legacy"
|
||||||
url = "https://pypi.org/simple"
|
url = "https://pypi.org/simple"
|
||||||
@@ -180,16 +183,16 @@ reference = "pypi_"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "chainlib"
|
name = "chainlib"
|
||||||
version = "0.0.21"
|
version = "0.0.23"
|
||||||
description = "Generic blockchain access library and tooling"
|
description = "Generic blockchain access library and tooling"
|
||||||
category = "main"
|
category = "main"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.8"
|
python-versions = ">=3.8"
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
confini = ">=0.5.3,<0.6.0"
|
confini = ">=0.5.7,<0.6.0"
|
||||||
funga = ">=0.5.1,<0.6.0"
|
funga = ">=0.5.2,<0.6.0"
|
||||||
hexathon = ">=0.1.3,<0.2.0"
|
hexathon = ">=0.1.5,<0.2.0"
|
||||||
pysha3 = "1.0.2"
|
pysha3 = "1.0.2"
|
||||||
|
|
||||||
[package.extras]
|
[package.extras]
|
||||||
@@ -202,18 +205,18 @@ reference = "grassroots_"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "chainlib-eth"
|
name = "chainlib-eth"
|
||||||
version = "0.0.26"
|
version = "0.0.27"
|
||||||
description = "Ethereum implementation of the chainlib interface"
|
description = "Ethereum implementation of the chainlib interface"
|
||||||
category = "main"
|
category = "main"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.6"
|
python-versions = ">=3.6"
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
chainlib = ">=0.0.19,<0.1.0"
|
chainlib = ">=0.0.23,<0.1.0"
|
||||||
confini = ">=0.5.3,<0.6.0"
|
confini = ">=0.5.7,<0.6.0"
|
||||||
funga-eth = ">=0.5.3,<0.6.0"
|
funga-eth = ">=0.5.6,<0.6.0"
|
||||||
hexathon = ">=0.1.5,<0.2.0"
|
hexathon = ">=0.1.5,<0.2.0"
|
||||||
potaahto = ">=0.1.0,<0.2.0"
|
potaahto = ">=0.1.1,<0.2.0"
|
||||||
pysha3 = "1.0.2"
|
pysha3 = "1.0.2"
|
||||||
websocket-client = "0.57.0"
|
websocket-client = "0.57.0"
|
||||||
|
|
||||||
@@ -279,7 +282,7 @@ reference = "grassroots_"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cic-types"
|
name = "cic-types"
|
||||||
version = "0.2.1a9"
|
version = "0.2.1"
|
||||||
description = "Defines descriptors for data objects specific to the CIC-Network."
|
description = "Defines descriptors for data objects specific to the CIC-Network."
|
||||||
category = "main"
|
category = "main"
|
||||||
optional = false
|
optional = false
|
||||||
@@ -301,11 +304,11 @@ reference = "grassroots_"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "click"
|
name = "click"
|
||||||
version = "8.0.4"
|
version = "8.1.2"
|
||||||
description = "Composable command line interface toolkit"
|
description = "Composable command line interface toolkit"
|
||||||
category = "dev"
|
category = "dev"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.6"
|
python-versions = ">=3.7"
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
colorama = {version = "*", markers = "platform_system == \"Windows\""}
|
colorama = {version = "*", markers = "platform_system == \"Windows\""}
|
||||||
@@ -317,7 +320,7 @@ reference = "pypi_"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "click-log"
|
name = "click-log"
|
||||||
version = "0.3.2"
|
version = "0.4.0"
|
||||||
description = "Logging integration for Click"
|
description = "Logging integration for Click"
|
||||||
category = "dev"
|
category = "dev"
|
||||||
optional = false
|
optional = false
|
||||||
@@ -436,6 +439,22 @@ type = "legacy"
|
|||||||
url = "https://pip.grassrootseconomics.net"
|
url = "https://pip.grassrootseconomics.net"
|
||||||
reference = "grassroots_"
|
reference = "grassroots_"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "dill"
|
||||||
|
version = "0.3.4"
|
||||||
|
description = "serialize all of python"
|
||||||
|
category = "dev"
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=2.7, !=3.0.*"
|
||||||
|
|
||||||
|
[package.extras]
|
||||||
|
graph = ["objgraph (>=1.7.2)"]
|
||||||
|
|
||||||
|
[package.source]
|
||||||
|
type = "legacy"
|
||||||
|
url = "https://pypi.org/simple"
|
||||||
|
reference = "pypi_"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "docutils"
|
name = "docutils"
|
||||||
version = "0.18.1"
|
version = "0.18.1"
|
||||||
@@ -492,15 +511,15 @@ reference = "grassroots_"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "eth-accounts-index"
|
name = "eth-accounts-index"
|
||||||
version = "0.1.2"
|
version = "0.1.5"
|
||||||
description = "Accounts index evm contract tooling with permissioned writes"
|
description = "Accounts index evm contract tooling with permissioned writes"
|
||||||
category = "main"
|
category = "main"
|
||||||
optional = true
|
optional = true
|
||||||
python-versions = ">=3.6"
|
python-versions = ">=3.6"
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
chainlib-eth = ">=0.0.10,<0.1.0"
|
chainlib-eth = ">=0.0.10,<=0.1.0"
|
||||||
confini = ">=0.5.1,<0.6.0"
|
confini = ">=0.5.6,<0.6.0"
|
||||||
|
|
||||||
[package.extras]
|
[package.extras]
|
||||||
testing = ["pytest (==6.0.1)", "eth-tester (==0.5.0b2)", "py-evm (==0.3.0a20)"]
|
testing = ["pytest (==6.0.1)", "eth-tester (==0.5.0b2)", "py-evm (==0.3.0a20)"]
|
||||||
@@ -554,15 +573,15 @@ reference = "grassroots_"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "eth-contract-registry"
|
name = "eth-contract-registry"
|
||||||
version = "0.7.2"
|
version = "0.7.4"
|
||||||
description = "Ethereum Smart Contract key-value registry"
|
description = "Ethereum Smart Contract key-value registry"
|
||||||
category = "main"
|
category = "main"
|
||||||
optional = true
|
optional = true
|
||||||
python-versions = ">=3.6"
|
python-versions = ">=3.6"
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
chainlib-eth = ">=0.0.12,<0.1.0"
|
chainlib-eth = ">=0.0.12,<=0.1.0"
|
||||||
confini = ">=0.5.2,<0.6.0"
|
confini = ">=0.5.6,<0.6.0"
|
||||||
|
|
||||||
[package.source]
|
[package.source]
|
||||||
type = "legacy"
|
type = "legacy"
|
||||||
@@ -571,21 +590,21 @@ reference = "grassroots_"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "eth-erc20"
|
name = "eth-erc20"
|
||||||
version = "0.1.8"
|
version = "0.1.11"
|
||||||
description = "ERC20 interface and simple contract with deployment script that lets any address mint and gift itself tokens."
|
description = "ERC20 interface and simple contract with deployment script that lets any address mint and gift itself tokens."
|
||||||
category = "main"
|
category = "main"
|
||||||
optional = false
|
optional = true
|
||||||
python-versions = ">=3.6"
|
python-versions = ">=3.6"
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
chainlib-eth = ">=0.0.14,<0.1.0"
|
chainlib-eth = ">=0.0.23,<=0.1.0"
|
||||||
confini = ">=0.5.2,<0.6.0"
|
confini = ">=0.5.6,<0.6.0"
|
||||||
potaahto = ">=0.1.1,<0.2.0"
|
potaahto = ">=0.1.1,<0.2.0"
|
||||||
|
|
||||||
[package.source]
|
[package.source]
|
||||||
type = "legacy"
|
type = "legacy"
|
||||||
url = "https://pypi.org/simple"
|
url = "https://pip.grassrootseconomics.net"
|
||||||
reference = "pypi_"
|
reference = "grassroots_"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "eth-hash"
|
name = "eth-hash"
|
||||||
@@ -664,16 +683,16 @@ reference = "grassroots_"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "eth-token-index"
|
name = "eth-token-index"
|
||||||
version = "0.2.4"
|
version = "0.2.6"
|
||||||
description = "Token symbol to address unique index"
|
description = "Token symbol to address unique index"
|
||||||
category = "main"
|
category = "main"
|
||||||
optional = true
|
optional = true
|
||||||
python-versions = ">=3.6"
|
python-versions = ">=3.6"
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
chainlib-eth = ">=0.0.10,<0.1.0"
|
chainlib-eth = ">=0.0.10,<=0.1.0"
|
||||||
confini = ">=0.5.1,<0.6.0"
|
confini = ">=0.5.6,<0.6.0"
|
||||||
eth_erc20 = ">=0.1.2,<0.2.0"
|
eth_erc20 = ">=0.1.11,<0.2.0"
|
||||||
|
|
||||||
[package.extras]
|
[package.extras]
|
||||||
testing = ["eth-tester (==0.5.0b2)", "py-evm (==0.3.0a20)"]
|
testing = ["eth-tester (==0.5.0b2)", "py-evm (==0.3.0a20)"]
|
||||||
@@ -729,7 +748,7 @@ reference = "grassroots_"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "funga"
|
name = "funga"
|
||||||
version = "0.5.1"
|
version = "0.5.2"
|
||||||
description = "A signer and keystore daemon and library for cryptocurrency software development"
|
description = "A signer and keystore daemon and library for cryptocurrency software development"
|
||||||
category = "main"
|
category = "main"
|
||||||
optional = false
|
optional = false
|
||||||
@@ -742,7 +761,7 @@ reference = "grassroots_"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "funga-eth"
|
name = "funga-eth"
|
||||||
version = "0.5.5"
|
version = "0.5.6"
|
||||||
description = "Ethereum implementation of the funga keystore and signer"
|
description = "Ethereum implementation of the funga keystore and signer"
|
||||||
category = "main"
|
category = "main"
|
||||||
optional = false
|
optional = false
|
||||||
@@ -752,7 +771,7 @@ python-versions = "*"
|
|||||||
coincurve = "15.0.0"
|
coincurve = "15.0.0"
|
||||||
confini = ">=0.5.1,<0.6.0"
|
confini = ">=0.5.1,<0.6.0"
|
||||||
cryptography = "3.2.1"
|
cryptography = "3.2.1"
|
||||||
funga = "0.5.1"
|
funga = "0.5.2"
|
||||||
hexathon = ">=0.1.0,<0.2.0"
|
hexathon = ">=0.1.0,<0.2.0"
|
||||||
json-rpc = "1.13.0"
|
json-rpc = "1.13.0"
|
||||||
pycryptodome = "3.10.1"
|
pycryptodome = "3.10.1"
|
||||||
@@ -846,7 +865,7 @@ reference = "grassroots_"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "importlib-metadata"
|
name = "importlib-metadata"
|
||||||
version = "4.11.2"
|
version = "4.11.3"
|
||||||
description = "Read metadata from Python packages"
|
description = "Read metadata from Python packages"
|
||||||
category = "dev"
|
category = "dev"
|
||||||
optional = false
|
optional = false
|
||||||
@@ -880,7 +899,7 @@ reference = "grassroots_"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "invoke"
|
name = "invoke"
|
||||||
version = "1.6.0"
|
version = "1.7.0"
|
||||||
description = "Pythonic task execution"
|
description = "Pythonic task execution"
|
||||||
category = "dev"
|
category = "dev"
|
||||||
optional = false
|
optional = false
|
||||||
@@ -912,14 +931,14 @@ reference = "pypi_"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "jeepney"
|
name = "jeepney"
|
||||||
version = "0.7.1"
|
version = "0.8.0"
|
||||||
description = "Low-level, pure Python DBus protocol wrapper."
|
description = "Low-level, pure Python DBus protocol wrapper."
|
||||||
category = "dev"
|
category = "dev"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.6"
|
python-versions = ">=3.7"
|
||||||
|
|
||||||
[package.extras]
|
[package.extras]
|
||||||
test = ["pytest", "pytest-trio", "pytest-asyncio", "testpath", "trio", "async-timeout"]
|
test = ["pytest", "pytest-trio", "pytest-asyncio (>=0.17)", "testpath", "trio", "async-timeout"]
|
||||||
trio = ["trio", "async-generator"]
|
trio = ["trio", "async-generator"]
|
||||||
|
|
||||||
[package.source]
|
[package.source]
|
||||||
@@ -1013,11 +1032,11 @@ reference = "grassroots_"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "mccabe"
|
name = "mccabe"
|
||||||
version = "0.6.1"
|
version = "0.7.0"
|
||||||
description = "McCabe checker, plugin for flake8"
|
description = "McCabe checker, plugin for flake8"
|
||||||
category = "dev"
|
category = "dev"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = "*"
|
python-versions = ">=3.6"
|
||||||
|
|
||||||
[package.source]
|
[package.source]
|
||||||
type = "legacy"
|
type = "legacy"
|
||||||
@@ -1140,15 +1159,15 @@ reference = "pypi_"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "platformdirs"
|
name = "platformdirs"
|
||||||
version = "2.5.1"
|
version = "2.5.2"
|
||||||
description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"."
|
description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"."
|
||||||
category = "dev"
|
category = "dev"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
|
|
||||||
[package.extras]
|
[package.extras]
|
||||||
docs = ["Sphinx (>=4)", "furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx-autodoc-typehints (>=1.12)"]
|
docs = ["furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx-autodoc-typehints (>=1.12)", "sphinx (>=4)"]
|
||||||
test = ["appdirs (==1.4.4)", "pytest (>=6)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)"]
|
test = ["appdirs (==1.4.4)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)", "pytest (>=6)"]
|
||||||
|
|
||||||
[package.source]
|
[package.source]
|
||||||
type = "legacy"
|
type = "legacy"
|
||||||
@@ -1299,11 +1318,11 @@ reference = "grassroots_"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pygments"
|
name = "pygments"
|
||||||
version = "2.11.2"
|
version = "2.12.0"
|
||||||
description = "Pygments is a syntax highlighting package written in Python."
|
description = "Pygments is a syntax highlighting package written in Python."
|
||||||
category = "dev"
|
category = "dev"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.5"
|
python-versions = ">=3.6"
|
||||||
|
|
||||||
[package.source]
|
[package.source]
|
||||||
type = "legacy"
|
type = "legacy"
|
||||||
@@ -1312,21 +1331,25 @@ reference = "pypi_"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pylint"
|
name = "pylint"
|
||||||
version = "2.12.2"
|
version = "2.13.7"
|
||||||
description = "python code static checker"
|
description = "python code static checker"
|
||||||
category = "dev"
|
category = "dev"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.6.2"
|
python-versions = ">=3.6.2"
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
astroid = ">=2.9.0,<2.10"
|
astroid = ">=2.11.3,<=2.12.0-dev0"
|
||||||
colorama = {version = "*", markers = "sys_platform == \"win32\""}
|
colorama = {version = "*", markers = "sys_platform == \"win32\""}
|
||||||
|
dill = ">=0.2"
|
||||||
isort = ">=4.2.5,<6"
|
isort = ">=4.2.5,<6"
|
||||||
mccabe = ">=0.6,<0.7"
|
mccabe = ">=0.6,<0.8"
|
||||||
platformdirs = ">=2.2.0"
|
platformdirs = ">=2.2.0"
|
||||||
toml = ">=0.9.2"
|
tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""}
|
||||||
typing-extensions = {version = ">=3.10.0", markers = "python_version < \"3.10\""}
|
typing-extensions = {version = ">=3.10.0", markers = "python_version < \"3.10\""}
|
||||||
|
|
||||||
|
[package.extras]
|
||||||
|
testutil = ["gitpython (>3)"]
|
||||||
|
|
||||||
[package.source]
|
[package.source]
|
||||||
type = "legacy"
|
type = "legacy"
|
||||||
url = "https://pypi.org/simple"
|
url = "https://pypi.org/simple"
|
||||||
@@ -1334,14 +1357,14 @@ reference = "pypi_"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pyparsing"
|
name = "pyparsing"
|
||||||
version = "3.0.7"
|
version = "3.0.8"
|
||||||
description = "Python parsing module"
|
description = "pyparsing module - Classes and methods to define and execute parsing grammars"
|
||||||
category = "dev"
|
category = "dev"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.6"
|
python-versions = ">=3.6.8"
|
||||||
|
|
||||||
[package.extras]
|
[package.extras]
|
||||||
diagrams = ["jinja2", "railroad-diagrams"]
|
diagrams = ["railroad-diagrams", "jinja2"]
|
||||||
|
|
||||||
[package.source]
|
[package.source]
|
||||||
type = "legacy"
|
type = "legacy"
|
||||||
@@ -1438,18 +1461,18 @@ reference = "grassroots_"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "python-gitlab"
|
name = "python-gitlab"
|
||||||
version = "2.10.1"
|
version = "3.3.0"
|
||||||
description = "Interact with GitLab API"
|
description = "Interact with GitLab API"
|
||||||
category = "dev"
|
category = "dev"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.6.0"
|
python-versions = ">=3.7.0"
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
requests = ">=2.25.0"
|
requests = ">=2.25.0"
|
||||||
requests-toolbelt = ">=0.9.1"
|
requests-toolbelt = ">=0.9.1"
|
||||||
|
|
||||||
[package.extras]
|
[package.extras]
|
||||||
autocompletion = ["argcomplete (>=1.10.0,<2)"]
|
autocompletion = ["argcomplete (>=1.10.0,<3)"]
|
||||||
yaml = ["PyYaml (>=5.2)"]
|
yaml = ["PyYaml (>=5.2)"]
|
||||||
|
|
||||||
[package.source]
|
[package.source]
|
||||||
@@ -1472,7 +1495,7 @@ reference = "grassroots_"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "python-semantic-release"
|
name = "python-semantic-release"
|
||||||
version = "7.25.2"
|
version = "7.28.1"
|
||||||
description = "Automatic Semantic Versioning for Python projects"
|
description = "Automatic Semantic Versioning for Python projects"
|
||||||
category = "dev"
|
category = "dev"
|
||||||
optional = false
|
optional = false
|
||||||
@@ -1484,10 +1507,10 @@ click-log = ">=0.3,<1"
|
|||||||
dotty-dict = ">=1.3.0,<2"
|
dotty-dict = ">=1.3.0,<2"
|
||||||
gitpython = ">=3.0.8,<4"
|
gitpython = ">=3.0.8,<4"
|
||||||
invoke = ">=1.4.1,<2"
|
invoke = ">=1.4.1,<2"
|
||||||
python-gitlab = ">=1.10,<3"
|
python-gitlab = ">=2,<4"
|
||||||
requests = ">=2.25,<3"
|
requests = ">=2.25,<3"
|
||||||
semver = ">=2.10,<3"
|
semver = ">=2.10,<3"
|
||||||
tomlkit = "0.7.0"
|
tomlkit = ">=0.10.0,<0.11.0"
|
||||||
twine = ">=3,<4"
|
twine = ">=3,<4"
|
||||||
|
|
||||||
[package.extras]
|
[package.extras]
|
||||||
@@ -1516,11 +1539,11 @@ reference = "pypi_"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "readme-renderer"
|
name = "readme-renderer"
|
||||||
version = "32.0"
|
version = "35.0"
|
||||||
description = "readme_renderer is a library for rendering \"readme\" descriptions for Warehouse"
|
description = "readme_renderer is a library for rendering \"readme\" descriptions for Warehouse"
|
||||||
category = "dev"
|
category = "dev"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.6"
|
python-versions = ">=3.7"
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
bleach = ">=2.1.0"
|
bleach = ">=2.1.0"
|
||||||
@@ -1528,7 +1551,7 @@ docutils = ">=0.13.1"
|
|||||||
Pygments = ">=2.5.1"
|
Pygments = ">=2.5.1"
|
||||||
|
|
||||||
[package.extras]
|
[package.extras]
|
||||||
md = ["cmarkgfm (>=0.5.0,<0.7.0)"]
|
md = ["cmarkgfm (>=0.8.0)"]
|
||||||
|
|
||||||
[package.source]
|
[package.source]
|
||||||
type = "legacy"
|
type = "legacy"
|
||||||
@@ -1615,7 +1638,7 @@ reference = "grassroots_"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "secretstorage"
|
name = "secretstorage"
|
||||||
version = "3.3.1"
|
version = "3.3.2"
|
||||||
description = "Python bindings to FreeDesktop.org Secret Service API"
|
description = "Python bindings to FreeDesktop.org Secret Service API"
|
||||||
category = "dev"
|
category = "dev"
|
||||||
optional = false
|
optional = false
|
||||||
@@ -1748,11 +1771,11 @@ reference = "pypi_"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tomlkit"
|
name = "tomlkit"
|
||||||
version = "0.7.0"
|
version = "0.10.2"
|
||||||
description = "Style preserving TOML library"
|
description = "Style preserving TOML library"
|
||||||
category = "dev"
|
category = "dev"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
|
python-versions = ">=3.6,<4.0"
|
||||||
|
|
||||||
[package.source]
|
[package.source]
|
||||||
type = "legacy"
|
type = "legacy"
|
||||||
@@ -1774,7 +1797,7 @@ reference = "grassroots_"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tqdm"
|
name = "tqdm"
|
||||||
version = "4.63.0"
|
version = "4.64.0"
|
||||||
description = "Fast, Extensible Progress Meter"
|
description = "Fast, Extensible Progress Meter"
|
||||||
category = "dev"
|
category = "dev"
|
||||||
optional = false
|
optional = false
|
||||||
@@ -1786,6 +1809,7 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""}
|
|||||||
[package.extras]
|
[package.extras]
|
||||||
dev = ["py-make (>=0.1.0)", "twine", "wheel"]
|
dev = ["py-make (>=0.1.0)", "twine", "wheel"]
|
||||||
notebook = ["ipywidgets (>=6)"]
|
notebook = ["ipywidgets (>=6)"]
|
||||||
|
slack = ["slack-sdk"]
|
||||||
telegram = ["requests"]
|
telegram = ["requests"]
|
||||||
|
|
||||||
[package.source]
|
[package.source]
|
||||||
@@ -1859,21 +1883,21 @@ reference = "grassroots_"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "urllib3"
|
name = "urllib3"
|
||||||
version = "1.26.8"
|
version = "1.26.9"
|
||||||
description = "HTTP library with thread-safe connection pooling, file post, and more."
|
description = "HTTP library with thread-safe connection pooling, file post, and more."
|
||||||
category = "main"
|
category = "main"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4"
|
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4"
|
||||||
|
|
||||||
[package.extras]
|
[package.extras]
|
||||||
brotli = ["brotlipy (>=0.6.0)"]
|
brotli = ["brotlicffi (>=0.8.0)", "brotli (>=1.0.9)", "brotlipy (>=0.6.0)"]
|
||||||
secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"]
|
secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"]
|
||||||
socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
|
socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
|
||||||
|
|
||||||
[package.source]
|
[package.source]
|
||||||
type = "legacy"
|
type = "legacy"
|
||||||
url = "https://pip.grassrootseconomics.net"
|
url = "https://pypi.org/simple"
|
||||||
reference = "grassroots_"
|
reference = "pypi_"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "vobject"
|
name = "vobject"
|
||||||
@@ -1922,7 +1946,7 @@ reference = "grassroots_"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wrapt"
|
name = "wrapt"
|
||||||
version = "1.13.3"
|
version = "1.14.0"
|
||||||
description = "Module for decorators, wrappers and monkey patching."
|
description = "Module for decorators, wrappers and monkey patching."
|
||||||
category = "dev"
|
category = "dev"
|
||||||
optional = false
|
optional = false
|
||||||
@@ -1935,15 +1959,15 @@ reference = "pypi_"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "zipp"
|
name = "zipp"
|
||||||
version = "3.7.0"
|
version = "3.8.0"
|
||||||
description = "Backport of pathlib-compatible object wrapper for zip files"
|
description = "Backport of pathlib-compatible object wrapper for zip files"
|
||||||
category = "dev"
|
category = "dev"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
|
|
||||||
[package.extras]
|
[package.extras]
|
||||||
docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
|
docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
|
||||||
testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"]
|
testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"]
|
||||||
|
|
||||||
[package.source]
|
[package.source]
|
||||||
type = "legacy"
|
type = "legacy"
|
||||||
@@ -1951,18 +1975,21 @@ url = "https://pypi.org/simple"
|
|||||||
reference = "pypi_"
|
reference = "pypi_"
|
||||||
|
|
||||||
[extras]
|
[extras]
|
||||||
eth = ["chainlib-eth", "eth-token-index", "eth-address-index", "okota", "cic_eth_registry", "cic_contracts"]
|
eth = ["chainlib-eth", "eth-token-index", "eth-address-index", "okota", "cic-eth-registry", "cic-contracts"]
|
||||||
|
|
||||||
[metadata]
|
[metadata]
|
||||||
lock-version = "1.1"
|
lock-version = "1.1"
|
||||||
python-versions = "^3.8"
|
python-versions = "^3.8"
|
||||||
content-hash = "aeaba6fb1c3ad6d40f16cc9302ecac21fd7dbb50af085dc108c7ada2cf308067"
|
content-hash = "4a6c755c9feda4ab9c01f65667875b1aef4eb2c694a352e36c8a69f2172e184b"
|
||||||
|
|
||||||
[metadata.files]
|
[metadata.files]
|
||||||
asn1crypto = []
|
asn1crypto = [
|
||||||
|
{file = "asn1crypto-1.5.1-py2.py3-none-any.whl", hash = "sha256:db4e40728b728508912cbb3d44f19ce188f218e9eba635821bb4b68564f8fd67"},
|
||||||
|
{file = "asn1crypto-1.5.1.tar.gz", hash = "sha256:13ae38502be632115abf8a24cbe5f4da52e3b5231990aff31123c805306ccb9c"},
|
||||||
|
]
|
||||||
astroid = [
|
astroid = [
|
||||||
{file = "astroid-2.9.3-py3-none-any.whl", hash = "sha256:506daabe5edffb7e696ad82483ad0228245a9742ed7d2d8c9cdb31537decf9f6"},
|
{file = "astroid-2.11.3-py3-none-any.whl", hash = "sha256:f1af57483cd17e963b2eddce8361e00fc593d1520fe19948488e94ff6476bd71"},
|
||||||
{file = "astroid-2.9.3.tar.gz", hash = "sha256:1efdf4e867d4d8ba4a9f6cf9ce07cd182c4c41de77f23814feb27ca93ca9d877"},
|
{file = "astroid-2.11.3.tar.gz", hash = "sha256:4e5ba10571e197785e312966ea5efb2f5783176d4c1a73fa922d474ae2be59f7"},
|
||||||
]
|
]
|
||||||
atomicwrites = [
|
atomicwrites = [
|
||||||
{file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"},
|
{file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"},
|
||||||
@@ -1970,34 +1997,34 @@ atomicwrites = [
|
|||||||
]
|
]
|
||||||
attrs = []
|
attrs = []
|
||||||
black = [
|
black = [
|
||||||
{file = "black-22.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1297c63b9e1b96a3d0da2d85d11cd9bf8664251fd69ddac068b98dc4f34f73b6"},
|
{file = "black-22.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2497f9c2386572e28921fa8bec7be3e51de6801f7459dffd6e62492531c47e09"},
|
||||||
{file = "black-22.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2ff96450d3ad9ea499fc4c60e425a1439c2120cbbc1ab959ff20f7c76ec7e866"},
|
{file = "black-22.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5795a0375eb87bfe902e80e0c8cfaedf8af4d49694d69161e5bd3206c18618bb"},
|
||||||
{file = "black-22.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0e21e1f1efa65a50e3960edd068b6ae6d64ad6235bd8bfea116a03b21836af71"},
|
{file = "black-22.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e3556168e2e5c49629f7b0f377070240bd5511e45e25a4497bb0073d9dda776a"},
|
||||||
{file = "black-22.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2f69158a7d120fd641d1fa9a921d898e20d52e44a74a6fbbcc570a62a6bc8ab"},
|
{file = "black-22.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:67c8301ec94e3bcc8906740fe071391bce40a862b7be0b86fb5382beefecd968"},
|
||||||
{file = "black-22.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:228b5ae2c8e3d6227e4bde5920d2fc66cc3400fde7bcc74f480cb07ef0b570d5"},
|
{file = "black-22.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:fd57160949179ec517d32ac2ac898b5f20d68ed1a9c977346efbac9c2f1e779d"},
|
||||||
{file = "black-22.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b1a5ed73ab4c482208d20434f700d514f66ffe2840f63a6252ecc43a9bc77e8a"},
|
{file = "black-22.3.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:cc1e1de68c8e5444e8f94c3670bb48a2beef0e91dddfd4fcc29595ebd90bb9ce"},
|
||||||
{file = "black-22.1.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:35944b7100af4a985abfcaa860b06af15590deb1f392f06c8683b4381e8eeaf0"},
|
{file = "black-22.3.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d2fc92002d44746d3e7db7cf9313cf4452f43e9ea77a2c939defce3b10b5c82"},
|
||||||
{file = "black-22.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:7835fee5238fc0a0baf6c9268fb816b5f5cd9b8793423a75e8cd663c48d073ba"},
|
{file = "black-22.3.0-cp36-cp36m-win_amd64.whl", hash = "sha256:a6342964b43a99dbc72f72812bf88cad8f0217ae9acb47c0d4f141a6416d2d7b"},
|
||||||
{file = "black-22.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:dae63f2dbf82882fa3b2a3c49c32bffe144970a573cd68d247af6560fc493ae1"},
|
{file = "black-22.3.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:328efc0cc70ccb23429d6be184a15ce613f676bdfc85e5fe8ea2a9354b4e9015"},
|
||||||
{file = "black-22.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5fa1db02410b1924b6749c245ab38d30621564e658297484952f3d8a39fce7e8"},
|
{file = "black-22.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06f9d8846f2340dfac80ceb20200ea5d1b3f181dd0556b47af4e8e0b24fa0a6b"},
|
||||||
{file = "black-22.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c8226f50b8c34a14608b848dc23a46e5d08397d009446353dad45e04af0c8e28"},
|
{file = "black-22.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:ad4efa5fad66b903b4a5f96d91461d90b9507a812b3c5de657d544215bb7877a"},
|
||||||
{file = "black-22.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2d6f331c02f0f40aa51a22e479c8209d37fcd520c77721c034517d44eecf5912"},
|
{file = "black-22.3.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e8477ec6bbfe0312c128e74644ac8a02ca06bcdb8982d4ee06f209be28cdf163"},
|
||||||
{file = "black-22.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:742ce9af3086e5bd07e58c8feb09dbb2b047b7f566eb5f5bc63fd455814979f3"},
|
{file = "black-22.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:637a4014c63fbf42a692d22b55d8ad6968a946b4a6ebc385c5505d9625b6a464"},
|
||||||
{file = "black-22.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:fdb8754b453fb15fad3f72cd9cad3e16776f0964d67cf30ebcbf10327a3777a3"},
|
{file = "black-22.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:863714200ada56cbc366dc9ae5291ceb936573155f8bf8e9de92aef51f3ad0f0"},
|
||||||
{file = "black-22.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5660feab44c2e3cb24b2419b998846cbb01c23c7fe645fee45087efa3da2d61"},
|
{file = "black-22.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10dbe6e6d2988049b4655b2b739f98785a884d4d6b85bc35133a8fb9a2233176"},
|
||||||
{file = "black-22.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:6f2f01381f91c1efb1451998bd65a129b3ed6f64f79663a55fe0e9b74a5f81fd"},
|
{file = "black-22.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:cee3e11161dde1b2a33a904b850b0899e0424cc331b7295f2a9698e79f9a69a0"},
|
||||||
{file = "black-22.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:efbadd9b52c060a8fc3b9658744091cb33c31f830b3f074422ed27bad2b18e8f"},
|
{file = "black-22.3.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5891ef8abc06576985de8fa88e95ab70641de6c1fca97e2a15820a9b69e51b20"},
|
||||||
{file = "black-22.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8871fcb4b447206904932b54b567923e5be802b9b19b744fdff092bd2f3118d0"},
|
{file = "black-22.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:30d78ba6bf080eeaf0b7b875d924b15cd46fec5fd044ddfbad38c8ea9171043a"},
|
||||||
{file = "black-22.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ccad888050f5393f0d6029deea2a33e5ae371fd182a697313bdbd835d3edaf9c"},
|
{file = "black-22.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ee8f1f7228cce7dffc2b464f07ce769f478968bfb3dd1254a4c2eeed84928aad"},
|
||||||
{file = "black-22.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07e5c049442d7ca1a2fc273c79d1aecbbf1bc858f62e8184abe1ad175c4f7cc2"},
|
{file = "black-22.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6ee227b696ca60dd1c507be80a6bc849a5a6ab57ac7352aad1ffec9e8b805f21"},
|
||||||
{file = "black-22.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:373922fc66676133ddc3e754e4509196a8c392fec3f5ca4486673e685a421321"},
|
{file = "black-22.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:9b542ced1ec0ceeff5b37d69838106a6348e60db7b8fdd245294dc1d26136265"},
|
||||||
{file = "black-22.1.0-py3-none-any.whl", hash = "sha256:3524739d76b6b3ed1132422bf9d82123cd1705086723bc3e235ca39fd21c667d"},
|
{file = "black-22.3.0-py3-none-any.whl", hash = "sha256:bc58025940a896d7e5356952228b68f793cf5fcb342be703c3a2669a1488cb72"},
|
||||||
{file = "black-22.1.0.tar.gz", hash = "sha256:a7c0192d35635f6fc1174be575cb7915e92e5dd629ee79fdaf0dcfa41a80afb5"},
|
{file = "black-22.3.0.tar.gz", hash = "sha256:35020b8886c022ced9282b51b5a875b6d1ab0c387b31a065b84db7c33085ca79"},
|
||||||
]
|
]
|
||||||
blake2b-py = []
|
blake2b-py = []
|
||||||
bleach = [
|
bleach = [
|
||||||
{file = "bleach-4.1.0-py2.py3-none-any.whl", hash = "sha256:4d2651ab93271d1129ac9cbc679f524565cc8a1b791909c4a51eac4446a15994"},
|
{file = "bleach-5.0.0-py3-none-any.whl", hash = "sha256:08a1fe86d253b5c88c92cc3d810fd8048a16d15762e1e5b74d502256e5926aa1"},
|
||||||
{file = "bleach-4.1.0.tar.gz", hash = "sha256:0900d8b37eba61a802ee40ac0061f8c2b5dee29c1927dd1d233e075ebf5a71da"},
|
{file = "bleach-5.0.0.tar.gz", hash = "sha256:c6d6cc054bdc9c83b48b8083e236e5f00f238428666d2ce2e083eaa5fd568565"},
|
||||||
]
|
]
|
||||||
cached-property = []
|
cached-property = []
|
||||||
cbor2 = []
|
cbor2 = []
|
||||||
@@ -2064,12 +2091,12 @@ cic-contracts = []
|
|||||||
cic-eth-registry = []
|
cic-eth-registry = []
|
||||||
cic-types = []
|
cic-types = []
|
||||||
click = [
|
click = [
|
||||||
{file = "click-8.0.4-py3-none-any.whl", hash = "sha256:6a7a62563bbfabfda3a38f3023a1db4a35978c0abd76f6c9605ecd6554d6d9b1"},
|
{file = "click-8.1.2-py3-none-any.whl", hash = "sha256:24e1a4a9ec5bf6299411369b208c1df2188d9eb8d916302fe6bf03faed227f1e"},
|
||||||
{file = "click-8.0.4.tar.gz", hash = "sha256:8458d7b1287c5fb128c90e23381cf99dcde74beaf6c7ff6384ce84d6fe090adb"},
|
{file = "click-8.1.2.tar.gz", hash = "sha256:479707fe14d9ec9a0757618b7a100a0ae4c4e236fac5b7f80ca68028141a1a72"},
|
||||||
]
|
]
|
||||||
click-log = [
|
click-log = [
|
||||||
{file = "click-log-0.3.2.tar.gz", hash = "sha256:16fd1ca3fc6b16c98cea63acf1ab474ea8e676849dc669d86afafb0ed7003124"},
|
{file = "click-log-0.4.0.tar.gz", hash = "sha256:3970f8570ac54491237bcdb3d8ab5e3eef6c057df29f8c3d1151a51a9c23b975"},
|
||||||
{file = "click_log-0.3.2-py2.py3-none-any.whl", hash = "sha256:eee14dc37cdf3072158570f00406572f9e03e414accdccfccd4c538df9ae322c"},
|
{file = "click_log-0.4.0-py2.py3-none-any.whl", hash = "sha256:a43e394b528d52112af599f2fc9e4b7cf3c15f94e53581f74fa6867e68c91756"},
|
||||||
]
|
]
|
||||||
coincurve = []
|
coincurve = []
|
||||||
colorama = [
|
colorama = [
|
||||||
@@ -2122,6 +2149,10 @@ coverage = [
|
|||||||
]
|
]
|
||||||
cryptography = []
|
cryptography = []
|
||||||
cytoolz = []
|
cytoolz = []
|
||||||
|
dill = [
|
||||||
|
{file = "dill-0.3.4-py2.py3-none-any.whl", hash = "sha256:7e40e4a70304fd9ceab3535d36e58791d9c4a776b38ec7f7ec9afc8d3dca4d4f"},
|
||||||
|
{file = "dill-0.3.4.zip", hash = "sha256:9f9734205146b2b353ab3fec9af0070237b6ddae78452af83d2fca84d739e675"},
|
||||||
|
]
|
||||||
docutils = [
|
docutils = [
|
||||||
{file = "docutils-0.18.1-py2.py3-none-any.whl", hash = "sha256:23010f129180089fbcd3bc08cfefccb3b890b0050e1ca00c867036e9d161b98c"},
|
{file = "docutils-0.18.1-py2.py3-none-any.whl", hash = "sha256:23010f129180089fbcd3bc08cfefccb3b890b0050e1ca00c867036e9d161b98c"},
|
||||||
{file = "docutils-0.18.1.tar.gz", hash = "sha256:679987caf361a7539d76e584cbeddc311e3aee937877c87346f31debc63e9d06"},
|
{file = "docutils-0.18.1.tar.gz", hash = "sha256:679987caf361a7539d76e584cbeddc311e3aee937877c87346f31debc63e9d06"},
|
||||||
@@ -2134,9 +2165,7 @@ eth-accounts-index = []
|
|||||||
eth-address-index = []
|
eth-address-index = []
|
||||||
eth-bloom = []
|
eth-bloom = []
|
||||||
eth-contract-registry = []
|
eth-contract-registry = []
|
||||||
eth-erc20 = [
|
eth-erc20 = []
|
||||||
{file = "eth-erc20-0.1.8.tar.gz", hash = "sha256:5ea7981db30f6316f5f7def8cf69e74425c447493f8938d5541ebbeb79e4319f"},
|
|
||||||
]
|
|
||||||
eth-hash = []
|
eth-hash = []
|
||||||
eth-keys = [
|
eth-keys = [
|
||||||
{file = "eth-keys-0.3.4.tar.gz", hash = "sha256:e5590797f5e2930086c705a6dd1ac14397f74f19bdcd1b5f837475554f354ad8"},
|
{file = "eth-keys-0.3.4.tar.gz", hash = "sha256:e5590797f5e2930086c705a6dd1ac14397f74f19bdcd1b5f837475554f354ad8"},
|
||||||
@@ -2163,22 +2192,21 @@ hexathon = []
|
|||||||
hexbytes = []
|
hexbytes = []
|
||||||
idna = []
|
idna = []
|
||||||
importlib-metadata = [
|
importlib-metadata = [
|
||||||
{file = "importlib_metadata-4.11.2-py3-none-any.whl", hash = "sha256:d16e8c1deb60de41b8e8ed21c1a7b947b0bc62fab7e1d470bcdf331cea2e6735"},
|
{file = "importlib_metadata-4.11.3-py3-none-any.whl", hash = "sha256:1208431ca90a8cca1a6b8af391bb53c1a2db74e5d1cef6ddced95d4b2062edc6"},
|
||||||
{file = "importlib_metadata-4.11.2.tar.gz", hash = "sha256:b36ffa925fe3139b2f6ff11d6925ffd4fa7bc47870165e3ac260ac7b4f91e6ac"},
|
{file = "importlib_metadata-4.11.3.tar.gz", hash = "sha256:ea4c597ebf37142f827b8f39299579e31685c31d3a438b59f469406afd0f2539"},
|
||||||
]
|
]
|
||||||
iniconfig = []
|
iniconfig = []
|
||||||
invoke = [
|
invoke = [
|
||||||
{file = "invoke-1.6.0-py2-none-any.whl", hash = "sha256:e6c9917a1e3e73e7ea91fdf82d5f151ccfe85bf30cc65cdb892444c02dbb5f74"},
|
{file = "invoke-1.7.0-py3-none-any.whl", hash = "sha256:a5159fc63dba6ca2a87a1e33d282b99cea69711b03c64a35bb4e1c53c6c4afa0"},
|
||||||
{file = "invoke-1.6.0-py3-none-any.whl", hash = "sha256:769e90caeb1bd07d484821732f931f1ad8916a38e3f3e618644687fc09cb6317"},
|
{file = "invoke-1.7.0.tar.gz", hash = "sha256:e332e49de40463f2016315f51df42313855772be86435686156bc18f45b5cc6c"},
|
||||||
{file = "invoke-1.6.0.tar.gz", hash = "sha256:374d1e2ecf78981da94bfaf95366216aaec27c2d6a7b7d5818d92da55aa258d3"},
|
|
||||||
]
|
]
|
||||||
isort = [
|
isort = [
|
||||||
{file = "isort-5.10.1-py3-none-any.whl", hash = "sha256:6f62d78e2f89b4500b080fe3a81690850cd254227f27f75c3a0c491a1f351ba7"},
|
{file = "isort-5.10.1-py3-none-any.whl", hash = "sha256:6f62d78e2f89b4500b080fe3a81690850cd254227f27f75c3a0c491a1f351ba7"},
|
||||||
{file = "isort-5.10.1.tar.gz", hash = "sha256:e8443a5e7a020e9d7f97f1d7d9cd17c88bcb3bc7e218bf9cf5095fe550be2951"},
|
{file = "isort-5.10.1.tar.gz", hash = "sha256:e8443a5e7a020e9d7f97f1d7d9cd17c88bcb3bc7e218bf9cf5095fe550be2951"},
|
||||||
]
|
]
|
||||||
jeepney = [
|
jeepney = [
|
||||||
{file = "jeepney-0.7.1-py3-none-any.whl", hash = "sha256:1b5a0ea5c0e7b166b2f5895b91a08c14de8915afda4407fb5022a195224958ac"},
|
{file = "jeepney-0.8.0-py3-none-any.whl", hash = "sha256:c0a454ad016ca575060802ee4d590dd912e35c122fa04e70306de3d076cce755"},
|
||||||
{file = "jeepney-0.7.1.tar.gz", hash = "sha256:fa9e232dfa0c498bd0b8a3a73b8d8a31978304dcef0515adc859d4e096f96f4f"},
|
{file = "jeepney-0.8.0.tar.gz", hash = "sha256:5efe48d255973902f6badc3ce55e2aa6c5c3b3bc642059ef3a91247bcfcc5806"},
|
||||||
]
|
]
|
||||||
json-rpc = []
|
json-rpc = []
|
||||||
jsonschema = []
|
jsonschema = []
|
||||||
@@ -2227,8 +2255,8 @@ lazy-object-proxy = [
|
|||||||
]
|
]
|
||||||
lru-dict = []
|
lru-dict = []
|
||||||
mccabe = [
|
mccabe = [
|
||||||
{file = "mccabe-0.6.1-py2.py3-none-any.whl", hash = "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42"},
|
{file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"},
|
||||||
{file = "mccabe-0.6.1.tar.gz", hash = "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"},
|
{file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"},
|
||||||
]
|
]
|
||||||
mypy-extensions = []
|
mypy-extensions = []
|
||||||
okota = []
|
okota = []
|
||||||
@@ -2244,8 +2272,8 @@ pkginfo = [
|
|||||||
{file = "pkginfo-1.8.2.tar.gz", hash = "sha256:542e0d0b6750e2e21c20179803e40ab50598d8066d51097a0e382cba9eb02bff"},
|
{file = "pkginfo-1.8.2.tar.gz", hash = "sha256:542e0d0b6750e2e21c20179803e40ab50598d8066d51097a0e382cba9eb02bff"},
|
||||||
]
|
]
|
||||||
platformdirs = [
|
platformdirs = [
|
||||||
{file = "platformdirs-2.5.1-py3-none-any.whl", hash = "sha256:bcae7cab893c2d310a711b70b24efb93334febe65f8de776ee320b517471e227"},
|
{file = "platformdirs-2.5.2-py3-none-any.whl", hash = "sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788"},
|
||||||
{file = "platformdirs-2.5.1.tar.gz", hash = "sha256:7535e70dfa32e84d4b34996ea99c5e432fa29a708d0f4e394bbcb2a8faa4f16d"},
|
{file = "platformdirs-2.5.2.tar.gz", hash = "sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19"},
|
||||||
]
|
]
|
||||||
pluggy = []
|
pluggy = []
|
||||||
potaahto = []
|
potaahto = []
|
||||||
@@ -2259,16 +2287,16 @@ pycparser = [
|
|||||||
pycryptodome = []
|
pycryptodome = []
|
||||||
pyethash = []
|
pyethash = []
|
||||||
pygments = [
|
pygments = [
|
||||||
{file = "Pygments-2.11.2-py3-none-any.whl", hash = "sha256:44238f1b60a76d78fc8ca0528ee429702aae011c265fe6a8dd8b63049ae41c65"},
|
{file = "Pygments-2.12.0-py3-none-any.whl", hash = "sha256:dc9c10fb40944260f6ed4c688ece0cd2048414940f1cea51b8b226318411c519"},
|
||||||
{file = "Pygments-2.11.2.tar.gz", hash = "sha256:4e426f72023d88d03b2fa258de560726ce890ff3b630f88c21cbb8b2503b8c6a"},
|
{file = "Pygments-2.12.0.tar.gz", hash = "sha256:5eb116118f9612ff1ee89ac96437bb6b49e8f04d8a13b514ba26f620208e26eb"},
|
||||||
]
|
]
|
||||||
pylint = [
|
pylint = [
|
||||||
{file = "pylint-2.12.2-py3-none-any.whl", hash = "sha256:daabda3f7ed9d1c60f52d563b1b854632fd90035bcf01443e234d3dc794e3b74"},
|
{file = "pylint-2.13.7-py3-none-any.whl", hash = "sha256:13ddbbd8872c804574149e81197c28877eba75224ba6b76cd8652fc31df55c1c"},
|
||||||
{file = "pylint-2.12.2.tar.gz", hash = "sha256:9d945a73640e1fec07ee34b42f5669b770c759acd536ec7b16d7e4b87a9c9ff9"},
|
{file = "pylint-2.13.7.tar.gz", hash = "sha256:911d3a97c808f7554643bcc5416028cfdc42eae34ed129b150741888c688d5d5"},
|
||||||
]
|
]
|
||||||
pyparsing = [
|
pyparsing = [
|
||||||
{file = "pyparsing-3.0.7-py3-none-any.whl", hash = "sha256:a6c06a88f252e6c322f65faf8f418b16213b51bdfaece0524c1c1bc30c63c484"},
|
{file = "pyparsing-3.0.8-py3-none-any.whl", hash = "sha256:ef7b523f6356f763771559412c0d7134753f037822dad1b16945b7b846f7ad06"},
|
||||||
{file = "pyparsing-3.0.7.tar.gz", hash = "sha256:18ee9022775d270c55187733956460083db60b37d0d0fb357445f3094eed3eea"},
|
{file = "pyparsing-3.0.8.tar.gz", hash = "sha256:7bf433498c016c4314268d95df76c81b842a4cb2b276fa3312cfb1e1d85f6954"},
|
||||||
]
|
]
|
||||||
pyrsistent = [
|
pyrsistent = [
|
||||||
{file = "pyrsistent-0.18.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1"},
|
{file = "pyrsistent-0.18.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1"},
|
||||||
@@ -2298,21 +2326,21 @@ pytest = []
|
|||||||
pytest-cov = []
|
pytest-cov = []
|
||||||
python-dateutil = []
|
python-dateutil = []
|
||||||
python-gitlab = [
|
python-gitlab = [
|
||||||
{file = "python-gitlab-2.10.1.tar.gz", hash = "sha256:7afa7d7c062fa62c173190452265a30feefb844428efc58ea5244f3b9fc0d40f"},
|
{file = "python-gitlab-3.3.0.tar.gz", hash = "sha256:fef25d41a62f91da82ee20f72a728b9c69eef34cf0a3005cdbb9a0b471d5b498"},
|
||||||
{file = "python_gitlab-2.10.1-py3-none-any.whl", hash = "sha256:581a219759515513ea9399e936ed7137437cfb681f52d2641626685c492c999d"},
|
{file = "python_gitlab-3.3.0-py3-none-any.whl", hash = "sha256:ab1fd4c98a206f22f01f832bc58f24a09952089b7bbf67cdaee6308e7797503f"},
|
||||||
]
|
]
|
||||||
python-gnupg = []
|
python-gnupg = []
|
||||||
python-semantic-release = [
|
python-semantic-release = [
|
||||||
{file = "python-semantic-release-7.25.2.tar.gz", hash = "sha256:134294d3ee02a3aa464bf3c00c7777b0c84c6b3332fe234e8b7a087cbf3866d2"},
|
{file = "python-semantic-release-7.28.1.tar.gz", hash = "sha256:d7f82b3d4c06b304d07689b8a1c7d0d448ff07c2ab81cd810c4f2f900f24c599"},
|
||||||
{file = "python_semantic_release-7.25.2-py3-none-any.whl", hash = "sha256:8b21bf503486bf13db048501da60362f9ab5adb88435fa431186bcbf24d431ef"},
|
{file = "python_semantic_release-7.28.1-py3-none-any.whl", hash = "sha256:319c3e811d6e10bc3f0e967419eae0e5e9ba1e6745aa2fd94dd24e3995541ca2"},
|
||||||
]
|
]
|
||||||
pywin32-ctypes = [
|
pywin32-ctypes = [
|
||||||
{file = "pywin32-ctypes-0.2.0.tar.gz", hash = "sha256:24ffc3b341d457d48e8922352130cf2644024a4ff09762a2261fd34c36ee5942"},
|
{file = "pywin32-ctypes-0.2.0.tar.gz", hash = "sha256:24ffc3b341d457d48e8922352130cf2644024a4ff09762a2261fd34c36ee5942"},
|
||||||
{file = "pywin32_ctypes-0.2.0-py2.py3-none-any.whl", hash = "sha256:9dc2d991b3479cc2df15930958b674a48a227d5361d413827a4cfd0b5876fc98"},
|
{file = "pywin32_ctypes-0.2.0-py2.py3-none-any.whl", hash = "sha256:9dc2d991b3479cc2df15930958b674a48a227d5361d413827a4cfd0b5876fc98"},
|
||||||
]
|
]
|
||||||
readme-renderer = [
|
readme-renderer = [
|
||||||
{file = "readme_renderer-32.0-py3-none-any.whl", hash = "sha256:a50a0f2123a4c1145ac6f420e1a348aafefcc9211c846e3d51df05fe3d865b7d"},
|
{file = "readme_renderer-35.0-py3-none-any.whl", hash = "sha256:73b84905d091c31f36e50b4ae05ae2acead661f6a09a9abb4df7d2ddcdb6a698"},
|
||||||
{file = "readme_renderer-32.0.tar.gz", hash = "sha256:b512beafa6798260c7d5af3e1b1f097e58bfcd9a575da7c4ddd5e037490a5b85"},
|
{file = "readme_renderer-35.0.tar.gz", hash = "sha256:a727999acfc222fc21d82a12ed48c957c4989785e5865807c65a487d21677497"},
|
||||||
]
|
]
|
||||||
requests = []
|
requests = []
|
||||||
requests-toolbelt = [
|
requests-toolbelt = [
|
||||||
@@ -2325,8 +2353,8 @@ rfc3986 = [
|
|||||||
]
|
]
|
||||||
rlp = []
|
rlp = []
|
||||||
secretstorage = [
|
secretstorage = [
|
||||||
{file = "SecretStorage-3.3.1-py3-none-any.whl", hash = "sha256:422d82c36172d88d6a0ed5afdec956514b189ddbfb72fefab0c8a1cee4eaf71f"},
|
{file = "SecretStorage-3.3.2-py3-none-any.whl", hash = "sha256:755dc845b6ad76dcbcbc07ea3da75ae54bb1ea529eb72d15f83d26499a5df319"},
|
||||||
{file = "SecretStorage-3.3.1.tar.gz", hash = "sha256:fd666c51a6bf200643495a04abb261f83229dcb6fd8472ec393df7ffc8b6f195"},
|
{file = "SecretStorage-3.3.2.tar.gz", hash = "sha256:0a8eb9645b320881c222e827c26f4cfcf55363e8b374a021981ef886657a912f"},
|
||||||
]
|
]
|
||||||
semantic-version = [
|
semantic-version = [
|
||||||
{file = "semantic_version-2.9.0-py2.py3-none-any.whl", hash = "sha256:db2504ab37902dd2c9876ece53567aa43a5b2a417fbe188097b2048fff46da3d"},
|
{file = "semantic_version-2.9.0-py2.py3-none-any.whl", hash = "sha256:db2504ab37902dd2c9876ece53567aa43a5b2a417fbe188097b2048fff46da3d"},
|
||||||
@@ -2349,13 +2377,13 @@ tomli = [
|
|||||||
{file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"},
|
{file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"},
|
||||||
]
|
]
|
||||||
tomlkit = [
|
tomlkit = [
|
||||||
{file = "tomlkit-0.7.0-py2.py3-none-any.whl", hash = "sha256:6babbd33b17d5c9691896b0e68159215a9387ebfa938aa3ac42f4a4beeb2b831"},
|
{file = "tomlkit-0.10.2-py3-none-any.whl", hash = "sha256:905cf92c2111ef80d355708f47ac24ad1b6fc2adc5107455940088c9bbecaedb"},
|
||||||
{file = "tomlkit-0.7.0.tar.gz", hash = "sha256:ac57f29693fab3e309ea789252fcce3061e19110085aa31af5446ca749325618"},
|
{file = "tomlkit-0.10.2.tar.gz", hash = "sha256:30d54c0b914e595f3d10a87888599eab5321a2a69abc773bbefff51599b72db6"},
|
||||||
]
|
]
|
||||||
toolz = []
|
toolz = []
|
||||||
tqdm = [
|
tqdm = [
|
||||||
{file = "tqdm-4.63.0-py2.py3-none-any.whl", hash = "sha256:e643e071046f17139dea55b880dc9b33822ce21613b4a4f5ea57f202833dbc29"},
|
{file = "tqdm-4.64.0-py2.py3-none-any.whl", hash = "sha256:74a2cdefe14d11442cedf3ba4e21a3b84ff9a2dbdc6cfae2c34addb2a14a5ea6"},
|
||||||
{file = "tqdm-4.63.0.tar.gz", hash = "sha256:1d9835ede8e394bb8c9dcbffbca02d717217113adc679236873eeaac5bc0b3cd"},
|
{file = "tqdm-4.64.0.tar.gz", hash = "sha256:40be55d30e200777a307a7585aee69e4eabb46b4ec6a4b4a5f2d9f11e7d5408d"},
|
||||||
]
|
]
|
||||||
trie = []
|
trie = []
|
||||||
twine = [
|
twine = [
|
||||||
@@ -2363,7 +2391,10 @@ twine = [
|
|||||||
{file = "twine-3.8.0.tar.gz", hash = "sha256:8efa52658e0ae770686a13b675569328f1fba9837e5de1867bfe5f46a9aefe19"},
|
{file = "twine-3.8.0.tar.gz", hash = "sha256:8efa52658e0ae770686a13b675569328f1fba9837e5de1867bfe5f46a9aefe19"},
|
||||||
]
|
]
|
||||||
typing-extensions = []
|
typing-extensions = []
|
||||||
urllib3 = []
|
urllib3 = [
|
||||||
|
{file = "urllib3-1.26.9-py2.py3-none-any.whl", hash = "sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14"},
|
||||||
|
{file = "urllib3-1.26.9.tar.gz", hash = "sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e"},
|
||||||
|
]
|
||||||
vobject = []
|
vobject = []
|
||||||
webencodings = [
|
webencodings = [
|
||||||
{file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"},
|
{file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"},
|
||||||
@@ -2371,59 +2402,72 @@ webencodings = [
|
|||||||
]
|
]
|
||||||
websocket-client = []
|
websocket-client = []
|
||||||
wrapt = [
|
wrapt = [
|
||||||
{file = "wrapt-1.13.3-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:e05e60ff3b2b0342153be4d1b597bbcfd8330890056b9619f4ad6b8d5c96a81a"},
|
{file = "wrapt-1.14.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:5a9a1889cc01ed2ed5f34574c90745fab1dd06ec2eee663e8ebeefe363e8efd7"},
|
||||||
{file = "wrapt-1.13.3-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:85148f4225287b6a0665eef08a178c15097366d46b210574a658c1ff5b377489"},
|
{file = "wrapt-1.14.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:9a3ff5fb015f6feb78340143584d9f8a0b91b6293d6b5cf4295b3e95d179b88c"},
|
||||||
{file = "wrapt-1.13.3-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:2dded5496e8f1592ec27079b28b6ad2a1ef0b9296d270f77b8e4a3a796cf6909"},
|
{file = "wrapt-1.14.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:4b847029e2d5e11fd536c9ac3136ddc3f54bc9488a75ef7d040a3900406a91eb"},
|
||||||
{file = "wrapt-1.13.3-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:e94b7d9deaa4cc7bac9198a58a7240aaf87fe56c6277ee25fa5b3aa1edebd229"},
|
{file = "wrapt-1.14.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:9a5a544861b21e0e7575b6023adebe7a8c6321127bb1d238eb40d99803a0e8bd"},
|
||||||
{file = "wrapt-1.13.3-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:498e6217523111d07cd67e87a791f5e9ee769f9241fcf8a379696e25806965af"},
|
{file = "wrapt-1.14.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:88236b90dda77f0394f878324cfbae05ae6fde8a84d548cfe73a75278d760291"},
|
||||||
{file = "wrapt-1.13.3-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:ec7e20258ecc5174029a0f391e1b948bf2906cd64c198a9b8b281b811cbc04de"},
|
{file = "wrapt-1.14.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:f0408e2dbad9e82b4c960274214af533f856a199c9274bd4aff55d4634dedc33"},
|
||||||
{file = "wrapt-1.13.3-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:87883690cae293541e08ba2da22cacaae0a092e0ed56bbba8d018cc486fbafbb"},
|
{file = "wrapt-1.14.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:9d8c68c4145041b4eeae96239802cfdfd9ef927754a5be3f50505f09f309d8c6"},
|
||||||
{file = "wrapt-1.13.3-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:f99c0489258086308aad4ae57da9e8ecf9e1f3f30fa35d5e170b4d4896554d80"},
|
{file = "wrapt-1.14.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:22626dca56fd7f55a0733e604f1027277eb0f4f3d95ff28f15d27ac25a45f71b"},
|
||||||
{file = "wrapt-1.13.3-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:6a03d9917aee887690aa3f1747ce634e610f6db6f6b332b35c2dd89412912bca"},
|
{file = "wrapt-1.14.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:65bf3eb34721bf18b5a021a1ad7aa05947a1767d1aa272b725728014475ea7d5"},
|
||||||
{file = "wrapt-1.13.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:936503cb0a6ed28dbfa87e8fcd0a56458822144e9d11a49ccee6d9a8adb2ac44"},
|
{file = "wrapt-1.14.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:09d16ae7a13cff43660155383a2372b4aa09109c7127aa3f24c3cf99b891c330"},
|
||||||
{file = "wrapt-1.13.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f9c51d9af9abb899bd34ace878fbec8bf357b3194a10c4e8e0a25512826ef056"},
|
{file = "wrapt-1.14.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:debaf04f813ada978d7d16c7dfa16f3c9c2ec9adf4656efdc4defdf841fc2f0c"},
|
||||||
{file = "wrapt-1.13.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:220a869982ea9023e163ba915077816ca439489de6d2c09089b219f4e11b6785"},
|
{file = "wrapt-1.14.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:748df39ed634851350efa87690c2237a678ed794fe9ede3f0d79f071ee042561"},
|
||||||
{file = "wrapt-1.13.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:0877fe981fd76b183711d767500e6b3111378ed2043c145e21816ee589d91096"},
|
{file = "wrapt-1.14.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1807054aa7b61ad8d8103b3b30c9764de2e9d0c0978e9d3fc337e4e74bf25faa"},
|
||||||
{file = "wrapt-1.13.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:43e69ffe47e3609a6aec0fe723001c60c65305784d964f5007d5b4fb1bc6bf33"},
|
{file = "wrapt-1.14.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:763a73ab377390e2af26042f685a26787c402390f682443727b847e9496e4a2a"},
|
||||||
{file = "wrapt-1.13.3-cp310-cp310-win32.whl", hash = "sha256:78dea98c81915bbf510eb6a3c9c24915e4660302937b9ae05a0947164248020f"},
|
{file = "wrapt-1.14.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:8529b07b49b2d89d6917cfa157d3ea1dfb4d319d51e23030664a827fe5fd2131"},
|
||||||
{file = "wrapt-1.13.3-cp310-cp310-win_amd64.whl", hash = "sha256:ea3e746e29d4000cd98d572f3ee2a6050a4f784bb536f4ac1f035987fc1ed83e"},
|
{file = "wrapt-1.14.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:68aeefac31c1f73949662ba8affaf9950b9938b712fb9d428fa2a07e40ee57f8"},
|
||||||
{file = "wrapt-1.13.3-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:8c73c1a2ec7c98d7eaded149f6d225a692caa1bd7b2401a14125446e9e90410d"},
|
{file = "wrapt-1.14.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59d7d92cee84a547d91267f0fea381c363121d70fe90b12cd88241bd9b0e1763"},
|
||||||
{file = "wrapt-1.13.3-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:086218a72ec7d986a3eddb7707c8c4526d677c7b35e355875a0fe2918b059179"},
|
{file = "wrapt-1.14.0-cp310-cp310-win32.whl", hash = "sha256:3a88254881e8a8c4784ecc9cb2249ff757fd94b911d5df9a5984961b96113fff"},
|
||||||
{file = "wrapt-1.13.3-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:e92d0d4fa68ea0c02d39f1e2f9cb5bc4b4a71e8c442207433d8db47ee79d7aa3"},
|
{file = "wrapt-1.14.0-cp310-cp310-win_amd64.whl", hash = "sha256:9a242871b3d8eecc56d350e5e03ea1854de47b17f040446da0e47dc3e0b9ad4d"},
|
||||||
{file = "wrapt-1.13.3-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:d4a5f6146cfa5c7ba0134249665acd322a70d1ea61732723c7d3e8cc0fa80755"},
|
{file = "wrapt-1.14.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:a65bffd24409454b889af33b6c49d0d9bcd1a219b972fba975ac935f17bdf627"},
|
||||||
{file = "wrapt-1.13.3-cp35-cp35m-win32.whl", hash = "sha256:8aab36778fa9bba1a8f06a4919556f9f8c7b33102bd71b3ab307bb3fecb21851"},
|
{file = "wrapt-1.14.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:9d9fcd06c952efa4b6b95f3d788a819b7f33d11bea377be6b8980c95e7d10775"},
|
||||||
{file = "wrapt-1.13.3-cp35-cp35m-win_amd64.whl", hash = "sha256:944b180f61f5e36c0634d3202ba8509b986b5fbaf57db3e94df11abee244ba13"},
|
{file = "wrapt-1.14.0-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:db6a0ddc1282ceb9032e41853e659c9b638789be38e5b8ad7498caac00231c23"},
|
||||||
{file = "wrapt-1.13.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:2ebdde19cd3c8cdf8df3fc165bc7827334bc4e353465048b36f7deeae8ee0918"},
|
{file = "wrapt-1.14.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:14e7e2c5f5fca67e9a6d5f753d21f138398cad2b1159913ec9e9a67745f09ba3"},
|
||||||
{file = "wrapt-1.13.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:610f5f83dd1e0ad40254c306f4764fcdc846641f120c3cf424ff57a19d5f7ade"},
|
{file = "wrapt-1.14.0-cp35-cp35m-win32.whl", hash = "sha256:6d9810d4f697d58fd66039ab959e6d37e63ab377008ef1d63904df25956c7db0"},
|
||||||
{file = "wrapt-1.13.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5601f44a0f38fed36cc07db004f0eedeaadbdcec90e4e90509480e7e6060a5bc"},
|
{file = "wrapt-1.14.0-cp35-cp35m-win_amd64.whl", hash = "sha256:d808a5a5411982a09fef6b49aac62986274ab050e9d3e9817ad65b2791ed1425"},
|
||||||
{file = "wrapt-1.13.3-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:e6906d6f48437dfd80464f7d7af1740eadc572b9f7a4301e7dd3d65db285cacf"},
|
{file = "wrapt-1.14.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b77159d9862374da213f741af0c361720200ab7ad21b9f12556e0eb95912cd48"},
|
||||||
{file = "wrapt-1.13.3-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:766b32c762e07e26f50d8a3468e3b4228b3736c805018e4b0ec8cc01ecd88125"},
|
{file = "wrapt-1.14.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:36a76a7527df8583112b24adc01748cd51a2d14e905b337a6fefa8b96fc708fb"},
|
||||||
{file = "wrapt-1.13.3-cp36-cp36m-win32.whl", hash = "sha256:5f223101f21cfd41deec8ce3889dc59f88a59b409db028c469c9b20cfeefbe36"},
|
{file = "wrapt-1.14.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a0057b5435a65b933cbf5d859cd4956624df37b8bf0917c71756e4b3d9958b9e"},
|
||||||
{file = "wrapt-1.13.3-cp36-cp36m-win_amd64.whl", hash = "sha256:f122ccd12fdc69628786d0c947bdd9cb2733be8f800d88b5a37c57f1f1d73c10"},
|
{file = "wrapt-1.14.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a0a4ca02752ced5f37498827e49c414d694ad7cf451ee850e3ff160f2bee9d3"},
|
||||||
{file = "wrapt-1.13.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:46f7f3af321a573fc0c3586612db4decb7eb37172af1bc6173d81f5b66c2e068"},
|
{file = "wrapt-1.14.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:8c6be72eac3c14baa473620e04f74186c5d8f45d80f8f2b4eda6e1d18af808e8"},
|
||||||
{file = "wrapt-1.13.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:778fd096ee96890c10ce96187c76b3e99b2da44e08c9e24d5652f356873f6709"},
|
{file = "wrapt-1.14.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:21b1106bff6ece8cb203ef45b4f5778d7226c941c83aaaa1e1f0f4f32cc148cd"},
|
||||||
{file = "wrapt-1.13.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0cb23d36ed03bf46b894cfec777eec754146d68429c30431c99ef28482b5c1df"},
|
{file = "wrapt-1.14.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:493da1f8b1bb8a623c16552fb4a1e164c0200447eb83d3f68b44315ead3f9036"},
|
||||||
{file = "wrapt-1.13.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:96b81ae75591a795d8c90edc0bfaab44d3d41ffc1aae4d994c5aa21d9b8e19a2"},
|
{file = "wrapt-1.14.0-cp36-cp36m-win32.whl", hash = "sha256:89ba3d548ee1e6291a20f3c7380c92f71e358ce8b9e48161401e087e0bc740f8"},
|
||||||
{file = "wrapt-1.13.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:7dd215e4e8514004c8d810a73e342c536547038fb130205ec4bba9f5de35d45b"},
|
{file = "wrapt-1.14.0-cp36-cp36m-win_amd64.whl", hash = "sha256:729d5e96566f44fccac6c4447ec2332636b4fe273f03da128fff8d5559782b06"},
|
||||||
{file = "wrapt-1.13.3-cp37-cp37m-win32.whl", hash = "sha256:47f0a183743e7f71f29e4e21574ad3fa95676136f45b91afcf83f6a050914829"},
|
{file = "wrapt-1.14.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:891c353e95bb11abb548ca95c8b98050f3620a7378332eb90d6acdef35b401d4"},
|
||||||
{file = "wrapt-1.13.3-cp37-cp37m-win_amd64.whl", hash = "sha256:fd76c47f20984b43d93de9a82011bb6e5f8325df6c9ed4d8310029a55fa361ea"},
|
{file = "wrapt-1.14.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23f96134a3aa24cc50614920cc087e22f87439053d886e474638c68c8d15dc80"},
|
||||||
{file = "wrapt-1.13.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b73d4b78807bd299b38e4598b8e7bd34ed55d480160d2e7fdaabd9931afa65f9"},
|
{file = "wrapt-1.14.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6807bcee549a8cb2f38f73f469703a1d8d5d990815c3004f21ddb68a567385ce"},
|
||||||
{file = "wrapt-1.13.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ec9465dd69d5657b5d2fa6133b3e1e989ae27d29471a672416fd729b429eb554"},
|
{file = "wrapt-1.14.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6915682f9a9bc4cf2908e83caf5895a685da1fbd20b6d485dafb8e218a338279"},
|
||||||
{file = "wrapt-1.13.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dd91006848eb55af2159375134d724032a2d1d13bcc6f81cd8d3ed9f2b8e846c"},
|
{file = "wrapt-1.14.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:f2f3bc7cd9c9fcd39143f11342eb5963317bd54ecc98e3650ca22704b69d9653"},
|
||||||
{file = "wrapt-1.13.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ae9de71eb60940e58207f8e71fe113c639da42adb02fb2bcbcaccc1ccecd092b"},
|
{file = "wrapt-1.14.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:3a71dbd792cc7a3d772ef8cd08d3048593f13d6f40a11f3427c000cf0a5b36a0"},
|
||||||
{file = "wrapt-1.13.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:51799ca950cfee9396a87f4a1240622ac38973b6df5ef7a41e7f0b98797099ce"},
|
{file = "wrapt-1.14.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:5a0898a640559dec00f3614ffb11d97a2666ee9a2a6bad1259c9facd01a1d4d9"},
|
||||||
{file = "wrapt-1.13.3-cp38-cp38-win32.whl", hash = "sha256:4b9c458732450ec42578b5642ac53e312092acf8c0bfce140ada5ca1ac556f79"},
|
{file = "wrapt-1.14.0-cp37-cp37m-win32.whl", hash = "sha256:167e4793dc987f77fd476862d32fa404d42b71f6a85d3b38cbce711dba5e6b68"},
|
||||||
{file = "wrapt-1.13.3-cp38-cp38-win_amd64.whl", hash = "sha256:7dde79d007cd6dfa65afe404766057c2409316135cb892be4b1c768e3f3a11cb"},
|
{file = "wrapt-1.14.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d066ffc5ed0be00cd0352c95800a519cf9e4b5dd34a028d301bdc7177c72daf3"},
|
||||||
{file = "wrapt-1.13.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:981da26722bebb9247a0601e2922cedf8bb7a600e89c852d063313102de6f2cb"},
|
{file = "wrapt-1.14.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d9bdfa74d369256e4218000a629978590fd7cb6cf6893251dad13d051090436d"},
|
||||||
{file = "wrapt-1.13.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:705e2af1f7be4707e49ced9153f8d72131090e52be9278b5dbb1498c749a1e32"},
|
{file = "wrapt-1.14.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2498762814dd7dd2a1d0248eda2afbc3dd9c11537bc8200a4b21789b6df6cd38"},
|
||||||
{file = "wrapt-1.13.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:25b1b1d5df495d82be1c9d2fad408f7ce5ca8a38085e2da41bb63c914baadff7"},
|
{file = "wrapt-1.14.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f24ca7953f2643d59a9c87d6e272d8adddd4a53bb62b9208f36db408d7aafc7"},
|
||||||
{file = "wrapt-1.13.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:77416e6b17926d953b5c666a3cb718d5945df63ecf922af0ee576206d7033b5e"},
|
{file = "wrapt-1.14.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b835b86bd5a1bdbe257d610eecab07bf685b1af2a7563093e0e69180c1d4af1"},
|
||||||
{file = "wrapt-1.13.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:865c0b50003616f05858b22174c40ffc27a38e67359fa1495605f96125f76640"},
|
{file = "wrapt-1.14.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b21650fa6907e523869e0396c5bd591cc326e5c1dd594dcdccac089561cacfb8"},
|
||||||
{file = "wrapt-1.13.3-cp39-cp39-win32.whl", hash = "sha256:0a017a667d1f7411816e4bf214646d0ad5b1da2c1ea13dec6c162736ff25a374"},
|
{file = "wrapt-1.14.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:354d9fc6b1e44750e2a67b4b108841f5f5ea08853453ecbf44c81fdc2e0d50bd"},
|
||||||
{file = "wrapt-1.13.3-cp39-cp39-win_amd64.whl", hash = "sha256:81bd7c90d28a4b2e1df135bfbd7c23aee3050078ca6441bead44c42483f9ebfb"},
|
{file = "wrapt-1.14.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1f83e9c21cd5275991076b2ba1cd35418af3504667affb4745b48937e214bafe"},
|
||||||
{file = "wrapt-1.13.3.tar.gz", hash = "sha256:1fea9cd438686e6682271d36f3481a9f3636195578bab9ca3382e2f5f01fc185"},
|
{file = "wrapt-1.14.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:61e1a064906ccba038aa3c4a5a82f6199749efbbb3cef0804ae5c37f550eded0"},
|
||||||
|
{file = "wrapt-1.14.0-cp38-cp38-win32.whl", hash = "sha256:28c659878f684365d53cf59dc9a1929ea2eecd7ac65da762be8b1ba193f7e84f"},
|
||||||
|
{file = "wrapt-1.14.0-cp38-cp38-win_amd64.whl", hash = "sha256:b0ed6ad6c9640671689c2dbe6244680fe8b897c08fd1fab2228429b66c518e5e"},
|
||||||
|
{file = "wrapt-1.14.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b3f7e671fb19734c872566e57ce7fc235fa953d7c181bb4ef138e17d607dc8a1"},
|
||||||
|
{file = "wrapt-1.14.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:87fa943e8bbe40c8c1ba4086971a6fefbf75e9991217c55ed1bcb2f1985bd3d4"},
|
||||||
|
{file = "wrapt-1.14.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4775a574e9d84e0212f5b18886cace049a42e13e12009bb0491562a48bb2b758"},
|
||||||
|
{file = "wrapt-1.14.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9d57677238a0c5411c76097b8b93bdebb02eb845814c90f0b01727527a179e4d"},
|
||||||
|
{file = "wrapt-1.14.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00108411e0f34c52ce16f81f1d308a571df7784932cc7491d1e94be2ee93374b"},
|
||||||
|
{file = "wrapt-1.14.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d332eecf307fca852d02b63f35a7872de32d5ba8b4ec32da82f45df986b39ff6"},
|
||||||
|
{file = "wrapt-1.14.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:01f799def9b96a8ec1ef6b9c1bbaf2bbc859b87545efbecc4a78faea13d0e3a0"},
|
||||||
|
{file = "wrapt-1.14.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:47045ed35481e857918ae78b54891fac0c1d197f22c95778e66302668309336c"},
|
||||||
|
{file = "wrapt-1.14.0-cp39-cp39-win32.whl", hash = "sha256:2eca15d6b947cfff51ed76b2d60fd172c6ecd418ddab1c5126032d27f74bc350"},
|
||||||
|
{file = "wrapt-1.14.0-cp39-cp39-win_amd64.whl", hash = "sha256:bb36fbb48b22985d13a6b496ea5fb9bb2a076fea943831643836c9f6febbcfdc"},
|
||||||
|
{file = "wrapt-1.14.0.tar.gz", hash = "sha256:8323a43bd9c91f62bb7d4be74cc9ff10090e7ef820e27bfe8815c57e68261311"},
|
||||||
]
|
]
|
||||||
zipp = [
|
zipp = [
|
||||||
{file = "zipp-3.7.0-py3-none-any.whl", hash = "sha256:b47250dd24f92b7dd6a0a8fc5244da14608f3ca90a5efcd37a3b1642fac9a375"},
|
{file = "zipp-3.8.0-py3-none-any.whl", hash = "sha256:c4f6e5bbf48e74f7a38e7cc5b0480ff42b0ae5178957d564d18932525d5cf099"},
|
||||||
{file = "zipp-3.7.0.tar.gz", hash = "sha256:9f50f446828eb9d45b267433fd3e9da8d801f614129124863f9c51ebceafb87d"},
|
{file = "zipp-3.8.0.tar.gz", hash = "sha256:56bf8aadb83c24db6c4b577e13de374ccfb67da2078beba1d037c17980bf43ad"},
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[tool.poetry]
|
[tool.poetry]
|
||||||
name = "cic-cli"
|
name = "cic-cli"
|
||||||
version = "0.0.2"
|
version = "0.3.3"
|
||||||
description = "Generic cli tooling for the CIC token network"
|
description = "Generic cli tooling for the CIC token network"
|
||||||
authors = [
|
authors = [
|
||||||
"Louis Holbrook <dev@holbrook.no>",
|
"Louis Holbrook <dev@holbrook.no>",
|
||||||
@@ -41,18 +41,18 @@ secondary = true
|
|||||||
|
|
||||||
[tool.poetry.dependencies]
|
[tool.poetry.dependencies]
|
||||||
python = "^3.8"
|
python = "^3.8"
|
||||||
funga-eth = "~0.5.5"
|
funga-eth = "^0.5.0"
|
||||||
cic-types = "~0.2.1a8"
|
cic-types = "^0.2.0"
|
||||||
confini = "~0.5.3"
|
confini = "^0.5.3"
|
||||||
chainlib = "~0.0.17"
|
chainlib = "*"
|
||||||
cbor2 = "5.4.1"
|
cbor2 = "5.4.1"
|
||||||
|
|
||||||
chainlib-eth = { version = "~0.0.25", optional = true }
|
chainlib-eth = { version = "*", optional = true }
|
||||||
eth-token-index = { version = "0.2.4", optional = true }
|
eth-token-index = { version = "^0.2.0", optional = true }
|
||||||
eth-address-index = { version = "~0.2.4", optional = true }
|
eth-address-index = { version = "*", optional = true }
|
||||||
okota = { version = "~0.2.5", optional = true }
|
okota = { version = "^0.2.0", optional = true }
|
||||||
cic_eth_registry = { version = "~0.6.6", optional = true }
|
cic-eth-registry = { version = "^0.6.0", optional = true }
|
||||||
cic_contracts = { version = "~0.0.5", optional = true }
|
cic-contracts = { version = "*", optional = true }
|
||||||
|
|
||||||
|
|
||||||
[tool.poetry.dev-dependencies]
|
[tool.poetry.dev-dependencies]
|
||||||
@@ -61,7 +61,6 @@ pytest-cov = "2.10.1"
|
|||||||
python-semantic-release = "^7.25.2"
|
python-semantic-release = "^7.25.2"
|
||||||
pylint = "^2.12.2"
|
pylint = "^2.12.2"
|
||||||
black = { version = "^22.1.0", allow-prereleases = true }
|
black = { version = "^22.1.0", allow-prereleases = true }
|
||||||
eth-erc20 = ">0.1.2a3,<0.2.0"
|
|
||||||
eth_tester = "0.5.0b3"
|
eth_tester = "0.5.0b3"
|
||||||
py-evm = "0.3.0a20"
|
py-evm = "0.3.0a20"
|
||||||
rlp = "2.0.1"
|
rlp = "2.0.1"
|
||||||
@@ -81,16 +80,17 @@ requires = ["poetry-core>=1.0.0"]
|
|||||||
build-backend = "poetry.core.masonry.api"
|
build-backend = "poetry.core.masonry.api"
|
||||||
|
|
||||||
[tool.pytest.ini_options]
|
[tool.pytest.ini_options]
|
||||||
addopts = "--cov=cic --cov-fail-under=40 --cov-report term-missing"
|
addopts = "--cov=cic --cov-report term-missing -v"
|
||||||
testpaths = ["tests"]
|
testpaths = ["tests"]
|
||||||
|
|
||||||
[tool.semantic_release]
|
[tool.semantic_release]
|
||||||
version_variable = ["cic/__init__.py:__version__", "pyproject.toml:version"]
|
version_variable = ["cic/__init__.py:__version__", "pyproject.toml:version"]
|
||||||
version_source = "commit"
|
version_source = "commit"
|
||||||
branch = "main"
|
branch = "master"
|
||||||
upload_to_repository = true
|
upload_to_repository = true
|
||||||
upload_to_release = true
|
upload_to_release = true
|
||||||
build_command = "pip install poetry && poetry build"
|
build_command = "pip install poetry && poetry build"
|
||||||
hvcs = "gitea"
|
hvcs = "gitea"
|
||||||
hvcs_domain = "git.grassecon.net"
|
hvcs_domain = "git.grassecon.net"
|
||||||
check_build_status = false
|
check_build_status = false
|
||||||
|
|
||||||
|
|||||||
@@ -4,15 +4,14 @@ import random
|
|||||||
import tempfile
|
import tempfile
|
||||||
import unittest
|
import unittest
|
||||||
|
|
||||||
from cic.contract.components.attachment import Attachment
|
# external imports
|
||||||
from cic.contract.components.proof import Proof
|
from hexathon import add_0x
|
||||||
from cic.contract.processor import ContractProcessor
|
|
||||||
|
|
||||||
# local imports
|
# local imports
|
||||||
from cic.writers import KVWriter
|
from cic.writers import KVWriter
|
||||||
|
from cic.contract.components.attachment import Attachment
|
||||||
# external imports
|
from cic.contract.components.proof import Proof
|
||||||
from hexathon import add_0x
|
from cic.contract.processor import ContractProcessor
|
||||||
|
|
||||||
test_base_dir = os.path.dirname(os.path.realpath(__file__))
|
test_base_dir = os.path.dirname(os.path.realpath(__file__))
|
||||||
test_data_dir = os.path.join(test_base_dir, "testdata")
|
test_data_dir = os.path.join(test_base_dir, "testdata")
|
||||||
|
|||||||
74
tests/test_csv_generate.py
Normal file
74
tests/test_csv_generate.py
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
import os
|
||||||
|
import tempfile
|
||||||
|
|
||||||
|
from cic.contract.csv import load_contract_from_csv
|
||||||
|
|
||||||
|
from tests.base_cic import test_data_dir
|
||||||
|
|
||||||
|
|
||||||
|
def test_csv_generate():
|
||||||
|
outputs_dir = os.path.join(tempfile.mkdtemp(), "outputs")
|
||||||
|
test_csv_path = os.path.join(test_data_dir, "voucher", "bondi.csv")
|
||||||
|
contract = load_contract_from_csv(
|
||||||
|
{
|
||||||
|
"WALLET_KEY_FILE": os.path.join(test_data_dir, "keystore", "ok"),
|
||||||
|
"WALLET_PASSPHRASE": "test",
|
||||||
|
"CHAIN_SPEC": "evm:kitabu:6060:sarafu",
|
||||||
|
"RPC_PROVIDER": "http://142.93.38.53:8545",
|
||||||
|
"CIC_REGISTRY_ADDRESS": "0xe3e3431BF25b06166513019Ed7B21598D27d05dC",
|
||||||
|
},
|
||||||
|
outputs_dir,
|
||||||
|
csv_path=test_csv_path,
|
||||||
|
)
|
||||||
|
# assert len(contracts) == 1
|
||||||
|
# contract = contracts[0]
|
||||||
|
# Token
|
||||||
|
assert contract.token.name == "Bondeni"
|
||||||
|
assert contract.token.extra_args == [
|
||||||
|
"46124891913883000000000000000000",
|
||||||
|
"1440",
|
||||||
|
"0xB8830b647C01433F9492F315ddBFDc35CB3Be6A6",
|
||||||
|
]
|
||||||
|
assert contract.token.extra_args_types == ["uint256", "uint256", "address"]
|
||||||
|
# assert contract.token.code == os.path.join(test_data_dir, "contracts", "Bondi.bin")
|
||||||
|
assert contract.token.precision == '6'
|
||||||
|
assert contract.token.supply == "5025"
|
||||||
|
assert contract.token.symbol == "BONDE"
|
||||||
|
|
||||||
|
# Meta
|
||||||
|
assert contract.meta.country_code == "KE"
|
||||||
|
assert contract.meta.location == "Mutitu Kilifi"
|
||||||
|
assert contract.meta.contact == {
|
||||||
|
"email": "info@grassecon.org",
|
||||||
|
"phone": "254797782065",
|
||||||
|
}
|
||||||
|
assert contract.meta.name == "Bondeni SHG"
|
||||||
|
|
||||||
|
# Network
|
||||||
|
assert contract.network.resources["eth"]["chain_spec"] == {
|
||||||
|
"arch": "evm",
|
||||||
|
"common_name": "sarafu",
|
||||||
|
"custom": [],
|
||||||
|
"extra": {},
|
||||||
|
"fork": "kitabu",
|
||||||
|
"network_id": 6060,
|
||||||
|
}
|
||||||
|
assert contract.network.resources["eth"]["contents"] == {
|
||||||
|
"address_declarator": {
|
||||||
|
"key_account": "cc4f82f5dacde395e1e0cfc4d62827c8b8b5688c",
|
||||||
|
"reference": "f055e83f713DbFF947e923749Af9802eaffFB5f9",
|
||||||
|
},
|
||||||
|
"token": {
|
||||||
|
"key_account": "cc4f82f5dacde395e1e0cfc4d62827c8b8b5688c",
|
||||||
|
"reference": None,
|
||||||
|
},
|
||||||
|
"token_index": {
|
||||||
|
"key_account": "cc4f82f5dacde395e1e0cfc4d62827c8b8b5688c",
|
||||||
|
"reference": "5A1EB529438D8b3cA943A45a48744f4c73d1f098",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
assert contract.proof.description == "1 BONDE = 1 itumbe"
|
||||||
|
assert contract.proof.namespace == "ge"
|
||||||
|
assert contract.proof.proofs == []
|
||||||
|
assert contract.proof.version() == 0
|
||||||
@@ -14,7 +14,7 @@ from cic.keystore import KeystoreDirectory
|
|||||||
# test imports
|
# test imports
|
||||||
from tests.base_cic import test_base_dir
|
from tests.base_cic import test_base_dir
|
||||||
|
|
||||||
logging = logging.getLogger()
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
script_dir = test_base_dir
|
script_dir = test_base_dir
|
||||||
|
|
||||||
|
|||||||
2
tests/testdata/voucher/bondi.csv
vendored
Normal file
2
tests/testdata/voucher/bondi.csv
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
issuer,namespace,voucher_name,symbol,location,country_code,supply,precision,token_type,demurrage,period_minutes,phone_number,email_address,sink_account,description
|
||||||
|
Bondeni SHG,ge,Bondeni,BONDE,Mutitu Kilifi,KE,5025,6,demurrage,46124891913883000000000000000000,1440,254797782065,info@grassecon.org,0xB8830b647C01433F9492F315ddBFDc35CB3Be6A6,1 BONDE = 1 itumbe
|
||||||
|
Reference in New Issue
Block a user