python开发eos智能合约通用平台

这篇文章主要介绍一个python开发eos智能合约的通用平台pyeos。pyeos是基于EOSIO发展的自主式通用智能合约平台。目前github上116个star。

构建PyEos

下载源代码

git clone https://www.github.com/learnforpractice/pyeos
cd pyeos
git submodule update --init --recursive

安装依赖(Ubuntu)

sudo apt-get install libleveldb-dev
sudo apt-get install libreadline-dev

安装依赖(Centos)

sudo yum install leveldb-devel
sudo yum install readline-devel
sudo yum install libffi-devel

安装依赖(macOS)

brew install leveldb
brew install readline

安装JDK 10或更高版本(可选)

对于想要尝试 Java Smart Contract 的用户,请将JDK更新到10或更高版本,然后将 JAVA_HOME 导出到JDK安装目录的根目录。

export JAVA_HOME = 

如果你安装了较早的JDK并且JAVA_HOME不为空并且你不想尝试Java智能合约,请在构建之前使用以下命令清空 JAVA_HOME :

export JAVA_HOME =

Building

./eosio_build.sh

智能合约开发

如果有想学习python的程序员,可来我的python学习扣qun:711944363,免费送python的视频教程噢!我每晚上8点还会在群内直播讲解python知识,欢迎大家前来学习交流。

 

Python智能合约开发

运行PyEos

打开终端,cd到 [PROJECT_DIR]/build/program 目录,运行以下命令:

./pyeos/pyeos --manual-gen-block --debug -i --contracts-console

如果这是你第一次启动PyEos,PyEos会为你创建一个测试钱包,放在 data-dir/mywallet.wallet 中,然后console将打印钱包密码,如下所示:

wallet password:PW5JWE5g6RZ7Fyr2kmCphDqZo4uivdeGpUpndgFZ52rsduhtf9PRJ

由于它仅用于测试,因此密码将保存到 data-dir/data.pkl ,因此下次启动pyeos进行测试时,pyeos将为你解锁钱包。

另外PyEos会将三个私钥导入钱包,这对测试非常有用。

‘5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3’, ‘5JEcwbckBCdmji5j8ZoMHLEUS8TqQiqBG1DRx1X9DN124GUok9s’, ‘5JbDP55GXN7MLcNYKCnJtfKi9aD2HvHAdY7g8m67zFTAFkY1uBB’

请记住,永远不应在真实帐户中使用这些私钥,否则你可能会丢失帐户中的所有加密属性。

除此之外,PyEos将为你创建四个重要帐户:

eosio.bios,eosio.msig,eosio.system,eosio.token

并在testnet上发布他们的智能合约。

虽然上述步骤在现实世界中永远不会发生,但它确实为测试智能合约提供了极大的便利。从而节省了大量宝贵的时间,提高了开发效率。

使用sketch工具生成源代码

在PyEos控制台中运行以下命令,

sketch.create('hello','helloworld','py')

这将在你当前目录下创建一个helloworld目录,其中hello作为测试帐户名称。目录中生成了三个文件:

helloworld.py
helloworld.abi
t.py

哪个helloworld.py是Python智能合约源代码,helloworld.abi是用于智能合约的ABI(应用程序二进制接口)文件,t.py包含用于测试智能合约的代码。

此外,sketch还可以为你创建一个wasm智能合约项目,只需在PyEos控制台中键入以下代码,测试过程与Python智能合约没有区别。

sketch.create('helloworld','helloworld','cpp')

测试

现在是时候运行你的helloworld智能合约程序了。在PyEos控制台中键入或复制以下命令:

from helloworld import t
t.test()

你将在控制台上以绿色字显示以下输出:

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
BUILD_DIR="${PWD}/build-debug"
CMAKE_BUILD_TYPE=Debug
  • 3.在VSC终端中构建pyeos
./eosio_build.sh
  • 4.在Visual Studio代码中配置调试
{
   "name": "(lldb) Attach pyeos",
   "type": "cppdbg",
   "request": "attach",
   "program": "${workspaceFolder}/build-debug/programs/pyeos/pyeos",
   "processId": "${command:pickProcess}",
   "MIMode": "lldb"
}
  • 5.启动pyeos
./pyeos/pyeos --manual-gen-block --debug -i --contracts-console
  • 6.连接到pyeos
  • 7.创建C++ Smart Contract测试代码。
sketch.create('hello', 'helloworld', 'cpp')
  • 8.在测试代码中设置断点。
  • 9.测试
