Fortmatic
WebsiteDashboardSupport
v2.x
v2.x
  • 🚀Get Started
  • 📦Install with NPM
  • 🧩Examples
  • 💬FAQ
  • 📈Migrating from v1.x
  • Web3 Integration
    • Web3 Provider
    • Network Configuration
    • Binance Smart Chain
    • Get User Account
    • Send Ether Transaction
    • Smart Contract Functions
    • User Signing
    • SDK Error Handling
    • Batch Request
  • Smart Contract
    • ERC20 Transfer
    • ERC20 Approve
    • ERC20 TransferFrom
    • Generic Contract Call
  • Fortmatic Native
    • Log In
    • Log Out
    • Is User Logged In
    • Compose Transaction
    • Deposit Address
    • Configuration
  • More
    • Fiat On-ramp
    • Domain Verification
Powered by GitBook
On this page

Was this helpful?

  1. Web3 Integration

User Signing

PreviousSmart Contract FunctionsNextSDK Error Handling

Last updated 4 years ago

Was this helpful?

This is a relatively advanced use case. If you use the signed typed data JSONRPC endpoint, Fortmatic will support this as well.

Signing Methods

// Initialize provider
import Fortmatic from 'fortmatic';
import Web3 from 'web3';

// Required to convert message to Hex
const ethUtil = require('ethereumjs-util');

const fm = new Fortmatic('YOUR_API_KEY');
window.web3 = new Web3(fm.getProvider());

web3.eth.getAccounts((error, accounts) => {
 
  if (error) throw error;
 
  const from = accounts[0];
  const msg = ethUtil.bufferToHex(new Buffer('YOUR_MESSAGE', 'utf8'));
  const params = [msg, from];
  const method = 'personal_sign';
 
  web3.currentProvider.sendAsync({
    id: 1,
    method,
    params,
    from,
  }, function(error, result) {
    if (error) throw error;
    console.log(result);
  });

});
// Initialize provider
import Fortmatic from 'fortmatic';
import Web3 from 'web3';

const fm = new Fortmatic('YOUR_API_KEY');
window.web3 = new Web3(fm.getProvider());

// Personal Sign
const text = 'YOUR_MESSAGE';

const accounts = await web3.eth.getAccounts();
const from = accounts[0];

const result = await web3.eth.personal.sign(text, from);
// Initialize provider
import Fortmatic from 'fortmatic';
import Web3 from 'web3';

const fm = new Fortmatic('YOUR_API_KEY');
window.web3 = new Web3(fm.getProvider());

web3.eth.getAccounts(function(error, accounts) {
 
  if (error) throw error;
 
  const from = accounts[0];
  const msg = [
    {
      type: 'string',
      name: 'fullName',
      value: 'John Doe'
    },
    {
      type: 'uint32',
      name: 'userId',
      value: '1234'
    }
  ];
  const params = [msg, from];
  const method = 'eth_signTypedData';
 
  web3.currentProvider.sendAsync({
    id: 1,
    method,
    params,
    from,
  }, function(error, result) {
    if (error) throw error;
    console.log(result);
  });

});

On Web3 1.0 Beta 55? For all signing methods, replace this...

web3.currentProvider.sendAsync({
  id: 1,
  method,
  params,
  from,
}, function(error, result) {
  if (error) throw error;
  console.log(result);
});

...with this

web3.currentProvider.sendPayload({
  id: 1,
  method,
  params,
  from,
}).then(console.log);
// Initialize provider
import Fortmatic from 'fortmatic';
import Web3 from 'web3';

const fm = new Fortmatic('YOUR_API_KEY');
window.web3 = new Web3(fm.getProvider());

web3.eth.getAccounts(function(error, accounts) {
 
  if (error) throw error;
 
  const from = accounts[0];
  const payload = {
    "types": {
      "EIP712Domain": [
        {
          "name":"name",
          "type":"string"
        },
        {
          "name":"version",
          "type":"string"
        },
        {
          "name":"verifyingContract",
          "type":"address"
        }
      ],
      "Greeting": [
        {
          "name":"contents",
          "type":"string"
        }
      ]
    },
    "primaryType":"Greeting",
    "domain":{
      "name":"Fortmatic",
      "version":"1",
      "verifyingContract":"0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC"
    },
    "message":{
      "contents":"Hello, from Fortmatic!"
    }
  }
        
  const params = [from, payload];
  const method = 'eth_signTypedData_v3';
 
  web3.currentProvider.sendAsync({
    id: 1,
    method,
    params,
    from,
  }, function(error, result) {
    if (error) throw error;
    console.log(result);
  });
 
});

On Web3 1.0 Beta 55? For all signing methods, replace this...

web3.currentProvider.sendAsync({
  id: 1,
  method,
  params,
  from,
}, function(error, result) {
  if (error) throw error;
  console.log(result);
});

...with this

web3.currentProvider.sendPayload({
  id: 1,
  method,
  params,
  from,
}).then(console.log);
// Initialize provider
import Fortmatic from 'fortmatic';
import Web3 from 'web3';

const fm = new Fortmatic('YOUR_API_KEY');
window.web3 = new Web3(fm.getProvider());

web3.eth.getAccounts(function(error, accounts) {
 
  if (error) throw error;
 
  const from = accounts[0];
  const payload = {
    "types": {
      "EIP712Domain": [
        {
          "name":"name",
          "type":"string"
        },
        {
          "name":"version",
          "type":"string"
        },
        {
          "name":"verifyingContract",
          "type":"address"
        }
      ],
      "Greeting": [
        {
          "name":"contents",
          "type":"string"
        }
      ]
    },
    "primaryType":"Greeting",
    "domain":{
      "name":"Fortmatic",
      "version":"1",
      "verifyingContract":"0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC"
    },
    "message":{
      "contents":"Hello, from Fortmatic!"
    }
  }
        
  const params = [from, payload];
  const method = 'eth_signTypedData_v4';
 
  web3.currentProvider.sendAsync({
    id: 1,
    method,
    params,
    from,
  }, function(error, result) {
    if (error) throw error;
    console.log(result);
  });
 
});

On Web3 1.0 Beta 55? For all signing methods, replace this...

web3.currentProvider.sendAsync({
  id: 1,
  method,
  params,
  from,
}, function(error, result) {
  if (error) throw error;
  console.log(result);
});

...with this

web3.currentProvider.sendPayload({
  id: 1,
  method,
  params,
  from,
}).then(console.log);

This is based on .

This is based on .

EIP 712
EIP 712