ethers.js/tests/make-tests/make-contract-signatures.js

47 lines
1.5 KiB
JavaScript
Raw Normal View History

'use strict';
var utils = require('../utils');
var compile = (function() {
var soljson = require('../soljson-4.19.js');
var _compile = soljson.cwrap("compileJSONCallback", "string", ["string", "number", "number"]);
function compile(source) {
return JSON.parse(_compile(JSON.stringify({sources: { "demo.sol": source }}), 0));
}
compile.version = JSON.parse(compile('contract Foo { }').contracts['demo.sol:Foo'].metadata).compiler.version
return compile;
})();
var tests = utils.loadTests('contract-interface-abi2');
var output = [];
tests.forEach(function(test) {
var source = test.source;
var ret = source.match(/returns([^{]*){/);
var testSig = 'function testSig' + ret[1] + ' { }';
source = source.substring(0, source.length - 2) + ' ' + testSig + '\n}\n';
var code = compile(source);
if (!code.contracts['demo.sol:Test']) {
console.log(test.name, testSig, code.errors);
return;
}
var funcHashes = code.contracts['demo.sol:Test'].functionHashes;
var funcHash = null;
for (var key in funcHashes) {
if (key === 'test()') { continue; }
if (funcHash) { throw new Error('should not happen'); }
funcHash = key;
}
console.log(test.name, funcHash, funcHashes[funcHash]);
output.push({
name: test.name,
signature: funcHash,
sigHash: '0x' + funcHashes[funcHash],
abi: code.contracts['demo.sol:Test'].interface
});
});
utils.saveTests('contract-signatures', output);