marble-sdk
v0.1.18
Published
Marble Wallet is a self-custodial wallet that does not require extensions or seed phrases. Developers can use Marble Wallet to build seamless onboarding experiences for their users, similar to the ones provided by Coinbase or [Reddit's self-custodial wall
Downloads
148
Readme
Marble Wallet
Marble Wallet is a self-custodial wallet that does not require extensions or seed phrases. Developers can use Marble Wallet to build seamless onboarding experiences for their users, similar to the ones provided by Coinbase or Reddit's self-custodial wallet.
Developers can offer wallet-onboarding, a fiat on-ramp, and pre-built UI components to their users, all in a single package. Marble Wallet can improve onboarding for users to your app by up to 90%.
Advantages of Marble Wallet:
- Email-based authentication. No seed phrases, extensions, or apps required. Marble runs in the browser.
- Embedded fiat on-ramp.
- Pre-built and highly customizable UI components.
- Out-of-the-box support for WalletConnect.
- ... and more!
Documentation
Check out the Marble SDK documentation for more information, or the Marble SDK on NPM.
You can also check out the Marble Wallet website for more information.
How does Marble work?
Instead of a traditional seed phrase or private key, Marble uses a cryptographic protocol called MPC (Multi Party Computation). Marble cannot access your funds, and your funds cannot be stolen by Marble. You can learn more about Marble's security model on our security page.
Installation
To install the Marble SDK and add seamless onboarding to self-custodial wallets in your app, you can use the following command:
npm install --save marble-sdk
# or, if you use yarn
yarn add marble-sdk
Getting Started
The Marble SDK maintains compatibility with existing web3 APIs and libraries. You can use Marble like you'd use any other wallet in your code base.
// Example with ethers
import { Marble } from "marble-sdk";
import { ethers } from "ethers";
const marble = new Marble();
// Interested in customizing Marble and making it look like your app? Reach out to us at
// [email protected] and we'll get you set up.
const provider = new ethers.providers.Web3Provider(marble.rpcProvider);
// Sign the user in
await marbleClient.auth.loginWithEmailLink({ email: email });
// Check if the user is logged in (you may need to poll this)
const isLoggedIn = await marbleClient.auth.isLoggedIn();
// Get the user's wallet address
const addressList = await marbleClient.api.getAddressList({});
const address = addressList[0].address;
// Sign a message or a transaction (after the user is logged in)
const signer = provider.getSigner();
const result = await signer?.signMessage("Hello world!");
const result = await signer?.signTransaction(transactionToSign);
const partialSignTransactionData = {
to: "0xbf9Db3564c22fd22FF30A8dB7f689D654Bf5F1fD", // Mumbai Faucet
from: address,
value: 100, // amt in wei
};
const signTransactionRequest = {
jsonrpc: "2.0",
id: 1,
method: "eth_signTransaction",
params: [
{
...partialSignTransactionData,
value: hexlify(partialSignTransactionData.value),
},
],
};
// You can also use the integrated provider to send RPC calls.
// Note: We don't yet support all RPC methods, but we're working on supporting what makes sense.
const result = await ethersProvider?.send(
signTransactionRequest.method,
signTransactionRequest.params
);
WAGMI Integration
If you're using Wagmi, we also provide a wagmi-connector you can use: marble-wagmi-connector.