depositTransaction
Initiates a deposit transaction on an L1, which executes a transaction on an L2.
Internally performs a contract write to the depositTransaction
function on the Optimism Portal contract.
Usage
import { base } from 'viem/chains'
import { account, client } from './config'
const hash = await client.depositTransacton({
account,
args: {
gas: 21_000n,
mint: parseEther('1')
to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',
},
targetChain: base,
})
import { base } from 'viem/chains'
import { account, client } from './config'
const hash = await client.depositTransacton({
account,
args: {
gas: 21_000n,
mint: parseEther('1')
to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',
},
targetChain: base,
})
import { createWalletClient, custom } from 'viem'
import { privateKeyToAccount } from 'viem/accounts'
import { mainnet } from 'viem/chains'
import { walletActionsL1 } from 'viem/op-stack'
export const client = createWalletClient({
chain: mainnet,
transport: custom(window.ethereum)
}).extend(walletActionsL1())
// JSON-RPC Account
export const [account] = await client.getAddresses()
// Local Account
export const account = privateKeyToAccount(...)
import { createWalletClient, custom } from 'viem'
import { privateKeyToAccount } from 'viem/accounts'
import { mainnet } from 'viem/chains'
import { walletActionsL1 } from 'viem/op-stack'
export const client = createWalletClient({
chain: mainnet,
transport: custom(window.ethereum)
}).extend(walletActionsL1())
// JSON-RPC Account
export const [account] = await client.getAddresses()
// Local Account
export const account = privateKeyToAccount(...)
WARNING
You must prepare the parameters on the L2 before calling this function. If the gas is too low, transaction execution will fail on the L2.
Preparing Parameters
The prepareDepositTransaction
Action prepares the deposit transaction parameters (ie. gas
, targetChain
, etc).
We can use the resulting request
to initiate the deposit transaction on the L1.
import { account, baseClient, mainnetClient } from './config'
// Prepare parameters for the deposit transaction on the L2.
const request = await baseClient.prepareDepositTransaction({
account,
mint: parseEther('1')
to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',
})
// Initiate the deposit transaction on the L1.
const hash = await mainnetClient.depositTransacton(request)
import { account, baseClient, mainnetClient } from './config'
// Prepare parameters for the deposit transaction on the L2.
const request = await baseClient.prepareDepositTransaction({
account,
mint: parseEther('1')
to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',
})
// Initiate the deposit transaction on the L1.
const hash = await mainnetClient.depositTransacton(request)
import { createWalletClient, createPublicClient, custom, http } from 'viem'
import { privateKeyToAccount } from 'viem/accounts'
import { mainnet, base } from 'viem/chains'
import { publicActionsL2, walletActionsL1 } from 'viem/op-stack'
export const mainnetClient = createWalletClient({
chain: mainnet,
transport: custom(window.ethereum)
}).extend(walletActionsL1())
export const baseClient = createPublicClient({
chain: base,
transport: http()
}).extend(publicActionsL2())
// JSON-RPC Account
export const [account] = await mainnetClient.getAddresses()
// Local Account
export const account = privateKeyToAccount(...)
import { createWalletClient, createPublicClient, custom, http } from 'viem'
import { privateKeyToAccount } from 'viem/accounts'
import { mainnet, base } from 'viem/chains'
import { publicActionsL2, walletActionsL1 } from 'viem/op-stack'
export const mainnetClient = createWalletClient({
chain: mainnet,
transport: custom(window.ethereum)
}).extend(walletActionsL1())
export const baseClient = createPublicClient({
chain: base,
transport: http()
}).extend(publicActionsL2())
// JSON-RPC Account
export const [account] = await mainnetClient.getAddresses()
// Local Account
export const account = privateKeyToAccount(...)
Account Hoisting
If you do not wish to pass an account
to every depositTransaction
, you can also hoist the Account on the Wallet Client (see config.ts
).
import { baseClient, mainnetClient } from './config'
// Prepare parameters for the deposit transaction on the L2.
const request = await baseClient.prepareDepositTransaction({
mint: parseEther('1')
to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',
})
// Initiate the deposit transaction on the L1.
const hash = await mainnetClient.depositTransacton(request)
import { baseClient, mainnetClient } from './config'
// Prepare parameters for the deposit transaction on the L2.
const request = await baseClient.prepareDepositTransaction({
mint: parseEther('1')
to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',
})
// Initiate the deposit transaction on the L1.
const hash = await mainnetClient.depositTransacton(request)
import { createWalletClient, createPublicClient, custom, http } from 'viem'
import { privateKeyToAccount } from 'viem/accounts'
import { mainnet, base } from 'viem/chains'
import { publicActionsL2, walletActionsL1 } from 'viem/op-stack'
// Retrieve Account from an EIP-1193 Provider.
const [account] = await window.ethereum.request({
method: 'eth_requestAccounts'
})
export const mainnetClient = createWalletClient({
account,
transport: custom(window.ethereum)
}).extend(walletActionsL1())
export const baseClient = createPublicClient({
chain: base,
transport: http()
}).extend(publicActionsL2())
import { createWalletClient, createPublicClient, custom, http } from 'viem'
import { privateKeyToAccount } from 'viem/accounts'
import { mainnet, base } from 'viem/chains'
import { publicActionsL2, walletActionsL1 } from 'viem/op-stack'
// Retrieve Account from an EIP-1193 Provider.
const [account] = await window.ethereum.request({
method: 'eth_requestAccounts'
})
export const mainnetClient = createWalletClient({
account,
transport: custom(window.ethereum)
}).extend(walletActionsL1())
export const baseClient = createPublicClient({
chain: base,
transport: http()
}).extend(publicActionsL2())
import { createWalletClient, createPublicClient, custom, http } from 'viem'
import { privateKeyToAccount } from 'viem/accounts'
import { mainnet, base } from 'viem/chains'
import { publicActionsL2, walletActionsL1 } from 'viem/op-stack'
export const mainnetClient = createWalletClient({
account: privateKeyToAccount('0x...'),
transport: custom(window.ethereum)
}).extend(walletActionsL1())
export const baseClient = createPublicClient({
chain: base,
transport: http()
}).extend(publicActionsL2())
import { createWalletClient, createPublicClient, custom, http } from 'viem'
import { privateKeyToAccount } from 'viem/accounts'
import { mainnet, base } from 'viem/chains'
import { publicActionsL2, walletActionsL1 } from 'viem/op-stack'
export const mainnetClient = createWalletClient({
account: privateKeyToAccount('0x...'),
transport: custom(window.ethereum)
}).extend(walletActionsL1())
export const baseClient = createPublicClient({
chain: base,
transport: http()
}).extend(publicActionsL2())
Returns
The L1 Transaction hash.
Parameters
account
- Type:
Account | Address
The Account to send the transaction from.
Accepts a JSON-RPC Account or Local Account (Private Key, etc).
const hash = await walletClient.depositTransacton({
account: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266',
args: {
gas: 21_000n,
to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',
value: parseEther('1')
},
targetChain: base,
})
const hash = await walletClient.depositTransacton({
account: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266',
args: {
gas: 21_000n,
to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',
value: parseEther('1')
},
targetChain: base,
})
args.data (optional)
- Type:
Hex
Contract deployment bytecode or encoded contract method & arguments.
const hash = await walletClient.depositTransacton({
account: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266',
args: {
data: '0x...',
gas: 21_000n,
to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',
value: parseEther('1')
},
targetChain: base,
})
const hash = await walletClient.depositTransacton({
account: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266',
args: {
data: '0x...',
gas: 21_000n,
to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',
value: parseEther('1')
},
targetChain: base,
})
args.gas
- Type:
bigint
Gas limit for transaction execution on the L2.
const hash = await walletClient.depositTransacton({
account: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266',
args: {
gas: 21_000n,
to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',
value: parseEther('1')
},
targetChain: base,
})
const hash = await walletClient.depositTransacton({
account: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266',
args: {
gas: 21_000n,
to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',
value: parseEther('1')
},
targetChain: base,
})
args.isCreation (optional)
- Type:
Hex
Whether or not this is a contract deployment transaction.
const hash = await walletClient.depositTransacton({
account: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266',
args: {
data: '0x...',
gas: 69_420n,
isCreation: true
},
targetChain: base,
})
const hash = await walletClient.depositTransacton({
account: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266',
args: {
data: '0x...',
gas: 69_420n,
isCreation: true
},
targetChain: base,
})
args.mint (optional)
- Type:
bigint
Value in wei to mint (deposit) on the L2. Debited from the caller's L1 balance.
const hash = await walletClient.depositTransacton({
account: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266',
args: {
gas: 21_000n,
to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',
mint: parseEther('1')
},
targetChain: base,
})
const hash = await walletClient.depositTransacton({
account: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266',
args: {
gas: 21_000n,
to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',
mint: parseEther('1')
},
targetChain: base,
})
args.to (optional)
- Type:
Address
L2 Transaction recipient.
const hash = await walletClient.depositTransacton({
account: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266',
args: {
gas: 21_000n,
to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',
value: parseEther('1')
},
targetChain: base,
})
const hash = await walletClient.depositTransacton({
account: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266',
args: {
gas: 21_000n,
to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',
value: parseEther('1')
},
targetChain: base,
})
args.value (optional)
- Type:
bigint
Value in wei sent with this transaction on the L2. Debited from the caller's L2 balance.
const hash = await walletClient.depositTransacton({
account: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266',
args: {
gas: 21_000n,
to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',
value: parseEther('1')
},
targetChain: base,
})
const hash = await walletClient.depositTransacton({
account: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266',
args: {
gas: 21_000n,
to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',
value: parseEther('1')
},
targetChain: base,
})
targetChain
- Type:
Chain
The L2 chain to execute the transaction on.
import { mainnet } from 'viem/chains'
const hash = await walletClient.depositTransacton({
account: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266',
args: {
gas: 21_000n,
to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',
value: parseEther('1')
},
chain: mainnet,
targetChain: base,
})
import { mainnet } from 'viem/chains'
const hash = await walletClient.depositTransacton({
account: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266',
args: {
gas: 21_000n,
to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',
value: parseEther('1')
},
chain: mainnet,
targetChain: base,
})
chain (optional)
- Type:
Chain
- Default:
walletClient.chain
The L1 chain. If there is a mismatch between the wallet's current chain & this chain, an error will be thrown.
import { mainnet } from 'viem/chains'
const hash = await walletClient.depositTransacton({
account: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266',
args: {
gas: 21_000n,
to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',
value: parseEther('1')
},
chain: mainnet,
targetChain: base,
})
import { mainnet } from 'viem/chains'
const hash = await walletClient.depositTransacton({
account: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266',
args: {
gas: 21_000n,
to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',
value: parseEther('1')
},
chain: mainnet,
targetChain: base,
})
maxFeePerGas (optional)
- Type:
bigint
Total fee per gas (in wei), inclusive of maxPriorityFeePerGas
.
const hash = await walletClient.depositTransacton({
account: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266',
args: {
gas: 21_000n,
to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',
value: parseEther('1')
},
maxFeePerGas: parseGwei('20'),
targetChain: base,
})
const hash = await walletClient.depositTransacton({
account: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266',
args: {
gas: 21_000n,
to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',
value: parseEther('1')
},
maxFeePerGas: parseGwei('20'),
targetChain: base,
})
maxPriorityFeePerGas (optional)
- Type:
bigint
Max priority fee per gas (in wei). Only applies to EIP-1559 Transactions
const hash = await walletClient.depositTransacton({
account: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266',
args: {
gas: 21_000n,
to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',
value: parseEther('1')
},
maxFeePerGas: parseGwei('20'),
maxPriorityFeePerGas: parseGwei('2'),
targetChain: base,
})
const hash = await walletClient.depositTransacton({
account: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266',
args: {
gas: 21_000n,
to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',
value: parseEther('1')
},
maxFeePerGas: parseGwei('20'),
maxPriorityFeePerGas: parseGwei('2'),
targetChain: base,
})
nonce (optional)
- Type:
number
Unique number identifying this transaction.
const hash = await walletClient.depositTransacton({
account: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266',
args: {
gas: 21_000n,
to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',
value: parseEther('1')
},
nonce: 69,
targetChain: base,
})
const hash = await walletClient.depositTransacton({
account: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266',
args: {
gas: 21_000n,
to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',
value: parseEther('1')
},
nonce: 69,
targetChain: base,
})
portalAddress (optional)
- Type:
Address
- Default:
targetChain.contracts.portal[chainId].address
The address of the Optimism Portal contract. Defaults to the Optimism Portal contract specified on the targetChain
.
If a portalAddress
is provided, the targetChain
parameter becomes optional.
const hash = await walletClient.depositTransacton({
account: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266',
args: {
gas: 21_000n,
to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',
value: parseEther('1')
},
portalAddress: '0xbEb5Fc579115071764c7423A4f12eDde41f106Ed'
})
const hash = await walletClient.depositTransacton({
account: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266',
args: {
gas: 21_000n,
to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',
value: parseEther('1')
},
portalAddress: '0xbEb5Fc579115071764c7423A4f12eDde41f106Ed'
})