流程
iframe
新增设备
创建嵌入钱包
生成私钥
签名交易
发交易
其他 api 同 viem
example

Embedded Wallet Provider
This package provides an EmbeddedWalletProvider class to manage blockchain interactions through an embedded wallet within an iframe. It supports general transactions, blob transactions, message signing, and chain management.
Table of Contents
Installation
To use this package, you'll need to install the required dependencies:
npm install viem @next-wallet/provider
Usage
To use the EmbeddedWalletProvider, you need to import it and initialize it with the required parameters.
import { defineChain, http } from 'viem';
import { sepolia } from 'viem/chains';
import { EmbeddedWalletProvider } from '@next-wallet/provider';
const defaultChain = defineChain({
id: 1,
name: 'Ethereum Mainnet',
rpcUrls: ['https://mainnet.infura.io/v3/YOUR_INFURA_PROJECT_ID'],
});
const params: EmbeddedWalletProviderParams = {
defaultChain: sepolia,
supportedChains: [sepolia],
address: '0xYourWalletAddress', // @next-wallet/provider 创建的钱包地址
iframeSrc: 'https://your-iframe-source.com', // your iframe
onReady: (res) => {
console.log('Iframe is ready', res);
},
};
const walletProvider = new EmbeddedWalletProvider(params);
API
Constructor
EmbeddedWalletProvider(parameters: EmbeddedWalletProviderParams)
parameters: An object containing the following properties:defaultChain: The default blockchain chain.supportedChains: An array of supported blockchain chains.address: The address of the embedded wallet.iframeSrc: The source URL of the embedded wallet iframe.transport: (Optional) The transport method for blockchain communication.onReady: A callback function that is called when the iframe is ready.
Methods
createWallet(): Promise<ResponsePayload>
Creates a new wallet.
exportDeviceShare(address: Hex): Promise<ResponsePayload>
Exports the device share for the given address.
exportPrivateKey(address: Hex): Promise<ResponsePayload>
Exports the private key for the given address.
switchAddress(address: Hex): void
Switches the current address to the provided address.
getAllAddress(): Promise<ResponsePayload>
Gets all addresses associated with the wallet.
generateClient(): Promise<void>
Generates a public and wallet client.
signTransaction(transaction: GeneralTransaction | BlobTransaction): Promise<Hex>
Signs a transaction.
sendTransaction(transaction: GeneralTransaction | BlobTransaction): Promise<Hex>
Sends a signed transaction.
sendRawTransaction(args: SendRawTransactionParameters): Promise<Hex>
Sends a raw transaction.
waitForTransactionReceipt(args: WaitForTransactionReceiptParameters): Promise<TransactionReceipt>
Waits for the transaction receipt of the given transaction hash.
signMessage(message: string): Promise<Hex>
Signs a message.
signTypedData(typedData: TypedDataParameter): Promise<Hex>
Signs typed data (EIP-712).
sendBlobDataTransaction(): Promise<void>
(Not implemented) Sends a blob data transaction.
addChain(chain: Chain): Promise<void>
Adds a new chain to the supported chains.
switchChain(id: Chain['id']): Promise<void>
Switches to the chain with the given ID.
getChains(): Promise<Chain[]>
Gets all supported chains.
Example
Here is an example of how to use the EmbeddedWalletProvider to sign and send a transaction:
import { defineChain, http } from 'viem';
import { EmbeddedWalletProvider, EmbeddedWalletProviderParams } from './path-to-your-provider-file';
const defaultChain = defineChain({
id: 1,
name: 'Ethereum Mainnet',
rpcUrls: ['https://mainnet.infura.io/v3/YOUR_INFURA_PROJECT_ID'],
});
const params: EmbeddedWalletProviderParams = {
defaultChain,
supportedChains: [defaultChain],
address: '0xYourWalletAddress',
iframeSrc: 'https://your-iframe-source.com',
onReady: (res) => {
console.log('Iframe is ready', res);
},
};
const walletProvider = new EmbeddedWalletProvider(params);
async function sendTransaction() {
const transaction = {
maxFeePerGas: BigInt(20000000000),
maxPriorityFeePerGas: BigInt(2000000000),
gas: 21000,
to: '0xRecipientAddress',
value: BigInt(1000000000000000000), // 1 ETH
};
try {
const signedTransaction = await walletProvider.signTransaction(transaction);
const txHash = await walletProvider.sendTransaction(signedTransaction);
console.log('Transaction sent with hash:', txHash);
} catch (error) {
console.error('Error sending transaction:', error);
}
}
sendTransaction();
This example demonstrates how to initialize the EmbeddedWalletProvider, sign a transaction, and send it to the blockchain.