from helloworld import t
t.debug()

Python智能合约调试

有一个关于Python Smart Contract的简短 视频 ,可以快速入门(需要梯子)。

以下步骤说明如何在programs/pyeos/contracts/hello下调试智能合约

  • 1.启动PyEos
./pyeos/pyeos --manual-gen-block --debug -i --contracts-console
  • 2.设置调试合约
debug.set_debug_contract('hello','../../program/pyeos/contratcts/hello/hello.py')
  • 3.启动ptvsd调试器
import ptvsd
ptvsd.enable_attach("12345",address =('127.0.0.1',3000))
ptvsd.wait_for_attach()
  • 4.在Visual Studio代码中附加到ptvsd调试器 这是调试设置:
{
    "name": "python Attach (Remote Debug)",
    "type": "python",
    "request": "attach",
    "localRoot": "${workspaceFolder}",
    "remoteRoot": "${workspaceFolder}",
    "port": 3000,
    "secret": "12345",
    "host": "localhost"
 },
  • 5.在hello.py中设置断点
  • 6.调试
from hello import t
t.test()

好好享受!

======================================================================

分享一些比特币、以太坊、EOS等区块链相关的交互式在线编程实战教程:

  • EOS入门教程,本课程帮助你快速入门EOS区块链去中心化应用的开发,内容涵盖EOS工具链、账户与钱包、发行代币、智能合约开发与部署、使用代码与智能合约交互等核心知识点,最后综合运用各知识点完成一个便签DApp的开发。
  • 深入浅出玩转EOS钱包开发 ,本课程以手机EOS钱包的完整开发过程为主线,深入学习EOS区块链应用开发,课程内容即涵盖账户、计算资源、智能合约、动作与交易等EOS区块链的核心概念,同时也讲解如何使用eosjs和eosjs-ecc开发包访问EOS区块链,以及如何在React前端应用中集成对EOS区块链的支持。课程内容深入浅出,非常适合前端工程师深入学习EOS区块链应用开发。
  • java比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在Java代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是Java工程师不可多得的比特币开发学习课程。
  • php比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在Php代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是Php工程师不可多得的比特币开发学习课程。
  • c#比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在C#代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是C#工程师不可多得的比特币开发学习课程。
  • java以太坊开发教程,主要是针对java和android程序员进行区块链以太坊开发的web3j详解。
  • python以太坊,主要是针对python工程师使用web3.py进行区块链以太坊开发的详解。
  • php以太坊,主要是介绍使用php进行智能合约开发交互,进行账号创建、交易、转账、代币开发以及过滤器和交易等内容。
  • 以太坊入门教程,主要介绍智能合约与dapp应用开发,适合入门。
  • 以太坊开发进阶教程,主要是介绍使用node.js、mongodb、区块链、ipfs实现去中心化电商DApp实战,适合进阶。
  • ERC721以太坊通证实战,课程以一个数字艺术品创作与分享DApp的实战开发为主线,深入讲解以太坊非同质化通证的概念、标准与开发方案。内容包含ERC-721标准的自主实现,讲解OpenZeppelin合约代码库二次开发,实战项目采用Truffle,IPFS,实现了通证以及去中心化的通证交易所。
  • C#以太坊,主要讲解如何使用C#开发基于.Net的以太坊应用,包括账户管理、状态与交易、智能合约开发与交互、过滤器和交易等。
  • Hyperledger Fabric 区块链开发详解 ,本课程面向初学者,内容即包含Hyperledger Fabric的身份证书与MSP服务、权限策略、通道配置与启动、链码通信接口等核心概念,也包含Fabric网络设计、nodejs链码与应用开发的操作实践,是Nodejs工程师学习Fabric区块链开发的最佳选择。
  • Hyperledger Fabric java 区块链开发详解 ,课程面向初学者,内容即包含Hyperledger Fabric的身份证书与MSP服务、权限策略、频道配置与启动、链码通信接口等核心概念,也包含Fabric网络设计、java链码与应用开发的操作实践,是java工程师学习Fabric区块链开发的最佳选择。
  • tendermint区块链开发详解 ,本课程适合希望使用tendermint进行区块链开发的工程师,课程内容即包括tendermint应用开发模型中的核心概念,例如ABCI接口、默克尔树、多版本状态库等,也包括代币发行等丰富的实操代码,是go语言工程师快速入门区块链开发的最佳选择。

你可能感兴趣的:(python)