UNPKG

contract-splitter

Version:

Split an EVM smart contract deployement bytecode into its sub components

70 lines (52 loc) 3.31 kB
# 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 ```sh npm install contract-splitter ``` ## Usage Several mode of use are available : ### On deployement bytecode ```js const splitter = require("contract-splitter"); const BYTECODE = "0x6080604052348015600f57600080fd5b5060405160ee38038060ee8339818101604052810190602d91906046565b505060a2565b600081519050604081608e565b92915050565b60008060408385031215605a5760596089565b5b60006066858286016033565b92505060206075858286016033565b9150509250929050565b6000819050919050565b600080fd5b609581607f565b8114609f57600080fd5b50565b603f8060af6000396000f3fe6080604052600080fdfea2646970667358221220c87ae32fc63068beed8a787da3583f72f55c257933c23254f98bca3ca6fe829e64736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002"; console.log(splitter(BYTECODE)); /* { constructor: '6080604052348015600f57600080fd5b5060405160ee38038060ee8339818101604052810190602d91906046565b505060a2565b600081519050604081608e565b92915050565b60008060408385031215605a5760596089565b5b60006066858286016033565b92505060206075858286016033565b9150509250929050565b6000819050919050565b600080fd5b609581607f565b8114609f57600080fd5b50565b603f8060af6000396000f3fe', contract: '6080604052600080fdfea2646970667358221220c87ae32fc63068beed8a787da3583f72f55c257933c23254f98bca3ca6fe829e64736f6c63430008070033', metadata: 'a2646970667358221220c87ae32fc63068beed8a787da3583f72f55c257933c23254f98bca3ca6fe829e64736f6c63430008070033', arguments: '00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002' } */ ``` ### On deployement transaction ```js 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.