You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

250 lines
4.9 KiB

import QtQuick 2.2
import QtQuick.Controls 1.1
import QtQuick.Layouts 1.1
import QtQuick.Window 2.0
import QtQuick.Dialogs 1.2
import QtQuick.Controls.Styles 1.3
import org.ethereum.qml.QEther 1.0
import org.ethereum.qml.CodeModel 1.0
import org.ethereum.qml.ClientModel 1.0
import "js/TransactionHelper.js" as TransactionHelper
import "js/NetworkDeployment.js" as NetworkDeploymentCode
import "js/QEtherHelper.js" as QEtherHelper
import "."
Item
{
property string currentAccount
property string gasPrice
property alias gasPriceInt: gasPriceInt
property variant balances: ({})
property variant accounts: []
property alias pooler: pooler
signal gasPriceLoaded()
function renewCtx()
{
accounts = []
balances = {}
var requests = [{
//accounts
jsonrpc: "2.0",
method: "eth_accounts",
params: null,
id: 0
}];
TransactionHelper.rpcCall(requests, function(arg1, arg2)
{
var ids = JSON.parse(arg2)[0].result;
requests = [];
accounts = []
for (var k in ids)
{
requests.push({
//accounts
jsonrpc: "2.0",
method: "eth_getBalance",
params: [ids[k], 'latest'],
id: k
});
accounts.push({ "id": ids[k] })
}
TransactionHelper.rpcCall(requests, function (request, response){
var balanceRet = JSON.parse(response);
balances = {}
for (var k in balanceRet)
{
var ether = QEtherHelper.createEther(balanceRet[k].result, QEther.Wei);
balances[accounts[k].id] = ether
}
}, function(){});
}, function(){});
NetworkDeploymentCode.gasPrice(function(price) {
gasPrice = price;
gasPriceInt.setValue(price);
gasPriceLoaded()
}, function(){});
}
function balance(account)
{
for (var k in accounts)
{
if (accounts[k].id === account)
return balances[account]
}
return null
}
function stopForInputError(inError)
{
errorDialog.text = "";
if (inError.length > 0)
{
errorDialog.text = qsTr("The length of a string cannot exceed 32 characters.\nPlease verify the following value(s):\n\n")
for (var k in inError)
errorDialog.text += inError[k] + "\n";
errorDialog.open();
return true;
}
return false;
}
function forceStopPooling()
{
poolLog.stop()
}
function waitForTrReceipt(hash, callback)
{
poolLog.callBack = callback;
poolLog.hash = hash
poolLog.elapsed = 0;
poolLog.start();
}
function verifyHash(tr, hash, callBack)
{
var h = {}
h[tr] = hash
verifyHashes(h, function (bn, trLost)
{
callBack(bn, trLost)
});
}
function verifyHashes(trHashes, callback)
{
//trHashes : { "trLabel": 'hash' }
var requests = [];
var req = 0
requests.push({
jsonrpc: "2.0",
method: "eth_blockNumber",
params: [],
id: req
});
var label = []
for (var k in trHashes)
{
req++
label[req] = k
requests.push({
jsonrpc: "2.0",
method: "eth_getTransactionReceipt",
params: [trHashes[k]],
id: req
});
}
TransactionHelper.rpcCall(requests, function (httpRequest, response){
var ret = JSON.parse(response)
var b = ret[0].result;
var trLost = []
for (var k in ret)
{
if (!ret[k].result)
trLost.push(label[ret[k].id])
}
callback(parseInt(b, 16), trLost)
});
}
Component.onCompleted:
{
renewCtx()
}
BigIntValue
{
id: gasPriceInt
}
function estimateGas(scenario, callback)
{
if (!clientModelGasEstimation.running)
{
for (var si = 0; si < projectModel.listModel.count; si++)
{
var document = projectModel.listModel.get(si);
if (document.isContract)
codeModelGasEstimation.registerCodeChange(document.documentId, fileIo.readFile(document.path));
}
gasEstimationConnect.callback = callback
clientModelGasEstimation.setupScenario(scenario)
}
}
Connections
{
id: gasEstimationConnect
target: clientModelGasEstimation
property var callback
onRunComplete: {
callback(clientModelGasEstimation.gasCosts)
}
}
CodeModel {
id: codeModelGasEstimation
}
ClientModel
{
id: clientModelGasEstimation
codeModel: codeModelGasEstimation
Component.onCompleted:
{
init("/tmp/bcgas/")
}
}
Timer
{
id: pooler
interval: 5000
repeat: true
running: false
}
Timer
{
id: poolLog
property var callBack
property int elapsed
property string hash
interval: 2000
running: false
repeat: true
onTriggered: {
elapsed += interval;
var requests = [];
var jsonRpcRequestId = 0;
requests.push({
jsonrpc: "2.0",
method: "eth_getTransactionReceipt",
params: [ hash ],
id: jsonRpcRequestId++
});
TransactionHelper.rpcCall(requests, function (httpRequest, response){
console.log(response)
var receipt = JSON.parse(response)[0].result
if (receipt)
{
stop();
callBack(1, receipt);
}
else if (elapsed > 2500000)
{
stop();
callBack(-1, null);
}
})
}
}
}