Skycoin Python库

pyskycoin的Python项目详细描述


皮斯基币

构建状态

Skycoin API的Python扩展。 使用swig生成的python扩展,可从python访问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()string
0

可能是:

funcLoadConfig()(Config,error)func(cConfig)FullWalletPath()string
1

内存管理

内存管理对用户是透明的。库中分配的任何对象都由python垃圾收集器管理。

制定规则

所有这些规则都要求skycoin是pyskycoin的git子模块

  • 建立libc
    • 编译Skycoin C语言库。
  • 建立SWIG
    • 创建包装器C代码以生成Python库。
  • 发展
    • 安装模块的开发人员版本。
  • 检验
    • 编译skycoin c语言库,创建包装器并执行tox。tox安装编译python库并执行测试。

开发设置

强烈建议开发人员使用 可用的Docker图像。 阅读Pyskycoin Docker文档 细节:

该项目有两个分支:masterdevelop

  • development是默认分支,将始终具有最新的代码。 位于gopath/src/github.com/skycoin/skycoin的子模块必须 与skycoin/skycoin同步开发分支。
  • master将始终等于网站上当前的稳定版本,并应与最新版本标记相对应。 位于gopath/src/github.com/skycoin/skycoin的子模块必须 与Skycoin/Skycoin同步

将创建单独的稳定开发分支,以处理支持 最新稳定版本的Skycoin。这些树枝的名字应该是天币 主版本号和次版本号后跟dev后缀,例如0.25dev。 这些分支可以从masterdevelopment分支分叉,并且 位于gopath/src/github.com/skycoin/skycoin的子模块必须 与skycoin/skycoin官方存储库的相应标签同步。

大多数情况下,稳定开发分支的创建都有以下原因:

  • Skycoin版本增加了补丁版本号
  • 针对针对 稳定版Skycoin
  • development
  • 中添加的反向移植有用功能

运行测试

funcLoadConfig()(Config,error)func(cConfig)FullWalletPath()string
2

发布

更新版本
  1. 如果master分支具有不在develop中的提交(例如,由于对master应用了修补程序),则将master合并到develop(并修复任何生成或测试失败)
  2. 切换到名为release-x.y.z的新发布分支以准备发布。
  3. 确保位于gopath/src/github.com/skycoin/skycoin的子模块与https://github.com/skycoin/skycoin存储库中的相应标记同步。
  4. < Updat >eskycoin/\uu init.py中的版本
  5. 运行make build以确保代码库是最新的
  6. updatechangelog.md:将"未发布"更改移动到版本并添加日期。
  7. 按照预发布测试中的步骤进行操作
  8. 将发布分支合并到master
  9. 查看PR并将其合并
  10. 更新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 dotnetdocker映像,为新版本和调整添加新文件g任何可能已更改的配置文本
  11. 用版本号标记master分支。版本标签以v开头,例如v0.20.0。在标签上签名。如果您在github中有gpg密钥,那么在github网站上创建一个版本将自动标记该版本。可以在命令行中使用git tag-as v0.20.0$commit\u id对其进行标记,但github不会将其识别为"release"。
  12. 发布版本由travis创建和上载。要手动执行此操作,请签出master分支,然后按照创建发布版本说明进行操作
  13. 签出developmentbranch and bump\u version\uuu到下一个dev版本号

预释放测试

在释放之前执行以下操作:

funcLoadConfig()(Config,error)func(cConfig)FullWalletPath()string
3

发布签名

发行版使用此PGP密钥进行签名:

0x5801631bd27c7874

这把钥匙的指纹是:

funcLoadConfig()(Config,error)func(cConfig)FullWalletPath()string
4

keybase.io帐户:https://keybase.io/gzc

备用签名密钥:

keybase.io帐户:https://keybase.io/olemis

这把钥匙的指纹是:

funcLoadConfig()(Config,error)func(cConfig)FullWalletPath()string
5

按照项目验证签名的说明,执行

发行版及其签名可在发行版页中找到。

生成PGP密钥、发布该密钥、签名标记和二进制文件的说明: https://gist.github.com/gz-c/de3f9c4343b2f1a27c640fe529b067c

创建发布版本

发布版本应该从git标记创建。在更新发布版本之后,需要执行以下步骤

funcLoadConfig()(Config,error)func(cConfig)FullWalletPath()string
6

对于travis ci循环ci

创建manylinux的发布版本

发布版本应该从git标记创建。在更新发布版本之后,需要执行以下步骤

对于64位的编译:

funcLoadConfig()(Config,error)func(cConfig)FullWalletPath()string
7

如果32位生成:

funcLoadConfig()(Config,error)func(cConfig)FullWalletPath()string
8

这与skyapi遵循的过程相同。

这是在travis cicircle ci中自动完成的,即使有手动完成的选项,此过程也应该是自动的。

Skycoin API的Python包装器

这个包装器是由openapi生成器直接从版本v0.25.1的skycoin api的代码中自动生成的。

有关如何使用python wrapper for skycoin api的更多详细信息,请参见自动生成的文档

要对Skycoin API的特定节点使用包装器,请执行下一步:

啊!

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java JavaFX:绑定未意外工作   java按顺序遍历两个二叉树,比较哪一个更大   maven如何避免多次加载librxtxSerial。所以在爪哇   google app engine如何在GAE java中为自定义用户数据库创建cookie?   java将内容添加到浮点数组的末尾,如下所示   令牌“+”上的java语法错误,AssignmentOperator无效   java LibGDX Sprite不同时使用“Rotate”和“setRotation”旋转   java字符串数组无需同步?   java如何将击键Z添加到按键(KeyEvent e)以将球跳跃/重新绘制到新的随机位置?(使用了KeyListener演示。)   java如何使用jnlp文件在控制面板的“添加或删除程序”中设置“版本”   java捕获两个异常,一个是另一个的超类   ant在更新到Java8之后,在JiBX绑定[bind]java期间出错。lang.IllegalStateException:加载类java时出错。lang.CharSequence   安卓缓冲区错误转换结果java时出错。朗努尔。。。和JSON ParserError解析数据组织。json。JSONException   java如何在Firebase中从实时数据库检索数据?   java将Jsch放入连接池的细节