# VCred-POAPs with did:ethr & eip-712 Using Veramo, we can issue Verifiable Credentials straight from a web3 wallet (as along as that wallet properly implements EIP-712). All you need to do is connect a web3 wallet to Veramo, and use that Veramo agent to issue a credential with `proofFormat = 'EIP712Signature2021'`. This type of credential could act as a p2p-POAP (schema of credential would probably have to be discussed) ## Using Veramo Agent Explorer (explore.veramo.dev or run locally) 1. Connect web3 wallet (go to "Settings" to find that option) 2. Go to "Dashboard" 3. Add "Select Schema and Issue" widget 4. Select "POAPCredentialSchema" 5. Set event hash, subject DID, issuer DID, and proof format ('EIP712Signature2021') ![](https://i.imgur.com/s6Zkfp0.png) 6. Hit 'Issue' 7. Sign in web3 wallet popup ![](https://i.imgur.com/1NhLzc5.png) ## Or build it yourself in your own React App ### Connect web3 wallet to Veramo In React (example from Veramo Agent Explorer react app: https://github.com/veramolabs/agent-explorer): ``` web3agent.ts import { createAgent, IDIDManager, IKeyManager, IResolver } from '@veramo/core' import { CredentialIssuer, W3cMessageHandler } from '@veramo/credential-w3c' import { CredentialIssuerEIP712 ICredentialIssuerEIP712 } from '@veramo/credential-eip712' // a few others... connectors.forEach((info) => { didProviders[info.name] = new EthrDIDProvider({ defaultKms: 'web3', network: info.chainId, web3Provider: info.provider, }) web3Providers[info.name] = info.provider }) const agent = createAgent< IDIDManager & IKeyManager & IResolver & ICredentialIssuerEIP712 >({ context: { id, name: `Web3`, }, plugins: [ new DIDResolverPlugin({ resolver: new Resolver({ ethr: ethrDidResolver({ infuraProjectId, }).ethr, web: webDidResolver().web, }), }), new KeyManager({ kms: { web3: new Web3KeyManagementSystem(web3Providers), }, }), new DIDManager({ store: new DIDStoreJson(dataStore), defaultProvider: connectors[0]?.name, providers: didProviders, }), new CredentialIssuer(), new CredentialIssuerEIP712(), ], }) // other logic in web3agent.ts to "import" signing keys ``` ### Use Veramo Agent to issue Credential: ``` const poapCred = { issuer: `did:ethr:${myEthAccount}`, credentialSubject: { attendeeDID: `did:ethr:${attendee}`, eventID: 'z12321321213h321h123h213' // IPFS? }, type: ['POAP'] } await agent.createVerifiableCredential({ credential: poapCred, proofFormat: 'EthereumEip712Signature2021'}) ```