python如何使用web3py与以太坊投资智能合约交互

在以太坊和其他区块链中,仍有很多被证明的概念正在实施,开发人员在尝试如何应对这些新概念。作为dInvest 系列文章一部分,我也在研究以太坊并尝试在区块链中实施对冲基金。在上一篇文章中,我讨论了如何在python中启动和运行定量框架。在这篇文章中,我将介绍如何将python程序与以太坊智能合约集成。出于这样或那样的原因,可能也面临着这个问题,尽管以太坊提供了图灵完备语言,但并不是所有事情都能完成。

假设你已经在以太坊创建了一个简单的教程合约,现在想要看一些更高级的东西。我个人喜欢ManuelAráoz的Hitchhiker智能合约指南,以边可以开始使用更复杂的代码,设置testrpc和truffle。建议大家看看。

dInvest智能合约
dInvest由一份智能合约组成,负责进行投资,验证投资标准和回报分配。合约规定了公共职能部门,以创造新的投资和撤资,这将成为对冲基金的主要职能。对冲基金的用户通过其以太坊地址来识别,该地址相当于公钥。投资策略和策略执行的建议在具有以太坊地址的不同代理中完成。这些代理仅由合约创建者设置。当用户创建投资时,可以根据标准行业分类代码指定由两位数字标识的行业部门列表。在进行投资时,这些部门可以被确定为黑名单。因此,用户有能力控制对冲基金将投资的行业。

合同可以在the GitHub repo中找到。

与智能合约的互动
要与智能合约进行交互,有几个选项,包括RPC或JavaScript API。我发现与其他程序(如python程序)的以太坊智能合约进行交互的最简单方法是使用他们的web3 JavaScript API。因为dInvest的大部分都是用python编写的,所以我想坚持使用该语言而不是包含JS。幸运的是,python中有一个web3实现。为了启动并运行dInvest设置,我切换到virtualenv,我还安装了zipline,然后使用pip install web3安装web3。

使用web3,有三个步骤可以让你启动并运行以与智能合约进行交互:

得到你的ABI
设置RPC连接
与智能合约互动
在接下来的部分中,我将详细介绍如何实现这三个步骤。我主要使用它作为其他程序的python模块。最后我们的python模块结构可能如下所示:

contract
|-- init.py
|-- ContractHandler.py
|-- your-contract-name.json
得到你的ABI
现在,要与任何智能合约进行交互,你需要合同定义的应用程序二进制接口(ABI)。ABI是一种静态的强类型接口。无论何时创建新合约或更改现有合约,你的ABI也可能发生变化。根据我的经验,获得智能合约的当前ABI的最简单方法(可能是你的或任何你有源代码的合约)是去https://ethereum.github.io/browser-solidity/并复制/粘贴你的代码。然后按右上侧的Compile按钮,将Interface字段中的整个字符串复制到your-contract-name.json文件中。拥有该JSON后,你的web3接口将知道如何与合约进行交互。

设置RPC提供程序
下一步,你需要连接到RPC提供程序。在你的python文件(例如ContractHandler.py)中包含这些代码行:

from web3 import Web3, TestRPCProvider

class ContractHandler:
def init(self):
self.web3 = Web3(RPCProvider(host=‘localhost‘, port=‘8545‘))
with open(str(path.join(dir_path, ‘contract_abi.json‘)), ‘r‘) as abi_definition:
self.abi = json.load(abi_definition)
self.contract_address = your_contract_address
self.contract = self.web3.eth.contract(self.abi, self.contract_address)
我更喜欢将我的配置放在一个单独的文件中。有很多方法可以做到这一点,似乎python中没有标准。我想使用txt文件并不是最好的选择,我很快打算切换到yml。另请参见https://martin-thoma.com/configuration-files-in-python/。确保在开始程序之前运行你最喜爱的以太坊客户端(例如geth --rpc)。

