 CmlPHP v2.x 开发手册
1.6.1.5 6. 配置的获取 1.6.1.6 7. 动态修改配置 1.6.1.7 2. URL模式 1.6.2 3. 路由 1.6.3 4. 控制器 1.6.4 1. 前置方法 1.6.4.1 5. 请求、响应 1.6.5 1. Input 1.6.5.1 2. Request 1.6.5.2 'app_view_path_name' => 'View',//渲染模板用 'app_controller_path_name' => 'Controller',//路由根据请求url映射控制器用 'app_static_path_name' => 'Resource', //静态资源目录名 ]); //根据上面配置的目录,配置其它目录 Cml::setApplicationDir([ \Cml\Logger\File::class); //必须绑定。路由 //框架自带的路由支持restful分格的路由、路由分组。 在未声明/未匹配到路由规则时会按url映射到文 件的方式来执行相应的控制器方法。具体参考 http://doc.cmlphp.com/devintro/route/readme.html。 //如果想使用第三方的路由只要简单封装一个服务。实现\Cml\Interfaces\Route接口即可0 码力 | 251 页 | 973.37 KB | 1 年前3 CmlPHP v2.x 开发手册
1.6.1.5 6. 配置的获取 1.6.1.6 7. 动态修改配置 1.6.1.7 2. URL模式 1.6.2 3. 路由 1.6.3 4. 控制器 1.6.4 1. 前置方法 1.6.4.1 5. 请求、响应 1.6.5 1. Input 1.6.5.1 2. Request 1.6.5.2 'app_view_path_name' => 'View',//渲染模板用 'app_controller_path_name' => 'Controller',//路由根据请求url映射控制器用 'app_static_path_name' => 'Resource', //静态资源目录名 ]); //根据上面配置的目录,配置其它目录 Cml::setApplicationDir([ \Cml\Logger\File::class); //必须绑定。路由 //框架自带的路由支持restful分格的路由、路由分组。 在未声明/未匹配到路由规则时会按url映射到文 件的方式来执行相应的控制器方法。具体参考 http://doc.cmlphp.com/devintro/route/readme.html。 //如果想使用第三方的路由只要简单封装一个服务。实现\Cml\Interfaces\Route接口即可0 码力 | 251 页 | 973.37 KB | 1 年前3
 CmlPHP v2.x 开发手册
