Browse Source

- Accounts Managements

cl-refactor
yann300 10 years ago
parent
commit
8828c64c21
  1. 26
      mix/ClientModel.cpp
  2. 2
      mix/ClientModel.h
  3. 6
      mix/MixClient.cpp
  4. 77
      mix/qml/StateDialog.qml
  5. 13
      mix/qml/StateListModel.qml

26
mix/ClientModel.cpp

@ -47,6 +47,8 @@ namespace dev
namespace mix
{
//const Secret c_defaultUserAccountSecret = Secret("cb73d9408c4720e230387d956eb0f829d8a4dd2c1055f96257167e14e7169074");
class RpcConnector: public jsonrpc::AbstractServerConnector
{
public:
@ -136,6 +138,15 @@ void ClientModel::mine()
});
}
QString ClientModel::newAddress() const
{
KeyPair a = KeyPair.create();
return toHex(a.secret().ref());
//m_client.addBalance(a.address(), _balance, 0);
//emit accountCreated;
//return QString::fromStdString(toHex(a.address().ref()));
}
QVariantMap ClientModel::contractAddresses() const
{
QVariantMap res;
@ -151,7 +162,7 @@ void ClientModel::debugDeployment()
void ClientModel::setupState(QVariantMap _state)
{
u256 balance = (qvariant_cast<QEther*>(_state.value("balance")))->toU256Wei();
QVariantList balances = _state.value("balances").toList();
QVariantList transactions = _state.value("transactions").toList();
std::vector<TransactionSettings> transactionSequence;
@ -194,10 +205,10 @@ void ClientModel::setupState(QVariantMap _state)
transactionSequence.push_back(transactionSettings);
}
}
executeSequence(transactionSequence, balance);
executeSequence(transactionSequence, balances);
}
void ClientModel::executeSequence(std::vector<TransactionSettings> const& _sequence, u256 _balance)
void ClientModel::executeSequence(std::vector<TransactionSettings> const& _sequence, QVariantList _balances)
{
if (m_running)
BOOST_THROW_EXCEPTION(ExecutionStateException());
@ -211,7 +222,14 @@ void ClientModel::executeSequence(std::vector<TransactionSettings> const& _seque
{
try
{
m_client->resetState(_balance);
std::map balancesMap;
for (auto b: _balances)
{
QVariantMap address = b.toMap();
balancesMap.insert(std::make_pair(KeyPair(Secret(address.value("Secret").toString())).address(), Account(address.value("Balance").toString(), Account::NormalCreation)));
}
m_client->resetState(balancesMap);
onStateReset();
for (TransactionSettings const& transaction: _sequence)
{

2
mix/ClientModel.h

@ -27,6 +27,7 @@
#include <map>
#include <QString>
#include <QVariantMap>
#include "QBigInt.h"
#include "MachineStates.h"
namespace dev
@ -151,6 +152,7 @@ public slots:
Q_INVOKABLE void debugRecord(unsigned _index);
/// Show the debugger for an empty record
Q_INVOKABLE void emptyRecord();
Q_INVOKABLE QString newAddress();
private slots:
/// Update UI with machine states result. Display a modal dialog.

6
mix/MixClient.cpp

@ -40,7 +40,6 @@ namespace dev
namespace mix
{
const Secret c_userAccountSecret = Secret("cb73d9408c4720e230387d956eb0f829d8a4dd2c1055f96257167e14e7169074");
const u256 c_mixGenesisDifficulty = (u256) 1 << 4;
class MixBlockChain: public dev::eth::BlockChain
@ -71,7 +70,7 @@ MixClient::~MixClient()
{
}
void MixClient::resetState(u256 _balance)
void MixClient::resetState(std::map<Address, Account> _genesisState)
{
WriteGuard l(x_state);
Guard fl(m_filterLock);
@ -81,8 +80,7 @@ void MixClient::resetState(u256 _balance)
m_stateDB = OverlayDB();
TrieDB<Address, MemoryDB> accountState(&m_stateDB);
accountState.init();
std::map<Address, Account> genesisState = { std::make_pair(KeyPair(c_userAccountSecret).address(), Account(_balance, Account::NormalCreation)) };
dev::eth::commit(genesisState, static_cast<MemoryDB&>(m_stateDB), accountState);
dev::eth::commit(_genesisState, static_cast<MemoryDB&>(m_stateDB), accountState);
h256 stateRoot = accountState.root();
m_bc.reset();
m_bc.reset(new MixBlockChain(m_dbPath, stateRoot));

77
mix/qml/StateDialog.qml

@ -19,16 +19,17 @@ Window {
color: StateDialogStyle.generic.backgroundColor
property alias stateTitle: titleField.text
property alias stateBalance: balanceField.value
//property alias stateBalance: balanceField.value
property alias isDefault: defaultCheckBox.checked
property int stateIndex
property var stateTransactions: []
property var stateAccounts: []
signal accepted
function open(index, item, setDefault) {
stateIndex = index;
stateTitle = item.title;
balanceField.value = item.balance;
//balanceField.value = item.balance;
transactionsModel.clear();
stateTransactions = [];
var transactions = item.transactions;
@ -37,6 +38,13 @@ Window {
stateTransactions.push(item.transactions[t]);
}
stateAccounts = [];
for (var k = 0; k < item.accounts; k++)
{
accountsModel.append(item.accounts[k]);
stateAccounts.push(item.accounts[k]);
}
modalStateDialog.setX((Screen.width - width) / 2);
modalStateDialog.setY((Screen.height - height) / 2);
@ -54,10 +62,12 @@ Window {
function getItem() {
var item = {
title: stateDialog.stateTitle,
balance: stateDialog.stateBalance,
transactions: []
//balance: stateDialog.stateBalance,
transactions: [],
accounts: []
}
item.transactions = stateTransactions;
item.accounts = stateAccounts;
return item;
}
@ -92,13 +102,44 @@ Window {
Layout.fillWidth: true
DefaultLabel {
Layout.preferredWidth: 75
text: qsTr("Balance")
text: qsTr("Accounts")
}
Ether {
id: balanceField
edit: true
displayFormattedValue: true
Layout.fillWidth: true
Rectangle
{
Button {
text: "add new accounts"
onClicked: accountsModel.newAccount("10000", QEther.Ether);
}
}
TableView
{
model: accountsModel
TableViewColumn {
role: "secret"
title: qsTr("Address")
width: 100
delegate: Item {
DefaultLabel {
text: styleData.value
}
}
}
TableViewColumn {
role: "balance"
title: qsTr("Balance")
width: 200
delegate: Item {
Ether {
id: balanceField
edit: true
displayFormattedValue: true
value: styleData.value
}
}
}
}
}
@ -196,6 +237,22 @@ Window {
}
}
ListModel {
id: accountsModel
function newAccount(_balance, _unit)
{
accountsModel.append({ secret: _secret, balance: QEtherHelper.createEther(_balance, _unit) });
stateAccounts.push({ secret: _secret, balance: QEtherHelper.createEther(_balance, _unit) });
}
function removeAccount(_i)
{
accountsModel.remove(_i);
stateAccounts.splice(_i, 1);
}
}
ListModel {
id: transactionsModel

13
mix/qml/StateListModel.qml

@ -152,7 +152,7 @@ Item {
ListModel {
id: stateListModel
property string defaultSecret: "cb73d9408c4720e230387d956eb0f829d8a4dd2c1055f96257167e14e7169074"
property int defaultStateIndex: 0
signal defaultStateChanged;
signal stateListModelReady;
@ -168,14 +168,18 @@ Item {
}
function createDefaultState() {
//var ether = QEtherHelper.createEther("100000000000000000000000000", QEther.Wei);
var ether = QEtherHelper.createEther("1000000", QEther.Ether);
var item = {
title: "",
balance: ether,
transactions: []
transactions: [],
accounts: []
};
item.accounts.push({
secret: defaultSecret,
balance: ether
});
//add all stdc contracts
for (var i = 0; i < contractLibrary.model.count; i++) {
var contractTransaction = defaultTransactionItem();
@ -194,6 +198,7 @@ Item {
ctorTr.contractId = c;
item.transactions.push(ctorTr);
}
return item;
}

Loading…
Cancel
Save