factom api的python客户端库

factom-api的Python项目详细描述


这个库为python客户机提供了与factomd交互的功能。 和factom walletd api。但并不是所有的api方法都已经实现 然而,您将发现构建工作应用程序所需的大部分内容 以及实现公共 钱包和守护进程之间涉及多个调用的任务。

因为Python2正在到达EOL,所以这个API客户机(来自版本1.0.0 (以后)针对Python3.5及更高版本。

如果您不熟悉factom,我建议您read the documentation,特别是white paper。 简而言之,factom在比特币区块链的顶部提供了一层 使其能够比 比特币网络将允许单独使用。

开始

安装api客户端

最简单的安装方法是直接从pip:

$ pip install factom-api

用法

我将介绍一些常见的操作 应用。一般来说你需要钱包和 用于生成和提交事务的factomd客户端。创建新客户:

fromfactomimportFactomd,FactomWalletd# Default settingsfactomd=Factomd()walletd=FactomWalletd()# You can also specify default fct and ec addresses, change host, or specify RPC credentials, for example:fct_address='FA2jK2HcLnRdS94dEcU27rF3meoJfpUcZPSinpb7AwQvPRY6RL1Q'ec_address='EC2jhmCtabeTXGtuLi3AaPzvwSuqksdVsjfxXMXV5gPmipXc4GjC'factomd=Factomd(host='http://someotherhost:8088',fct_address=fct_address,ec_address=ec_address,username='rpc_username',password='rpc_password')

处理factoid到factoid

首先,让我们查询两个fct地址中的余额:

>>>fct_address1='FA2jK2HcLnRdS94dEcU27rF3meoJfpUcZPSinpb7AwQvPRY6RL1Q'>>>fct_address2='FA3TMQHrCrmLa4F9t442U3Ab3R9sM1gThYMDoygPEVtxrbHtFRtg'>>>ec_address='EC2jhmCtabeTXGtuLi3AaPzvwSuqksdVsjfxXMXV5gPmipXc4GjC'# Initialize the two clients>>>factomd=Factomd()>>>walletd=FactomWalletd()# Query the balance in our first address. There should be a large amount>>>factomd.factoid_balance(fct_address1){'balance':1999999735950}# The second address should be empty.>>>factomd.factoid_balance(fct_address2){'balance':0}

wallet客户端提供了一个shorcut方法fct_to_fct() 执行向fct提交简单fct所需的所有api调用 交易。这包括添加输入和输出,计算 费用,建立签署的交易,并提交给网络。

>>>walletd.fct_to_fct(factomd,50000,fct_to=fct_address2,fct_from=fct_address1){'message':'Successfully submitted the transaction','txid':'a4d641f13d82b1d1682549d44fa41c7e1b01f1a16f8cbddb5c695df53fcebfd7'}

服务器报告事务已提交,如果我们稍等 我们可以看到结果的秒数:

>>>factomd.factoid_balance(fct_address2){'balance':50000}

将factoid转换为entry credits

我们的新入帐信用地址的余额应为零:

>>>factomd.entry_credit_balance(ec_address){'balance':0}

首先,我们需要询问转换率:

>>>factomd.entry_credit_rate(){'rate':1000}

这就告诉我们,我们需要烧掉1000个factoid来换取1个条目 信用卡,那么让我们购买50个进入信用卡50000工厂。类似 对于fct_to_fct(),wallet客户端还提供一个fct_to_ec() 建立和提交简单的fct转换事务的快捷方式。

>>>walletd.fct_to_ec(factomd,50000,fct_address=fct_address1,ec_address=ec_address){'message':'Successfully submitted the transaction','txid':'d70b14ce05a21dbf772d1894383694b4537e17454915fc42dc20f02c1e0e2df2'}

如果我们查询我们的分录贷方余额,我们会发现转换 发生时间:

>>>factomd.entry_credit_balance(ec_address){'balance':50}

编写链和条目

真正的肉和土豆是一种容易读写的能力 数据到区块链。让我们写一些测试数据。钱包客户 提供处理api调用的new_chain()快捷方式方法 以及创建新链所需的编码。你也可以建造 如果您希望对每个步骤进行更多控制,请手动进行事务处理,但是 大多数情况下,这会更容易。

>>>walletd.new_chain(factomd,['random','chain','id'],'chain_content',ec_address=ec_address){'message':'Entry Reveal Success','entryhash':'f9662a4675f4bb6566337eafd8237ab9fd2ba396947dadeb677c0526d367a5ce','chainid':'da2ffed0ae7b33acc718089edc0f1d001289857cc27a49b6bc4dd22fac971495'}

如果我们等几分钟,在资源管理器中搜索链ID, 可以看到我们的初始条目:

Our new chain

我们的新链条

现在,让我们在同一个链中添加另一个条目:

>>>chain_id='da2ffed0ae7b33acc718089edc0f1d001289857cc27a49b6bc4dd22fac971495'>>>walletd.new_entry(factomd,chain_id,['random','entry','id'],'entry_content',ec_address=ec_address){'message':'Entry Reveal Success','entryhash':'96f0472c9ec8a76c861fb4df37beb742938f41bbe492dc04893337bf387b83c5','chainid':'da2ffed0ae7b33acc718089edc0f1d001289857cc27a49b6bc4dd22fac971495'}

您应该很快就会看到新条目出现。

阅读条目

如果链中的条目相互引用,则可能需要扫描 整个链条以验证其完整性。factomd客户端 提供一个read_chain()方法,该方法遍历所有 包含块并按相反顺序返回项列表的项。

>>>chain_id='da2ffed0ae7b33acc718089edc0f1d001289857cc27a49b6bc4dd22fac971495'>>>factomd.read_chain(chain_id)[{'chainid':'da2ffed0ae7b33acc718089edc0f1d001289857cc27a49b6bc4dd22fac971495','extids':['random','entry','id'],'content':'entry_content'},{'chainid':'da2ffed0ae7b33acc718089edc0f1d001289857cc27a49b6bc4dd22fac971495','extids':['random','chain','id'],'content':'chain_content'}]

您可以看到我们前面创建的两个条目。

错误处理

当事情变得糟糕时,api方法将引发 factom.exceptions.FactomAPIError提供有关错误的详细信息。

>>>walletd.new_chain(factomd,['random','chain','id'],'chain_content',ec_address=ec_address)Traceback(mostrecentcalllast):File"<stdin>",line1,in<module>File"/src/factom/client.py",line196,innew_chain'ecpub':ec_addressorself.ec_addressFile"/src/factom/client.py",line56,in_requesthandle_error_response(resp)File"/src/factom/exceptions.py",line18,inhandle_error_responseraisecodes[code](message=message,code=code,data=data,response=resp)factom.exceptions.InvalidParams:-32602:Invalidparams

有关错误的更多数据附加到异常实例:

>>>try:...walletd.new_chain(factomd,['random','chain','id'],'chain_content',ec_address=ec_address)...exceptFactomAPIErrorase:...print(e.data)...Chainda2ffed0ae7b33acc718089edc0f1d001289857cc27a49b6bc4dd22fac971495alreadyexists

如果您想捕获更具体的错误,则有异常 API返回的不同错误代码的子类。见 factom/exceptions.py用于列表。

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

推荐PyPI第三方库


热门话题
java Rest DSL路由无法启动路由,因为同一端点不允许有多个使用者   jvm有没有像JConsole或VisualVM这样的工具可以告诉我“类、对象、引用变量在java中存储在哪里?”   java为什么我的列表中的所有元素看起来都一样?   java运行时。运行shell脚本的exec无法打开文件   JPopupMenu的JMenuItem的java热键   会话在Java中被覆盖   如何在java中去除字符串中的尖锐重音?   java Mockito监视一个接口,模拟它的默认方法,获取NullPointerException   javascript如何在jquery中禁用同一时间选择   将数组列表附加到现有CSV文件,但它会附加并清除存储在Java文件中的以前的数据   java从我的jar中访问pdf文件   java Sonar issue参数必须为非Null,但标记为可为Null   java Salesforce流式API:在网络故障之后和重新订阅之前获取事件   在Java 1.8.0_65上运行Play2.0应用程序时出现playframework错误   java为什么字母的ASCII由方法自动转换。toCharArray()?   java如何知道JDialog是否关闭?   java向服务器发送POST请求,服务器的响应为null,启动   java如何设置JTable中特定单元格的值?   ImagePlus中的java保存问题