引介 | Aztec 协议系列,Part-2:发布 AZTEC 至 Ganache

Ajian   |     |   980 次阅读

本文为此系列文章的第二部分:

  1. AZTEC 协定简介
  2. 发布 AZTEC 至 Ganache (英文原文)
  3. 证明、签收、及检视密钥管理
  4. 建立及使用加密资产

AZTEC 已发布了相关合约至 Ropsten 和 Rinkeby 等测试链。合约的地址列在 NPM 套件 @aztec/contract-addresses 中。合约的文件则可参考 @aztec/contract-artifacts

然而对大部分开发情境而言,将合约发布至 Ganache 较容易进行测试。流程也跟发布至以太坊私链类似。

本篇文章的程序代码已上传至 github 项目。里面包含所需的套件跟设定。

  1. 下载专案至本机 git clone git@github.com:AztecProtocol/aztec-ganache-starter-kit.git
  2. 安装套件 cd aztec-ganache-starter-kit && yarn install
  3. 复制环境档 cp RENAME_ME.env .env
  4. 启动 Ganache yarn start (同时会依 .env 里的数据创立账号)
  5. 发布 AZTEC!yarn migrate

接下来让我们细看这个项目做了什么:

第 1 步

首先,我们需拥有合约原始档以让 Truffle 编译。档案已发布至 NPM 套件@aztec/protocol

yarn add @aztec/protocol

第 2 步 — 发布 ACE

const ACE = artifacts.require('./ACE.sol');
const AdjustSupply = artifacts.require('./AdjustSupply.sol');
const BilateralSwap = artifacts.require('./BilateralSwap.sol');
const DividendComputation = artifacts.require('./DividendComputation.sol');
const JoinSplit = artifacts.require('./JoinSplit.sol');
const PrivateRange = artifacts.require('./PrivateRange.sol');
const utils = require('@aztec/dev-utils');
const {
  constants,
  proofs: {
    JOIN_SPLIT_PROOF,
    MINT_PROOF,
    BILATERAL_SWAP_PROOF,
    DIVIDEND_PROOF,
    PRIVATE_RANGE_PROOF,
  },
} = utils;
module.exports = async (deployer, network) => {
  if (network === 'development') {
    await deployer.deploy(ACE);
    await deployer.deploy(AdjustSupply);
    await deployer.deploy(BilateralSwap);
    await deployer.deploy(DividendComputation);
    await deployer.deploy(JoinSplit);
    await deployer.deploy(PrivateRange);
    const aceContract = await ACE.deployed();
    await aceContract.setCommonReferenceString(constants.CRS);
    await aceContract.setProof(MINT_PROOF, AdjustSupply.address);
    await aceContract.setProof(BILATERAL_SWAP_PROOF, BilateralSwap.address);
    await aceContract.setProof(DIVIDEND_PROOF, DividendComputation.address);
    await aceContract.setProof(JOIN_SPLIT_PROOF, JoinSplit.address);
    await aceContract.setProof(PRIVATE_RANGE_PROOF, PrivateRange.address);
  }
};

如第一篇文章提到的,AZTEC 有一套信赖建置系统来执行范围证明运算。利用 ACE 的 setCommonReferenceString 方法可设定信赖建置系统的数据库:

await aceContract.setCommonReferenceString(constants.CRS);

透过 ACE 的 setProof(proofId, address) 方法来设定各个执行证明的合约地址。proofId 为证明的类别,可从 NPM 套件 @aztec/dev-utils 里取得定义:

const utils = require('@aztec/dev-utils');
const {
  proofs: {
    JOIN_SPLIT_PROOF,
    MINT_PROOF,
    BILATERAL_SWAP_PROOF,
    DIVIDEND_PROOF,
    PRIVATE_RANGE_PROOF,
  },
} = utils;

第二个参数则为已发布的合约地址:

await aceContract.setProof(MINT_PROOF, AdjustSupply.address);
await aceContract.setProof(BILATERAL_SWAP_PROOF, BilateralSwap.address);
await aceContract.setProof(DIVIDEND_PROOF, DividendComputation.address);
await aceContract.setProof(JOIN_SPLIT_PROOF, JoinSplit.address);
await aceContract.setProof(PRIVATE_RANGE_PROOF, PrivateRange.address);

第 3 步 — 发布零知识资产 (ZKAsset)

当 ACE 及所需的证明合约都已发布,我们就可以建立自己的零知识资产!

const ACE = artifacts.require('./ACE.sol');
const ZkAsset = artifacts.require('./ZkAsset.sol');
const ZkAssetMintable = artifacts.require('./ZkAssetMintable.sol');
const TestERC20 = artifacts.require('./TestERC20.sol');
module.exports = async (deployer, network) => {
  await deployer.deploy(TestERC20);
  if (network === 'development') {
    const aceContract = await ACE.deployed();
    // initialise the ZkAsset with an equivilant
    await deployer.deploy(
      ZkAsset,
      aceContract.address,
      TestERC20.address,
      1,
      false,
      true
    );
  }
};

建立零知识资产需要 5 个参数:

  1. aceAddress — ACE 合约的地址
  2. linkedTokenAddress — 零知识资产所代表的公开 ERC20 代币合约地址,如不代表特定代币则可设定为 address(0)
  3. scalingFactor — 与代表的公开代币间转换的比例因子
  4. canAdjustSupply — 布尔值,如为真则表示合约拥有者可改变票据的总供给量
  5. canConvert — 布尔值,如为真则可转换为所代表的公开代币。零知识资产合约本身已内建类似于 ERC20 的 confidentialTransfer 转换机制。如需要更复杂的应用,可以解析证明的返回值,然后使用从当中获取的信息来更新相关票据在登记所里的状态。

最后,在项目目录下执行 truffle migrate。Truffle 会依上面两个档案发布 ACE、各个证明合约、以及测试用的零知识资产合约到 Ganache 上。

这是系列文章的第二部分。下一篇:证明、签收、及检视密钥管理


原文链接: https://medium.com/aztec-protocol/deploying-aztec-to-ganache-dc02d538b24f
作者: Joe Andrews
翻译: Leila Wang

本译稿来自于 Leila Wang,感谢 Aztec Team 授权 EthFans 使用此译本。

 
0 人喜欢