burrow-contracts
Version:
Library with javascript bindings for Solidity contracts.
60 lines (49 loc) • 1.53 kB
JavaScript
const contractsModule = require('./contractManager')
const DevPipe = require('./pipes/dev_pipe')
const Promise = require('bluebird')
const Solidity = require('solc')
const test = require('burrow-db/lib/test')
// Convenience function to compile Solidity code in tests.
const compile = (contractManager, source, name) => {
const compiled = Solidity.compile(source, 1)
if (compiled.errors) {
return Promise.reject(new Error(compiled.errors))
} else {
const contract = compiled.contracts[name]
const abi = JSON.parse(contract.interface)
const contractFactory = contractManager.newContractFactory(abi)
return Promise.fromCallback((callback) =>
contractFactory.new({data: contract.bytecode}, callback)
)
}
}
// Return a contract manager in the test harness.
const Vector = () => {
let manager
const vector = test.Vector()
return Object.assign(Object.create(vector), {
before: (dirname, options, callback) =>
vector.before(dirname, options, function ({db, validator}) {
const accounts = {
address: validator.address,
pubKey: validator.pub_key,
privKey: validator.priv_key
}
manager = contractsModule.newContractManager(new DevPipe(db, accounts))
if (callback) {
return callback.call(this, manager)
}
}),
it: (callback) =>
vector.it(
function () {
return callback.call(this, manager)
}
)
})
}
module.exports = {
compile,
Vector
}