1.0.1 • Published 7 years ago
contract-deployer v1.0.1
contract-deployer
Code is worth a thousand words, so lets see an example code of the tipical contract deployment and how contract-deployer can help you reduce boilerplate code:
const fs = require('fs');
const solc = require('solc');
const web3 = // ...
const source = fs.readFileSync('Hello.sol', 'utf8');
const compiledContract = solc.compile(source, 1);
const abi = compiledContract.contracts['Hello'].interface;
const bytecode = compiledContract.contracts['Hello'].bytecode;
const gasEstimate = web3.eth.estimateGas({ data: bytecode });
const contractFactory = web3.eth.contract(JSON.parse(abi));
const myContract = contractFactory.new(param1, param2, {
from: sender,
data: bytecode,
gas: gasEstimate
}, function (error, myContract) {
if (error) {
// report error
} else {
// check address (contract deployed)
if (myContract.address) {
// start using contract
}
}
});
With contract-deployer™ it becomes:
const Deployer = require('contract-deployer');
const deployer = new Deployer(web3, {sources: fs.readFileSync('Hello.sol', 'utf8')}, 0);
deployer.deploy('Hello', [param1, param2], { from: sender })
.then(hello => { /* start using contract */ })
.catch(error => { /* report error */ });
As you can see, deploy()
returns a Promise, so you can chain multiple deploys using Promise.then(...)
:
const sources = {
'A.sol': 'contract A {}',
'B.sol': 'contract B { function B(A a) { ... } }'
};
const deployer = new Deployer(web3, {sources}, 0);
deployer.deploy('A', [])
.then(a => deployer.deploy('B', [a]))
.then(b => /* start using b */);
contract-deployer caches the source code compilation:
// TODO
contract-deployer "promisifies" deployed contract methods:
// TODO
Installation
npm install contract-deployer
API
Create a new Deployer instance:
const deployer = new Deployer(web3, sources, enableOptimizer);
Parameters:
web3
: a web3 instancesources
: an string containing valid Solidity code or for multiple source files an object with the format{ sources: {'contractA.sol': '...', 'contractB.sol': '...'} }
enableOptimizer
: whether or not the solc optimizer is enable
Returns:
A new Deployer instance.
Deploy a smart contract from a Solidity source file or a string containing the code:
const promise = deployer.deploy(contractName, constructorArgs, txOptions);
Parameters:
contractName
: contract name of contract to deploy (should match contract name defined in the Solidity declaration:contract ContractName {}
)constructorArgs
: an arrays containing the arguments for the contract constructortxOptions
: options for the underlying contract creation transaction
Returns:
A JavaScript Promise that will resolve as soon as the contract is mined or reject if errors are found.