以太坊Python智能合约开发指南

在以太坊上获得一个基本的智能合约是一个很简单的事,只需google查询“ERC20代币教程”,你会发现有关如何做到这一点的大量信息。以编程方式与合约交互完全是另一回事,如果你是一个Python程序员,那么教程就很少。所以写这个Python中的以太坊智能合约开发指南。

按我的统计对我们来说幸运的是,2017年Web3.py的第4版发布,这意味着现在比以往更容易运行python脚本并观察区块链上发生的神奇事情。像幽灵般的。

Piper Merriam,Jason Carver以及其他所有在Web3.py上努力工作以使我们其他人生活更轻松的人大声呼喊,在Sempo,我们正在使用以太坊来使灾难般的响应更加透明,而且它是只有Web3.py才能真正实现。

设置

首先我们进行设置,确保我们安装了相关的python库。

Python库无处不在,但它们的用途是什么?

有很多与以太坊相关的python库,但是当人们谈论以太坊时,有两个会出现很多:Web3.py和Pyethereum。乍一看,你应该使用哪一个并不明显。

Pyethereum

以太坊虚拟机(EVM)的Python实现。反过来,EVM是以太坊协议的一部分,它实际运行智能合约中的代码并确定其输出。因此,如果你想在Python中运行以太坊节点,那么Pyethereum是一个很好的起点。

即使你非常高兴在不运行自己的节点的情况下运行智能合约,Pyethereum仍然是一个很好的库,它包含许多功能,可以执行有用的功能,例如从私钥计算用户的地址等等。

Web3.py

用于实际与以太坊区块链交互的库。我们谈论的事情包括在账户之间转移以太网,发布智能合约以及触发附加现有智能合约的功能。它受到流行的JavaScript库Web3.js的启发,它将成为我们在本教程中使用的主库。

好的,少说多做!

起初我尝试使用Python3.5版本,但在运行时我遇到了问题,显然是由Python的类型提示造成的。基于Python3.6创建虚拟环境解决了这个问题,所以我建议你做同样的事情。

继续并pip-install web3 (确保你获得版本4)。

除非你喜欢花钱,否则你需要在以太坊测试网上使用钱包,例如Ropsten和其他大量以太玩法。一个简单的方法是下载Chrome的Metamask扩展,并从那里创建一个新帐户。

确保你还选择左侧的’Ropsten Test Net’。

即使你的现有钱包中包含真正的以太币,我也强烈建议你为开发目的创建一个新的钱包。我们将使用私钥做一些相对无法预测的事,所以如果它们不小心变成公共主网络的话就不会有问题(公私钥?)

为新创建的钱包获取测试Ether非常简单:只需访问faucet.metamask.io并点击“请求来自faucet的1个 以太”。对于我们将要做的事情,这应该是充足的。

最后,因为我们将在没有托管我们自己的节点的情况下使用Ropsten TestNet,我们需要一个可以连接Blockchain的供应商。Infura.io适用于此,所以去那里创建一个免费帐户。记下Ropsten TestNet的提供者URL(看起来像https://ropsten.infura.io/FE2Gfedcm3tfed3)。

部署智能合约

使用Python来部署智能合约而不运行自己的节点是非常困难的,所以我们将在这一步上做点儿手脚。对于许多智能合约用例,你只需要执行一次。

正如我之前提到的,有关如何部署ERC20合约的百万条指南,因此我们将部署一些不同的(并且更方便地更短)。

问:谁喜欢在互联网上分享他们的意见?

大家都喜欢?

好答案。以下我称之为“Soap Box”肥皂盒的智能合约允许任何人向区块链广播他们想要的任何意见,在永恒的剩余时间(给予或接受)可以看到它。

但是有一个问题:只有支付了必要的0.02以太网费用的地址才能播出他们的意见。听起来不太公平,但就这样。

Remix,以太坊的在线代码编辑器非常出色,因此在那里创建一个新文件并粘贴以下代码。它是用Solidity(Smart Contracts的编程语言)编写的。如果代码没有太多意义并不重要,我们将在稍后详细介绍相关部分,但最终这是一个Python教程。

pragma solidity ^0.4.0;
contract SoapBox {
// Our 'dict' of addresses that are approved to share opinions   
//我们批准分享意见的地址的“字典” 
    mapping (address => bool) approvedSoapboxer;
    string opinion;
     
    // Our event to announce an opinion on the blockchain  
	//我们的事件发布对区块链的意见 
 
    event OpinionBroadcast(address _soapboxer, string _opinion);
// This is a constructor function, so its name has to match the contract   
//这是一个构造函数,所以它的名字必须与合约相匹配 

    function SoapBox() public {
    }
    
    // Because this function is 'payable' it will be called when ether is sent to the contract address.
	//因为这个函数是“支付”,所以当以太网被发送到合约地址时将被调用。 
    function() public payable{
        // msg is a special variable that contains information about the transaction
		// msg是一个特殊变量,包含有关交易的信息 
        if (msg.value > 20000000000000000) {  
            //if the value sent greater than 0.02 ether (in Wei)
			//如果发送的值大于0.02 ether(在Wei中) 
            // then add the sender's address to approvedSoapboxer 
			//然后将发件人的地址添加到approvedSoapboxer 
            approvedSoapboxer[msg.sender] =  true;
        }
    }
    
    
    // Our read-only function that checks whether the specified address is approved to post opinions.
	//我们的只读函数,用于检查指定地址是否被批准发布意见。 
    function isApproved(address _soapboxer) public view re
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值