contract-splitter
v1.0.0
Published
Split an EVM smart contract deployement bytecode into its sub components
Downloads
4
Maintainers
Readme
contract-splitter
Split an Ethereum smart contract deployement bytecode into it's different components.
A deployement bytecode will be split into :
- Constructor bytecode
- Runtime bytecode
- Contract metadata
- Constructor arguments
Install
npm install contract-splitter
Usage
Several mode of use are available :
On deployement bytecode
const splitter = require("contract-splitter");
const BYTECODE =
"0x6080604052348015600f57600080fd5b5060405160ee38038060ee8339818101604052810190602d91906046565b505060a2565b600081519050604081608e565b92915050565b60008060408385031215605a5760596089565b5b60006066858286016033565b92505060206075858286016033565b9150509250929050565b6000819050919050565b600080fd5b609581607f565b8114609f57600080fd5b50565b603f8060af6000396000f3fe6080604052600080fdfea2646970667358221220c87ae32fc63068beed8a787da3583f72f55c257933c23254f98bca3ca6fe829e64736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002";
console.log(splitter(BYTECODE));
/*
{
constructor: '6080604052348015600f57600080fd5b5060405160ee38038060ee8339818101604052810190602d91906046565b505060a2565b600081519050604081608e565b92915050565b60008060408385031215605a5760596089565b5b60006066858286016033565b92505060206075858286016033565b9150509250929050565b6000819050919050565b600080fd5b609581607f565b8114609f57600080fd5b50565b603f8060af6000396000f3fe',
contract: '6080604052600080fdfea2646970667358221220c87ae32fc63068beed8a787da3583f72f55c257933c23254f98bca3ca6fe829e64736f6c63430008070033',
metadata: 'a2646970667358221220c87ae32fc63068beed8a787da3583f72f55c257933c23254f98bca3ca6fe829e64736f6c63430008070033',
arguments: '00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002'
}
*/
On deployement transaction
const splitter = require("contract-splitter");
const Web3 = require("web3");
const TX_HASH =
"0xcf94b784bba70da289a5064819c239d476b01dd5f95a43304a63cee507ebcb35";
async function main() {
// Ropsten network provider for this specific tx hash
const web3 = new Web3("YOUR_PROVIDER_URL");
const tx = await web3.eth.getTransaction(TX_HASH);
console.log(splitter(tx.input));
/*
{
constructor: '6080604052348015600f57600080fd5b5060405160ee38038060ee8339818101604052810190602d91906046565b505060a2565b600081519050604081608e565b92915050565b60008060408385031215605a5760596089565b5b60006066858286016033565b92505060206075858286016033565b9150509250929050565b6000819050919050565b600080fd5b609581607f565b8114609f57600080fd5b50565b603f8060af6000396000f3fe',
contract: '6080604052600080fdfea2646970667358221220c87ae32fc63068beed8a787da3583f72f55c257933c23254f98bca3ca6fe829e64736f6c63430008070033',
metadata: 'a2646970667358221220c87ae32fc63068beed8a787da3583f72f55c257933c23254f98bca3ca6fe829e64736f6c63430008070033',
arguments: '00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002'
}
*/
}
main();
Contribute
Feel free to raise an issue and / or a PR, every contribution is welcomed.