这篇文章主要介绍一个python开发eos智能合约的通用平台pyeos。pyeos是基于EOSIO发展的自主式通用智能合约平台。
构建PyEos
下载源代码
1 2 3 git clone https://www.github.com/learnforpractice/pyeos cd pyeos git submodule update --init --recursive
安装依赖(Ubuntu)
1 2 sudo apt-get install libleveldb-dev sudo apt-get install libreadline-dev
安装依赖(Centos)
1 2 3 sudo yum install leveldb-devel sudo yum install readline-devel sudo yum install libffi-devel
安装依赖(macOS)
1 2 brew install leveldb brew install readline
安装JDK 10或更高版本(可选)
对于想要尝试Java Smart Contract的用户,请将JDK更新到10或更高版本,然后将JAVA_HOME导出到JDK安装目录的根目录。
可以添加QQ群1004391443,有飞机大战、颜值打分器、打砖块小游戏、红包提醒神器、小姐姐表白神器等具体的实训项目,有清晰源码,有相应的文件
1 export JAVA_HOME = <jdk目录>
如果你安装了较早的JDK并且JAVA_HOME不为空并且你不想尝试Java智能合约,请在构建之前使用以下命令清空JAVA_HOME:
1 export JAVA_HOME =
Building
1 ./eosio_build.sh
智能合约开发
Python智能合约开发
运行PyEos
打开终端,cd到[PROJECT_DIR]/build/program目录,运行以下命令:
1 ./pyeos/pyeos --manual-gen-block --debug -i --contracts-console
如果这是你第一次启动PyEos,PyEos会为你创建一个测试钱包,放在data-dir/mywallet.wallet中,然后console将打印钱包密码,如下所示:
1 wallet password:PW5JWE5g6RZ7Fyr2kmCphDqZo4uivdeGpUpndgFZ52rsduhtf9PRJ
由于它仅用于测试,因此密码将保存到data-dir/data.pkl,因此下次启动pyeos进行测试时,pyeos将为你解锁钱包。
另外PyEos会将三个私钥导入钱包,这对测试非常有用。
‘5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3’, ‘5JEcwbckBCdmji5j8ZoMHLEUS8TqQiqBG1DRx1X9DN124GUok9s’, ‘5JbDP55GXN7MLcNYKCnJtfKi9aD2HvHAdY7g8m67zFTAFkY1uBB’
请记住,永远不应在真实帐户中使用这些私钥,否则你可能会丢失帐户中的所有加密属性。
除此之外,PyEos将为你创建四个重要帐户:
1 eosio.bios,eosio.msig,eosio.system,eosio.token
并在testnet上发布他们的智能合约。
虽然上述步骤在现实世界中永远不会发生,但它确实为测试智能合约提供了极大的便利。从而节省了大量宝贵的时间,提高了开发效率。
使用sketch工具生成源代码
在PyEos控制台中运行以下命令,
1 sketch.create('hello','helloworld','py')
这将在你当前目录下创建一个helloworld目录,其中hello作为测试帐户名称。目录中生成了三个文件:
1 2 3 helloworld.py helloworld.abi t.py
哪个helloworld.py是Python智能合约源代码,helloworld.abi是用于智能合约的ABI(应用程序二进制接口)文件,t.py包含用于测试智能合约的代码。
此外,sketch还可以为你创建一个wasm智能合约项目,只需在PyEos控制台中键入以下代码,测试过程与Python智能合约没有区别。
1 sketch.create('helloworld','helloworld','cpp')
测试
现在是时候运行你的helloworld智能合约程序了。在PyEos控制台中键入或复制以下命令:
1 2 from helloworld import t t.test()
你将在控制台上以绿色字显示以下输出:
1 3289633ms thread-1 mpeoslib.cpp:63 print ] hello,world
恭喜,你已经成功运行了第一个Python智能合约。
现在你可以打开helloworld.py进行编码。完成后,再次运行t.test(),不需要运行其他命令来发布测试智能合约,如果在t.test运行期间更改了智能合约,智能合约将自动重新发布到testnet()。你还可以在t.py中编辑测试代码以测试智能合约。一旦完成,只需再次运行t.test(),就不需要运行`reload(t),PyEos会为你magic。这也适用于在测试中添加新功能的情况。
以太坊智能合约开发
请参阅pyeos/programs/pyeos/tests/evm/evm中的示例。
Lua智能合约开发
请参阅pyeos/programs/pyeos/tests/lua/hello中的示例。
Java智能合约开发
请参阅pyeos/programs/pyeos/tests/java/hello中的示例。
提醒:对于想要尝试Java Smart Contract的用户,请将JDK更新到10或更高版本,然后将JAVA_HOME设置为相应的JDK根目录。
使用C++智能合约进行调试
在Eos上,C++ Smart Contract代码被编译为WebAssembly字节码,这使得调试C++ Smart Contract受到影响。幸运的是,现在它能够将C++ Smart Contract编译为共享库,这使得调试C++ Smart Contract就像调试普通的C++项目一样简单。
有一个简短的视频,可以用梯子看看。
简而言之,以下是有关调试C++智能合约的步骤:
- 1.在Visual Studio Code中打开pyeos项目
- 2.在eosio_build.sh中编辑CMAKE_BUILD_TYPE和BUILD_DIR
1 2 BUILD_DIR="${PWD}/build-debug" CMAKE_BUILD_TYPE=Debug
- 3.在VSC终端中构建pyeos
1 ./eosio_build.sh
- 4.在Visual Studio代码中配置调试
1 2 3 4 5 6 7 8 { "name": "(lldb) Attach pyeos", "type": "cppdbg", "request": "attach", "program": "${workspaceFolder}/build-debug/programs/pyeos/pyeos", "processId": "${command:pickProcess}", "MIMode": "lldb" }
- 5.启动pyeos
1 ./pyeos/pyeos --manual-gen-block --debug -i --contracts-console
- 6.连接到pyeos
- 7.创建C++ Smart Contract测试代码。
1 sketch.create('hello', 'helloworld', 'cpp')
- 8.在测试代码中设置断点。
- 9.测试
1 2 from helloworld import t t.debug()
Python智能合约调试
有一个关于Python Smart Contract的简短视频,可以快速入门(需要梯子)。
以下步骤说明如何在programs/pyeos/contracts/hello下调试智能合约
- 1.启动PyEos
1 ./pyeos/pyeos --manual-gen-block --debug -i --contracts-console
- 2.设置调试合约
1 debug.set_debug_contract('hello','../../program/pyeos/contratcts/hello/hello.py')
- 3.启动ptvsd调试器
1 2 3 import ptvsd ptvsd.enable_attach("12345",address =('127.0.0.1',3000)) ptvsd.wait_for_attach()
- 4.在Visual Studio代码中附加到ptvsd调试器 这是调试设置:
1 2 3 4 5 6 7 8 9 10 { "name": "python Attach (Remote Debug)", "type": "python", "request": "attach", "localRoot": "${workspaceFolder}", "remoteRoot": "${workspaceFolder}", "port": 3000, "secret": "12345", "host": "localhost" },
- 5.在hello.py中设置断点
- 6.调试
1 2 from hello import t t.test()
好好享受!