Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update defender.md #419

Closed
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
138 changes: 58 additions & 80 deletions builders/build/eth-api/dev-env/openzeppelin/defender.md
Expand Up @@ -7,14 +7,17 @@ description: 通过此教程学习如何使用OpenZeppelin Defender在兼容以

## 概览 {: #introduction }

[OpenZeppelin Defender](https://docs.openzeppelin.com/defender/){target=\_blank}是基于网络的应用程序,让开发者可以通过安全的方式实现智能合约运行的自动化。Defender提供以下不同的组件
[OpenZeppelin Defender](https://docs.openzeppelin.com/defender/){target=\_blank}是基于网络的应用程序,让开发者可以通过安全的方式实现智能合约运行的自动化。Defender V2提供以下组件

- [**Admin**](https://docs.openzeppelin.com/defender/v1/admin){target=\_blank} —— 实现所有智能合约运行过程的自动化,例如进入权限控制、升级、暂停等,并提供安全保障
- [**Relay**](https://docs.openzeppelin.com/defender/v1/relay){target=\_blank} —— 通过具备私有中继器部署、安全的私有交易基础设施进行构建
- [**Autotasks**](https://docs.openzeppelin.com/defender/v1/autotasks){target=\_blank} —— 创建自动化脚本,与智能合约交互
- [**Sentinel**](https://docs.openzeppelin.com/defender/v1/sentinel){target=\_blank} —— 监控智能合约的事件、功能及交易,并通过邮件接收通知
- [**Code Inspector**](https://defender.openzeppelin.com/v2/#/code){target=_blank} — 由OpenZeppelin工程师开发的自动代码分析AI模型和工具
- [**Audit**](https://defender.openzeppelin.com/v2/#/audit){target=_blank} — 管理智能合约审计过程,跟踪问题和解决方案
- [**Deploy**](https://defender.openzeppelin.com/v2/#/deploy){target=_blank} — 管理部署和升级,确保发布安全
- [**Monitor**](https://defender.openzeppelin.com/v2/#/monitor){target=_blank} — 监控智能合约的事件、功能和交易,并通过电子邮件接收通知
- [**Incident Response**](https://defender.openzeppelin.com/v2/#/incident-response){target=_blank} — 配置预定义的事件响应场景,可由监控器自动触发或人工触发
- [**Actions**](https://defender.openzeppelin.com/v2/#/actions/automatic){target=_blank} — 创建自动 Action,以执行链上或链下操作
- [**Access Control**](https://defender.openzeppelin.com/v2/#/access-control/contracts){target=_blank} — 轻松管理智能合约账户、角色和权限
Comment on lines +12 to +18
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- [**Code Inspector**](https://defender.openzeppelin.com/v2/#/code){target=_blank} — 由OpenZeppelin工程师开发的自动代码分析AI模型和工具
- [**Audit**](https://defender.openzeppelin.com/v2/#/audit){target=_blank} — 管理智能合约审计过程,跟踪问题和解决方案
- [**Deploy**](https://defender.openzeppelin.com/v2/#/deploy){target=_blank} — 管理部署和升级,确保发布安全
- [**Monitor**](https://defender.openzeppelin.com/v2/#/monitor){target=_blank} — 监控智能合约的事件、功能和交易,并通过电子邮件接收通知
- [**Incident Response**](https://defender.openzeppelin.com/v2/#/incident-response){target=_blank} — 配置预定义的事件响应场景,可由监控器自动触发或人工触发
- [**Actions**](https://defender.openzeppelin.com/v2/#/actions/automatic){target=_blank} — 创建自动 Action,以执行链上或链下操作
- [**Access Control**](https://defender.openzeppelin.com/v2/#/access-control/contracts){target=_blank} — 轻松管理智能合约账户、角色和权限
- [**Code Inspector**](https://defender.openzeppelin.com/v2/#/code){target=_blank} — 由OpenZeppelin工程师开发的自动代码分析AI模型和工具
- [**Audit**](https://defender.openzeppelin.com/v2/#/audit){target=\_blank} — 管理智能合约审计过程,跟踪问题和解决方案
- [**Deploy**](https://defender.openzeppelin.com/v2/#/deploy){target=\_blank} — 管理部署和升级,确保发布安全
- [**Monitor**](https://defender.openzeppelin.com/v2/#/monitor){target=\_blank} — 监控智能合约的事件、功能和交易,并通过电子邮件接收通知
- [**Incident Response**](https://defender.openzeppelin.com/v2/#/incident-response){target=\_blank} — 配置预定义的事件响应场景,可由监控器自动触发或人工触发
- [**Actions**](https://defender.openzeppelin.com/v2/#/actions/automatic){target=\_blank} — 创建自动 Action,以执行链上或链下操作
- [**Access Control**](https://defender.openzeppelin.com/v2/#/access-control/contracts){target=\_blank} — 轻松管理智能合约账户、角色和权限


OpenZeppelin Defender现已上线Moonbeam、Moonriver和Moonbase Alpha测试网。本教程将介绍如何使用Defender,并演示如何通过Admin组件暂停部署于Moonbase Alpha的智能合约,也可适用于Moonbeam和Moonriver。
OpenZeppelin Defender现已上线Moonbeam、Moonriver和Moonbase Alpha测试网。本教程将介绍如何使用Defender,并演示如何通过OpenZeppelin的 Action 与 Access Control 组件暂停部署于Moonbase Alpha的智能合约,也可适用于Moonbeam和Moonriver。

如需了解更多信息,请参阅OpenZeppelin团队撰写的Defender[文档页面](https://docs.openzeppelin.com/defender/)。

Expand All @@ -26,118 +29,93 @@ OpenZeppelin Defender现已上线Moonbeam、Moonriver和Moonbase Alpha测试网

请确保安装[MetaMask](https://metamask.io/){target=\_blank},并已连接至Moonbase Alpha测试网。如果您还没有将MetaMask连接到测试网,请根据我们的[MetaMask整合教程](/builders/integrations/wallets/metamask/){target=\_blank}进行操作。

此外,您还需要登录[Defender](https://defender.openzeppelin.com/){target=\_blank}网站并注册OpenZeppelin免费账户。
此外,您还需要登录[Defender](https://defender.openzeppelin.com/v2/#/overview){target=_blank}网站并注册OpenZeppelin免费账户。
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
此外,您还需要登录[Defender](https://defender.openzeppelin.com/v2/#/overview){target=_blank}网站并注册OpenZeppelin免费账户。
此外,您还需要登录[Defender](https://defender.openzeppelin.com/v2/#/overview){target=\_blank}网站并注册OpenZeppelin免费账户。


### 部署可暂停合约Box {: #deploying-the-pauseable-box-contract }

本教程使用的合约是在[智能合约升级教程](https://docs.openzeppelin.com/learn/upgrading-smart-contracts){target=\_blank}中的`Box.sol`合约的拓展,是OpenZeppelin文档中抽取的合约。此外,本合约可升级、[可暂停](https://docs.openzeppelin.com/contracts/4.x/api/security#Pausable){target=\_blank},能够充分发挥Admin组件的优势。您可以使用以下代码进行合约部署,并根据[智能合约升级教程](https://docs.openzeppelin.com/learn/upgrading-smart-contracts){target=\_blank}进行操作:

```solidity
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol";
import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";

contract PausableBox is Initializable, PausableUpgradeable, OwnableUpgradeable {
uint256 private value;

// Emitted when the stored value changes
event ValueChanged(uint256 newValue);

// Initialize
function initialize() initializer public {
__Ownable_init();
__Pausable_init_unchained();
}

// Stores a new value in the contract
function store(uint256 newValue) whenNotPaused public {
value = newValue;
emit ValueChanged(newValue);
}

// Reads the last stored value
function retrieve() public view returns (uint256) {
return value;
}

function pause() public onlyOwner {
_pause();
}

function unpause() public onlyOwner {
_unpause();
}
}
--8<-- 'code/builders/build/eth-api/dev-env/openzeppelin/PausableBox.sol'
```

### 连接Defender {: #connecting-defender }
!!! 注意事项
使用Remix或其他工具(例如Hardhat)部署完上述合约后,您需要调用 `initialize` 函数来正确设置可升级合约的所有者。如果您不调用此函数,所有

注册了OpenZeppelin Defender账户以后,登录[Defender App](https://defender.openzeppelin.com/){target=\_blank}。在主屏幕中,您将看到[MetaMask已连接到Moonbase Alpha](/builders/get-started/networks/moonbase/#connect-metamask){target=\_blank},点击右上角的**Connect wallet**(连接钱包)按钮:
## 使用Access Control组件 {: #using-the-access-control-component }

![OpenZeppelin Defender Connect](/images/builders/build/eth-api/dev-env/openzeppelin/defender/oz-defender-1.webp)
本节将引导您使用[OpenZeppelin Defender的访问控制(Access Control)组件](https://defender.openzeppelin.com/v2/#/access-control/contracts){target=_blank} 在Moonbase Alpha上管理智能合约。
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
本节将引导您使用[OpenZeppelin Defender的访问控制(Access Control)组件](https://defender.openzeppelin.com/v2/#/access-control/contracts){target=_blank} 在Moonbase Alpha上管理智能合约。
本节将引导您使用[OpenZeppelin Defender的访问控制(Access Control)组件](https://defender.openzeppelin.com/v2/#/access-control/contracts){target=\_blank} 在Moonbase Alpha上管理智能合约。


如果操作成功,您可以看到自己的地址,并显示**Connected to Moonbase Alpha**(已连接到Moonbase Alpha)。
### 导入合约 {: #importing-your-contract }

## 使用Admin组件 {: #using-the-admin-component }
使用Defender访问控制的第一步是添加您想要管理的合约。请按照以下步骤操作:

本小节将介绍如何使用OpenZeppelin Defender Admin组件管理Moonbase Alpha上的智能合约。
1. 点击 **Access Control** 菜单项
2. 点击 **Add Contract**
3. 为您的合约添加一个名称
4. 选择部署合约的 **Network** 。这个演示中我们选择Moonbase Alpha
5. 粘贴合约地址
6. 如果您的合约已被验证,它的ABI将自动导入,否则需要在这粘贴合约ABI。合约ABI可以在[Remix](https://remix.ethereum.org/){target=_blank}中获取,也可以在编译过程后(例如Hardhat)创建的 `.json` 文件中找到
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
6. 如果您的合约已被验证,它的ABI将自动导入,否则需要在这粘贴合约ABI。合约ABI可以在[Remix](https://remix.ethereum.org/){target=_blank}中获取,也可以在编译过程后(例如Hardhat)创建的 `.json` 文件中找到
6. 如果您的合约已被验证,它的ABI将自动导入,否则需要在这粘贴合约ABI。合约ABI可以在[Remix](https://remix.ethereum.org/){target=\_blank}中获取,也可以在编译过程后(例如Hardhat)创建的 `.json` 文件中找到

7. 检查完所有信息后,单击 **Create** 按钮

### 导入合约 {: #importing-your-contract }
![OpenZeppelin Defender Access Control Add Contract](/images/builders/build/eth-api/dev-env/openzeppelin/defender/new/oz-defender-1.png)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
![OpenZeppelin Defender Access Control Add Contract](/images/builders/build/eth-api/dev-env/openzeppelin/defender/new/oz-defender-1.png)
![OpenZeppelin Defender Access Control Add Contract](/images/builders/build/eth-api/dev-env/openzeppelin/defender/oz-defender-1.webp)

So in translations like this one, the original PR says that the images need to be updated after translations. So, you'll need to open a PR on the moonbeam-docs repo that removes the images directly in the oz-defender directory and replace them with the ones in the oz-defender/new directory - so that there is no longer a new directory and all of the new images replace the old ones. You'll also need to update the defender.md page so that the image paths no longer have new in them

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

please make sure to update all of the image paths in this PR to remove new and switch from .png to .webp


使用Defender Admin的第一步是添加需管理的合约。点击右上角附近的**Add contract**(添加合约)按钮,进入**import contract**(导入合约)页面,然后进行以下操作:
如果一切都成功导入,您应该在 **Access Control Contracts** 主屏幕上看到您的合约。您应该在 **Owner** 字段中看到用于部署可暂停 Box 合约的地址。如果您看到`0x0000000000000000000000000000000000000000`,这意味着您在部署可暂停Box合约后没有调用 `initialize` 函数。并且为了简化后续步骤,请将您的地址添加到Defender地址簿中。方法是将鼠标悬停在 **Owner** 字段中的地址上,然后单击 **Import into Defender 2.0**。

1. 设置合约名称(仅用于显示)
2. 选择需管理合约所在的网络。如果该合约已经以相同地址部署到多个网络中,这一步将尤其有用。在这一示例中,输入`Moonbase Alpha`
3. 输入合约地址
4. 粘贴合约ABI。可以通过[Remix](/builders/build/eth-api/dev-env/remix/){target=\_blank}或者在编译过程(例如在Hardhat)中创建的`.json`文件中找到
5. 检查合约功能是否被正确识别
6. 检查所有信息后,点击**Add**(添加)按钮
![OpenZeppelin Defender Access Control Contract Added](/images/builders/build/eth-api/dev-env/openzeppelin/defender/new/oz-defender-2.png)

![OpenZeppelin Defender Admin Add Contract](/images/builders/build/eth-api/dev-env/openzeppelin/defender/oz-defender-2.webp)

导入成功后,就可以在Admin组件主界面看到该合约
然后,您可以按照以下步骤将您的地址添加到Defender地址簿

![OpenZeppelin Defender Admin Contract Added](/images/builders/build/eth-api/dev-env/openzeppelin/defender/oz-defender-3.webp)
1. 为您的地址输入名称
2. 选择地址所属的网络
3. 粘贴地址
4. 查看所有信息并点击 **Create**

![OpenZeppelin Defender Manage Address Book](/images/builders/build/eth-api/dev-env/openzeppelin/defender/new/oz-defender-3.png)

### 创建合约提案 {: #create-a-contract-proposal }

提案指的是合约即将执行的行动。截至本文撰写时,该合约已产生三个主要提案/行动
提案指的是合约即将执行的行动。您可以提案运行合约中的任何函数,包括但不限于

- **Pause** —— 检测到暂停功能后可用。可暂停代币转移、铸造及销毁
- **Upgrade** —— 检测到升级功能后可用。[可通过代理合约对合约进行升级](https://docs.openzeppelin.com/learn/upgrading-smart-contracts){target=\_blank}
- **Admin action** —— 可调用受管理合约的任何函数

在本示例中,我们创建了一个新提案,提案内容为暂停合约。为此,需要进行以下操作:

1. 点击**New proposal**(新建提案)按钮,显示所有选项
2. 点击**Pause**(暂停)
1. 点击 **Actions** 菜单项
2. 点击 **Transaction Proposals**
3. 输入提案名称
4. 输入提案描述,此为可选
5. 从[imported contracts](#importing-your-contract)下拉列表中选择目标合约
6. 选择作为提案一部分来执行的函数
7. 选择所需的审批流程。为了演示,我们将在下一步创建一个只有所有者才能参与的简单审批流程

![OpenZeppelin Defender Admin Contract New Pause Proposal](/images/builders/build/eth-api/dev-env/openzeppelin/defender/oz-defender-4.webp)
![OpenZeppelin Defender Actions New Pause Proposal](/images/builders/build/eth-api/dev-env/openzeppelin/defender/new/oz-defender-4.png)

提案页面将打开,显示所有需要填写的提案相关信息。在本示例中,需要提供以下信息
要创建一个简单的,只有合约所有者才能参与的新审批流程,请执行以下步骤

1. Admin账户地址。如果想通过现有钱包(在获得所有必要许可的前提下)运行,该提案这一字段可以留空
2. 提案名称
3. 提案描述。为合约的其他成员/管理员提供的信息越详细越好(若使用多重签名钱包)
4. 点击**Create pause proposal**(创建暂停提案)
1. 输入审批流程名称
2. 选择 **EOA**
3. 选择Box可暂停合约的所有者
4. 查看所有信息并按 **Save Changes**

![OpenZeppelin Defender Admin Contract Pause Proposal Details](/images/builders/build/eth-api/dev-env/openzeppelin/defender/oz-defender-5.webp)
![OpenZeppelin Defender Actions Create Approval Process](/images/builders/build/eth-api/dev-env/openzeppelin/defender/new/oz-defender-5.png)

成功创建提案后,提案将显示在合约管理员主面板上。
最后一步是提交交易提案。执行以下步骤:

![OpenZeppelin Defender Admin Contract Proposal List](/images/builders/build/eth-api/dev-env/openzeppelin/defender/oz-defender-6.webp)
1. 点击 **Connect Wallet** 并将您的EVM账户连接到Defender
2. 点击 **Submit Transaction Proposal**
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
2. 点击 **Submit Transaction Proposal**
2. 点击 **Submit Transaction Proposal**
![OpenZeppelin Defender Actions Contract Submit Proposal](/images/builders/build/eth-api/dev-env/openzeppelin/defender/oz-defender-6.webp)

missing this image


### 同意合约提案 {: #approve-a-contract-proposal }

创建合约提案后,下一步是同意并执行提案。进入提案,并点击**Approve and Execute**(同意并执行)。

![OpenZeppelin Defender Admin Contract Proposal Pause Approve](/images/builders/build/eth-api/dev-env/openzeppelin/defender/oz-defender-7.webp)

点击 **Continue**,您将访问提案状态页面。在这里您可以执行提案。点击 **Approve and Execute**,并在您的EVM钱包中确认交易。一旦交易处理完成,状态应显示为 **Executed**。

通过这一步骤将创建一笔交易,需要使用MetaMask签名。此后提案状态将改为**Executed(confirmation pending)**。交易被处理后,状态将显示为**Executed**(已执行)。
![OpenZeppelin Defender Actions Contract Proposal Pause Approve and Execute](/images/builders/build/eth-api/dev-env/openzeppelin/defender/new/oz-defender-7.png)

![OpenZeppelin Defender Admin Contract Proposal Pause Executed](/images/builders/build/eth-api/dev-env/openzeppelin/defender/oz-defender-8.webp)
如果一切顺利,您的Box可暂停合约现在已被暂停。如果您想尝试其他场景,您可以尝试创建取消暂停合约的提案。

合约状态也将从**Running**(运行中)变为**Paused**(已暂停)。现在您已学会如何使用Admin组件管理智能合约了。
恭喜!您现在已经掌握了如何使用OpenZeppelin Defender在Moonbeam网络上管理智能合约。如需了解更多信息,您可以查看[OpenZeppelin Defender 文档](https://docs.openzeppelin.com/defender/v2/){target=_blank}.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
恭喜!您现在已经掌握了如何使用OpenZeppelin Defender在Moonbeam网络上管理智能合约。如需了解更多信息,您可以查看[OpenZeppelin Defender 文档](https://docs.openzeppelin.com/defender/v2/){target=_blank}.
恭喜!您现在已经掌握了如何使用OpenZeppelin Defender在Moonbeam网络上管理智能合约。如需了解更多信息,您可以查看[OpenZeppelin Defender 文档](https://docs.openzeppelin.com/defender/v2/){target=\_blank}.


--8<-- 'text/_disclaimers/third-party-content.md'