`GSNBouncerSignature` in the Gas Station Network

GSNBouncerSignature allows you to set a trusted signer in your contract and to create an off-chain service (e.g. backend server, microservice, or lambda function) that according to your business rules chooses which relayed calls it will accept. Your dapp calls this service with the relayed call parameters and then includes the returned signature as part of the relayed call. The service signs (or not signs) the relayed call parameters with your trusted signer account. The acceptRelayedCall implementation checks that the signature matches the trusted signer set in your contract.

Example Test: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/test/GSN/GSNBouncerSignature.test.js

Sample contract:

contract MyContract is GSNRecipient, GSNBouncerSignature {
    constructor(address trustedSigner) public GSNBouncerSignature(trustedSigner) {
    }
}

Explanation of GSNBouncerSignature in the documentation: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/docs/modules/ROOT/pages/gsn-bouncers.adoc#gsnbouncersignature

@Dennison has a tutorial for creating a signing server:

The code is also available here:
https://twitter.com/DennisonBertram/status/1174815225335431170?s=20