与智能合约互动
注意:在与你自己的帐户进行交互之前,你需要先将其解锁。这是通过web3实现的:

self.web3.personal.unlockAccount(your_ethereum_account, your_ethereum_password)
如果要在合约中调用函数,可以通过调用ABI合约定义的命令来执行此操作。在我们的dInvest示例中,有一个合约调用它为我们的可持续投资返回黑名单公司。它可以这样调用:

blacklist = self.contract.call().blackListCompanies()
GitHub代码中有更多示例可用。

最后的说明
最后,我想指出,还有其他区块链解决方案,如Hyperledger Fabric或Tendermint,旨在解决与其他编程语言兼容的问题,交易吞吐量等。因为他们是需要许可证的区块链我还没有给尝试他们,但有机会看看可能会很有趣。

当然,python用web3.py库开发以太坊来说非常的方便,有兴趣的用户可以关注我们的python以太坊教程,主要是针对python工程师使用web3.py进行区块链以太坊开发的详解。

另外其他语言可以学习的以太坊教程如下:

web3j教程,主要是针对java和android程序员进行区块链以太坊开发的web3j详解。
以太坊教程,主要介绍智能合约与dapp应用开发,适合入门。
以太坊开发,主要是介绍使用node.js、mongodb、区块链、ipfs实现去中心化电商DApp实战,适合进阶。
php以太坊,主要是介绍使用php进行智能合约开发交互,进行账号创建、交易、转账、代币开发以及过滤器和事件等内容。
C#以太坊,主要讲解如何使用C#开发基于.Net的以太坊应用,包括账户管理、状态与交易、智能合约开发与交互、过滤器和事件等。

原文地址:http://blog.51cto.com/13963665/2174390

时间: 2024-10-11 21:25:29

python如何使用web3py与以太坊投资智能合约交互的相关文章

以太坊代币合约详析

以太坊代币 在以太坊系统中,存在作为基础货币的 Ether(以太),以及同样可以作为货币使用的 Token(代币). 以太坊与其他加密货币的主要不同在于,以太坊不是单纯的货币,而是一个环境/平台.在这个平台上,任何人都可以利用区块链的技术,通过智能合约来构建自己的项目和DAPPS(去中心化应用). 如果把以太坊理解成互联网,DAPPS则是在上面运行的网页.DAPPS是去中心化的,意味着它不属于某个人,而是属于一群人.DAPPS发布的方式通常是采用被称为 ICO 的众筹方式.简单来说,你需要用你的

以太坊是什么 - 以太坊开发入门指南

很多同学已经跃跃欲试投入到区块链开发队伍当中来,可是又感觉无从下手,本文将基于以太坊平台,以通俗的方式介绍以太坊开发中涉及的各晦涩的概念,轻松带大家入门. 以太坊是什么 以太坊(Ethereum)是一个建立在区块链技术之上, 去中心化应用平台.它允许任何人在平台中建立和使用通过区块链技术运行的去中心化应用. 对这句话不理解的同学,姑且可以理解为以太坊是区块链里的Android,它是一个开发平台,让我们就可以像基于Android Framework一样基于区块链技术写应用. 在没有以太坊之前,写区

第18讲 | 智能合约与以太坊

在前面的文章里,我们介绍了区块链的核心技术,也穿插介绍了一些项目.然而每个区块链都有自己的特色,接下来我们将针对每个项目进行详细讲解.今天我们就来讲讲智能合约和以太坊项目. 今天我们从智能合约这个概念入手,聊聊什么是以太坊项目以及它的发展历史.最后还会介绍几款钱包给你,希望通过今天文章的讲解,你也可以尝试在以太坊上编写简单的智能合约. 智能合约的概念 不同于法律意义上的合约概念,区块链领域的合约表达的是可以“自治自理”的 计算机协议,这套协议具有自我执行.自我验证的属性. 如果完全从技术角度来看

以太坊(三)

