1.0.0 • Published 2 years ago

contract-splitter v1.0.0

Weekly downloads
-
License
ISC
Repository
github
Last release
2 years ago

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.