Browse Source

Prepared State premine.

Fixes for Qt 5.2.
cl-refactor
Gav Wood 10 years ago
parent
commit
a22376093a
  1. 3
      mix/AssemblyDebuggerCtrl.cpp
  2. 39
      mix/AssemblyDebuggerModel.cpp
  3. 21
      mix/AssemblyDebuggerModel.h
  4. 6
      mix/qml/BasicMessage.qml
  5. 6
      mix/qml/Debugger.qml
  6. 4
      mix/qml/MainContent.qml
  7. 2
      mix/qml/main.qml

3
mix/AssemblyDebuggerCtrl.cpp

@ -69,11 +69,10 @@ void AssemblyDebuggerCtrl::keyPressed(int _key)
return;
}
KeyPair ad = KeyPair::create();
u256 gasPrice = 10000000000000;
u256 gas = 1000000;
u256 amount = 100;
DebuggingContent debuggingContent = m_modelDebugger->getContractInitiationDebugStates(amount, gasPrice, gas, m_doc->toPlainText(), ad);
DebuggingContent debuggingContent = m_modelDebugger->getContractInitiationDebugStates(amount, gasPrice, gas, m_doc->toPlainText());
//we need to wrap states in a QObject before sending to QML.
QList<QObject*> wStates;

39
mix/AssemblyDebuggerModel.cpp

