Skycoin Python库
pyskycoin的Python项目详细描述
皮斯基币
Skycoin API的Python扩展。 使用swig生成的python扩展,可从python访问skycoin api。
目录
- 安装
- 使用API
- 制定规则
- 开发设置
- python wrapper for skycoin api
安装
从http://github.com/simelo/pyskycoin.git" rel="nofollow">http://github.com/simelo/pyskycoin.git下载存储库。
执行(python setup.py install
)安装库。尽管执行(python setup.py develop)是对库进行更改的更好选择。但是,当使用tox时,根本不需要这些命令,因为调用tox将进行任何必要的安装并执行测试。
用法
命名
pyskycoin中导出的函数具有以下命名格式:sky_package_func_name
其中package替换为原始skycoin函数所在的包,func_name是函数的名称。例如,在python中调用loadconfig
函数fromcli
包
参数
所有Skycoin导出的函数都会返回一个错误对象作为最后一个返回参数。在pyskycoin中,error作为整数返回,它是第一个返回参数。其余参数按相同顺序返回。
Skycoin中的接收器是第一个输入参数。简单类型,如integer、float、string将用作python中的相应类型。
手柄
一些skycoin类型太复杂,无法导出到脚本语言。所以,改为使用手柄。因此,所有采用复杂类型的函数都将收到一个句柄,而不是原始的skycoin类型。例如,从skycoin导出这些功能:
funcLoadConfig()(Config,error)func(cConfig)FullWalletPath()string
config是一种结构类型,在pyskycoin中被视为句柄。在python中的用法是:
importskycoindefmain:err,configHandle=skycoin.SKY_cli_LoadConfig()iferr==skycoin.SKY_OK:# 0 then no errorfullWalletPath=skycoin.SKY_cli_FullWalletPath(configHandle)printfullWallerPath#Close the handle after using the it#so the garbage collector can delete the object associated with it. skycoin.SKY_handle_close(configHandle)else:#Errorprinterr字节片
byte[]类型的参数将被视为字符串。例如,Skycoin中的此功能:
func(sScryptChacha20poly1305)Encrypt(data,password[]byte)([]byte,error)
将按如下方式调用:
encrypt_settings=skycoin.encrypt__ScryptChacha20poly1305()data="Data to encrypt"#It will be passed as a parameter of type []bytepwd="password"#As []byte tooerr,encrypted=skycoin.SKY_encrypt_ScryptChacha20poly1305_Encrypt(encrypt_settings,data,pwd)iferr==skycoin.SKY_OK:printencrypted#Encrypted is string
结构
未导出为句柄的结构被视为python中的ike类。在前面的示例中,类型scryptcha20poly1305是用类似python的语言创建的:
encrypt_settings=skycoin.encrypt__ScryptChacha20poly1305()
并作为调用sky_encrypt_scryptcha20poly1305_encrypt的第一个参数传递。
固定大小的阵列
从python调用时,固定大小数组的参数被包装在结构中。
考虑到Skycoin中的这些类型:
typePubKey[33]bytetypeSecKey[32]byte
这个导出函数:
funcGenerateDeterministicKeyPair(seed[]byte)(PubKey,SecKey)
这就是它在python中的用法:
#Generates random seederr,data=skycoin.SKY_cipher_RandByte(32)asserterr==skycoin.SKY_OKpubkey=skycoin.cipher_PubKey()seckey=skycoin.cipher_SecKey()err=skycoin.SKY_cipher_GenerateDeterministicKeyPair(data,pubkey,seckey)
pubkey和seckey是结构类型的对象,包含对应pubkey和seckey类型的字段名数据。例如:
cipher_PubKeystruct{data[33]byte;}cipher_PubKey;cipher_SecKeystruct{data[32]byte;};
其他切片
其他类型不同于byte的片被包装在类中。调用以下函数:
funcLoadConfig()(Config,error)func(cConfig)FullWalletPath()string0
可能是:
funcLoadConfig()(Config,error)func(cConfig)FullWalletPath()string1
内存管理
内存管理对用户是透明的。库中分配的任何对象都由python垃圾收集器管理。
制定规则
所有这些规则都要求skycoin是pyskycoin的git子模块
- 建立libc
- 编译Skycoin C语言库。
- 建立SWIG
- 创建包装器C代码以生成Python库。
- 发展
- 安装模块的开发人员版本。
- 检验
- 编译skycoin c语言库,创建包装器并执行tox。tox安装编译python库并执行测试。
开发设置
强烈建议开发人员使用 可用的Docker图像。 阅读Pyskycoin Docker文档 细节:
该项目有两个分支:master
和develop
development
是默认分支,将始终具有最新的代码。 位于gopath/src/github.com/skycoin/skycoin的子模块必须 与skycoin/skycoin同步
开发
分支。master
将始终等于网站上当前的稳定版本,并应与最新版本标记相对应。 位于gopath/src/github.com/skycoin/skycoin的子模块必须 与Skycoin/Skycoin同步
将创建单独的稳定开发分支,以处理支持
最新稳定版本的Skycoin。这些树枝的名字应该是天币
主版本号和次版本号后跟dev
后缀,例如0.25dev
。
这些分支可以从master
或development
分支分叉,并且
位于gopath/src/github.com/skycoin/skycoin的子模块必须
与
skycoin/skycoin
官方存储库的相应标签同步。
大多数情况下,稳定开发分支的创建都有以下原因:
- Skycoin版本增加了补丁版本号
- 针对针对 稳定版Skycoin
- 在
development
中添加的反向移植有用功能
运行测试
funcLoadConfig()(Config,error)func(cConfig)FullWalletPath()string2
发布
更新版本
- 如果
master
分支具有不在develop
中的提交(例如,由于对master
应用了修补程序),则将master
合并到develop
(并修复任何生成或测试失败) - 切换到名为release-x.y.z的新发布分支以准备发布。
- 确保位于
gopath/src/github.com/skycoin/skycoin
的子模块与https://github.com/skycoin/skycoin存储库中的相应标记同步。 < Updat >eskycoin/\uu init.py中的版本
- 运行
make build
以确保代码库是最新的
- update
changelog.md
:将"未发布"更改移动到版本并添加日期。 - 按照预发布测试中的步骤进行操作
- 将发布分支合并到
master
- 查看PR并将其合并
- 更新https://github.com/skycoin/repo-info/tree/master/repos/skycoin/remote" rel="nofollow">https://github.com/skycoin/repo-info/tree/master/repos/skycoin/remote中的文件,用于
simelotech/skycoindev dotnet
docker映像,为新版本和调整添加新文件g任何可能已更改的配置文本 - 用版本号标记
master
分支。版本标签以v开头,例如v0.20.0。在标签上签名。如果您在github中有gpg密钥,那么在github网站上创建一个版本将自动标记该版本。可以在命令行中使用git tag-as v0.20.0$commit\u id对其进行标记,但github不会将其识别为"release"。
- 发布版本由travis创建和上载。要手动执行此操作,请签出master分支,然后按照创建发布版本说明进行操作
- 签出
development
branch and bump\u version\uuu
到下一个dev
版本号
预释放测试
master
分支具有不在develop
中的提交(例如,由于对master
应用了修补程序),则将master
合并到develop
(并修复任何生成或测试失败)gopath/src/github.com/skycoin/skycoin
的子模块与https://github.com/skycoin/skycoin存储库中的相应标记同步。skycoin/\uu init.py中的版本
- 运行
make build
以确保代码库是最新的
- update
changelog.md
:将"未发布"更改移动到版本并添加日期。 - 按照预发布测试中的步骤进行操作
- 将发布分支合并到
master
- 查看PR并将其合并
- 更新https://github.com/skycoin/repo-info/tree/master/repos/skycoin/remote" rel="nofollow">https://github.com/skycoin/repo-info/tree/master/repos/skycoin/remote中的文件,用于
simelotech/skycoindev dotnet
docker映像,为新版本和调整添加新文件g任何可能已更改的配置文本 - 用版本号标记
master
分支。版本标签以v开头,例如v0.20.0。在标签上签名。如果您在github中有gpg密钥,那么在github网站上创建一个版本将自动标记该版本。可以在命令行中使用git tag-as v0.20.0$commit\u id对其进行标记,但github不会将其识别为"release"。
- 发布版本由travis创建和上载。要手动执行此操作,请签出master分支,然后按照创建发布版本说明进行操作
- 签出
development
branch and bump\u version\uuu
到下一个dev
版本号
在释放之前执行以下操作:
funcLoadConfig()(Config,error)func(cConfig)FullWalletPath()string3
发布签名
发行版使用此PGP密钥进行签名:
0x5801631bd27c7874
这把钥匙的指纹是:
funcLoadConfig()(Config,error)func(cConfig)FullWalletPath()string4
keybase.io帐户:https://keybase.io/gzc
备用签名密钥:
keybase.io帐户:https://keybase.io/olemis
这把钥匙的指纹是:
funcLoadConfig()(Config,error)func(cConfig)FullWalletPath()string5
按照项目验证签名的说明,执行 发行版及其签名可在发行版页中找到。
生成PGP密钥、发布该密钥、签名标记和二进制文件的说明:
https://gist.github.com/gz-c/de3f9c4343b2f1a27c640fe529b067c 发布版本应该从git标记创建。在更新发布版本之后,需要执行以下步骤
对于 发布版本应该从git标记创建。在更新发布版本之后,需要执行以下步骤
对于 如果 这与 这是在 这个包装器是由openapi生成器直接从版本v0.25.1的skycoin api的代码中自动生成的。 有关如何使用 要对Skycoin API的特定节点使用包装器,请执行下一步:创建发布版本
funcLoadConfig()(Config,error)func(cConfig)FullWalletPath()string
6
travis ci
和循环ci
创建manylinux的发布版本
64位的编译:
funcLoadConfig()(Config,error)func(cConfig)FullWalletPath()string
7
32位
生成:funcLoadConfig()(Config,error)func(cConfig)FullWalletPath()string
8
skyapi
遵循的过程相同。travis ci
和circle ci
中自动完成的,即使有手动完成的选项,此过程也应该是自动的。Skycoin API的Python包装器
python wrapper for skycoin api的更多详细信息,请参见自动生成的文档
推荐PyPI第三方库