项目目录说明 开发指引 配置 normal.php common.php plugin.php route.php 其它配置项 配置的获取 动态修改配置 URL模式 路由 控制器 前置方法 请求、响应 Input Request 1.6.5.3 1.6.5.4 1.6.5.5 1.6.6 1.6.6.1 1.6.6.2 1.6.6.3 1.6.6.4 'app_view_path_name' => 'View',//渲染模板用 'app_controller_path_name' => 'Controller',//路 由根据请求url映射控制器用 'app_static_path_name' => 'Resource', //静态资源 目录名 ]); //根据上面配置的目录,配置其它目录 Cml::setApplicationDir([ 目录为当前项目下的其中一个应 用。一个项目下可能有多个应用。 web/Config 为web应用配置存放目录,web应用中独立的配置存 放在这个目录下. web/Controller 为应用控制器存放的路径我们在其下面看到 了 DefaultController.php 文件以下为文件的内容0 码力 | 245 页 | 720.67 KB | 1 年前3 CmlPHP v2.x 开发手册
项目目录说明 开发指引 配置 normal.php common.php plugin.php route.php 其它配置项 配置的获取 动态修改配置 URL模式 路由 控制器 前置方法 请求、响应 Input Request 1.6.5.3 1.6.5.4 1.6.5.5 1.6.6 1.6.6.1 1.6.6.2 1.6.6.3 1.6.6.4 'app_view_path_name' => 'View',//渲染模板用 'app_controller_path_name' => 'Controller',//路 由根据请求url映射控制器用 'app_static_path_name' => 'Resource', //静态资源 目录名 ]); //根据上面配置的目录,配置其它目录 Cml::setApplicationDir([ 目录为当前项目下的其中一个应 用。一个项目下可能有多个应用。 web/Config 为web应用配置存放目录,web应用中独立的配置存 放在这个目录下. web/Controller 为应用控制器存放的路径我们在其下面看到 了 DefaultController.php 文件以下为文件的内容0 码力 | 245 页 | 720.67 KB | 1 年前3 FISCO BCOS 1.3 中文文档浅谈以太坊智能合约的设计模式与升级方法 1. 最佳实践 2. 实用设计案例 2.1 控制器合约与数据合约: 1->1 2.2 控制器合约与数据合约: 1->N 2.3 控制器合约与数据合约: N->1 2.4 控制器合约与数据合约: N->N 2.5 总结 3. 升级 3.1 控制器合约升级,数据合约不升级 3.2 控制器合约不升级,数据合约升级 3.3 控制器合约升级,数据合约升级 4. 数据迁移 4.1 硬编码迁移法 Data)模式。将合约分为两类:控制器合约 (Controller Contract)与数据合约(Data Contract)。 控制器合约通过访问数据合约获得数据,并对数据做逻辑处理,然后写回数据 合约。它专注于对数据的逻辑处理和对外提供服务。根据处理逻辑的不同,常 见的有命名空间控制器合约、代理控制器合约、业务控制器合约、工厂控制器 合约等。一般情况下,控制器合约不需要存储任何数据,它完全依赖外部的输 入来决定对数据合约的访问。特殊情况下,控制器合约可以存储某个固定的数 据合约的地址或者命名空间(通过命名空间在运行时获得合约地址)。 数据合约专注于数据结构定义与所存储数据的读写裸接口。为了达到数据统一 访问管理和数据访问权限控制的目的,最好是将数据读写接口只暴露给对应的 控制器合约。禁止其他方式的读写访问。 基于这个模式,遵循从上至下的分析方式,从对外提供的服务接口开始设计各 类控制器合约,再逐步过渡到服务接口所需要的数据模型和存储方式,进而设0 码力 | 491 页 | 5.72 MB | 1 年前3 FISCO BCOS 1.3 中文文档浅谈以太坊智能合约的设计模式与升级方法 1. 最佳实践 2. 实用设计案例 2.1 控制器合约与数据合约: 1->1 2.2 控制器合约与数据合约: 1->N 2.3 控制器合约与数据合约: N->1 2.4 控制器合约与数据合约: N->N 2.5 总结 3. 升级 3.1 控制器合约升级,数据合约不升级 3.2 控制器合约不升级,数据合约升级 3.3 控制器合约升级,数据合约升级 4. 数据迁移 4.1 硬编码迁移法 Data)模式。将合约分为两类:控制器合约 (Controller Contract)与数据合约(Data Contract)。 控制器合约通过访问数据合约获得数据,并对数据做逻辑处理,然后写回数据 合约。它专注于对数据的逻辑处理和对外提供服务。根据处理逻辑的不同,常 见的有命名空间控制器合约、代理控制器合约、业务控制器合约、工厂控制器 合约等。一般情况下,控制器合约不需要存储任何数据,它完全依赖外部的输 入来决定对数据合约的访问。特殊情况下,控制器合约可以存储某个固定的数 据合约的地址或者命名空间(通过命名空间在运行时获得合约地址)。 数据合约专注于数据结构定义与所存储数据的读写裸接口。为了达到数据统一 访问管理和数据访问权限控制的目的,最好是将数据读写接口只暴露给对应的 控制器合约。禁止其他方式的读写访问。 基于这个模式,遵循从上至下的分析方式,从对外提供的服务接口开始设计各 类控制器合约,再逐步过渡到服务接口所需要的数据模型和存储方式,进而设0 码力 | 491 页 | 5.72 MB | 1 年前3 KiCad 5.1 快速入门 。 单击确定关闭符号库窗口。 21. 重复添加元件步骤,但这次选择 microchip_pic12mcu 库而不是 设备 库并选择 PIC12C508A-ISN 元件。 22. 将鼠标悬停在微控制器元件上。 请注意,[x] 和 [y] 再次翻转元件。 保持符号 围绕Y轴镜像,使引脚 G0 和 G1 指向右侧。 23. 重复添加元件步骤,这次选择 设备 库并从中选择 LED 元件。 24. 电阻的引脚上方以放置 VCC 部件。 单击微控制器 VDD 上方的区域。 在 元件选择历史记录 部分中,选择 VCC 并将其放在 VDD 引脚旁边。 再次重 复添加过程,并将 VCC 部分放在 MYCONN3 的 VCC 引脚上方。 如果需要,可 以移动引用和值。 30. 重复添加引脚步骤,但这次选择 GND 部分。 将 GND 部分放在 MYCONN3 的 GND 引脚下。 在微控制器的 VSS 引脚左侧放置另一个 connections-in-kicad(总线-连接-在-kicad),Bus Connections in KiCad (KiCad 中的总线连接)》部分将解释如何使用总线部分。 32. 单击微控制器引脚7末端的小圆圈,然后单击 LED 引脚1上的小圆圈。 在绘制 导线时单击一次以创建拐角。 您可以在放置连接时放大。 注意 如果要重新定位连线元件,重要的是使用 [g](抓取)而不是 [m](移0 码力 | 59 页 | 574.65 KB | 1 年前3 KiCad 5.1 快速入门 。 单击确定关闭符号库窗口。 21. 重复添加元件步骤,但这次选择 microchip_pic12mcu 库而不是 设备 库并选择 PIC12C508A-ISN 元件。 22. 将鼠标悬停在微控制器元件上。 请注意,[x] 和 [y] 再次翻转元件。 保持符号 围绕Y轴镜像,使引脚 G0 和 G1 指向右侧。 23. 重复添加元件步骤,这次选择 设备 库并从中选择 LED 元件。 24. 电阻的引脚上方以放置 VCC 部件。 单击微控制器 VDD 上方的区域。 在 元件选择历史记录 部分中,选择 VCC 并将其放在 VDD 引脚旁边。 再次重 复添加过程,并将 VCC 部分放在 MYCONN3 的 VCC 引脚上方。 如果需要,可 以移动引用和值。 30. 重复添加引脚步骤,但这次选择 GND 部分。 将 GND 部分放在 MYCONN3 的 GND 引脚下。 在微控制器的 VSS 引脚左侧放置另一个 connections-in-kicad(总线-连接-在-kicad),Bus Connections in KiCad (KiCad 中的总线连接)》部分将解释如何使用总线部分。 32. 单击微控制器引脚7末端的小圆圈,然后单击 LED 引脚1上的小圆圈。 在绘制 导线时单击一次以创建拐角。 您可以在放置连接时放大。 注意 如果要重新定位连线元件,重要的是使用 [g](抓取)而不是 [m](移0 码力 | 59 页 | 574.65 KB | 1 年前3 FISCO BCOS 2.7.2 中文文档--caliper-workspace Workspace directory that contains all configuration information [string] 发送速率控制器类型、性能监视器类型等; –caliper-networkconfig:用于指 定网络配置文件,网络配置文件中会指定Caliper与受测系统的连接方式及要 部署测试的合约等。 3. 自定义测试用例 的get接口和set接口进行测试。在每一轮测试中,可以通过txNumber或 txDuration字段指定测试的交易发送数量或执行时间,并通过rateControl字 段指定交易发送时的速率控制器,在本节的示例中,使用了QPS为1000的匀 速控制器,更多速率控制器的介绍可以参考官方文档 [https://hyperledger.github.io/caliper/v0.2/getting-started/]。 性能监视器配置 部署“存储类智能合约”后必须转移合约所有权关系给控制器类智能合约,存 储类合约方法如下: function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); 上述“newOwner”参数必须为对应的“控制器合约”地址。这样,“存储类智能0 码力 | 2520 页 | 211.87 MB | 1 年前3 FISCO BCOS 2.7.2 中文文档--caliper-workspace Workspace directory that contains all configuration information [string] 发送速率控制器类型、性能监视器类型等; –caliper-networkconfig:用于指 定网络配置文件,网络配置文件中会指定Caliper与受测系统的连接方式及要 部署测试的合约等。 3. 自定义测试用例 的get接口和set接口进行测试。在每一轮测试中,可以通过txNumber或 txDuration字段指定测试的交易发送数量或执行时间,并通过rateControl字 段指定交易发送时的速率控制器,在本节的示例中,使用了QPS为1000的匀 速控制器,更多速率控制器的介绍可以参考官方文档 [https://hyperledger.github.io/caliper/v0.2/getting-started/]。 性能监视器配置 部署“存储类智能合约”后必须转移合约所有权关系给控制器类智能合约,存 储类合约方法如下: function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); 上述“newOwner”参数必须为对应的“控制器合约”地址。这样,“存储类智能0 码力 | 2520 页 | 211.87 MB | 1 年前3 FISCO BCOS 2-dev 中文文档工作目录,如果没有绑定工作 目录,可以通过该选项动态指定工作目录; –caliper-benchconfig:用于指定 测试配置文件,测试配置文件中包含测试的具体参数,如交易的发送方式、 发送速率控制器类型、性能监视器类型等; –caliper-networkconfig:用于指 定网络配置文件,网络配置文件中会指定Caliper与受测系统的连接方式及要 部署测试的合约等。 3. 自定义测试用例 的get接口和set接口进行测试。在每一轮测试中,可以通过txNumber或 txDuration字段指定测试的交易发送数量或执行时间,并通过rateControl字 段指定交易发送时的速率控制器,在本节的示例中,使用了QPS为1000的匀 速控制器,更多速率控制器的介绍可以参考官方文档 [https://hyperledger.github.io/caliper/v0.2/getting-started/]。 性能监视器配置 工作目录,如果没有绑定工作 目录,可以通过该选项动态指定工作目录; –caliper-benchconfig:用于指定 测试配置文件,测试配置文件中包含测试的具体参数,如交易的发送方式、 发送速率控制器类型、性能监视器类型等; –caliper-networkconfig:用于指 定网络配置文件,网络配置文件中会指定Caliper与受测系统的连接方式及要 部署测试的合约等。 三、自定义测试用例0 码力 | 2378 页 | 204.39 MB | 1 年前3 FISCO BCOS 2-dev 中文文档工作目录,如果没有绑定工作 目录,可以通过该选项动态指定工作目录; –caliper-benchconfig:用于指定 测试配置文件,测试配置文件中包含测试的具体参数,如交易的发送方式、 发送速率控制器类型、性能监视器类型等; –caliper-networkconfig:用于指 定网络配置文件,网络配置文件中会指定Caliper与受测系统的连接方式及要 部署测试的合约等。 3. 自定义测试用例 的get接口和set接口进行测试。在每一轮测试中,可以通过txNumber或 txDuration字段指定测试的交易发送数量或执行时间,并通过rateControl字 段指定交易发送时的速率控制器,在本节的示例中,使用了QPS为1000的匀 速控制器,更多速率控制器的介绍可以参考官方文档 [https://hyperledger.github.io/caliper/v0.2/getting-started/]。 性能监视器配置 工作目录,如果没有绑定工作 目录,可以通过该选项动态指定工作目录; –caliper-benchconfig:用于指定 测试配置文件,测试配置文件中包含测试的具体参数,如交易的发送方式、 发送速率控制器类型、性能监视器类型等; –caliper-networkconfig:用于指 定网络配置文件,网络配置文件中会指定Caliper与受测系统的连接方式及要 部署测试的合约等。 三、自定义测试用例0 码力 | 2378 页 | 204.39 MB | 1 年前3 FISCO BCOS 2.9.0 中文文档工作目录,如果没有绑定工作 目录,可以通过该选项动态指定工作目录; –caliper-benchconfig:用于指定测试配置文件,测试配置文件中包含测试的 具体参数,如交易的发送方式、发送速率控制器类型、性能监视器类型等; –caliper-networkconfig:用于指定网络配置文件,网络配置文件中会指定 Caliper与受测系统的连接方式及要部署测试的合约等。 2.3. 自定义测试用例 的get接口和set接口进行测试。在每一轮测试中,可以通过txNumber或 txDuration字段指定测试的交易发送数量或执行时间,并通过rateControl字 段指定交易发送时的速率控制器,在本节的示例中,使用了QPS为1000的匀 速控制器,更多速率控制器的介绍可以参考官方文档 [https://hyperledger.github.io/caliper/v0.2/getting-started/]。 性能监视器配置 部署“存储类智能合约”后必须转移合约所有权关系给控制器类智能合约,存 储类合约方法如下: function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); 上述“newOwner”参数必须为对应的“控制器合约”地址。这样,“存储类智能0 码力 | 2649 页 | 201.08 MB | 1 年前3 FISCO BCOS 2.9.0 中文文档工作目录,如果没有绑定工作 目录,可以通过该选项动态指定工作目录; –caliper-benchconfig:用于指定测试配置文件,测试配置文件中包含测试的 具体参数,如交易的发送方式、发送速率控制器类型、性能监视器类型等; –caliper-networkconfig:用于指定网络配置文件,网络配置文件中会指定 Caliper与受测系统的连接方式及要部署测试的合约等。 2.3. 自定义测试用例 的get接口和set接口进行测试。在每一轮测试中,可以通过txNumber或 txDuration字段指定测试的交易发送数量或执行时间,并通过rateControl字 段指定交易发送时的速率控制器,在本节的示例中,使用了QPS为1000的匀 速控制器,更多速率控制器的介绍可以参考官方文档 [https://hyperledger.github.io/caliper/v0.2/getting-started/]。 性能监视器配置 部署“存储类智能合约”后必须转移合约所有权关系给控制器类智能合约,存 储类合约方法如下: function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); 上述“newOwner”参数必须为对应的“控制器合约”地址。这样,“存储类智能0 码力 | 2649 页 | 201.08 MB | 1 年前3 FISCO BCOS 2.8.0 中文文档工作目录,如果没有绑定工作 目录,可以通过该选项动态指定工作目录; –caliper-benchconfig:用于指定 测试配置文件,测试配置文件中包含测试的具体参数,如交易的发送方式、 发送速率控制器类型、性能监视器类型等; –caliper-networkconfig:用于指 定网络配置文件,网络配置文件中会指定Caliper与受测系统的连接方式及要 部署测试的合约等。 2.3. 自定义测试用例 的get接口和set接口进行测试。在每一轮测试中,可以通过txNumber或 txDuration字段指定测试的交易发送数量或执行时间,并通过rateControl字 段指定交易发送时的速率控制器,在本节的示例中,使用了QPS为1000的匀 速控制器,更多速率控制器的介绍可以参考官方文档 [https://hyperledger.github.io/caliper/v0.2/getting-started/]。 性能监视器配置 部署“存储类智能合约”后必须转移合约所有权关系给控制器类智能合约,存 储类合约方法如下: function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); 上述“newOwner”参数必须为对应的“控制器合约”地址。这样,“存储类智能0 码力 | 2534 页 | 212.43 MB | 1 年前3 FISCO BCOS 2.8.0 中文文档工作目录,如果没有绑定工作 目录,可以通过该选项动态指定工作目录; –caliper-benchconfig:用于指定 测试配置文件,测试配置文件中包含测试的具体参数,如交易的发送方式、 发送速率控制器类型、性能监视器类型等; –caliper-networkconfig:用于指 定网络配置文件,网络配置文件中会指定Caliper与受测系统的连接方式及要 部署测试的合约等。 2.3. 自定义测试用例 的get接口和set接口进行测试。在每一轮测试中,可以通过txNumber或 txDuration字段指定测试的交易发送数量或执行时间,并通过rateControl字 段指定交易发送时的速率控制器,在本节的示例中,使用了QPS为1000的匀 速控制器,更多速率控制器的介绍可以参考官方文档 [https://hyperledger.github.io/caliper/v0.2/getting-started/]。 性能监视器配置 部署“存储类智能合约”后必须转移合约所有权关系给控制器类智能合约,存 储类合约方法如下: function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); 上述“newOwner”参数必须为对应的“控制器合约”地址。这样,“存储类智能0 码力 | 2534 页 | 212.43 MB | 1 年前3 FISCO BCOS 2.6.0 中文文档工作目录,如果没有绑定工作 目录,可以通过该选项动态指定工作目录; –caliper-benchconfig:用于指定 测试配置文件,测试配置文件中包含测试的具体参数,如交易的发送方式、 发送速率控制器类型、性能监视器类型等; –caliper-networkconfig:用于指 定网络配置文件,网络配置文件中会指定Caliper与受测系统的连接方式及要 部署测试的合约等。 三、自定义测试用例 约 的get接口和set接口进行测试。在每一轮测试中,可以通过txNumber或 txDuration字段指定测试的交易发送数量或执行时间,并通过rateControl字 段指定交易发送时的速率控制器,在本节的示例中,使用了QPS为1000的匀 --- test: name: Hello World description: This is a helloworld benchmark of 2:2375/node1 - http://192.168.1.3:2375/node2 - http://192.168.1.4:2375/node3 interval: 0.1 速控制器,更多速率控制器的介绍可以参考官方文档 [https://hyperledger.github.io/caliper/vLatest/rate-controllers/]。 性能监视器配置 monit0 码力 | 2383 页 | 18.83 MB | 1 年前3 FISCO BCOS 2.6.0 中文文档工作目录,如果没有绑定工作 目录,可以通过该选项动态指定工作目录; –caliper-benchconfig:用于指定 测试配置文件,测试配置文件中包含测试的具体参数,如交易的发送方式、 发送速率控制器类型、性能监视器类型等; –caliper-networkconfig:用于指 定网络配置文件,网络配置文件中会指定Caliper与受测系统的连接方式及要 部署测试的合约等。 三、自定义测试用例 约 的get接口和set接口进行测试。在每一轮测试中,可以通过txNumber或 txDuration字段指定测试的交易发送数量或执行时间,并通过rateControl字 段指定交易发送时的速率控制器,在本节的示例中,使用了QPS为1000的匀 --- test: name: Hello World description: This is a helloworld benchmark of 2:2375/node1 - http://192.168.1.3:2375/node2 - http://192.168.1.4:2375/node3 interval: 0.1 速控制器,更多速率控制器的介绍可以参考官方文档 [https://hyperledger.github.io/caliper/vLatest/rate-controllers/]。 性能监视器配置 monit0 码力 | 2383 页 | 18.83 MB | 1 年前3 FISCO BCOS 2.9.0 中文文档工作目录,如果没有绑定工作 目录,可以通过该选项动态指定工作目录; –caliper-benchconfig:用于指定测试配置文件,测试配置文件中包含测试的 具体参数,如交易的发送方式、发送速率控制器类型、性能监视器类型等; –caliper-networkconfig:用于指定网络配置文件,网络配置文件中会指定 Caliper与受测系统的连接方式及要部署测试的合约等。 2.3. 自定义测试用例 的get接口和set接口进行测试。在每一轮测试中,可以通过txNumber或 txDuration字段指定测试的交易发送数量或执行时间,并通过rateControl字 段指定交易发送时的速率控制器,在本节的示例中,使用了QPS为1000的匀 速控制器,更多速率控制器的介绍可以参考官方文档 [https://hyperledger.github.io/caliper/v0.2/getting-started/]。 性能监视器配置 部署“存储类智能合约”后必须转移合约所有权关系给控制器类智能合约,存 储类合约方法如下: function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); 上述“newOwner”参数必须为对应的“控制器合约”地址。这样,“存储类智能0 码力 | 2649 页 | 201.08 MB | 1 年前3 FISCO BCOS 2.9.0 中文文档工作目录,如果没有绑定工作 目录,可以通过该选项动态指定工作目录; –caliper-benchconfig:用于指定测试配置文件,测试配置文件中包含测试的 具体参数,如交易的发送方式、发送速率控制器类型、性能监视器类型等; –caliper-networkconfig:用于指定网络配置文件,网络配置文件中会指定 Caliper与受测系统的连接方式及要部署测试的合约等。 2.3. 自定义测试用例 的get接口和set接口进行测试。在每一轮测试中,可以通过txNumber或 txDuration字段指定测试的交易发送数量或执行时间,并通过rateControl字 段指定交易发送时的速率控制器,在本节的示例中,使用了QPS为1000的匀 速控制器,更多速率控制器的介绍可以参考官方文档 [https://hyperledger.github.io/caliper/v0.2/getting-started/]。 性能监视器配置 部署“存储类智能合约”后必须转移合约所有权关系给控制器类智能合约,存 储类合约方法如下: function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); 上述“newOwner”参数必须为对应的“控制器合约”地址。这样,“存储类智能0 码力 | 2649 页 | 201.08 MB | 1 年前3
共 20 条
- 1
- 2














