Skip to content

Latest commit

 

History

History
194 lines (157 loc) · 6.91 KB

插件说明.md

File metadata and controls

194 lines (157 loc) · 6.91 KB

PlatON交易插件说明

综述

PlatON提供了与传统rpc调用不同的区块链压测方式,在插件节点内部构造交易,通过p2p的方式随机向整个链广播交易。交易支持EVM,WASM合约交易与普通转账.压测插件已内置到节点本身,通过在启动节点的命令中增加 --rpcapi txgen 来开启压测插件的支持。

插件源码

见目录或如下地址

https://github.com/PlatONnetwork/PlatON-Go
分支   
benchmark-test
文件 
eth/api_tps_cal.go
eth/api_tx_maker.go

注:插件会随着优化不断更新

原理

  1. 插件节点会在固定的间隔时间内构造批量交易并发送。
  2. 交易的发送者会从当前的总账户中循环选取,交易的接受者则是从当前的总账户中随机随选。
  3. 记录每个账户交易发送的交易的nonce和回执的nonce,如果超过一定时间没有收到回执,会重发该交易.
  4. 合约交易的构造主要支持两种方式:
    • 固定参数,每次调用该合约的参数都是相同
    • 动态参数,根据用户配置的参数动态生成参数,该功能目前仅支持erc20与kv合约
  5. 交易构造完成后会选择任意5个对端节点以p2p方式广播交易.
  6. 在交易发送的过程中会记录每笔交易的发送时间,交易延迟 = 交易被打包的区块头的时间-交易的发送时间。平均交易延迟时间,区块头时间在这个时间段内的所有交易的的交易延迟的平均值。

测试流程

  1. 在创世文件中配置好此次所有需要参与转账的账户,账户中需要配置足够多的钱,启动链
  2. 部署合约,待部署合约部署完成后,更新插件配置文件并分发到每个交易插件节点
  3. 根据配置文件启动插件开始压测
  4. 压测完成生成压测数据统计并计算

插件配置文件

插件配置文件说明
{
    //wasm合约配置
    "wasm": [
        {
            //部署合约的交易hash,调用txgen_deployContracts后自动生成
            "deploy_contract_tx_hash": "0xfd4ba0e7e37d78004028659f9ea0d7cd112d773c045a8518bd2be68142438303",
            //部署此合约需要的gas
            "deploy_gas_limit": 83179,
            //合约的类型
            "contracts_type": "Donothing",
            //合约的名称
            "name": "wasm_code",
            //合约的内容
            "contracts_code": "0xabc",
            //合约的地址,调用txgen_updateConfig后自动生成
            "contracts_address": "lax1u3a23l4ymylef3257yhfkdyxyaekvtaun6rvpy",
            //此合约在所有wasm合约中的权重,发送wasm合约时会根据权重值随机选择合约发送
            "call_weights": 0,
            //合约调用时的参数类型,0为固定参数,1为动态生成参数
            "call_kind": 0,
            "call_config": [
                {
                    //合约调用时的gas消耗
                    "call_gas_limit": 25514,
                    //合约调用时的参数,如果call_kind为1,则启用此参数
                    "call_input": "c988751e30bc23ebbc78",
                    //合约调用时的参数,如果call_kind为0,则根据如下参数来动态生成调用参数
                    "parameters": []
                }
            ]
        }
    ],
     //evm合约配置,参数同wasm
    "evm": [],
    //参与交易的用户
    "tx": [
        {
            //私钥
            "private_key": "8b2a0625f5272a2655e79a90fa14b315603f8fa3a75c90d54ed85c3e044e6e71",
            //地址
            "address": "lax19pv24mwfxpkyvcxeqjw75x94wugq82y94eqe56"
        }
    ]
}

插件rpc接口说明

txgen_deployContracts

部署要测试的合约,调用后会在配置文件中更新合约的交易hash

Parameters

  • prikey string 发起合约部署的私钥,此私钥必须有钱
  • configPath string 插件配置文件

Returns

Example

// Request
curl -H "Content-Type: application/json"   -X POST --data '{"jsonrpc":"2.0","method":"txgen_deployContracts","params":["8b2a0625f5272a2655e79a90fa14b315603f8fa3a75c90d54ed85c3e044e6e71","/opt/private_keys.json"],"id":1}' http://localhost:6691

// Result
{"jsonrpc":"2.0","id":1,"result":null}

txgen_updateConfig

更新配置文件,调用后会在配置文件中更新合约信息

Parameters

  • configPath string 插件配置文件

Returns

Example

// Request
curl -H "Content-Type: application/json"   -X POST --data '{"jsonrpc":"2.0","method":"txgen_updateConfig","params":["/opt/private_keys.json"],"id":1}' http://localhost:6691

// Result
{"jsonrpc":"2.0","id":1,"result":null}

txgen_start

启动交易插件,对外广播交易

Parameters

  • normalTx,evmTx,wasmTx uint,这三个参数控制普通转账,evm,wasm合约调用的发送比例,例如1,1,1,插件会循环发送1笔普通转账,1笔evm合约调用,1笔wasm合约调用.
  • totalTxPer uint ,每次发送多少笔交易
  • activeTxPer uint ,每次发送的交易中,活跃账户发送的交易占多少笔,不能大于totalTxPer
  • txFrequency uint,控制发送的频率,单位ms,每隔多少ms广播一次交易
  • activeSender uint,活跃账户的数量,活跃账户的数量不能大于此插件参与交易构造的账户的数量
  • sendingAmount uint64,转账交易的转账金额
  • configPath string,插件配置文件地址
  • start, end uint,此插件参与交易构造的账户
  • waitAccountReceiptTime uint,最大等待交易回执的时间,单位s,如果超过该时间,交易会重新发送

Returns

Example

// Request
curl -H "Content-Type: application/json"   -X POST --data '{"jsonrpc":"2.0","method":"txgen_start","params":[1,0,0,306,0,100,0,1,"/opt/platon/private_key.json",5,2667,10],"id":1}' http://127.0.0.1:6789

// Result
{"jsonrpc":"2.0","id":1,"result":null}

txgen_Stop

停止压测,并将压测统计的原始数据输出到指定文件中

Parameters

  • resPath string 压测统计数据输出文件地址

Returns

Example

// Request
curl -H "Content-Type: application/json"   -X POST --data '{"jsonrpc":"2.0","method":"txgen_stop","params":["/opt/platon/res.json"],"id":1}' http://localhost:6789

// Result
{"jsonrpc":"2.0","id":1,"result":null}

txgen_CalRes

根据txgen_Stop中输出的文件计算tps,交易延迟统计数据

Parameters

  • resPaths []string, 所有压测节点的统计的原始数据
  • output string,计算后的tps与交易延迟,生成位置
  • time int ,时间间隔,每隔固定的时间统计该时间段内的平均tps和交易延迟

Returns

Example

// Request
curl -H "Content-Type: application/json"   -X POST --data '{"jsonrpc":"2.0","method":"txgen_calRes","params":[["/home/juzix/res.json","/home/juzix/res2.json","/home/juzix/res3.json"],"/home/juzix/交易延迟.xlsx",10],"id":1}' http://localhost:6789

// Result
{"jsonrpc":"2.0","id":1,"result":null}