User Signing

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

Signing Methods

Personal Sign
Sign Typed Data v1
Sign Typed Data v3
// 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('ANY STRING', '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());
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);
});
});

This is based on EIP 712.

// 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';
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);