@ -18,30 +18,36 @@
*/
#include <QApplication>
#include "libethereum/Executive.h"
#include "libethereum/Transaction.h"
#include "libethereum/ExtVM.h"
#include "libevm/VM.h"
#include "libdevcore/Common.h"
#include <libdevcore/Common.h>
#include <libevm/VM.h>
#include <libethereum/Executive.h>
#include <libethereum/Transaction.h>
#include <libethereum/ExtVM.h>
#include "AppContext.h"
#include "TransactionBuilder.h"
#include "AssemblyDebuggerModel.h"
#include "ConstantCompilationModel.h"
#include "DebuggingStateWrapper.h"
using namespace std;
using namespace dev;
using namespace dev::eth;
using namespace dev::mix;
AssemblyDebuggerModel::AssemblyDebuggerModel()
AssemblyDebuggerModel::AssemblyDebuggerModel():
m_userAccount(KeyPair::create()),
m_baseState(Address(), m_overlayDB, BaseState::Empty)
{
m_baseState.addBalance(m_userAccount.address(), 10000000 * ether);
m_currentExecution = std::unique_ptr<Executive>(new Executive(m_executiveState, 0));
}
DebuggingContent AssemblyDebuggerModel::getContractInitiationDebugStates(dev::bytesConstRef _rawTransaction)
{
// Reset the state back to our clean premine.
m_executiveState = m_baseState;
QList<DebuggingState> states;
Transaction tr(_rawTransaction);
m_currentExecution->create(tr.sender(), tr.value(), tr.gasPrice(), tr.gas(), &tr.data(), tr.sender());
m_currentExecution->setup(_rawTransaction);
std::vector<DebuggingState const*> levels;
bytes code;
bytesConstRef data;
@ -67,7 +73,9 @@ DebuggingContent AssemblyDebuggerModel::getContractInitiationDebugStates(dev::by
vm.stack(), vm.memory(), gasCost, ext.state().storage(ext.myAddress), levels}));
};
m_currentExecution->go(onOp);
cdebug << states.size();
m_currentExecution->finalize(onOp);
DebuggingContent d;
@ -79,11 +87,12 @@ DebuggingContent AssemblyDebuggerModel::getContractInitiationDebugStates(dev::by
return d;
}
DebuggingContent AssemblyDebuggerModel::getContractInitiationDebugStates(dev::u256 _value,
dev::u256 _gasPrice,
dev::u256 _gas,
QString _code,
KeyPair _key)
DebuggingContent AssemblyDebuggerModel::getContractInitiationDebugStates(
dev::u256 _value,
dev::u256 _gasPrice,
dev::u256 _gas,
QString _code
)
{
ConstantCompilationModel compiler;
CompilerResult res = compiler.compile(_code);
@ -96,8 +105,8 @@ DebuggingContent AssemblyDebuggerModel::getContractInitiationDebugStates(dev::u2
}
TransactionBuilder trBuild;
Transaction tr = trBuild.getCreationTransaction(_value, _gasPrice, _gas, res.bytes,
m_executiveState.transactionsFrom(dev::toAddress(_key.secret())), _key.secret());
Transaction tr = trBuild.getCreationTransaction(_value, _gasPrice, min(_gas, m_baseState.gasLimitRemaining()), res.bytes,
m_executiveState.transactionsFrom(dev::toAddress(m_userAccount.secret())), m_userAccount.secret());
bytes b = tr.rlp();
dev::bytesConstRef bytesRef = &b;
return getContractInitiationDebugStates(bytesRef);

21
mix/AssemblyDebuggerModel.h

@ -21,9 +21,10 @@
#include <QObject>
#include <QList>
#include "libethereum/State.h"
#include "libethereum/Executive.h"
#include "libdevcore/Common.h"
#include <libdevcore/Common.h>
#include <libdevcrypto/Common.h>
#include <libethereum/State.h>
#include <libethereum/Executive.h>
#include "DebuggingStateWrapper.h"
namespace dev
@ -31,17 +32,23 @@ namespace dev
namespace mix
{
/**
* @brief Long-life object for managing all executions.
*/
class AssemblyDebuggerModel
{
public:
AssemblyDebuggerModel();
DebuggingContent getContractInitiationDebugStates(dev::u256, dev::u256, dev::u256, QString, KeyPair);
DebuggingContent getContractInitiationDebugStates(dev::bytesConstRef);
DebuggingContent getContractInitiationDebugStates(u256, u256, u256, QString);
DebuggingContent getContractInitiationDebugStates(bytesConstRef);
bool compile(QString);
private:
std::unique_ptr<dev::eth::Executive> m_currentExecution;
dev::eth::State m_executiveState;
KeyPair m_userAccount;
OverlayDB m_overlayDB;
eth::State m_baseState;
eth::State m_executiveState;
std::unique_ptr<eth::Executive> m_currentExecution;
};
}

6
mix/qml/BasicMessage.qml

@ -1,7 +1,7 @@
import QtQuick 2.2
import QtQuick.Controls.Styles 1.2
import QtQuick.Controls 1.2
import QtQuick.Dialogs 1.2
import QtQuick.Controls.Styles 1.1
import QtQuick.Controls 1.1
import QtQuick.Dialogs 1.1
import QtQuick.Layouts 1.1
Rectangle {

6
mix/qml/Debugger.qml

@ -1,7 +1,7 @@
import QtQuick 2.2
import QtQuick.Controls.Styles 1.2
import QtQuick.Controls 1.2
import QtQuick.Dialogs 1.2
import QtQuick.Controls.Styles 1.1
import QtQuick.Controls 1.1
import QtQuick.Dialogs 1.1
import QtQuick.Layouts 1.1
import "js/Debugger.js" as Debugger

4
mix/qml/MainContent.qml

@ -1,7 +1,7 @@
import QtQuick 2.2
import QtQuick.Controls 1.2
import QtQuick.Controls 1.1
import QtQuick.Layouts 1.0
import QtQuick.Controls.Styles 1.2
import QtQuick.Controls.Styles 1.1
import CodeEditorExtensionManager 1.0
Rectangle {

2
mix/qml/main.qml

@ -1,7 +1,7 @@
import QtQuick 2.2
import QtQuick.Controls 1.1
import QtQuick.Controls.Styles 1.1
import QtQuick.Dialogs 1.2
import QtQuick.Dialogs 1.1
import QtQuick.Layouts 1.1
import QtQuick.Window 2.0
import CodeEditorExtensionManager 1.0

Loading…
Cancel
Save