decode int, uint, address

pull/7/head
yann300 8 years ago
parent 4fb58291b1
commit 2074f95340
  1. 8
      src/solidity/types/Address.js
  2. 8
      src/solidity/types/Int.js
  3. 8
      src/solidity/types/Uint.js
  4. 6
      src/solidity/types/util.js

@ -12,4 +12,12 @@ Address.prototype.decodeFromStorage = function (location, storageContent) {
return '0x' + value.toUpperCase() return '0x' + value.toUpperCase()
} }
Address.prototype.decodeLocals = function (stackHeight, stack, memory) {
if (stack.length < stackHeight) {
return '0x0000000000000000000000000000000000000000'
} else {
return '0x' + util.extractHexByteSlice(stack[stack.length - 1 - stackHeight], this.storageBytes, 0)
}
}
module.exports = Address module.exports = Address

@ -11,4 +11,12 @@ Int.prototype.decodeFromStorage = function (location, storageContent) {
return util.decodeInt(location, storageContent, this.storageBytes, true) return util.decodeInt(location, storageContent, this.storageBytes, true)
} }
Int.prototype.decodeLocals = function (stackHeight, stack, memory) {
if (stack.length < stackHeight) {
return '0'
} else {
return util.decodeIntFromHex(stack[stack.length - 1 - stackHeight].replace('0x', ''), 32, true)
}
}
module.exports = Int module.exports = Int

@ -11,4 +11,12 @@ Uint.prototype.decodeFromStorage = function (location, storageContent) {
return util.decodeInt(location, storageContent, this.storageBytes, false) return util.decodeInt(location, storageContent, this.storageBytes, false)
} }
Uint.prototype.decodeLocals = function (stackHeight, stack, memory) {
if (stack.length < stackHeight) {
return '0'
} else {
return util.decodeIntFromHex(stack[stack.length - 1 - stackHeight].replace('0x', ''), this.storageBytes, false)
}
}
module.exports = Uint module.exports = Uint

@ -5,7 +5,9 @@ var BN = require('ethereumjs-util').BN
module.exports = { module.exports = {
readFromStorage: readFromStorage, readFromStorage: readFromStorage,
decodeInt: decodeInt, decodeInt: decodeInt,
decodeIntFromHex: decodeIntFromHex,
extractHexValue: extractHexValue, extractHexValue: extractHexValue,
extractHexByteSlice: extractHexByteSlice,
sha3: sha3, sha3: sha3,
toBN: toBN, toBN: toBN,
add: add add: add
@ -14,6 +16,10 @@ module.exports = {
function decodeInt (location, storageContent, byteLength, signed) { function decodeInt (location, storageContent, byteLength, signed) {
var slotvalue = readFromStorage(location.slot, storageContent) var slotvalue = readFromStorage(location.slot, storageContent)
var value = extractHexByteSlice(slotvalue, byteLength, location.offset) var value = extractHexByteSlice(slotvalue, byteLength, location.offset)
return decodeIntFromHex(value, byteLength, signed)
}
function decodeIntFromHex (value, byteLength, signed) {
var bigNumber = new BN(value, 16) var bigNumber = new BN(value, 16)
if (signed) { if (signed) {
bigNumber = bigNumber.fromTwos(8 * byteLength) bigNumber = bigNumber.fromTwos(8 * byteLength)

Loading…
Cancel
Save