Skip to content

Commit

Permalink
Merge branch 'release-3' into release-3
Browse files Browse the repository at this point in the history
  • Loading branch information
naiheMy authored Aug 21, 2024
2 parents c1fb059 + 1b0503d commit 14a16c1
Show file tree
Hide file tree
Showing 39 changed files with 682 additions and 85 deletions.
56 changes: 56 additions & 0 deletions 2.x/docs/compatibility.md

Large diffs are not rendered by default.

8 changes: 4 additions & 4 deletions 2.x/docs/manual/permission_control.md
Original file line number Diff line number Diff line change
Expand Up @@ -299,7 +299,7 @@ Empty set.

```eval_rst
.. important::
推荐管理员机制:由于系统默认无权限设置记录,因此任何账户均可以使用权限设置功能。例如当账户1设置账户1有权限部署合约,但是账户2也可以设置账户2有权限部署合约。那么账户1的设置将失去控制的意义,因为其他账户可以自由添加权限。因此,搭建联盟链之前,推荐确定权限使用规则。可以使用grantPermissionManager(V2.5.0之前的命令,V2.5.0之后由grantCommitteeManager替代,涉及下文中出现的grantPermissionManager,均与此相同)指令设置链管理员账户,即指定特定账户可以使用权限分配功能,非链管理员账户无权限分配功能。
推荐管理员机制:由于系统默认无权限设置记录,因此任何账户均可以使用权限设置功能。例如当账户1设置账户1有权限部署合约,但是账户2也可以设置账户2有权限部署合约。那么账户1的设置将失去控制的意义,因为其他账户可以自由添加权限。因此,搭建联盟链之前,推荐确定权限使用规则。可以使用grantPermissionManager(V2.5.0之前的命令,V2.5.0之后由grantCommitteeMember替代,涉及下文中出现的grantPermissionManager,均与此相同)指令设置链管理员账户,即指定特定账户可以使用权限分配功能,非链管理员账户无权限分配功能。
```

