99Kies / pyw3c

python区块链开发框架:合约编译,部署,测试,生成web端js

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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

  1. G:\work\pyproject\pyw3c>python pyw3c.py compile
  2. 开始编译合约..
  3. 生成合约F3Deventsinterface文件: ../build/F3Devents/F3Devents.json ..
  4. 生成合约F3Deventsabi文件: ../build/F3Devents/abi.json ..
  5. 生成合约F3Deventsbytecode文件: ../build/F3Devents/bytecode.s ..
  6. 生成合约FoMo3Dlonginterface文件: ../build/FoMo3Dlong/FoMo3Dlong.json ..
  7. 生成合约FoMo3Dlongabi文件: ../build/FoMo3Dlong/abi.json ..
  8. 生成合约FoMo3Dlongbytecode文件: ../build/FoMo3Dlong/bytecode.s ..
  9. 生成合约Hourglassinterface文件: ../build/Hourglass/Hourglass.json ..
  10. 生成合约Hourglassabi文件: ../build/Hourglass/abi.json ..
  11. 生成合约Hourglassbytecode文件: ../build/Hourglass/bytecode.s ..
  12. 生成合约PlayerBookinterface文件: ../build/PlayerBook/PlayerBook.json ..
  13. 生成合约PlayerBookabi文件: ../build/PlayerBook/abi.json ..
  14. 生成合约PlayerBookbytecode文件: ../build/PlayerBook/bytecode.s ..
  15. 生成合约TeamJustinterface文件: ../build/TeamJust/TeamJust.json ..
  16. 生成合约TeamJustabi文件: ../build/TeamJust/abi.json ..
  17. 生成合约TeamJustbytecode文件: ../build/TeamJust/bytecode.s ..
  18. 生成合约F3DKeysCalcLonginterface文件: ../build/F3DKeysCalcLong/F3DKeysCalcLong.json ..
  19. 生成合约F3DKeysCalcLongabi文件: ../build/F3DKeysCalcLong/abi.json ..
  20. 生成合约F3DKeysCalcLongbytecode文件: ../build/F3DKeysCalcLong/bytecode.s ..
  21. 生成合约F3Ddatasetsinterface文件: ../build/F3Ddatasets/F3Ddatasets.json ..
  22. 生成合约F3Ddatasetsabi文件: ../build/F3Ddatasets/abi.json ..
  23. 生成合约F3Ddatasetsbytecode文件: ../build/F3Ddatasets/bytecode.s ..
  24. 生成合约MSFuninterface文件: ../build/MSFun/MSFun.json ..
  25. 生成合约MSFunabi文件: ../build/MSFun/abi.json ..
  26. 生成合约MSFunbytecode文件: ../build/MSFun/bytecode.s ..
  27. 生成合约NameFilterinterface文件: ../build/NameFilter/NameFilter.json ..
  28. 生成合约NameFilterabi文件: ../build/NameFilter/abi.json ..
  29. 生成合约NameFilterbytecode文件: ../build/NameFilter/bytecode.s ..
  30. 生成合约SafeMathinterface文件: ../build/SafeMath/SafeMath.json ..
  31. 生成合约SafeMathabi文件: ../build/SafeMath/abi.json ..
  32. 生成合约SafeMathbytecode文件: ../build/SafeMath/bytecode.s ..
  33. 生成合约UintCompressorinterface文件: ../build/UintCompressor/UintCompressor.json ..
  34. 生成合约UintCompressorabi文件: ../build/UintCompressor/abi.json ..
  35. 生成合约UintCompressorbytecode文件: ../build/UintCompressor/bytecode.s ..
  36. 生成合约F3Ddatasetsinterface文件: ../build/F3Ddatasets/F3Ddatasets.json ..
  37. 生成合约F3Ddatasetsabi文件: ../build/F3Ddatasets/abi.json ..
  38. 生成合约F3Ddatasetsbytecode文件: ../build/F3Ddatasets/bytecode.s ..
  39. 生成合约NameFilterinterface文件: ../build/NameFilter/NameFilter.json ..
  40. 生成合约NameFilterabi文件: ../build/NameFilter/abi.json ..
  41. 生成合约NameFilterbytecode文件: ../build/NameFilter/bytecode.s ..
  42. 生成合约SafeMathinterface文件: ../build/SafeMath/SafeMath.json ..
  43. 生成合约SafeMathabi文件: ../build/SafeMath/abi.json ..
  44. 生成合约SafeMathbytecode文件: ../build/SafeMath/bytecode.s ..
  45. 生成合约TinyF3Dinterface文件: ../build/TinyF3D/TinyF3D.json ..
  46. 生成合约TinyF3Dabi文件: ../build/TinyF3D/abi.json ..
  47. 生成合约TinyF3Dbytecode文件: ../build/TinyF3D/bytecode.s ..
  48. 合约编译完成.

