@ramper/react-native-evm
v1.0.4
Published
Ramper's EVM React Native SDK works with Ramper's Core React Native SDK to help developer easily onboard new users onto their Ethereum DApp through account management, wallet creation, and wallet interactions.
Downloads
44
Maintainers
Readme
Ramper EVM SDK for React Native
npm
$ npm install @ramper/react-native-evm react-native-get-random-values
yarn
$ yarn add @ramper/react-native-evm react-native-get-random-values
Step 1
$ cd ios && pod install
Step 2
You will need to register react-native-get-random-values and @ethersproject/shims in the entry file of your application, such as index.js:
// Import the crypto getRandomValues shim (**BEFORE** the shims)
import 'react-native-get-random-values';
// Import the the ethers shims (**BEFORE** ethers)
import '@ethersproject/shims';
Usage
import { ethers } from 'ethers';
import { EtherTx, SUPPORTED_ETHEREUM_NETWORKS } from '@ramper/react-native-evm';
Transactions
import { Transactions } from '@ramper/react-native-core';
Note: before doing a transaction you need to create a provider
const provider = ethers.getDefaultProvider(
`https://polygon-mumbai.g.alchemy.com/v2/${yourApiKey}`
);
Sign Transactions
const value = ethers.utils.parseEther('0.0000001');
try {
const transaction = await Transactions.signTransaction({
serializedTx: await EtherTx.serializeTransactionRequest(
{
from: 'fromAddress',
to: 'toAddress',
value,
},
provider
),
network: SUPPORTED_ETHEREUM_NETWORKS.MATICMUM,
theme: 'light',
});
const deserializedTransaction = EtherTx.deserializeTransaction(transaction);
// broadcast the Signed Transaction to the network:
const transaction = await provider.sendTransaction(
deserializedTransaction.transaction
);
} catch (error) {
// handle error
}
Sign Typed Data
try {
const signTypedDataResponse = await Transactions.signTypedData({
serializedTx: await EtherTx.serializeSignTypedDataRequest(
{
name: 'Ether Mail',
version: '1',
chainId: 1,
verifyingContract: '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC',
},
{
Person: [
{ name: 'name', type: 'string' },
{ name: 'wallet', type: 'address' },
],
Mail: [
{ name: 'from', type: 'Person' },
{ name: 'to', type: 'Person' },
{ name: 'contents', type: 'string' },
],
},
{
from: {
name: 'Cow',
wallet: '0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826',
},
to: {
name: 'Bob',
wallet: '0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB',
},
contents: 'Hello, Bob!',
}
),
network: SUPPORTED_ETHEREUM_NETWORKS.MATICMUM,
});
const deserializedTypedData = EtherTx.deserializeTransaction(signResponse);
// handle response
} catch (error) {
// handle error
}
Sign Message
try {
const signMessageResponse = await Transactions.signMessage({
serializedTx: EtherTx.serializeMessage({
message: 'Hello World',
method: 'eth_sign',
}),
network: SUPPORTED_ETHEREUM_NETWORKS.MATICMUM,
theme: 'light',
});
const deserializedRespone =
EtherTx.deserializeTransaction(signMessageResponse);
// handle response
} catch (error) {
// handle error
}
Personal Sign
try {
const signPersonalMessageResponse = await Transactions.signMessage({
serializedTx: EtherTx.serializeMessage({
message: 'My email is [email protected] - Thu, 22 Sep 2022 22:45:02 GMT',
method: 'personal_sign',
}),
network: SUPPORTED_ETHEREUM_NETWORKS.MATICMUM,
theme: 'light',
});
const deserializedRespone = EtherTx.deserializeTransaction(
signPersonalMessageResponse
);
// handle response
} catch (error) {
// handle error
}
Deserialize Transaction
const deserializedTx = EtherTx.deserializeTransaction(serializedTx);
Method Signature:
type DeserializedTx = {
transaction: string // Signed Transaction
msgs: any[]
}