Browse Source

Merge pull request #1961 from arkpar/mix_fix

Mix: a few issues
cl-refactor
Gav Wood 10 years ago
parent
commit
c839f73a1e
  1. 35
      mix/ClientModel.cpp
  2. 1
      mix/qml.qrc
  3. 27
      mix/qml/ContractLibrary.qml
  4. 29
      mix/qml/StateListModel.qml
  5. 2
      mix/qml/TransactionDialog.qml
  6. 4
      mix/qml/html/cm/codemirror.css
  7. 2
      mix/qml/html/cm/solidityToken.js

35
mix/ClientModel.cpp

@ -256,22 +256,8 @@ void ClientModel::setupState(QVariantMap _state)
u256 value = (qvariant_cast<QEther*>(transaction.value("value")))->toU256Wei(); u256 value = (qvariant_cast<QEther*>(transaction.value("value")))->toU256Wei();
u256 gasPrice = (qvariant_cast<QEther*>(transaction.value("gasPrice")))->toU256Wei(); u256 gasPrice = (qvariant_cast<QEther*>(transaction.value("gasPrice")))->toU256Wei();
QString sender = transaction.value("sender").toString(); QString sender = transaction.value("sender").toString();
bool isStdContract = transaction.value("stdContract").toBool();
bool isContractCreation = transaction.value("isContractCreation").toBool(); bool isContractCreation = transaction.value("isContractCreation").toBool();
bool isFunctionCall = transaction.value("isFunctionCall").toBool(); bool isFunctionCall = transaction.value("isFunctionCall").toBool();
if (isStdContract)
{
if (contractId.isEmpty()) //TODO: This is to support old project files, remove later
contractId = functionId;
TransactionSettings transactionSettings(contractId, transaction.value("url").toString());
transactionSettings.gasPrice = 10000000000000;
transactionSettings.gasAuto = true;
transactionSettings.value = 0;
transactionSettings.sender = Secret(sender.toStdString());
transactionSequence.push_back(transactionSettings);
}
else
{
if (contractId.isEmpty() && m_codeModel->hasContract()) //TODO: This is to support old project files, remove later if (contractId.isEmpty() && m_codeModel->hasContract()) //TODO: This is to support old project files, remove later
contractId = m_codeModel->contracts().keys()[0]; contractId = m_codeModel->contracts().keys()[0];
TransactionSettings transactionSettings(contractId, functionId, value, gas, gasAuto, gasPrice, Secret(sender.toStdString()), isContractCreation, isFunctionCall); TransactionSettings transactionSettings(contractId, functionId, value, gas, gasAuto, gasPrice, Secret(sender.toStdString()), isContractCreation, isFunctionCall);
@ -282,7 +268,6 @@ void ClientModel::setupState(QVariantMap _state)
transactionSequence.push_back(transactionSettings); transactionSequence.push_back(transactionSettings);
} }
}
m_ethAccounts->setAccounts(userAccounts); m_ethAccounts->setAccounts(userAccounts);
executeSequence(transactionSequence, accounts, Secret(_state.value("miner").toMap().value("secret").toString().toStdString())); executeSequence(transactionSequence, accounts, Secret(_state.value("miner").toMap().value("secret").toString().toStdString()));
} }
@ -319,18 +304,6 @@ void ClientModel::executeSequence(vector<TransactionSettings> const& _sequence,
continue; continue;
} }
ContractCallDataEncoder encoder; ContractCallDataEncoder encoder;
if (!transaction.stdContractUrl.isEmpty())
{
//std contract
bytes const& stdContractCode = m_codeModel->getStdContractCode(transaction.contractId, transaction.stdContractUrl);
TransactionSettings stdTransaction = transaction;
stdTransaction.gasAuto = true;
Address address = deployContract(stdContractCode, stdTransaction);
m_stdContractAddresses[stdTransaction.contractId] = address;
m_stdContractNames[address] = stdTransaction.contractId;
}
else
{
//encode data //encode data
CompiledContract const& compilerRes = m_codeModel->contract(ctrInstance.first); CompiledContract const& compilerRes = m_codeModel->contract(ctrInstance.first);
QFunctionDefinition const* f = nullptr; QFunctionDefinition const* f = nullptr;
@ -391,7 +364,6 @@ void ClientModel::executeSequence(vector<TransactionSettings> const& _sequence,
callAddress(contractAddressIter->second, encoder.encodedData(), transaction); callAddress(contractAddressIter->second, encoder.encodedData(), transaction);
} }
m_gasCosts.append(m_client->lastExecution().gasUsed); m_gasCosts.append(m_client->lastExecution().gasUsed);
}
onNewTransaction(); onNewTransaction();
} }
m_running = false; m_running = false;
@ -697,13 +669,6 @@ void ClientModel::onNewTransaction()
if (creation) if (creation)
{ {
//contract creation //contract creation
auto const stdContractName = m_stdContractNames.find(tr.contractAddress);
if (stdContractName != m_stdContractNames.end())
{
function = stdContractName->second;
contract = function;
}
else
function = QObject::tr("Constructor"); function = QObject::tr("Constructor");
address = QObject::tr("(Create contract)"); address = QObject::tr("(Create contract)");
} }

