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.
Deploying Via A Delegate
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.
Using Truffle With The Deployed Contract
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.