部署:
根据config.py配置的地址部署编译完成的合约,合约部署后会在build目录下生成一个address.s里面包含合约部署的地址。部署时可以在core/init_contract.py里面单独配置部署流程,主要争对一个合约需要传入之前合约部署地址的情况。

  1. G:\work\pyproject\pyw3c>python pyw3c.py migrate
  2. 部署合约..
  3. 合约F3Ddatasets部署地址: 0xbcD356E42ECffAEC4A4A7818a97F7b64239D3a6c .. 使用gas数量: 74748 块地址: 41
  4. 合约F3Devents部署地址: 0x0BAADeEc7200731d96B8789c564FBA74EFD78Ccf .. 使用gas数量: 68794 块地址: 42
  5. 合约F3DKeysCalcLong部署地址: 0x23909826dc0A51C2C0D59B2b4f65D678edfceb7D .. 使用gas数量: 74748 块地址: 43
  6. 合约FoMo3Dlong部署地址: 0x0FD0Ace46d2e0Bdb1D964424C20FB54998525C4E .. 使用gas数量: 6182129 块地址: 44
  7. 合约Hourglass部署地址: 0xc27CC06b387e0c15F0209b6455607820C4bD0097 .. 使用gas数量: 2297432 块地址: 45
  8. 合约MSFun部署地址: 0xaD0A4c8c05075e84D34FF96cc121757bb1adA762 .. 使用gas数量: 74748 块地址: 46
  9. 合约NameFilter部署地址: 0x178f71A6a8Da12B5b35A546a30b494AB8d296A92 .. 使用gas数量: 74748 块地址: 47
  10. 合约PlayerBook部署地址: 0x77F80e9A250Ac2B22208fa194dFF65780b97f9A5 .. 使用gas数量: 3617606 块地址: 48
  11. 合约SafeMath部署地址: 0xCB33c64ABb41a5015769Bb78FC614A43bFCd16f0 .. 使用gas数量: 74748 块地址: 49
  12. 合约TeamJust部署地址: 0xf5470912F811b7B4aBe8ce43861B0E79d445fFC2 .. 使用gas数量: 1747981 块地址: 50
  13. 合约TinyF3D部署地址: 0xf51772077cE32cFE12Bcd01916567E5A0BDDE529 .. 使用gas数量: 5997148 块地址: 51
  14. 合约UintCompressor部署地址: 0xE2ad4de47a5500Da6390C49Dfc13F62762B8A97e .. 使用gas数量: 74748 块地址: 52
  15. 部署完成..
  16. 初始化合约..
  17. 初始化完成

测试:
测试代码可以写在core/apitest.py里面,RPC使用的web3.py模块。

  1. G:\work\pyproject\pyw3c>python pyw3c.py test
  2. 添加一个玩家: 0x19cb9fef172c4ec2803d6d5431632b1abc62c5fd1666f9b8d46bc8ce6a2fc06b
  3. 回合数据: {'ICO投入': 0, '回合ID': 1, '总钥匙数': 0.0, '结束时间': 1535516085, '开始时间': 1535512485, '当前奖池': 0.0, '领先队伍和玩家ID': 0, '领先玩家地址': '', '领先玩家名称': '', '鲸队eth': 0.0, '熊队e
  4. th': 0.0, '蛇队eth': 0.0, '牛队eth': 0.0, '当前空投概率': 0.0}
  5. 玩家信息: {'玩家ID': 1, '玩家姓名': '', '钥匙数': 0.0, '金库': 0.0, '获利': 0.0, '推广': 0.0, '回合投入': 0.0}
  6. 购买钥匙: 0x696b23f07ef0062c9c1c9c7dd80f2db67a360bb2e73ddf0a37314e7b7b2ac167
  7. 玩家信息: {'玩家ID': 1, '玩家姓名': '', '钥匙数': 1331.488, '金库': 0.0, '获利': 0.043, '推广': 0.0, '回合投入': 0.1}
  8. 回合数据: {'ICO投入': 0, '回合ID': 1, '总钥匙数': 1331.488, '结束时间': 1535556015, '开始时间': 1535512485, '当前奖池': 0.043, '领先队伍和玩家ID': 11, '领先玩家地址': '', '领先玩家名称': '', '鲸队eth': 0.0
  9. , '熊队eth': 0.1, '蛇队eth': 0.0, '牛队eth': 0.0, '当前空投概率': 0.001}
  10. 购买钥匙: 0x01ab66a34fb44f50da562fd19238d27577258ec00f16cd24ad74524c9b7bc097
  11. 玩家信息: {'玩家ID': 1, '玩家姓名': '', '钥匙数': 2659.3029, '金库': 0.0, '获利': 0.086, '推广': 0.0, '回合投入': 0.2}
  12. 回合数据: {'ICO投入': 0, '回合ID': 1, '总钥匙数': 2659.3029, '结束时间': 1535595825, '开始时间': 1535512485, '当前奖池': 0.086, '领先队伍和玩家ID': 11, '领先玩家地址': '', '领先玩家名称': '', '鲸队eth': 0.
  13. 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,可以通过合约名称直接使用创建好的合约对象。

  1. G:\work\pyproject\pyw3c>python pyw3c.py webc
  2. 生成web目录..
  3. 生成F3Devents调用参数..
  4. 生成FoMo3Dlong调用参数..
  5. 生成Hourglass调用参数..
  6. 生成PlayerBook调用参数..
  7. 生成TeamJust调用参数..
  8. 生成TinyF3D调用参数..
  9. 生成app.js
  10. 生成run.py
  11. 生成web目录完成

运行:
在生成步骤会在web/app目录生成一个run.py,执行运行命令会启动一个aiohttp的web服务器,根目录就是web/app/。

  1. G:\work\pyproject\pyw3c>python pyw3c.py run
  2. 启动web服务器..
  3. ======== Running on http://localhost:9000 ========
  4. (Press CTRL+C to quit)

About

python区块链开发框架:合约编译,部署,测试,生成web端js


Languages

Language:Assembly 85.9%Language:Python 11.2%Language:JavaScript 2.9%