diff --git a/libdevcore/CommonData.h b/libdevcore/CommonData.h index 3dd5edab7..87d2f5e28 100644 --- a/libdevcore/CommonData.h +++ b/libdevcore/CommonData.h @@ -113,7 +113,7 @@ inline bytes toBigEndian(u160 _val) { bytes ret(20); toBigEndian(_val, ret); ret /// Convenience function for toBigEndian. /// @returns a byte array just big enough to represent @a _val. template -inline bytes toCompactBigEndian(_T _val, unsigned _min = 1) +inline bytes toCompactBigEndian(_T _val, unsigned _min = 0) { int i = 0; for (_T v = _val; v; ++i, v >>= 8) {} diff --git a/libdevcore/CommonJS.cpp b/libdevcore/CommonJS.cpp index 157dfd91e..ee2074cd1 100644 --- a/libdevcore/CommonJS.cpp +++ b/libdevcore/CommonJS.cpp @@ -42,25 +42,22 @@ bytes padded(bytes _b, unsigned _l) { while (_b.size() < _l) _b.insert(_b.begin(), 0); - while (_b.size() < _l) - _b.push_back(0); return asBytes(asString(_b).substr(_b.size() - std::max(_l, _l))); } bytes unpadded(bytes _b) { - auto p = asString(_b).find_first_not_of("0"); + auto p = asString(_b).find_last_not_of((char)0); _b.resize(p == std::string::npos ? 0 : (p + 1)); return _b; } -std::string unpadded(std::string _b) +std::string unpadLeft(std::string _b) { auto p = _b.find_first_not_of('0'); if (p == std::string::npos) return "0"; - _b = _b.substr(p, _b.length() - 1); - return _b; + return _b.substr(p, _b.length() - 1); } std::string prettyU256(u256 _n) diff --git a/libdevcore/CommonJS.h b/libdevcore/CommonJS.h index ed3a77181..9491bd4b7 100644 --- a/libdevcore/CommonJS.h +++ b/libdevcore/CommonJS.h @@ -46,12 +46,19 @@ inline std::string toJS(dev::bytes const& _n) return "0x" + dev::toHex(_n); } +/// Convert string to byte array. bytes jsToBytes(std::string const& _s); +/// Add '0' on the head of _b until _l. bytes padded(bytes _b, unsigned _l); +/// Removing all trailing '0'. bytes unpadded(bytes _s); -std::string unpadded(std::string _s); +/// Remove all '0' on the head of _s. +std::string unpadLeft(std::string _s); +/// Convert u256 to readable string. std::string prettyU256(u256 _n); +/// Convert h256 to readable string. std::string fromRaw(h256 _n, unsigned* _inc = nullptr); +/// Convert string to Address (h160). Address fromString(std::string const& _a); template FixedHash jsToFixed(std::string const& _s) diff --git a/mix/ContractCallDataEncoder.cpp b/mix/ContractCallDataEncoder.cpp index c631793d4..b83a0c582 100644 --- a/mix/ContractCallDataEncoder.cpp +++ b/mix/ContractCallDataEncoder.cpp @@ -75,7 +75,7 @@ QList ContractCallDataEncoder::decode(QListpadding(dec->type()); std::string rawParam = returnValue.substr(0, padding * 2); - r.append(new QVariableDefinition(dec, convertToReadable(unpadded(rawParam), dec))); + r.append(new QVariableDefinition(dec, convertToReadable(unpadLeft(rawParam), dec))); returnValue = returnValue.substr(rawParam.length(), returnValue.length() - 1); } return r;