提供者


提供者

提供者是包裹与zkSync节点的交互的对象。如果你对ethers中提供者的概念感到陌生,你应该看看他们的文档这里open in new window

zkSync完全支持Ethereum Web3 API,所以你可以使用ethers.js的提供者对象。然而,zkSync API提供了一些额外的JSON-RPC方法,这些方法允许。

  • 轻松地跟踪L1<->L2交易。
  • 交易的不同阶段的最终结果。默认情况下,我们的RPC会返回服务器处理的最后一个状态的信息,但有些用例可能只需要跟踪 "最终完成 "的交易。

还有更多! 一般来说,你可以使用ethers的提供者来快速入门,但以后可以切换到zksync-web3库的提供者。

zksync-web3库输出两种类型的提供者。

  • Provider继承自ethersJsonRpcProvider,提供对所有zkSync JSON-RPC端点的访问。
  • Web3Provider扩展了Provider类,使其与Web3钱包更加兼容。*这是一种应该用于浏览器集成的钱包类型。

Provider

这是最常用的提供者类型。它提供了与ethers.providers.JsonRpcProvider相同的功能,但用zkSync特定的方法对其进行了扩展。

创建提供者

构造函数接受操作者节点的urlnetwork名称(可选)。

constructor(url?: ConnectionInfo | string, network?: ethers.providers.Networkish)

输入和输出

名称说明
url?zkSync操作员节点的URL。
network?网络的描述。
returnsprovider对象。

Example

import { Provider } from "zksync-web3";

const provider = new Provider("https://zksync2-testnet.zksync.dev");

getBalance

返回一个用户在某个区块标签和一个本地令牌的余额。 为了检查ETH中的余额,你可以省略最后一个参数或提供utils对象中提供的ETH_ADDRESS

Example:

async getBalance(address: Address, blockTag?: BlockTag, tokenAddress?: Address): Promise<BigNumber>

输入和输出

名称说明
地址用户检查余额的地址。
blockTag?检查余额的区块。*默认情况下,使用最新处理的(committed)块。
tokenAddress?代币的地址。*默认情况下,使用ETH。
returnsBigNumber对象。
import { Provider } from "zksync-web3";

const provider = new Provider("https://zksync2-testnet.zksync.dev");

const USDC_L2_ADDRESS = "0x0faF6df7054946141266420b43783387A78d82A9";
// Getting  USDC balance of account 0x0614BB23D91625E60c24AAD6a2E6e2c03461ebC5 at the latest processed block
console.log(await provider.getBalance("0x0614BB23D91625E60c24AAD6a2E6e2c03461ebC5", "latest", USDC_L2_ADDRESS));

// Getting ETH balance
console.log(await provider.getBalance("0x0614BB23D91625E60c24AAD6a2E6e2c03461ebC5"));

获取zkSync智能合约地址

async getMainContractAddress(): Promise<string>

输入和输出

NameDescription
returnszkSync智能合约的地址。

Example

import { Provider } from "zksync-web3";

const provider = new Provider("https://zksync2-testnet.zksync.dev");

console.log(await provider.getMainContractAddress());

获取测试网的付款人地址

在zkSync测试网,测试网的付款人是可用的。

async getTestnetPaymasterAddress(): Promise<string|null>

输入和输出

NameDescription
returns测试网支付系统的地址,如果没有则为null

Example

import { Provider } from "zksync-web3";

const provider = new Provider("https://zksync2-testnet.zksync.dev");

console.log(await provider.getTestnetPaymasterAddress());

获取zkSync默认的桥接合约地址

async getDefaultBridgeAddresses(): Promise<{
    erc20L1: string;
    erc20L2: string;
}>

输入和输出

NameDescription
returnsL1和L2上默认的zkSync桥接合约的地址

getConfirmedTokens.

给定startlimit,返回ID在[start...start+limit-1]区间内的确认令牌的信息(地址、符号、名称、小数)。这里的 "确认 "是一个错误的说法,因为一个确认的令牌是已经通过默认的zkSync桥接的令牌。这种方法主要由zkSync团队内部使用。

