semvec/pypi-packages huggingface dataset:
prs-lib 0.0.4
prs lib
License: MIT
Requires Python: >=3.6

# PRS Lib

是对 PRS REST API 的封装，开发者可以直接调用与 PRS 服务进行通信。

PRS 目前提供了两个环境供开发者使用：

- 正式环境，域名 https://press.one
- 测试环境，域名 https://beta.press.one
- 开发环境，域名 https://beta.press.one

目前对 DApp 开放的接口有：

- DApp 创建和维护。
- 用户授权。
- 签名。
- 签名文件相关。(签名文件、获取文件)
- 合约相关。（创建合约、绑定合约、查询合约）
- 合约交易相关。（购买合约、合约交易记录）
- 区块信息查询。
- 钱包相关。（查询钱包、查询交易历史、充值、提现）

## 快速开始

### 注册账号

1. 开发者前往 PRS 官网注册账号。(正式环境：https://press.one 测试环境：https://beta.press.one )
2. 登录成功后进入[开发者设置](https://beta.press.one/developer/settings)、[我的 DApp](https://beta.press.one/developer/apps)，完善开发者信息以及创建 DApp。
3. 在项目中安装此 [Lib](https://github.com/Press-One/prs-lib-py)
4. DApp 在合适的时候引导用户进行授权
5. 授权成功后即可进行签名发布文件、创建合约等操作

更多信息，请参考[开发者网站](https://developer.press.one)。

### Python 版本支持

支持 `>= Python 3.6`

### 安装

通过 `pip` 安装:

```bash
pip install prs-lib
```

### 初始化

在代码中 `import prs_lib`，之后创建 client

```python
import prs_lib


# 初始化 client
client = prs_lib.PRS({
  'env': 'dev',
  'private_key': 'private key ..',
  'address': 'address ...',
  'token': 'token ...',
  'debug': True,
})

# 其中，`env` 是必填的，其它都是可选的
```

### 示例代码

以下代码根据块的 id 从链上对块内容进行获取

```python
import prs_lib


client = prs_lib.PRS({
  'env': 'dev',
  'debug': True,
})
res = client.block.get_by_rids([
    'ba03bd584d69b89615ce8db22b4c593342a5ec09b343a7859044a8e4d389c4c2',
    '65163724a98d29506b1031dc68fa62fb5a7a11fe631fb723a723b2a19e9bb65c'
])
print(res.json())
```

## API

prs-lib 暴露一个 PRS 类，开发者通过创建 PRS 实例，来对 REST API 进行交互。

```
$ pydoc prs_lib
```

看某个具体模块的帮助，比如，查看 `block` 的文档：

```
$ pydoc prs_lib.block
```
prs-utility 0.0.8
prs utility
License: MIT
Requires Python: >=3.6

prs-utility 是 PRS 为 Python 提供的算法工具库，包含项目中用到的消息摘要、签名算法。

## Python 版本支持

支持 `>= Python 3.6`

## 安装

```
pip install prs-utility
```

## 使用示例

```python
# 根据 keystore 和 password 得到私钥
import json
import prs_utility

keystore = {
    "address": "758ea2601697fbd3ba6eb6774ed70b6c4cdb0ef9",
    "crypto": {
        "cipher": "aes-128-ctr",
        "ciphertext": "92af6f6710eba271eae5ac7fec72c70d9f49215e7880a0c45d4c53e56bd7ea59",
        "cipherparams": {
            "iv": "13ddf95d970e924c97e4dcd29ba96520"
        },
        "mac": "b9d81d78f067334ee922fb2863e32c14cbc46e479eeb0acc11fb31e39256004e",
        "kdf": "pbkdf2",
        "kdfparams": {
            "c": 262144,
            "dklen": 32,
            "prf": "hmac-sha256",
            "salt": "79f90bb603491573e40a79fe356b88d0c7869852e43c2bbaabed44578a82bbfa"
        }
    },
    "id": "93028e51-a2a4-4514-bc1a-94b089445f35",
    "version": 3
}
password = '123123'
private_key = prs_utility.recover_private_key(
    json.dumps(keystore), password
)
print('private_key:', private_key)

# 计算 hash 值
## 计算 bytes、int、bool 的 hash 值

print(prs_utility.keccak256(primitive=b'hello'))
print(prs_utility.keccak256(primitive=42))
print(prs_utility.keccak256(primitive=True))

注： 函数的第一个可选参数是 primitive，所以，可以不写该参数
print(prs_utility.keccak256(42))

## 计算 text 或 字符串 的 hash 值
print(prs_utility.keccak256(text='hello'))

with open(__file__) as fp:
    content = fp.read()
file_hash = prs_utility.keccak256(text=content)
print('file hash:', file_hash)

## 计算 hex str 的 hash 值
print(prs_utility.keccak256(hexstr='0xabcd'))

# 根据 PRS 协议组合 block data, 并且使用 privateKey 进行签名
data = {
    'file_hash': file_hash,
}
key_pair = prs_utility.create_key_pair()
private_key = key_pair['privateKey']
sig = prs_utility.sign_block_data(data, private_key)
print('signature:', sig)

# 生成一对新密钥
key_pair = prs_utility.create_key_pair()
print('key_pair:', key_pair)
```

## API

`prs-utility` 提供了常用的加解密函数和一些用于格式转化的工具函数

```
$ pydoc prs_utility
```