总览 以太坊虚拟机(EVM)是以太坊中智能合约的运行环境.它不仅被沙箱封装起来,事实上它被完全隔离,也就是说运行在EVM内部的代码不能接触到网络.文件系统或者其它进程.甚至智能合约与其它智能合约只有有限的接触. 账户 以太坊中有两类账户,它们共用同一个地址空间.外部账户,该类账户被公钥-私钥对控制(人类).合约账户,该类账户被存储在账户中的代码控制. 外部账户的地址是由公钥决定的,合约账户的地址是在创建改合约时确定的(这个地址由合约创建者的地址和该地址发出过的交易数量计算得到,地址发出过的交易数

使用 Go-Ethereum 1.7.2搭建以太坊私有链

1.什么是Ethereum(以太坊) 以太坊(Ethereum)并不是一个机构,而是一款能够在区块链上实现智能合约.开源的底层系统,以太坊从诞生到2017年5月,短短3年半时间,全球已有200多个以太坊应用诞生.以太坊是一个平台和一种编程语言,使开发人员能够建立和发布下一代分布式应用. 以太坊可以用来编程,分散,担保和交易任何事物:投票,域名,金融交易所,众筹,公司管理, 合同和大部分的协议,知识产权,还有得益于硬件集成的智能资产. 以太坊的白皮书:https://github.com/ethe

区块链,使用 Go-Ethereum 搭建以太坊私有链

1.什么是Ethereum(以太坊) 以太坊(Ethereum)并不是一个机构,而是一款能够在区块链上实现智能合约.开源的底层系统,以太坊从诞生到2017年5月,短短3年半时间,全球已有200多个以太坊应用诞生.以太坊是一个平台和一种编程语言,使开发人员能够建立和发布下一代分布式应用. 以太坊可以用来编程,分散,担保和交易任何事物:投票,域名,金融交易所,众筹,公司管理, 合同和大部分的协议,知识产权,还有得益于硬件集成的智能资产. 以太坊的白皮书:https://github.com/ethe

以太坊智能合约入门项目-众筹项目

一.智能合约 智能合约(英语:Smart Contract)是一种旨在以信息化方式传播.验证或执行合同的计算机协议.智能合约允许在没有第三方的情况下进行可信交易.这些交易可追踪且不可逆转.智能合约概念于1994年由Nick Szabo首次提出. 以上解释来自于维基百科 由于缺少可信的执行环境,智能合约并没有被应用到实际产业中,自比特币诞生后,人们认识到比特币的底层技术区块链天生可以为智能合约提供可信的执行环境,以太坊首先看到了区块链和智能合约的契合,发布了白皮书<以太坊:下一代智能合约和去中心化

基于以太坊实现代币发布

https://blog.csdn.net/Y_xiaohe1234/article/details/76848150 一.什么是代币?代币是利用以太坊的智能合约编写的数字货币.程序员可以通过编写智能合约代码,创建一种新的数字货币.你可以实现的功能: 基本功能:-创建数字货币,设置货币的名称.货币总量.货币图标等基本参数.-创建货币交易功能.实现货币在不同用户之间的转移. 上面的是基本功能,已经可以实现基本的代表交换,下面是高级功能,可以实现更加复杂的应用.高级功能:-创建货币的管理者.虽然区块

智能合约语言 Solidity 教程系列7 - 以太单位及时间单位

这是Solidity教程系列文章第7篇介绍以太单位及时间单位,系列带你全面深入理解Solidity语言.Solidity 系列完整的文章列表请查看分类-Solidity. 写在前面 Solidity 是以太坊智能合约编程语言,阅读本文前,你应该对以太坊.智能合约有所了解,如果你还不了解,建议你先看以太坊是什么 货币单位(Ether Units) 一个数字常量(字面量)后面跟随一个后缀wei, finney,szabo或ether,这个后缀就是货币单位.不同的单位可以转换.不含任何后缀的默认单位是