fix enum, bytearray

pull/7/head
yann300 8 years ago
parent ec9cb8056f
commit 5dd015a7ad
  1. 5
      src/solidity/types/DynamicByteArray.js
  2. 2
      src/solidity/types/Enum.js
  3. 14
      test/solidity/contracts/byteStorage.js
  4. 4
      test/solidity/storageDecoder.js

@ -17,14 +17,13 @@ DynamicByteArray.prototype.decodeFromStorage = function (location, storageConten
var ret = ''
var currentSlot = storageContent[key]
key = new BN(key.replace('0x', ''), 16)
var regex = /(00)+$/
while (currentSlot) {
currentSlot = currentSlot.replace('0x', '').replace(regex, '')
currentSlot = currentSlot.replace('0x', '')
ret += currentSlot
key = key.add(new BN(1))
currentSlot = storageContent['0x' + key.toString(16)]
}
return '0x' + ret
return '0x' + ret.replace(/(00)+$/, '')
} else {
var size = value.substr(value.length - 2, 2)
return '0x' + value.substr(0, parseInt(size, 16))

@ -15,7 +15,7 @@ function Enum (enumDef) {
Enum.prototype.decodeFromStorage = function (location, storageContent) {
var value = util.extractHexByte(location, storageContent, this.storageBytes)
value = parseInt(value)
value = parseInt(value, 16)
if (this.enumDef.children.length > value) {
return this.enumDef.children[value].attributes.name
} else {

@ -2,13 +2,9 @@
module.exports = {
contract: `
contract byteStorage {
enum enum1 {
a,
b,
c,
d
}
contract byteStorage {
enum enum1 { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63, e64, e65, e66, e67, e68, e69, e70, e71, e72, e73, e74, e75, e76, e77, e78, e79, e80, e81, e82, e83, e84, e85, e86, e87, e88, e89, e90, e91, e92, e93, e94, e95, e96, e97, e98, e99, e100, e101, e102, e103, e104, e105, e106, e107, e108, e109, e110, e111, e112, e113, e114, e115, e116, e117, e118, e119, e120, e121, e122, e123, e124, e125, e126, e127, e128, e129, e130, e131, e132, e133, e134, e135, e136, e137, e138, e139, e140, e141, e142, e143, e144, e145, e146, e147, e148, e149, e150, e151, e152, e153, e154, e155, e156, e157, e158, e159, e160, e161, e162, e163, e164, e165, e166, e167, e168, e169, e170, e171, e172, e173, e174, e175, e176, e177, e178, e179, e180, e181, e182, e183, e184, e185, e186, e187, e188, e189, e190, e191, e192, e193, e194, e195, e196, e197, e198, e199, e200, e201, e202, e203, e204, e205, e206, e207, e208, e209, e210, e211, e212, e213, e214, e215, e216, e217, e218, e219, e220, e221, e222, e223, e224, e225, e226, e227, e228, e229, e230, e231, e232, e233, e234, e235, e236, e237, e238, e239, e240, e241, e242, e243, e244, e245, e246, e247, e248, e249, e250, e251, e252, e253, e254, e255, e256, e257, e258, e259, e260 }
bool b1 = false;
address a1 = 0xfe350f199f244ac9a79038d254400b632a633225;
bool b2 = true;
@ -46,7 +42,7 @@ module.exports = {
bytes30 stab30 = 0x3245435232423;
bytes31 stab31 = 0x3245435123;
bytes32 stab32 = 0x324324423432543543AB;
enum1 enumDec = enum1.d;
enum1 enumDec = enum1.e240;
string str1 = 'short';
string str2 = 'long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long';
}
@ -75,7 +71,7 @@ module.exports = {
'0x0000000000000000000000000000000000000000000000000000000000000014': '0x0000000000000000000000000000000000000000000000000003245435232423',
'0x0000000000000000000000000000000000000000000000000000000000000015': '0x0000000000000000000000000000000000000000000000000000003245435123',
'0x0000000000000000000000000000000000000000000000000000000000000016': '0x00000000000000000000000000000000000000000000324324423432543543ab',
'0x0000000000000000000000000000000000000000000000000000000000000017': '0x0000000000000000000000000000000000000000000000000000000000000003',
'0x0000000000000000000000000000000000000000000000000000000000000017': '0x00000000000000000000000000000000000000000000000000000000000000f0',
'0x0000000000000000000000000000000000000000000000000000000000000018': '0x73686f727400000000000000000000000000000000000000000000000000000a',
'0x0000000000000000000000000000000000000000000000000000000000000019': '0x000000000000000000000000000000000000000000000000000000000000023d',
'0x944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9695': '0x6c6f6e675f5f6c6f6e675f5f6c6f6e675f5f6c6f6e675f5f6c6f6e675f5f6c6f',

@ -93,7 +93,7 @@ function testByteStorage (st) {
st.equal(decoded['stab30'], '0x3245435232423')
st.equal(decoded['stab31'], '0x3245435123')
st.equal(decoded['stab32'], '0x324324423432543543AB')
st.equal(decoded['enumDec'], 'd')
st.equal(decoded['enumDec'], 'e240')
st.equal(decoded['str1'], 'short')
st.equal(decoded['str2'], 'long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long')
}
@ -136,7 +136,7 @@ function testByteStorage (st) {
st.equal(decoded['stab30'], '0x')
st.equal(decoded['stab31'], '0x')
st.equal(decoded['stab32'], '0x')
st.equal(decoded['enumDec'], 'a')
st.equal(decoded['enumDec'], 'e0')
st.equal(decoded['str1'], '')
st.equal(decoded['str2'], '')
}

Loading…
Cancel
Save