# Preparing the environment

# Configuring your contracts

After your contract is changed to inherit BaseRelayRecipient, and you are satisfied with your implementation of BasePaymaster, it is time to wrap it all together.

# Configuring a Forwarder

Your Recipient will only accept relayed transactions coming from a specific dedicated address. You can choose to deploy the default Forwarder from your Recipient's solidity code, or using the Truffle migrations or equivalent.

WARNING

It is up to the contract with accepts relayed transactions, the one that inherits from BaseRelayRecipient,

to initialize the trustedForwarder field correctly.

# Configuring a Paymaster

The Paymaster contract has to be deployed the same way the rest of your contracts are. If you are new to dapp development we recommend getting familiar with Truffle (opens new window).

After it is deployed, you will need to call its setRelayHub method with an address of the RelayHub. In a real supported blockchain this address is constant and will be advertised on this website. For local test environment spin-up instructions, refer to our testing manual, or just look in the output of gsn start.

Next step is to ensure the Paymaster has enough ether deposited to the `RelayHub':

const depositAmount = 1e18;
await relayHub.depositFor(paymaster, { from: accountWithMoney, value: depositAmount });

# Running your own production relay server

If you are interested in running your own production relay server on a real network, refer to these instructions.