代币是按照符号的字母顺序返回的,所以基本上,代币ID是它在按字母排序的代币阵列中的位置。

async getConfirmedTokens(start: number = 0, limit: number = 255): Promise<Token[]>

输入和输出

名称说明
starttoken id,从这个id开始返回token的信息。默认为零。
limit从API返回的令牌数量。255 默认
rturns

Example

import { Provider } from "zksync-web3";
const provider = new Provider("https://zksync2-testnet.zksync.dev");

console.log(await provider.getConfirmedTokens());

getTokenPrice

已废弃

该方法已被废弃,并将在不久的将来被删除。

返回一个代币的美元价格。请注意,这是zkSync团队使用的价格,可能与当前的市场价格有一些不同。在测试网络上,代币价格可能与实际市场价格有很大差异。

async getTokenPrice(token: Address): Promise<string | null>
NameDescription
tokenThe address of the token.
returnsstring value of the token price.

Example

import { Provider } from "zksync-web3";
const provider = new Provider("https://zksync2-testnet.zksync.dev");

console.log(await provider.getTokenPrice(USDC_L2_ADDRESS));

从L1地址中获取令牌在L2上的地址,反之亦然

代币在L2上的地址将与L1上的地址不一样。 ETH的地址在两个网络上都被设置为零地址。

所提供的方法只对使用默认的zkSync桥接的令牌有效。

// takes L1 address, returns L2 address
async l2TokenAddress(l1Token: Address): Promise<string>
// takes L2 address, returns L1 address
async l1TokenAddress(l2Token: Address): Promise<string>
NameDescription
tokenThe address of the token on the one layer.
returnsThe address of that token on the opposite layer.

getTransactionStatus(获取交易状态)。

给定一个交易哈希值,返回该交易的状态。

async getTransactionStatus(txHash: string): Promise<TransactionStatus>
NameDescription
txHashzkSync transaction hash.
returnsThe status of the transaction. You can find the description for TransactionStatus enum variants in the types.

Example

import { Provider } from "zksync-web3";
const provider = new Provider("https://zksync2-testnet.zksync.dev");

const TX_HASH = "0x95395d90a288b29801c77afbe359774d4fc76c08879b64708c239da8a65dbcf3";
console.log(await provider.getTransactionStatus(TX_HASH));

getTransaction

给出一个交易哈希值,返回L2交易响应对象。

async getTransaction(hash: string | Promise<string>): Promise<TransactionResponse>
NameDescription
hashzkSync transaction hash.
returnsTransactionResponse对象,可以方便地跟踪交易的状态。

Example

import { Provider } from "zksync-web3";
const provider = new Provider("https://zksync2-testnet.zksync.dev");

const TX_HASH = "0x300baeb6804c2068ff796d95336c53ac671eef216e7ae9c17190660cdb1e2c17";
const txHandle = await provider.getTransaction(TX_HASH);

// Wait until the transaction is processed by the server.
await txHandle.wait();
// Wait until the transaction is finalized.
await txHandle.waitFinalize();

Web3Provider

一个应该用于web3浏览器钱包集成的类,经过调整,可以轻松兼容Metamask、WalletConnect和其他流行的浏览器钱包。

创建Web3Provider

与Provider类的构造函数的主要区别是,它接受ExternalProvider而不是节点URL。

constructor(provider: ExternalProvider, network?: ethers.providers.Networkish)

输入和输出

名称说明
providerethers.provider.ExternalProvider类实例。例如,在Metamask的情况下,它是window.ethereum
网络?网络的描述。
returns返回 Provider对象。

Example

import { Web3Provider } from "zksync-web3";

const provider = new Web3Provider(window.ethereum);

获取zkSync签名者

返回一个Signer对象,可用于签署zkSync交易。关于Signer类的更多细节可以在下一找到。

Inputs and outputs

NameDescription
returnsSigner class object.

Example

import { Web3Provider } from "zksync-web3";

const provider = new Web3Provider(window.ethereum);
const signer = provider.getSigner();
Last update:
Contributors: Blessing Krofegha,Stanislav Bezkorovainyi,Newbee740,AnastasiiaVashchuk,defigen,Antonio,Roman Brodetski,botdad