Browse Source

New JS-API more/less working.

cl-refactor
Gav Wood 11 years ago
parent
commit
2655c8bc46
  1. 2
      libethereum/AddressState.h
  2. 6
      libqethereum/QEthereum.cpp
  3. 34
      libqethereum/QEthereum.h

2
libethereum/AddressState.h

@ -46,7 +46,7 @@ public:
u256 const& nonce() const { return m_nonce; } u256 const& nonce() const { return m_nonce; }
void incNonce() { m_nonce++; } void incNonce() { m_nonce++; }
h256 oldRoot() const { assert(m_storageOverlay.empty()); return m_storageRoot; } h256 oldRoot() const { return m_storageRoot; }
std::map<u256, u256> const& storage() const { return m_storageOverlay; } std::map<u256, u256> const& storage() const { return m_storageOverlay; }
void setStorage(u256 _p, u256 _v) { m_storageOverlay[_p] = _v; } void setStorage(u256 _p, u256 _v) { m_storageOverlay[_p] = _v; }

6
libqethereum/QEthereum.cpp

@ -193,7 +193,7 @@ eth::bytes toBytes(QString const& _s)
return eth::toCompactBigEndian(eth::bigint(_s.toStdString())); return eth::toCompactBigEndian(eth::bigint(_s.toStdString()));
else else
// Binary // Binary
return eth::asBytes(_s.toStdString()); return asBytes(_s);
} }
QString padded(QString const& _s, unsigned _l, unsigned _r) QString padded(QString const& _s, unsigned _l, unsigned _r)
@ -206,6 +206,8 @@ QString padded(QString const& _s, unsigned _l, unsigned _r)
return QString::fromStdString(eth::asString(b).substr(b.size() - max(_l, _r))); return QString::fromStdString(eth::asString(b).substr(b.size() - max(_l, _r)));
} }
//"0xff".bin().unbin()
QString padded(QString const& _s, unsigned _l) QString padded(QString const& _s, unsigned _l)
{ {
if (_s.startsWith("0x") || !_s.contains(QRegExp("[^0-9]"))) if (_s.startsWith("0x") || !_s.contains(QRegExp("[^0-9]")))
@ -245,7 +247,7 @@ void QEthereum::setup(QWebFrame* _e)
_e->evaluateJavaScript("eth.create = function(s, v, c, g, p, f) { eth.doCreate(s, v, c, g, p); if (f) f() }"); _e->evaluateJavaScript("eth.create = function(s, v, c, g, p, f) { eth.doCreate(s, v, c, g, p); if (f) f() }");
_e->evaluateJavaScript("eth.transact = function(s, v, t, d, g, p, f) { eth.doTransact(s, v, t, d, g, p); if (f) f() }"); _e->evaluateJavaScript("eth.transact = function(s, v, t, d, g, p, f) { eth.doTransact(s, v, t, d, g, p); if (f) f() }");
_e->evaluateJavaScript("String.prototype.pad = function(l, r) { return eth.pad(this, l, r) }"); _e->evaluateJavaScript("String.prototype.pad = function(l, r) { return eth.pad(this, l, r) }");
_e->evaluateJavaScript("String.prototype.bin = function(l) { return eth.toBinary(this) }"); _e->evaluateJavaScript("String.prototype.bin = function() { return eth.toBinary(this) }");
_e->evaluateJavaScript("String.prototype.unbin = function(l) { return eth.fromBinary(this) }"); _e->evaluateJavaScript("String.prototype.unbin = function(l) { return eth.fromBinary(this) }");
_e->evaluateJavaScript("String.prototype.unpad = function(l) { return eth.unpad(this) }"); _e->evaluateJavaScript("String.prototype.unpad = function(l) { return eth.unpad(this) }");
} }

34
libqethereum/QEthereum.h

@ -285,6 +285,24 @@ public:
}; };
#endif #endif
inline eth::bytes asBytes(QString const& _s)
{
eth::bytes ret;
ret.reserve(_s.size());
for (QChar c: _s)
ret.push_back(c.cell());
return ret;
}
inline QString asQString(eth::bytes const& _s)
{
QString ret;
ret.reserve(_s.size());
for (auto c: _s)
ret.push_back(QChar(c, 0));
return ret;
}
eth::bytes toBytes(QString const& _s); eth::bytes toBytes(QString const& _s);
QString padded(QString const& _s, unsigned _l, unsigned _r); QString padded(QString const& _s, unsigned _l, unsigned _r);
QString padded(QString const& _s, unsigned _l); QString padded(QString const& _s, unsigned _l);
@ -300,17 +318,19 @@ template <unsigned N> eth::FixedHash<N> toFixed(QString const& _s)
return (typename eth::FixedHash<N>::Arith)(_s.toStdString()); return (typename eth::FixedHash<N>::Arith)(_s.toStdString());
else else
// Binary // Binary
return eth::FixedHash<N>(eth::asBytes(padded(_s, N).toStdString())); return eth::FixedHash<N>(asBytes(padded(_s, N)));
} }
template <unsigned N> boost::multiprecision::number<boost::multiprecision::cpp_int_backend<N, N, boost::multiprecision::unsigned_magnitude, boost::multiprecision::unchecked, void>> toInt(QString const& _s) template <unsigned N> boost::multiprecision::number<boost::multiprecision::cpp_int_backend<N * 8, N * 8, boost::multiprecision::unsigned_magnitude, boost::multiprecision::unchecked, void>> toInt(QString const& _s)
{ {
if (_s.startsWith("0x") || !_s.contains(QRegExp("[^0-9]"))) if (_s.startsWith("0x"))
return eth::fromBigEndian<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<N * 8, N * 8, boost::multiprecision::unsigned_magnitude, boost::multiprecision::unchecked, void>>>(eth::fromHex(_s.toStdString().substr(2)));
else if (!_s.contains(QRegExp("[^0-9]")))
// Hex or Decimal // Hex or Decimal
return boost::multiprecision::number<boost::multiprecision::cpp_int_backend<N, N, boost::multiprecision::unsigned_magnitude, boost::multiprecision::unchecked, void>>(_s.toStdString()); return boost::multiprecision::number<boost::multiprecision::cpp_int_backend<N * 8, N * 8, boost::multiprecision::unsigned_magnitude, boost::multiprecision::unchecked, void>>(_s.toStdString());
else else
// Binary // Binary
return eth::fromBigEndian<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<N, N, boost::multiprecision::unsigned_magnitude, boost::multiprecision::unchecked, void>>>(eth::asBytes(padded(_s, N).toStdString())); return eth::fromBigEndian<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<N * 8, N * 8, boost::multiprecision::unsigned_magnitude, boost::multiprecision::unchecked, void>>>(asBytes(padded(_s, N)));
} }
inline eth::Address toAddress(QString const& _s) { return toFixed<20>(_s); } inline eth::Address toAddress(QString const& _s) { return toFixed<20>(_s); }
@ -322,12 +342,12 @@ template <unsigned N> QString toQJS(boost::multiprecision::number<boost::multipr
inline QString toBinary(QString const& _s) inline QString toBinary(QString const& _s)
{ {
return QString::fromStdString(eth::asString(toBytes(_s))); return asQString(toBytes(_s));
} }
inline QString fromBinary(QString const& _s) inline QString fromBinary(QString const& _s)
{ {
return QString::fromStdString("0x" + eth::toHex(eth::asBytes(_s.toStdString()))); return QString::fromStdString("0x" + eth::toHex(asBytes(_s)));
} }
class QEthereum: public QObject class QEthereum: public QObject

Loading…
Cancel
Save