1
mix/qml.qrc

@ -8,7 +8,6 @@
<file>qml/CodeEditorStyle.qml</file> <file>qml/CodeEditorStyle.qml</file>
<file>qml/CodeEditorView.qml</file> <file>qml/CodeEditorView.qml</file>
<file>qml/CommonSeparator.qml</file> <file>qml/CommonSeparator.qml</file>
<file>qml/ContractLibrary.qml</file>
<file>qml/DebugBasicInfo.qml</file> <file>qml/DebugBasicInfo.qml</file>
<file>qml/DebugInfoList.qml</file> <file>qml/DebugInfoList.qml</file>
<file>qml/Debugger.qml</file> <file>qml/Debugger.qml</file>

27
mix/qml/ContractLibrary.qml

@ -1,27 +0,0 @@
import QtQuick 2.2
Item {
id: contractLibrary
property alias model: contractListModel;
Connections {
target: mainApplication
onLoaded: {
//TODO: load a list, dependencies, ets, from external files
contractListModel.append({
name: "Config",
url: "qrc:///stdc/std.sol",
});
contractListModel.append({
name: "NameReg",
url: "qrc:///stdc/std.sol",
});
}
}
ListModel {
id: contractListModel
}
}

29
mix/qml/StateListModel.qml

@ -22,7 +22,7 @@ Item {
s.contracts = []; s.contracts = [];
return { return {
title: s.title, title: s.title,
transactions: s.transactions.map(fromPlainTransactionItem), transactions: s.transactions.filter(function(t) { return !t.stdContract; }).map(fromPlainTransactionItem), //support old projects by filtering std contracts
accounts: s.accounts.map(fromPlainAccountItem), accounts: s.accounts.map(fromPlainAccountItem),
contracts: s.contracts.map(fromPlainAccountItem), contracts: s.contracts.map(fromPlainAccountItem),
miner: s.miner miner: s.miner
@ -54,7 +54,6 @@ Item {
gas: QEtherHelper.createBigInt(t.gas.value), gas: QEtherHelper.createBigInt(t.gas.value),
gasPrice: QEtherHelper.createEther(t.gasPrice.value, t.gasPrice.unit), gasPrice: QEtherHelper.createEther(t.gasPrice.value, t.gasPrice.unit),
gasAuto: t.gasAuto, gasAuto: t.gasAuto,
stdContract: t.stdContract ? true : false,
parameters: {}, parameters: {},
sender: t.sender, sender: t.sender,
isContractCreation: t.isContractCreation, isContractCreation: t.isContractCreation,
@ -122,7 +121,6 @@ Item {
gas: { value: t.gas.value() }, gas: { value: t.gas.value() },
gasAuto: t.gasAuto, gasAuto: t.gasAuto,
gasPrice: { value: t.gasPrice.value, unit: t.gasPrice.unit }, gasPrice: { value: t.gasPrice.value, unit: t.gasPrice.unit },
stdContract: t.stdContract,
sender: t.sender, sender: t.sender,
parameters: {}, parameters: {},
isContractCreation: t.isContractCreation, isContractCreation: t.isContractCreation,
@ -189,10 +187,6 @@ Item {
} }
} }
ContractLibrary {
id: contractLibrary;
}
ListModel { ListModel {
id: stateListModel id: stateListModel
property int defaultStateIndex: 0 property int defaultStateIndex: 0
@ -226,18 +220,6 @@ Item {
item.accounts.push(account); item.accounts.push(account);
item.miner = account; item.miner = account;
//add all stdc contracts
for (var i = 0; i < contractLibrary.model.count; i++) {
var contractTransaction = defaultTransactionItem();
var contractItem = contractLibrary.model.get(i);
contractTransaction.url = contractItem.url;
contractTransaction.contractId = contractItem.name;
contractTransaction.functionId = contractItem.name;
contractTransaction.stdContract = true;
contractTransaction.sender = item.accounts[0].secret; // default account is used to deploy std contract.
item.transactions.push(contractTransaction);
};
//add constructors, //TODO: order by dependencies //add constructors, //TODO: order by dependencies
for(var c in codeModel.contracts) { for(var c in codeModel.contracts) {
var ctorTr = defaultTransactionItem(); var ctorTr = defaultTransactionItem();
@ -273,17 +255,12 @@ Item {
} }
function addNewContracts() { function addNewContracts() {
//add new contracts for all states //add new contracts to empty states
var changed = false; var changed = false;
for (var c in codeModel.contracts) { for (var c in codeModel.contracts) {
for (var s = 0; s < stateListModel.count; s++) { for (var s = 0; s < stateListModel.count; s++) {
var state = stateList[s]; var state = stateList[s];
for (var t = 0; t < state.transactions.length; t++) { if (state.transactions.length === 0) {
var transaction = state.transactions[t];
if (transaction.functionId === c && transaction.contractId === c)
break;
}
if (t === state.transactions.length) {
//append this contract //append this contract
var ctorTr = defaultTransactionItem(); var ctorTr = defaultTransactionItem();
ctorTr.functionId = c; ctorTr.functionId = c;

2
mix/qml/TransactionDialog.qml

@ -210,6 +210,8 @@ Dialog {
} }
item.isContractCreation = trType.checked; item.isContractCreation = trType.checked;
if (item.isContractCreation)
item.functionId = item.contractId;
item.isFunctionCall = item.functionId !== " - "; item.isFunctionCall = item.functionId !== " - ";
if (!item.isContractCreation) if (!item.isContractCreation)

4
mix/qml/html/cm/codemirror.css

@ -8,6 +8,10 @@
font-size:12px font-size:12px
} }
.CodeMirror-search-field {
height:200%;
}
/* BREAKPOINTS */ /* BREAKPOINTS */
.breakpoints {width: .8em;} .breakpoints {width: .8em;}
.breakpoint { color: #822; } .breakpoint { color: #822; }

2
mix/qml/html/cm/solidityToken.js

@ -5,7 +5,7 @@ function solCurrency()
function solKeywords() function solKeywords()
{ {
return { "break": true, "case": true, "constant": true, "continue": true, "contract": true, "default": true, "do": true, "else": true, "event": true, "external": true, "is": true, "indexed": true, "for": true, "function": true, "if": true, "import": true, "mapping": true, "modifier": true, "new": true, "public": true, "private": true, "internal": true, "return": true, "returns": true, "struct": true, "switch": true, "var": true, "while": true, "enum": true }; return { "break": true, "case": true, "constant": true, "continue": true, "contract": true, "default": true, "delete": true, "do": true, "else": true, "event": true, "external": true, "is": true, "indexed": true, "for": true, "function": true, "if": true, "import": true, "mapping": true, "modifier": true, "new": true, "public": true, "private": true, "internal": true, "return": true, "returns": true, "struct": true, "switch": true, "var": true, "while": true, "enum": true };
} }
function solStdContract() function solStdContract()

Loading…
Cancel
Save