npm 包 @0xproject/sol-resolver 使用教程

阅读时长 5 分钟读完

简介

在使用 Solidity 进行智能合约开发中,通常需要调用外部依赖的合约地址。而这些地址随着合约的部署,往往也会发生变化。为了方便维护和更新这些地址,我们可以使用 @0xproject/sol-resolver 这个 npm 包。

该包可以解析 Solidity 源代码中的合约地址,并将其映射到真实的地址上。这样,在合约部署时,我们只需要更新映射文件中的地址即可,无需修改源代码。同时,也保证了在合约升级时,新合约地址的无缝切换,使得旧合约无需修改代码即可与新版本进行通信。

本文将介绍如何在项目中使用 @0xproject/sol-resolver,以及如何在 Solidity 合约中使用解析后的地址。

安装

使用 npm 安装 @0xproject/sol-resolver:

或者使用 yarn 安装:

使用

首先,我们需要创建一个地址映射文件。该文件记录了合约名和合约地址之间的映射关系。例如:

接下来,在 Solidity 合约中,我们可以通过如下方式使用映射后的地址:

-- -------------------- ---- -------
------ -------- -------

------ -------------------------------------------------
------ --------------------

-------- ---------- -
    ------- ------ ------
    ------- ------ ---------

    ------------------- --------- ------ -
        -------- - - -------------------
        ----- - -----------------------
        -------- - --------------------------
    -
-

在上述代码中,我们使用了 @0xproject/sol-resolver 里的 Resolver 类,并在构造函数中传入 resolver 地址。然后通过 Resolver 的 getContract 方法获取 Token 和 Exchange 的地址。

而 resolver 地址则需要通过以下代码进行设置:

-- -------------------- ---- -------
----- ----------- - ----------------------------------------------
----- -------- - --------------------------------------------
----- ---- - ----------------

----- ---- - --- -------- ------------------------------------------------------

----- ----------- - --- ------------------
  ----------------
  -------------------------------
--

----- -------- - --- -------------- -----------------------------

在上述代码中,首先引入 ResolverMap 合约的 ABI 和 @0xproject/sol-resolver 里的 Resolver 类,然后通过 web3 连接本地节点,再利用 ResolverMap 的地址,创建 resolver 对象。最后,在 Solidity 合约中调用 resolver 对象的方法可以获取到实际地址。

示例代码

完整的示例代码如下:

-- -------------------- ---- -------
-- ------------------------ ----------

------ -------- -------

------ -------------------------------------------------
------ --------------------

-------- ---------- -
    ------- ------ ------
    ------- ------ ---------

    ------------------- --------- ------ -
        -------- - - -------------------
        ----- - -----------------------
        -------- - --------------------------
    -
-
-- -------------------- ---- -------
----- ----------- - ----------------------------------------------
----- -------- - --------------------------------------------
----- ---- - ----------------

----- ---- - --- -------- ------------------------------------------------------

----- ----------- - --- ------------------
  ----------------
  -------------------------------
--

----- -------- - --- -------------- -----------------------------

-- ---- ---- ----

总结

使用 @0xproject/sol-resolver 可以方便地管理 Solidity 合约中的地址变化,并且不影响已编译的合约代码。同时,我们也介绍了如何在 Solidity 合约中使用解析后的地址,供大家学习参考。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/xproject-sol-resolver