### 操作内容
Expand All @@ -321,9 +321,9 @@ FISCO BCOS提供控制台命令使用权限功能(针对开发者,可以调

|命令名称|命令参数|功能|
|:----|:-----|:----|
|grantPermissionManager |address |授权账户的链管理员权限(V2.5.0之前的命令,V2.5.0之后由grantCommitteeManager替代) |
|revokePermissionManager |address |撤销账户的链管理员权限(V2.5.0之前的命令,V2.5.0之后由revokeCommitteeManager替代) |
|listPermissionManager | |查询拥有链管理员权限的账户列表(V2.5.0之前的命令,V2.5.0之后由listCommitteeManager替代) |
|grantPermissionManager |address |授权账户的链管理员权限(V2.5.0之前的命令,V2.5.0之后由grantCommitteeMember替代) |
|revokePermissionManager |address |撤销账户的链管理员权限(V2.5.0之前的命令,V2.5.0之后由revokeCommitteeMember替代) |
|listPermissionManager | |查询拥有链管理员权限的账户列表(V2.5.0之前的命令,V2.5.0之后由listCommitteeMember替代) |
|grantDeployAndCreateManager |address |授权账户的部署合约和创建用户表权限 |
|revokeDeployAndCreateManager |address |撤销账户的部署合约和创建用户表权限 |
|listDeployAndCreateManager | |查询拥有部署合约和创建用户表权限的账户列表|
Expand Down
2 changes: 1 addition & 1 deletion 3.x/release_note.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
v3.6.0
v3.9.0
2 changes: 1 addition & 1 deletion 3.x/zh_CN/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@
# The short X.Y version.
version = '3.0'
# The full version, including alpha/beta/rc tags.
release = 'v3.6.0'
release = 'v3.9.0'

# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
Expand Down
12 changes: 12 additions & 0 deletions 3.x/zh_CN/docs/design/sync.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,18 @@

收到回复区块的节点,在本地维护一个下载队列,用来对下载下来的区块进行缓冲和排序。下载队列是一个以块高为顺序的优先队列。下载下来的区块,会不断的插入到下载队列中,当队列中的区块能连接上节点当前本地的区块链,则将区块从下载队列中取出,真正的连接到当前本地的区块链上。

### 同步区块处理流程

同步收到的区块处理流程如下:

1. 节点收到请求的同步区块,按块高排序
1. 验证接收队列中的最大块是否是节点当前区块高的下一个块高
1. 执行区块,验证执行后得到的区块头与接收的区块头是否一致
1. 验证区块不是空块
1. 验证区块的签名列表是否正确

当上述验证都通过后,同步的区块才会被提交到账本中

## 同步场景举例

### 交易广播场景
Expand Down
2 changes: 1 addition & 1 deletion 3.x/zh_CN/docs/develop/amop.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# 7. 使用AMOP功能
# 8. 使用AMOP功能

标签:``java-sdk`` ``AMOP`` ``链上信使协议``

Expand Down
2 changes: 1 addition & 1 deletion 3.x/zh_CN/docs/develop/contract_safty_practice.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# 9. 智能合约安全实践
# 10. 智能合约安全实践

智能合约安全是指在设计、编码、部署、运行和维护智能合约的全生命周期中,采取措施确保合约的安全性和可靠性,防止恶意攻击、漏洞利用或错误操作导致的资产损失或系统崩溃。

Expand Down
10 changes: 5 additions & 5 deletions 3.x/zh_CN/docs/develop/privacy.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# 8. 使用同态加密与群环签名
# 9. 使用同态加密与群环签名

标签:``隐私合约`` ``隐私保护`` ``合约开发`` ``同态加密`` ``环签名`` ``群签名``

Expand Down Expand Up @@ -115,7 +115,7 @@ FISCO BCOS隐私保护模块是通过预编译合约实现的,默认被启用

源码可参考链接:[GitHub链接](https://github.com/FISCO-BCOS/FISCO-BCOS/tree/master/bcos-executor/src/precompiled/extension)[Gitee链接](https://gitee.com/FISCO-BCOS/FISCO-BCOS/tree/master/bcos-executor/src/precompiled/extension)

| 地址 | 功能 | 源码 |
| ------ | ---------- | ------------------------------------------------------------ |
| 0x5004 | 群签名 | GroupSigPrecompiled.cpp |
| 0x5005 | 环签名 | RingSigPrecompiled.cpp |
| 地址 | 功能 | 源码 |
|--------|--------|-------------------------|
| 0x5004 | 群签名 | GroupSigPrecompiled.cpp |
| 0x5005 | 环签名 | RingSigPrecompiled.cpp |
2 changes: 1 addition & 1 deletion 3.x/zh_CN/docs/develop/smartdev_index.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# 6. SmartDev应用开发组件
# 7. SmartDev应用开发组件

标签:``WeBankBlockchain-SmartDev`` ``应用开发`` ``通用组件`` ``智能合约库`` ``智能合约编译插件`` ``应用开发脚手架``

Expand Down
190 changes: 190 additions & 0 deletions 3.x/zh_CN/docs/develop/web3_usage.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,190 @@
# 6. (New✨)使用Web3工具部署调用合约

标签:``Web3`` ``Remix`` ``Hardhat`` ``OpenZeppelin``

----

```eval_rst
.. important::
FISCO BCOS在3.9.0版本开始支持使用Web3 JSON RPC,本文都基于FISCO BCOS开启Web3 JSON RPC之后使用的。详情请参考`【3.9.0版本说明】 <https://fisco-bcos-doc.readthedocs.io/zh_CN/latest/docs/introduction/change_log/3_9_0.html>`_
```

## 1. 开启Web3配置

在3.9.0的版本中的创世块中新增了web3 chain_id的字段,该字段将用于Web3工具辨认链的标识,有重要作用,**必须在启动初始化时确定**

```toml
[web3]
chain_id=20200
```

在配置项中新增了`web3_rpc`的配置项,默认为false,需要手动开启。

```toml
[web3_rpc]
enable=false
listen_ip=127.0.0.1
listen_port=8545
thread_count=16
```

### 1.1 旧节点升级并开启Web3配置

由于旧节点未存储关于Web3 Chain ID的信息,所以需要使用增加配置项的形式更新字段信息。按以下步骤执行即可:

1. 升级区块链二进制至3.9.0版本,灰度操作可参考:[版本升级指南](https://fisco-bcos-doc.readthedocs.io/zh-cn/latest/docs/introduction/change_log/upgrade.html)

2. 更新数据版本号到最新版本3.9.0:

```shell
setSystemConfigByKey compatibility_version 3.9.0
```

3. 配置系统配置项`web3_chain_id`

```shell
setSystemConfigByKey web3_chain_id 20200
```

4. 选择旧节点的配置文件,开启配置项

```shell
# 更改config.ini
vim config.ini

[web3_rpc]
enable=true
listen_ip=0.0.0.0
listen_port=8545
thread_count=16
```

### 1.2 开启Balance功能

Balance功能在FISCO BCOS从3.7.0开始就已经支持。为了用户能顺滑地使用Web3相关的工具,需要在节点处预先开启Balance相关的功能,并给测试账户充值足够多的Balance。详情请参考以下步骤:

```shell
# 开启总体功能
setSystemConfigByKey feature_balance 1
# 开启Balance预编译功能
setSystemConfigByKey feature_balance_precompiled 1
```

## 2. 使用Remix向FISCO BCOS发送交易

**使用前提**

- **必须熟悉**Remix、MetaMask的使用,这两个工具都是开源工具,请参考以下文档:
- [Remix documentation](https://remix-ide.readthedocs.io/en/latest/)
- [MetaMask developer documentation](https://docs.metamask.io/)
- 为了更好地使用,请在能流畅访问外网环境下进行测试。

### 2.1 配置MetaMask

以下步骤以完全配置好MetaMask作为前提。

#### 2.1.1 手动添加网络

在MetaMask的设置中选择网络选项,点击`Add a network`

![](../../images/develop/metamask_add_network.png)

由于测试链没有在MetaMask列表中,需要手动填写链信息添加到MetaMask。

![](../../images/develop/metamask_manual_add_network.png)

手动填写FISCO BCOS的信息内容。**特别注意:** RPC URL与Chain ID必须要和真是场景保持一致。

![metamask_add_fb_info](../../images/develop/metamask_add_fb_info.png)

#### 2.1.2 在MetaMask查看账户余额

可以从账户列表中查看所有账户以及对应的balance余额

![metamask_balance](../../images/develop/metamask_balance.png)

#### 2.1.3 使用MetaMask进行转账

用户可以通过MetaMask自带的转账功能进行balance转账。需要注意的是,Gas Limit需要手动填写。

![metamask_transfer](../../images/develop/metamask_transfer.png)

确认好交易信息之后点击确认即可发送交易。

![metamask_transfer_confirm](../../images/develop/metamask_transfer_confirm.png)

#### 2.1.4 查看交易信息

可以点击活动页查看交易的详细信息。

![metamask_transfer_tx](../../images/develop/metamask_transfer_tx.png)

### 2.2 使用Remix接入MetaMask部署调用合约

在Remix部署和调用交易界面中配置环境信息。在环境中选择 `Injected Provider - MetaMask`即可。

![remix_metamask_in](../../images/develop/remix_metamask_in.png)

在发起部署/调用合约时,Remix将会把合约内容发送到MetaMask,页面将会跳转到MetaMask进行确认签名。

![remix_metamask_tx](../../images/develop/remix_metamask_tx.png)

## 3. 使用Hardhat工具向FISCO BCOS发送交易

**使用前提****必须熟悉** Nodejs项目构建、nodejs基础语法、HardHat的使用,请参考以下文档:

- [Hardhat's tutorial for beginners](https://hardhat.org/tutorial)
- [Hardhat setting up a project](https://hardhat.org/hardhat-runner/docs/guides/project-setup)

### 3.1 使用Hardhat demo

为了方便测试,另外建好了hardhat的demo仓库:https://github.com/kyonRay/bcos-hardhat-tutorial

项目结构如下,contracts存放solidity合约,ignition存放最终部署上链的工具,test存放所有的合约测试代码。hardhat.config.js就是hardhat的基础配置文件。

![hardhat_structure](../../images/develop/hardhat_structure.png)

在hardhat.config.js的配置文件中配置好IP端口、chainID,并向红框内的地址发送足够的balance。

![](../../images/develop/hardhat_config.png)

在test文件夹中实现了基础token的测试代码。

![hardhat_test](/Users/kyonguo/workdir/code/FISCO-BCOS-DOC/3.x/zh_CN/images/develop/hardhat_test.png)

在终端执行以下命令就可以跑所有测试:

```shell
hardhat test --network localhost
```

### 3.2 使用Hardhat连接FISCO BCOS注意点

#### 部署合约后地址需要重新设置

由于FISCO BCOS与Web3在地址计算中存在区别,Hardhat在部署好合约后将在本地根据合约的nonce以及发送者地址计算得出新的合约地址,这与FISCO BCOS不兼容。因此在部署完成合约之后,还需要手动设置合约地址才行。代码示例如下:

```js
// fb-deploy-helper.js
const { ethers } = require('hardhat');

async function deployFBContract(name, args, opts = undefined) {
let contract = await ethers.deployContract(name, args, opts);
const txHash = contract.deploymentTransaction().hash;
const receipt = await ethers.provider.getTransactionReceipt(txHash);
contract = contract.attach(receipt.contractAddress);
return contract;
}

module.exports = { deployFBContract };
```

## 4. 遗留工作

FISCO BCOS目前已经支持使用绝大多数Web3工具连接,拓展了FISCO BCOS的生态圈。由于工程时间、优先级不高的原因,还剩一些遗留工作,后续将逐步补全。

1. 合约地址符合Web3合约地址规则 —— 3.12版本解决
2. 暂不支持cancun的opcode —— 3.10版本解决
3. gaslimit等EIP1559字段在计算gas时没用使用 —— 3.12版本解决
4. EVM中时间从毫秒对齐到秒 —— 3.12版本解决
5. 读取合约历史状态 —— 3.12版本解决
Loading

0 comments on commit 14a16c1

Please sign in to comment.