欢迎学习Populus框架!Populus几乎拥有以太坊区块链开发所需的一切。
Populus有以下系统依赖关系:
此外,杨树需要一些其他的系统依赖性,才能安装PyEthereum库。
sudo apt-get install libssl-dev
sudo yum install openssl-devel
brew install pkg-config libffi autoconf automake libtool openssl
Populus可以通过pip来进行安装:
$ pip install populus
如果你在Ubuntu上安装,python3(推荐)上运行的话 :
$ pip3 install populus
重要的提示:
Ubuntu下使用Ubuntu’s pip:
$sudo apt-get install python-pip
或者python 3:
$sudo apt-get install python3-pip
你可能需要安装populus用sudo权限:
$ sudo -H pip install populus
从源代码安装可以通过以下命令从项目的根目录完成。
$ python setup.py install
验证安装:
$ populus
Usage: populus [OPTIONS] COMMAND [ARGS]...
Populus
Options:
-p, --project PATH Specify a populus project directory
-l, --logging TEXT Specify the logging level. Allowed values are
DEBUG/INFO or their numeric equivalents 10/20
-h, --help Show this message and exit.
Commands:
chain Manage and run ethereum blockchains.
compile Compile project contracts, storing their...
config Manage and run ethereum blockchains.
deploy Deploys the specified contracts to a chain.
init Generate project layout with an example...
没问题的话,就可以开始第一个项目了。
Populus是一个开发环境。它的设计目的是为了让Python以太坊开发者轻松和有趣。我们使用测试区块链、演示帐户、简单密码、帮助你专注于代码本身。
但是一旦代码准备好用真实的以太坊进行工作和部署,你就应该小心了。因为在Xcode模拟器中运行iOS应用程序和iPhone上的应用程序的实际操作之间有明显的区别,或者在另一个示例中,在一个运行在127.0.0.1的网站上,而不是在一个真正的服务器上运行它,这个服务器被链接到整个互联网,当你在真实以太坊部署和发送时,区块链开发环境,是有明显区别的。
作为开发人员的核心问题是,一旦你打开帐户,就有一个进程运行访问你的以太坊。任何错误或安全漏洞都会导致一些损失。这不是测试区块链和测试时的以太币的问题,而是真实的。
通常情况下:
幸运的是,有简单有效的方法来保障你的账户和资金安全,看这里。
Populus可以初始化你的项目通过$ populus init
命令:
$ populus init
Wrote default populus configuration to `./populus.json`.
Created Directory: ./contracts
Created Example Contract: ./contracts/Greeter.sol
Created Directory: ./tests
Created Example Tests: ./tests/test_greeter.py
这样你的项目就会有一个./contracts
目录,和一个名字为Greeter.sol
的solidity源文件;还有一个./tests
目录,和一个名字为test_greeter.py
测试文件。
你也可以通过新建一个自己的目录初始化一个新项目:
$ populus -p /path/to/my/project/ init
在编译我们的项目之前,让我们先看一下作为项目初始化的一部分生成的Greeter智能合约。
$ nano contracts/Greeter.sol
注意检查你的IDE是否安装好了solidity的扩展包。
智能合约的代码是这样的:
pragma solidity ^0.4.11;
contract Greeter {
string public greeting;
function Greeter() {
greeting = "Hello";
}
function setGreeting(string _greeting) public {
greeting = _greeting;
}
function greet() constant returns (string) {
return greeting;
}
}
Greeter是一个简单的智能合约:
contract
关键字开始合约定义。state
变量,命名为greeting
。function Greeter()
,以字符串Hello
的默认问候来初始化。greet
函数被公开,并返回设置的任何字符串作为问候语。setGreeting
功能可用,并允许问候语被改变。你可以使用命令$ populus compile
进行编译:
$ populus compile
============ Compiling ==============
> Loading source files from: ./contracts
> Found 1 contract source files
- contracts/Greeter.sol
> Compiled 1 contracts
- Greeter
> Wrote compiled assets to: ./build/contracts.json
可以指定编译后的目录:
$ populus -p /path/to/my/project/ compile
build/contracts.json
文件包含了solidity编译器产生的大量信息。这是部署和使用合约所必需的。一些重要的信息是合约的应用程序二进制接口(ABI),它允许在编译后调用合约的函数,以及部署合同所需的二进制代码,一旦合约部署到区块链链上的二进制代码就开始运行了。
现在你有了一个基本的合约,你会想测试它的行为是否符合预期。项目应该已经有一个名为test_greeter.py
的测试模块,它位于./tests
目录中,如下所示:
def test_greeter(chain):
greeter, _ = chain.provider.get_or_deploy_contract('Greeter')
greeting = greeter.call().greet()
assert greeting == 'Hello'
def test_custom_greeting(chain):
greeter, _ = chain.provider.get_or_deploy_contract('Greeter')
set_txn_hash = greeter.transact().setGreeting('Guten Tag')
chain.wait.for_receipt(set_txn_hash)
greeting = greeter.call().greet()
assert greeting == 'Guten Tag'
你应该看到两个测试,一个测试默认问候语,一个测试我们可以设置自定义问候语。
注意,两个测试函数都接受chain
参数。这个chain
实际上是py.test fixture,由populus的 pytest插件提供。测试中的链是一个populus chain
对象,运行一个称为tester
的临时区块链。测试链是短暂的。所有区块链状态在每次测试运行开始时会被重置,并且只存储在内存中,因此显然不能长期运行智能合约,但对测试非常有用。
可以安装Populus时安装py.test
在线实用测试工具。
$ py.test tests/
collected 2 items
tests/test_greeter.py::test_greeter PASSED
tests/test_greeter.py::test_custom_greeting PASSED
你应该看到一些类似于上述输出的三个测试通过。
最后,类似于测试部署,从命令行测试相同的部署:
$ populus deploy --chain tester --no-wait-for-sync
> Found 1 contract source files
- contracts/Greeter.sol
> Compiled 1 contracts
- contracts/Greeter.sol:Greeter
Please select the desired contract:
0: Greeter
在提示符下键入0,然后回车:
Beginning contract deployment. Deploying 1 total contracts (1 Specified, 0 because of library dependencies).
Greeter
Deploying Greeter
Deploy Transaction Sent: 0x84d23fa8c38a09a3b29c4689364f71343058879639a617763ce675a336033bbe
Waiting for confirmation...
Transaction Mined
=================
Tx Hash : 0x84d23fa8c38a09a3b29c4689364f71343058879639a617763ce675a336033bbe
Address : 0xc305c901078781c232a2a521c2af7980f8385ee9
Gas Provided : 465729
Gas Used : 365729
Verified contract bytecode @ 0xc305c901078781c232a2a521c2af7980f8385ee9
Deployment Successful.
ok。当然,由于这是一个特设的tester
区块链,它立即退出,什么都没有真正保存。但是部署工作,应该工作在一个永久性的区块链上,如主干网(公有链)或TestNET(测试链).
下面是在项目目录之外时使用:
$ populus -p /path/to/my/project/ deploy --chain tester --no-wait-for-sync
为了在本地配置项目并使整个测试套件通过,需要确保你使用的是正确版本的solc
编译器。按照以下步骤安装所有依赖项:
如果你还没有,请继续安装virtualenv
使用pip install virtualenv
。然后可以用以下命令创建和激活Populus环境:
$ cd populus
$ virtualenv populus
$ source populus/bin/activate
这允许你安装特定版本的Populus依赖,而不必与你在计算机上已经拥有的全局安装相冲突。
现在,运行以下命令以安装除solc
之外的项目中指定的所有依赖项:
$ pip install -r requirements-dev.txt
$ pip install -r requirements-docs.txt
$ pip install -e .
你必须安装Solidity,建议0.4.11或更高的发布版本。
二进制的安装脚本:
https://github.com/ethereum/py-solc#installing-the-solc-binary
安装脚本:
首先,复制存储库并切换到合适的分支:
$ git clone --recursive https://github.com/ethereum/solidity.git
$ cd solidity
$ git checkout release_0.4.13
你也可以下载压缩文件:
https://github.com/ethereum/solidity/releases
注意使用tar.gz文件从源代码构建的话,确保在解压文件之后,deps
目录不是空的,实际上包含依赖项。
如果你在Mac上,你也可能需要接受Xcode许可证。请确保安装了最新版本,如果遇到错误,请尝试以下操作:
$ sudo xcodebuild -license accept
如果你在Windows上,请确保你安装了Git、CMake和VisualStudio 2015以上。
现在,安装所有外部依赖项。如果是Mac:
$ ./scripts/install_deps.sh
如果是Windows下:
$ scripts\install_deps.bat
最后,继续构建solidity。如果是Mac:
$ mkdir build
$ cd build
$ cmake .. && make
如果是Windows:
$ mkdir build
$ cd build
$ cmake -G "Visual Studio 14 2015 Win64" ..
下面的命令也在windows下工作:
$ cmake --build . --config RelWithDebInfo
这应该已经安装了你需要的一切,但我们可以确认下。第一,尝试运行:
$ which solc
如果没有看到任何输出,则需要将solc
可执行文件移动到环境设置PATH指定的目录中,或者在bash配置文件中添加一个精确路径。如果找不到文件,可能需要运行:
$ npm install -g solc
这应该在节点包所在的任何地方都安装了可执行文件。
一旦从solc
命令中看到输出(并且在Populus目录中激活了virtualenv
),就可以运行测试。
$ py.test tests/
这样,所有的测试都应该通过。如果他们不是这样,你很可能在某个地方错过了一个依赖关系。只要重复以上的步骤,你就会搞定的。
当然python也有专门的web3.py库,对于python开发以太坊来说非常的方便,有兴趣的用户可以关注我们的python以太坊教程,主要是针对python工程师使用web3.py进行区块链以太坊开发的详解。
另外其他语言可以学习的以太坊教程如下:
- web3j教程,主要是针对java和android程序员进行区块链以太坊开发的web3j详解。
- 以太坊教程,主要介绍智能合约与dapp应用开发,适合入门。
- 以太坊开发,主要是介绍使用node.js、mongodb、区块链、ipfs实现去中心化电商DApp实战,适合进阶。
- php以太坊,主要是介绍使用php进行智能合约开发交互,进行账号创建、交易、转账、代币开发以及过滤器和事件等内容。
- C#以太坊,主要讲解如何使用C#开发基于.Net的以太坊应用,包括账户管理、状态与交易、智能合约开发与交互、过滤器和事件等。
汇智网原创翻译,转载请标明出处。这里是原文