This is quite random but I had to learn a few things so worth taking note.
I was recently working on a Truffle Dapp. I had to deploy one of my contracts in a roundabout way — basically one account signing it but another paying the gas (Metatransactions are basically the same). I’d never done this before. After that I still wanted my Truffle Dapp to be able to access the deployed contract but this required a bit of a tweak. So here’s how I did it.
This was done using a simple node script and the process looks like this:
- Unlock your ‘sender’ account and ‘delegate’ account
- Compile the smart contract to get the bytecode
- In this case I used Truffle to compile and accessed the bytecode from the artificat file
- Create a transaction object with the bytecode as the call data
- Sender signs the transaction object
- Delegate sends the signed transaction
- Note the receipt so you have access to the deployed contract address
I’ve included the code I used for this below.
Because the contract was deployed using the script the Truffle artificats, etc don’t have the required information so my Dapp couldn’t interact. By making a few manual changes I managed to get it to work:
- Make sure your contract has been compiled previously using Truffle it should have an artifact file.
- Find your Truffle artificat file for the contract. It should be of form YouContract.json and is probably under a ‘contract’ folder in your Dapps project.
- Find the “networks” section of the artificact.
- Add a new network entry with the following info:
- Network ID — should be the network that you deployed to.
- Address — The address your contract was deployed to (from the receipt)
- TransactionHash — I don’t think this is actually required but it was handy to record it.
- My entry is shown in the gist below.
- That’s it! Your Dapp should now work with the deployed contract.