mirror of
https://github.com/embarklabs/embark.git
synced 2025-02-20 01:18:52 +00:00
gas estimator and fuzzer
Signed-off-by: VoR0220 <catalanor0220@gmail.com>
This commit is contained in:
parent
d3c4f6275c
commit
f4bca2710f
57
lib/modules/fuzzer/index.js
Normal file
57
lib/modules/fuzzer/index.js
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
const ethAbi = require('web3-eth-abi');
|
||||||
|
const utils = require('web3-utils');
|
||||||
|
const _ = require('underscore');
|
||||||
|
|
||||||
|
|
||||||
|
// generates random inputs based on the inputs of an ABI
|
||||||
|
class ContractFuzzer {
|
||||||
|
constructor(abi) {
|
||||||
|
this.abi = abi;
|
||||||
|
}
|
||||||
|
|
||||||
|
generateFuzz() {
|
||||||
|
this.abi.forEach((abiMethod) => {
|
||||||
|
let inputTypes = abiMethod.inputs.map(input => input.type);
|
||||||
|
let fuzzedInputType = _.reduce(inputTypes, decipherType, 0);
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
getTypeFuzz(type) {
|
||||||
|
switch() {
|
||||||
|
case 'uintN' || 'intN':
|
||||||
|
|
||||||
|
case 'bytesN':
|
||||||
|
return generateRandomStaticBytes(size);
|
||||||
|
case 'string' || 'bytes':
|
||||||
|
return generateRandomDynamicType()
|
||||||
|
case 'address':
|
||||||
|
return generateRandomAddress();
|
||||||
|
default:
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
generateArrayOfType(length, type) {
|
||||||
|
var arr = [];
|
||||||
|
for (var i = 0; i < length; i++) {
|
||||||
|
arr.push(getTypeFuzz(type));
|
||||||
|
}
|
||||||
|
return arr;
|
||||||
|
}
|
||||||
|
|
||||||
|
generateRandomDynamicType() {
|
||||||
|
return Math.random().toString(36).slice(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
generateRandomStaticBytes(size) {
|
||||||
|
return utils.randomHex(size);
|
||||||
|
}
|
||||||
|
|
||||||
|
generateRandomInt(size) {
|
||||||
|
return utils.hexToNumber(utils.randomHex(size));
|
||||||
|
}
|
||||||
|
|
||||||
|
generateRandomAddress() {
|
||||||
|
return utils.randomHex(20);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
11
lib/modules/profiler/gasEstimator.js
Normal file
11
lib/modules/profiler/gasEstimator.js
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
const ethAbi = require('web3-eth-abi');
|
||||||
|
const contract = require('web3-eth-contract');
|
||||||
|
|
||||||
|
class GasEstimator {
|
||||||
|
constructor(provider, abi, iterations) {
|
||||||
|
this.abi = abi;
|
||||||
|
this.iters = iterations;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user