Provider
A Web3 Provider object provides application-layer access to underlying blockchain networks.
The zksync2-java
library supports provider methods from the
web3j
library and supplies additional functionality.
ZkSync
: Supplies the same functionality as Web3
and extends it with ZKsync-specific methods.
ZkSync
- This doc details ZKsync Era specific methods.
- Web3Swift implementations link to their docs.
allAccountBalances
Returns all balances for confirmed tokens given by an account address.
Calls the zks_getAllAccountBalances
JSON-RPC method.
Inputs
Parameter | Type | Description |
---|---|---|
address | String | Account address. |
Example
import io.zksync.protocol.ZkSync;
import org.web3j.protocol.http.HttpService;
import io.zksync.methods.response.ZkTransactionReceipt;
public class Main {
public static void main(String ...args) {
ZksAccountBalances allBalances = zkSync.zksGetAllAccountBalances("0x36615Cf349d7F6344891B1e7CA7C72883F5dc049").send();
}
}
constructor
Returns a ZkSyncClient
object.
Inputs
Parameter | Type | Description |
---|---|---|
providerURL | URL | Network RPC URL (optional). |
Example
import io.zksync.protocol.ZkSync;
import org.web3j.protocol.http.HttpService;
public class Main {
public static void main(String ...args) {
ZkSync zksync = ZkSync.build(new HttpService("https://sepolia.era.zksync.dev"));
}
}
estimateFee
Returns an estimated ZksEstimateFee
for requested transaction.
Inputs
Parameter | Type | Description |
---|---|---|
transaction | Transaction | Transaction request. |
import io.zksync.protocol.ZkSync;
import org.web3j.protocol.http.HttpService;
import io.zksync.methods.response.ZkTransactionReceipt;
public class Main {
public static void main(String ...args) {
io.zksync.methods.request.Transaction estimate = io.zksync.methods.request.Transaction.createFunctionCallTransaction(
"0x7e5f4552091a69125d5dfcb7b8c2659029395bdf",
"0x7e5f4552091a69125d5dfcb7b8c2659029395bdf",
BigInteger.ZERO,
BigInteger.ZERO,
"0x"
);
Fee fee = zksync.zksEstimateFee(estimate).send().getResult();
}
estimateGas
Returns an estimate of the amount of gas required to submit a transaction to the network.
Inputs
Parameter | Type | Description |
---|---|---|
transaction | Transaction | Transaction class. |
Example
import io.zksync.protocol.ZkSync;
import org.web3j.protocol.http.HttpService;
import io.zksync.methods.response.ZkTransactionReceipt;
public class Main {
public static void main(String ...args) {
io.zksync.methods.request.Transaction estimate = io.zksync.methods.request.Transaction.createFunctionCallTransaction(
"0x7e5f4552091a69125d5dfcb7b8c2659029395bdf",
"0x7e5f4552091a69125d5dfcb7b8c2659029395bdf",
BigInteger.ZERO,
BigInteger.ZERO,
"0x"
);
BigInteger gasUsed = zksync.ethEstimateGas(estimate).send().getAmountUsed();
}
}
estimateGasL1
Returns an estimate of the amount of gas required to submit a transaction from L1 to L2 as a EthEstimateGas
object.
Calls the zks_estimateL1ToL2
JSON-RPC method.
Inputs
Parameter | Type | Description |
---|---|---|
transaction | Transaction | Transaction class. |
Example
import io.zksync.protocol.ZkSync;
import org.web3j.protocol.http.HttpService;
import io.zksync.methods.response.ZkTransactionReceipt;
public class Main {
public static void main(String ...args) {
io.zksync.methods.request.Transaction estimate = io.zksync.methods.request.Transaction.createFunctionCallTransaction(
"0x7e5f4552091a69125d5dfcb7b8c2659029395bdf",
"0x7e5f4552091a69125d5dfcb7b8c2659029395bdf",
BigInteger.ZERO,
BigInteger.ZERO,
"0x"
);
BigInteger estimatedGas = zksync.estimateGasL1(estimate).send().getAmountUsed();
}
}
estimateL1ToL2Execute
Returns gas estimation for an L1 to L2 execute operation.
Inputs
Parameter | Type | Description |
---|---|---|
contractAddress | String | Address of contract. |
calldata | byte[] | The transaction call data. |
caller | String | Caller address. |
l2GasLimit | BigInteger | Current L2 gas value (optional). |
l2Value | BigInteger | L2 amount (optional). |
factoryDeps | byte[][] | Factory deps (optional). |
operatorTip | BigInteger | Operator tip (optional). |
gasPerPubdataByte? | BigInteger | Constant representing current amount of gas per byte (optional). |
refoundRecipient | String | Refound address. |
Example
import io.zksync.protocol.ZkSync;
import org.web3j.protocol.http.HttpService;
import io.zksync.methods.response.ZkTransactionReceipt;
public class Main {
public static void main(String ...args) {
String mainContractAddress = zksync.zksMainContract().sendAsync().join()
BigInteger estimatedGas = zksync.estimateGasL1(mainContractAddress, Numeric.hexStringToByteArray("0x"), "0x36615Cf349d7F6344891B1e7CA7C72883F5dc049", null, BigInteger.
valueOf(7_000_000_000L), null, null, null, null).
send().
getAmountUsed();
}
}
getBlockDetails
Returns additional ZKsync-specific information about the L2 block.
Calls the zks_getBlockDetails
JSON-RPC method.
Inputs
Parameter | Type | Description |
---|---|---|
blockNumber | BigInteger | Block number. |
Example
import io.zksync.protocol.ZkSync;
import org.web3j.protocol.http.HttpService;
import io.zksync.methods.response.ZkTransactionReceipt;
public class Main {
public static void main(String ...args) {
ZksBlockDetails blockDetails = zkSync.getBlockDetails(BigInteger.valueOf(90_000)).send();
}
}
getL1BatchBlockRange
Returns the range of blocks contained within a batch given by batch number.
Calls the zks_getL1BatchBlockRange
JSON-RPC method.
Inputs
Parameter | Type | Description |
---|---|---|
l1BatchNumber | BigInteger | L1 batch number. |
Example
import io.zksync.protocol.ZkSync;
import org.web3j.protocol.http.HttpService;
import io.zksync.methods.response.ZkTransactionReceipt;
public class Main {
public static void main(String ...args) {
BigInteger l1BatchNumber = zkSync.getL1BatchNumber().send().getL1BatchNumber();
BlockRange blockRange = zkSync.getL1BatchBlockRange(l1BatchNumber).send().getResult();
}
}
getL1BatchDetails
Returns data pertaining to a given batch.
Calls the zks_getL1BatchDetails
JSON-RPC method.
Inputs
Parameter | Type | Description |
---|---|---|
number | BigInteger | L1 batch number. |
Example
import io.zksync.protocol.ZkSync;
import org.web3j.protocol.http.HttpService;
import io.zksync.methods.response.ZkTransactionReceipt;
public class Main {
public static void main(String ...args) {
BigInteger l1BatchNumber = zkSync.getL1BatchNumber().send().getL1BatchNumber();
BatchDetails blockRange = zkSync.getL1BatchBlockRange(l1BatchNumber).send().getResult();
}
}
getL1BatchNumber
Returns the latest L1 batch number.
Calls the zks_getL1BatchNumber
JSON-RPC method.
Example
import io.zksync.protocol.ZkSync;
import org.web3j.protocol.http.HttpService;
import io.zksync.methods.response.ZkTransactionReceipt;
public class Main {
public static void main(String ...args) {
BigInteger l1BatchNumber = zkSync.getL1BatchNumber().send().getL1BatchNumber();
}
}
getL2ToL1LogProof
Returns the proof for a transaction's L2 to L1 log sent via the L1Messenger system contract.
Calls the zks_getL2ToL1LogProof
JSON-RPC method.
Inputs
Parameter | Type | Description |
---|---|---|
txHash | String | Hash of the L2 transaction the L2 to L1 log was produced within. |
index | int | The index of the L2 to L1 log in the transaction (optional). |
Example
import io.zksync.protocol.ZkSync;
import org.web3j.protocol.http.HttpService;
import io.zksync.methods.response.ZkTransactionReceipt;
public class Main {
public static void main(String ...args) {
// Any L2 -> L1 transaction can be used.
// In this case, withdrawal transaction is used.
String tx = "0x2a1c6c74b184965c0cb015aae9ea134fd96215d2e4f4979cfec12563295f610e";
L2ToL1MessageProof result = zkSync.zksGetL2ToL1LogProof(tx, 0).sendAsync().join().getResult();
}
}
getTransferTransaction
Returns the populated transfer transaction.
Inputs
Parameter | Type | Description |
---|---|---|
tx | TransferTransaction | TransferTransaction class. |
transactionManager | TransactionManager | L2 transaction manager. |
gasProvider | ContractGasProvider | L2 gas provider. |
Example
import io.zksync.protocol.ZkSync;
import org.web3j.protocol.http.HttpService;
import io.zksync.methods.response.ZkTransactionReceipt;
public class Main {
public static void main(String ...args) {
TransferTransaction transaction = new TransferTransaction(RECEIVER, amount, signer.getAddress());
Transaction result = zkSync.getTransferTransaction(transaction, transactionManager, gasProvider).sendAsync().join().getResult();
}
}
Retrieve populated ETH transfer transaction using paymaster to facilitate fee payment with an ERC20 token.
import io.zksync.protocol.ZkSync;
import org.web3j.protocol.http.HttpService;
import io.zksync.methods.response.ZkTransactionReceipt;
public class Main {
public static void main(String ...args) {
BigInteger amount = BigInteger.valueOf(7_000_000_000L);
PaymasterParams paymasterParams = new PaymasterParams(PAYMASTER, Numeric.hexStringToByteArray(FunctionEncoder.encode(Paymaster.encodeApprovalBased(TOKEN, BigInteger.ONE, new byte[] {}))));
TransferTransaction transaction = new TransferTransaction(RECEIVER, amount, signer.getAddress(), paymasterParams);
Transaction result = zkSync.getTransferTransaction(transaction, transactionManager, gasProvider).sendAsync().join().getResult();
}
}
getWithdrawTx
Returns the populated withdrawal transaction.
Inputs
Parameter | Type | Description |
---|---|---|
tx | TransferTransaction | TransferTransaction class. |
transactionManager | TransactionManager | L2 transaction manager. |
gasProvider | ContractGasProvider | L2 gas provider. |
Examples
Retrieve populated ETH withdrawal transactions.
import io.zksync.protocol.ZkSync;
import org.web3j.protocol.http.HttpService;
import io.zksync.methods.response.ZkTransactionReceipt;
public class Main {
public static void main(String ...args) {
WithdrawTransaction transaction = new WithdrawTransaction(RECEIVER, amount, signer.getAddress());
Transaction result = zkSync.getWithdrawTx(transaction, transactionManager, gasProvider).sendAsync().join().getResult();
}
}
Retrieve populated ETH withdrawal transaction using paymaster to facilitate fee payment with an ERC20 token.
import io.zksync.protocol.ZkSync;
import org.web3j.protocol.http.HttpService;
import io.zksync.methods.response.ZkTransactionReceipt;
public class Main {
public static void main(String ...args) {
BigInteger amount = BigInteger.valueOf(7_000_000_000L);
PaymasterParams paymasterParams = new PaymasterParams(PAYMASTER, Numeric.hexStringToByteArray(FunctionEncoder.encode(Paymaster.encodeApprovalBased(TOKEN, BigInteger.ONE, new byte[] {}))));
WithdrawTransaction transaction = new WithdrawTransaction(RECEIVER, amount, signer.getAddress(), paymasterParams);
Transaction result = zkSync.getWithdrawTx(transaction, transactionManager, gasProvider).sendAsync().join().getResult();
}
}
l1ChainId
Returns the chain id of the underlying L1.
Calls the zks_L1ChainId
JSON-RPC method.
Example
import io.zksync.protocol.ZkSync;
import org.web3j.protocol.http.HttpService;
import io.zksync.methods.response.ZkTransactionReceipt;
public class Main {
public static void main(String ...args) {
BigInteger result = zkSync.l1ChainId().sendAsync().join().getResult();
}
}
l1TokenAddress
Returns the L1 token address equivalent for a L2 token address as they are not equal. ETH's address is set to zero address.
Inputs
Parameter | Type | Description |
---|---|---|
token | String | The address of the token on L2. |
Example
import io.zksync.protocol.ZkSync;
import org.web3j.protocol.http.HttpService;
import io.zksync.methods.response.ZkTransactionReceipt;
public class Main {
public static void main(String ...args) {
BigInteger result = zkSync.l1ChainId().sendAsync().join().getResult();
}
}
mainContract
Returns the main ZKsync Era smart contract address.
Calls the zks_getMainContract
JSON-RPC method.
Example
import io.zksync.protocol.ZkSync;
import org.web3j.protocol.http.HttpService;
import io.zksync.methods.response.ZkTransactionReceipt;
public class Main {
public static void main(String ...args) {
String result = zkSync.zksMainContract().sendAsync().join().getResult();
}
}
zksGetBridgeContracts
Returns the addresses of the default ZKsync Era bridge contracts on both L1 and L2.
Example
import io.zksync.protocol.ZkSync;
import org.web3j.protocol.http.HttpService;
import io.zksync.methods.response.ZkTransactionReceipt;
public class Main {
public static void main(String ...args) {
ZksBlockDetails blockDetails = zkSync.zksGetBridgeContracts().send();
}
}
zksGetTestnetPaymaster
Returns the testnet paymaster address if available, or null.
Example
import io.zksync.protocol.ZkSync;
import org.web3j.protocol.http.HttpService;
import io.zksync.methods.response.ZkTransactionReceipt;
public class Main {
public static void main(String ...args) {
String result = zkSync.zksGetTestnetPaymaster().sendAsync().join().getResult();
}
}
zksGetTransactionDetails
Returns data from a specific transaction given by the transaction hash.
Calls the getTransactionDetails
JSON-RPC method.
Inputs
Parameter | Type | Description |
---|---|---|
txHash | BytesLike | Transaction hash. |
Example
import io.zksync.protocol.ZkSync;
import org.web3j.protocol.http.HttpService;
import io.zksync.methods.response.ZkTransactionReceipt;
public class Main {
public static void main(String ...args) {
TransactionDetails result = zkSync.zksGetTransactionDetails("<TX_HASH>").sendAsync().join().getResult();
}
}