Pyw3c帮助
python区块链开发框架:合约编译,部署,测试,生成web端js
特色:
这个框架是自己在开发智能合约时不习惯nodejs,用python重新开发的类似于truffle的框架。
config.py
配置文件:设置galanche或者测试链节点地址端口,测试web服务器地址端口等
pyw3c.py
编译: python pyw3c.py compile
部署: python pyw3c.py migrate
测试: python pyw3c.py test
生成: python pyw3c.py webc
启动: python pyw3c.py run
编译:
编译时默认遍历整个contracts文件夹第一层目录,将需要部署的主合约放在第一层目录,其他library,interface
合约放在library和interface等目录,在主合约里面引用时会去加载,但不会直接去编译library和interface的合约。
编译完成后生成build目录,build目录下包含每个合约的abi.s,bytecode.s,合约名.json
G:\work\pyproject\pyw3c>python pyw3c.py compile
开始编译合约..
生成合约F3Devents的interface文件: ../build/F3Devents/F3Devents.json ..
生成合约F3Devents的abi文件: ../build/F3Devents/abi.json ..
生成合约F3Devents的bytecode文件: ../build/F3Devents/bytecode.s ..
生成合约FoMo3Dlong的interface文件: ../build/FoMo3Dlong/FoMo3Dlong.json ..
生成合约FoMo3Dlong的abi文件: ../build/FoMo3Dlong/abi.json ..
生成合约FoMo3Dlong的bytecode文件: ../build/FoMo3Dlong/bytecode.s ..
生成合约Hourglass的interface文件: ../build/Hourglass/Hourglass.json ..
生成合约Hourglass的abi文件: ../build/Hourglass/abi.json ..
生成合约Hourglass的bytecode文件: ../build/Hourglass/bytecode.s ..
生成合约PlayerBook的interface文件: ../build/PlayerBook/PlayerBook.json ..
生成合约PlayerBook的abi文件: ../build/PlayerBook/abi.json ..
生成合约PlayerBook的bytecode文件: ../build/PlayerBook/bytecode.s ..
生成合约TeamJust的interface文件: ../build/TeamJust/TeamJust.json ..
生成合约TeamJust的abi文件: ../build/TeamJust/abi.json ..
生成合约TeamJust的bytecode文件: ../build/TeamJust/bytecode.s ..
生成合约F3DKeysCalcLong的interface文件: ../build/F3DKeysCalcLong/F3DKeysCalcLong.json ..
生成合约F3DKeysCalcLong的abi文件: ../build/F3DKeysCalcLong/abi.json ..
生成合约F3DKeysCalcLong的bytecode文件: ../build/F3DKeysCalcLong/bytecode.s ..
生成合约F3Ddatasets的interface文件: ../build/F3Ddatasets/F3Ddatasets.json ..
生成合约F3Ddatasets的abi文件: ../build/F3Ddatasets/abi.json ..
生成合约F3Ddatasets的bytecode文件: ../build/F3Ddatasets/bytecode.s ..
生成合约MSFun的interface文件: ../build/MSFun/MSFun.json ..
生成合约MSFun的abi文件: ../build/MSFun/abi.json ..
生成合约MSFun的bytecode文件: ../build/MSFun/bytecode.s ..
生成合约NameFilter的interface文件: ../build/NameFilter/NameFilter.json ..
生成合约NameFilter的abi文件: ../build/NameFilter/abi.json ..
生成合约NameFilter的bytecode文件: ../build/NameFilter/bytecode.s ..
生成合约SafeMath的interface文件: ../build/SafeMath/SafeMath.json ..
生成合约SafeMath的abi文件: ../build/SafeMath/abi.json ..
生成合约SafeMath的bytecode文件: ../build/SafeMath/bytecode.s ..
生成合约UintCompressor的interface文件: ../build/UintCompressor/UintCompressor.json ..
生成合约UintCompressor的abi文件: ../build/UintCompressor/abi.json ..
生成合约UintCompressor的bytecode文件: ../build/UintCompressor/bytecode.s ..
生成合约F3Ddatasets的interface文件: ../build/F3Ddatasets/F3Ddatasets.json ..
生成合约F3Ddatasets的abi文件: ../build/F3Ddatasets/abi.json ..
生成合约F3Ddatasets的bytecode文件: ../build/F3Ddatasets/bytecode.s ..
生成合约NameFilter的interface文件: ../build/NameFilter/NameFilter.json ..
生成合约NameFilter的abi文件: ../build/NameFilter/abi.json ..
生成合约NameFilter的bytecode文件: ../build/NameFilter/bytecode.s ..
生成合约SafeMath的interface文件: ../build/SafeMath/SafeMath.json ..
生成合约SafeMath的abi文件: ../build/SafeMath/abi.json ..
生成合约SafeMath的bytecode文件: ../build/SafeMath/bytecode.s ..
生成合约TinyF3D的interface文件: ../build/TinyF3D/TinyF3D.json ..
生成合约TinyF3D的abi文件: ../build/TinyF3D/abi.json ..
生成合约TinyF3D的bytecode文件: ../build/TinyF3D/bytecode.s ..
合约编译完成.
部署:
根据config.py配置的地址部署编译完成的合约,合约部署后会在build目录下生成一个address.s里面包含合约部署的地址。部署时可以在core/init_contract.py里面单独配置部署流程,主要争对一个合约需要传入之前合约部署地址的情况。
G:\work\pyproject\pyw3c>python pyw3c.py migrate
部署合约..
合约F3Ddatasets部署地址: 0xbcD356E42ECffAEC4A4A7818a97F7b64239D3a6c .. 使用gas数量: 74748 块地址: 41
合约F3Devents部署地址: 0x0BAADeEc7200731d96B8789c564FBA74EFD78Ccf .. 使用gas数量: 68794 块地址: 42
合约F3DKeysCalcLong部署地址: 0x23909826dc0A51C2C0D59B2b4f65D678edfceb7D .. 使用gas数量: 74748 块地址: 43
合约FoMo3Dlong部署地址: 0x0FD0Ace46d2e0Bdb1D964424C20FB54998525C4E .. 使用gas数量: 6182129 块地址: 44
合约Hourglass部署地址: 0xc27CC06b387e0c15F0209b6455607820C4bD0097 .. 使用gas数量: 2297432 块地址: 45
合约MSFun部署地址: 0xaD0A4c8c05075e84D34FF96cc121757bb1adA762 .. 使用gas数量: 74748 块地址: 46
合约NameFilter部署地址: 0x178f71A6a8Da12B5b35A546a30b494AB8d296A92 .. 使用gas数量: 74748 块地址: 47
合约PlayerBook部署地址: 0x77F80e9A250Ac2B22208fa194dFF65780b97f9A5 .. 使用gas数量: 3617606 块地址: 48
合约SafeMath部署地址: 0xCB33c64ABb41a5015769Bb78FC614A43bFCd16f0 .. 使用gas数量: 74748 块地址: 49
合约TeamJust部署地址: 0xf5470912F811b7B4aBe8ce43861B0E79d445fFC2 .. 使用gas数量: 1747981 块地址: 50
合约TinyF3D部署地址: 0xf51772077cE32cFE12Bcd01916567E5A0BDDE529 .. 使用gas数量: 5997148 块地址: 51
合约UintCompressor部署地址: 0xE2ad4de47a5500Da6390C49Dfc13F62762B8A97e .. 使用gas数量: 74748 块地址: 52
部署完成..
初始化合约..
初始化完成
测试:
测试代码可以写在core/apitest.py里面,RPC使用的web3.py模块。
G:\work\pyproject\pyw3c>python pyw3c.py test
添加一个玩家: 0x19cb9fef172c4ec2803d6d5431632b1abc62c5fd1666f9b8d46bc8ce6a2fc06b
回合数据: {'ICO投入': 0, '回合ID': 1, '总钥匙数': 0.0, '结束时间': 1535516085, '开始时间': 1535512485, '当前奖池': 0.0, '领先队伍和玩家ID': 0, '领先玩家地址': '', '领先玩家名称': '', '鲸队eth': 0.0, '熊队e
th': 0.0, '蛇队eth': 0.0, '牛队eth': 0.0, '当前空投概率': 0.0}
玩家信息: {'玩家ID': 1, '玩家姓名': '', '钥匙数': 0.0, '金库': 0.0, '获利': 0.0, '推广': 0.0, '回合投入': 0.0}
购买钥匙: 0x696b23f07ef0062c9c1c9c7dd80f2db67a360bb2e73ddf0a37314e7b7b2ac167
玩家信息: {'玩家ID': 1, '玩家姓名': '', '钥匙数': 1331.488, '金库': 0.0, '获利': 0.043, '推广': 0.0, '回合投入': 0.1}
回合数据: {'ICO投入': 0, '回合ID': 1, '总钥匙数': 1331.488, '结束时间': 1535556015, '开始时间': 1535512485, '当前奖池': 0.043, '领先队伍和玩家ID': 11, '领先玩家地址': '', '领先玩家名称': '', '鲸队eth': 0.0
, '熊队eth': 0.1, '蛇队eth': 0.0, '牛队eth': 0.0, '当前空投概率': 0.001}
购买钥匙: 0x01ab66a34fb44f50da562fd19238d27577258ec00f16cd24ad74524c9b7bc097
玩家信息: {'玩家ID': 1, '玩家姓名': '', '钥匙数': 2659.3029, '金库': 0.0, '获利': 0.086, '推广': 0.0, '回合投入': 0.2}
回合数据: {'ICO投入': 0, '回合ID': 1, '总钥匙数': 2659.3029, '结束时间': 1535595825, '开始时间': 1535512485, '当前奖池': 0.086, '领先队伍和玩家ID': 11, '领先玩家地址': '', '领先玩家名称': '', '鲸队eth': 0.
0, '熊队eth': 0.2, '蛇队eth': 0.0, '牛队eth': 0.0, '当前空投概率': 0.002}
生成:
core/template/app里面是生成的模板文件其中必须存在的是web3.min.js,在生成web目录的时候会将web3.min.js和部署好的合约对象生成一个app.js放在web目录,其中部署好的合约对象自动加载编译部署步骤生成的abi和address,web目录需要用户自己去引用app.js,可以通过合约名称直接使用创建好的合约对象。
G:\work\pyproject\pyw3c>python pyw3c.py webc
生成web目录..
生成F3Devents调用参数..
生成FoMo3Dlong调用参数..
生成Hourglass调用参数..
生成PlayerBook调用参数..
生成TeamJust调用参数..
生成TinyF3D调用参数..
生成app.js
生成run.py
生成web目录完成
运行:
在生成步骤会在web/app目录生成一个run.py,执行运行命令会启动一个aiohttp的web服务器,根目录就是web/app/。
G:\work\pyproject\pyw3c>python pyw3c.py run
启动web服务器..
======== Running on http://localhost:9000 ========
(Press CTRL+C to quit)