版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Oracle12c数据库基础教程(第3版)附录A实验 PAGE302 PAGE303 PAGE288附录实验实验1搭建以太坊私有链目的和要求(1)了解区块链的技术基础。(2)了解以太坊的工作原理和总体架构。(3)了解以太坊的数据结构与存储方式(4)了解以太坊Gas、以太币、账户、钱包和交易等概念。(5)了解智能合约的概念。(6)练习搭建本书大的测试环境。(7)练习搭建以太坊私有链。实验准备了解以太坊的总体架构可以分为存储层、网络层、合约层和应用层,了解每一层的作用。了解以太坊的数据存储可以分为状态数据、区块链和底层数据。了解使用以太坊网络是需要支付手续费的。以太坊的手续费有一个很特别的名词——Gas(燃料)。了解以太坊采用PoW共识算法。但是为了避免PoW算法所带来的巨大能源损耗和性能低下等问题,以太坊还引入了PoS算法。PoS算法类似于股东机制。拥有的股份越多,获得记账权的几率越大。实验内容本实验主要包含以下内容。(1)练习搭建测试环境。(2)练习安装以太坊客户端Geth。(3)练习操作以太坊私有链。1.搭建测试环境练习按照如下步骤搭建测试环境。(1)下载OracleVirtualBox虚拟机软件。(2)在Windows中安装OracleVirtualBox。(3)参照2.3.1节设置CentOS虚拟机的静态IP地址。(4)参照2.3.1节练习在OracleVirtualBox中安装CentOS虚拟机。(5)参照2.3.1节练习使用WinSCP工具在宿主机与CentOS服务器之间传输文件。(6)参照2.3.1节练习在CentOS虚拟机上搭建网站。(7)参照2.3.1节练习在CentOS虚拟机上安装图形化界面。2.安装以太坊客户端Geth练习按照如下步骤安装以太坊客户端Geth。(1)参照2.3.2节安装Golang。(2)参照2.3.2节安装gcc。(3)参照2.3.2节设置下载代理。(4)参照2.3.2节下载GO版本的以太坊源码。(5)参照2.3.2节安装GO版本的以太坊源码。(5)参照2.3.2节将geth文件所在的目录添加至环境变量PATH中。(6)执行gethversion命令查看Geth的版本,确认以太坊客户端Geth已经成功安装。3.操作以太坊私有链练习按照如下步骤操作以太坊私有链。(1)参照2.3.3节练习使用一个genesis.json文件来定义创世区块。(2)参照2.3.4节练习创建开发者账户。(3)参照2.3.5节练习以开发者模式启动私有链。(4)参照2.3.6节练习查看账户。(5)参照2.3.6节练习创建账户。(6)参照2.3.6节练习查看账户余额。(7)参照2.3.7节练习在私有链中挖矿。(8)参照2.3.8节练习在私有链中进行转账操作。实验2Solidity基础编程目的和要求(1)了解使用Solidity语言的基本语法。(2)学习使用实时在线Solidity编辑器Remix编写Solidity程序。(3)学习使用VisualStudioCode开发Solidity程序。(4)学习Solidity基础编程的方法实验准备(1)了解Remix是以太坊提供的一个实时在线Solidity编译器。无需安装和配置任何软件,即可完成以太坊智能合约的在线开发、在线编译、在线测试、在线部署。(2)了解VisualStudioCode是微软推出的跨平台编辑器,支持各种编程语言的插件。可以使用VisualStudioCode开发Solidity程序(3)了解常量和变量的概念和定义方法。(4)了解Solidity语言的数据类型。(5)了解Solidity语言常用语句的使用方法。(6)了解Solidity语言智能合约和函数的编程方法。实验内容本实验主要包含以下内容。(1)练习使用实时在线Solidity编辑器Remix。(2)练习使用VisualStudioCode开发Solidity程序。(3)练习Solidity语言的基础编程。(4)练习Solidity语言的常用语句编程。(5)练习Solidity语言的智能合约与函数编程。1.实时在线Solidity编辑器Remix参照下面的步骤练习实时在线Solidity编辑器Remix。(1)访问RemixIDE中文版的网址。(2)在Remix页面的文件管理器中点击按钮。在弹出的输入文件名对话框中输入hello.sol单击OK按钮,hello.sol会出现在browser文件夹下。同时在文件编辑器中打开一个标题为browser/hello.sol的编辑窗口。(3)Solidity基础编程参照例3-1输入hello.sol的代码。(4)在“编译”选项卡中,查看支持的编译器版本。(5)按下Ctrl+S按钮或单击“开始编译”按钮,即可对程序进行编译。(6)将例3-1中的public删除,按下Ctrl+S按钮,确认会在错误代码行的前面出现一个图标,标识此行代码有错误。2.使用VisualStudioCode开发Solidity程序参照下面的步骤练习使用VisualStudioCode开发Solidity程序。(1)参照3.1.3节下载和安装VisualStudioCode。(2)参照3.1.3节安装solidity插件。(3)在编辑窗口中输入字符例如,输入pra,确认会触发自动提示的功能。。(4)参照3.1.3节练习在VisualStudioCode中借助solc编译器对Solidity程序进行编译。3.Solidity基础编程参照下面的步骤练习Solidity基础编程。(1)参照例3-2练习使用Solidity常量。(2)参照例3-3练习Solidity字符串编程。(3)参照例3-4练习使用address地址类型编程。(4)参照例3-5练习枚举类型编程。(5)参照例3-6练习结构体类型编程。(6)参照例3-7练习映射类型编程。(7)参照例3-8练习定长数组编程。(8)参照例3-9练习变长数组编程。4.Solidity语言的常用语句编程参照下面的步骤练习Solidity语言的常用语句编程。(1)参照例4-1练习使用赋值语句。(2)参照例4-2练习使用if语句。(3)参照例4-3练习使用if…elseif…else…语句。(4)参照例4-4练习for语句。(5)参照例4-5练习使用while语句。(6)参照例4-6练习使用do…while…语句。(7)参照例4-7练习在for语句中使用continue语句。(8)参照例4-8练习使用break语句结束循环。5.Solidity语言的常用语句编程参照下面的步骤练习Solidity语言的常用语句编程。(1)参照例5-1练习公有常量getter访问器的用法。(2)参照例5-2练习使用智能合约的构造函数。(3)参照例5-3练习实现智能合约之间的继承。(4)参照例5-4、例5-5练习定义和使用函数。(5)参照例5-5练习使用while语句。(6)参照例5-6练习使用payable修饰词。(7)参照例5-7练习使用函数修改器。(8)参照例5-8和5-9练习使用函数的参数。(9)参照例5-10练习使用自毁函数。(10)参照例5-11练习函数重载编程。(11)参照例5-12练习使用函数库。(12)参照例5-13和例5-14练习使用Fallback函数。(13)参照例5-15和例5-16练习使用抽象合约和接口。(14)参照例5-15和例5-16练习使用抽象合约和接口。(15)参照例5-17练习Revert函数。实验3智能合约与函数编程目的和要求(1)了解智能合约的状态变量、构造函数和智能合约之间的继承等概念。(2)了解定义函数的方法,以及函数修饰词和函数参数的。(3)学习自毁函数、函数重载和内置函数的。(4)学习开发用户系统微服务的方法。实验准备(1)了解每个智能合约都可以包含状态变量、函数、函数修饰词和事件等声明。而且可以从其他智能合约继承一个智能合约。(2)了解状态变量的可见性包括public、private和internal。(3)了解一个智能合约中只能有一个构造函数。构造函数在实例化智能合约时会自动被调用。(4)了解继承智能合约后,子合约会自然拥有父合约中状态变量和公有、内部函数的访问权。(5)了解函数修饰词包括可见性修饰词、状态修饰词和payable修饰词和自定义修饰词(函数修改器)等类型。(6)了解自毁函数是一个特殊的函数。它有着固定的名称和固定的参数。用于销毁当前智能合约,并将当前合约账户中的余额发送到指定的地址。自毁函数的名称为selfdestruct,它有且只有一个address参数,用于指定接收当前合约账户余额的账户地址。(7)了解在Solidity中,函数库(Libraries)是函数的集合。它类似于智能合约,也对应一个地址,但是函数库只能部署一次。(8)了解抽象合约和接口都可以定义设计智能合约的规则,指定其子合约必须实现的函数。(9)了解以太坊使用状态回退机制来处理异常。如果发生异常,则当前的消息调用和子消息调用所产生的所有状态变化都将被撤销并且返回调用者一个报错信号。实验内容本实验主要包含以下内容。(1)练习智能合约基础编程。(2)练习函数编程。1.智能合约编程参照下面的步骤练习智能合约基础编程。(1)参照例5-1练习公有常量getter访问器的用法。(2)参照例5-2练习构造函数的用法。(3)参照例5-3练习智能合约之间的继承。(4)参照例5-15练习抽象合约的使用方法。(5)参照例5-16练习合约的多重继承。2.函数编程参照下面的步骤练习函数编程。(1)参照例5-4和例5-5练习使用智能合约的函数。(2)参照例5-6练习智能合约之间的继承。(3)参照例5-9练习函数引用类型参数的使用方法。(4)参照例5-10练习自毁函数的使用方法。(5)参照例5-11练习函数重载的使用方法。(6)参照例5-12练习函数库的使用方法。(7)参照例5-13和例5-14练习Fallback函数的使用方法。(8)参照例5-17练习使用revert()函数标识错误、恢复当前调用的方法。实验4Web3.js编程目的和要求(1)了解Web3.js的基本情况。(2)学习安装和使用Web3.js。(3)学习Web3.js区块编程。(4)学习Web3.js以太坊账户与交易编程。(5)学习Web3.js智能合约编程。实验准备(1)了解Web3.js是以太坊提供的JavaScriptAPI。使用Web3.js可以与以太坊节点进行通信,例如获取节点状态,获取账号信息,调用合约、监听合约事件等。(2)了解JavaScriptPromise对象是异步编程的一种解决方法,在Web3.js中大量使用。(3)了解ABI是ApplicationBinaryInterface的缩写。在Web3.js中,可以通过ABI调用智能合约。(4)了解字节码是智能合约的可执行代码。。使用字节码时有2种情形,一种是智能合约定义的字节码,在部署合约时,会用到合约的字节码;另一种字节码在调用合约时会用到,由函数选择器和参数编码2个部分组成。(5)参照2.4节搭建测试环境。(6)确保在CentOS虚拟机中已经安装并启动Apache服务。实验内容本实验主要包含以下内容。(1)练习安装和使用Web3.js。(2)练习JavaScriptPromise对象编程。(3)练习Web3.js区块编程。(4)练习Web3.js以太坊账户与交易编程。(5)练习Web3.js智能合约编程。1.安装和使用Web3.js参照下面的步骤练习安装和使用Web3.js。(1)参照6.1.2节安装gcc和gcc-c++。(2))参照6.1.2节安装node.js。(3)使用npm命令安装Web3.js。(4)参照6.1.2节编辑connect.js,然后命令通过node.js运行connect.js,连接到以太坊私有链。确认可以看到以太坊私有链的版本信息。(5)参照例6-1练习在网页中使用Web3.js访问以太坊私有链的方法。(6)注意观察Eureka服务器主页中各区域中显示的信息。(7)在application.yml中,修改eureka.environment和eureka.datacenter的配置值。重新启动项目,访问Eureka服务器的主页,确认SystemStatus区域的内容随配置项而发生了变化。2.JavaScriptPromise对象编程参照下面的步骤练习JavaScriptPromise对象编程。(1)参照例6-2练习手动创建Promise对象的方法。(2)参照例6-3练习在网页中异步操作返回Promise对象的方法。3.练习Web3.js区块编程参照下面的步骤练习开发具有安全机制的Eureka服务器程序。(1)参照例6-4练习使用Web3.js获取当前区块编号的方法。(2)参照例6-5练习使用Web3.js获取最新区块详情的方法。(3)参照例6-6练习使用Web3.js获取当前以太坊节点账户列表的方法。(4)参照例6-7练习使用Web3.js获取币基账户地址的方法。(5)参照例6-8练习在网页中使用Web3.js获取币基账户余额的方法。(6)参照例6-9练习使用Web3.js获取指定区块中交易数量的方法。(7)参照例6-10练习在网页中使用Web3.js获取指定区块中交易详情的方法。(8)参照例6-11练习在网页中使用web3.eth.getTransaction()方法根据交易哈希获取交易对象的方法。(9)参照例6-12练习在网页中使用web3.eth.getTransactionReceipt()方法根据交易哈希获取交易对象的方法。(10)参照例6-13练习在网页中使用Web3.js发起转账交易的方法。(11)参照例6-14练习在网页中使用web3.eth.estimateGas()方法估算交易的Gas用量。4.练习Web3.js以太坊账户与交易编程参照下面的步骤练习Web3.js以太坊账户与交易编程。(1)参照例6-6练习使用Web3.js获取当前以太坊节点账户列表的方法。(2)参照例6-7练习使用Web3.js获取币基账户地址的方法。(3)参照例6-8练习在网页中使用Web3.js获取币基账户余额的方法。(4)参照例6-9练习使用Web3.js获取指定区块中交易数量的方法。(5)参照例6-10练习在网页中使用Web3.js获取指定区块中交易详情的方法。(6)参照例6-11练习在网页中使用web3.eth.getTransaction()方法根据交易哈希获取交易对象的方法。(7)参照例6-12练习在网页中使用web3.eth.getTransactionReceipt()方法根据交易哈希获取交易对象的方法。(8)参照例6-13练习在网页中使用Web3.js发起转账交易的方法。(9)参照例6-14练习在网页中使用web3.eth.estimateGas()方法估算交易的Gas用量。5.练习Web3.js智能合约编程参照下面的步骤练习Web3.js以太坊账户与交易编程。(1)参照如下步骤练习使用Solidity语言的编译器solc自动生成智能合约ABI代码。安装solc:npminstall-gsolc安装成功后执行下面的命令查看solc的版本。solcjs-V在/usr/local/web3下创建demo.sol,代码如下:pragmasolidity^0.5.1;//声明合约contractDemo{functionsum_for(uint_max)publicpurereturns(uint){uint_i;uint_sum=0;for(_i=0;_i<=_max;_i++){_sum+=_i;}return_sum;}}注意根据编译器solc的版本修改合约demo.sol的版本。然后执行下面的命令可以生成demo.sol的ABI代码。cd/usr/local/web3/solcjsdemo.sol–abi确认生成的ABI代码保存在demo_sol_Demo.abi文件。(2)参照6.4.1节练习在Remix中生成智能合约的ABI代码。(3)参照6.4.1节练习生成智能合约的函数选择器。(4)参照例6-15、例6-16和例6-17练习生成智能合约字节码的方法。(5)参照6.4.3节练习在VisualStudioCode中生成智能合约的ABI和字节码。(6)参照6.4.4节练习使用curl命令通过JSON-RPC获取币基账户地址。(7)参照6.4.4节练习使用curl命令通过JSON-RPC获取当前账户的余额。(8)参照例6-18练习将智能合约部署在以太坊网络中。(9)参照例6-19练习调用智能合约函数。(10)参照例6-20练习在Java语言中通过JSON-RPC与以太坊智能合约交互。(11)参照例6-21练习部署智能合约,然后创建对应的合约对象。(12)参照例6-22练习通过call()方法调用合约函数的方法。(13)参照例6-23练习通过send()方法调用合约函数的方法。(14)参照6.6.1节练习开发Web3.js应用实例:明日之星投票。实验5事件与日志编程目的和要求(1)了解事件和事件模型的概念。(2)了解Solidity语言中日志的概念。(3)学习在Solidity语言中事件编程的方法。(4)学习。在Solidity语言中日志编程的方法。实验准备首先要了解事件是以太坊网络的基本功能,借助事件可以将数据记录为日志,保存在区块链上。事件还是与智能合约的外部进行交互的渠道。了解在Solidity语言中,可以使用event关键字来定义一个事件,使用emit关键字触发事件。了解在Solidity语言中可以借助事件来记录日志。每个事件都会以LOG字节码的形式记录日志。了解Solidity提供了一些底层日志接口。通过调用log0、log1、log2、log3、log4、……函数可以直接访问底层的日志组件。logi函数可以有i+1个类型为bytes32的参数。实验内容本实验主要包含以下内容。(1)练习在Web3.js中监听事件。(2)练习日志编程。1.在Web3.js中监听事件参照下面的步骤练习在Web3.js中监听事件。(1)参照例7-1练习在HTML页面中通过Web3.js订阅合约事件的方法。(2)参照例7-2练习在HTML页面中通过Web3.js单次订阅合约事件的方法。1.日志编程参照下面的步骤练习日志编程。(1)参照7.2.1节练习在Remix中查看日志数据的方法。(2)参照例7-4练习通过底层日志接口记录日志。(3)参照例7-5练习调用web3.eth.getTransactionReceipt()方法在交易中检索日志的方法。实验6以太坊DApp开发框架Truffle目的和要求(1)了解Truffle开发框架的基本特性。(2)了解Truffle项目管理的方法。(3)了解在Truffle框架中实现智能合约编程的方法。(4)学习Truffle内置了测试框架的使用方法。(5)通过实例学习使用Truffle框架开发以太坊智能合约DApp的方法。实验准备首先要了解Truffle是目前最流行的基于以太坊虚拟机的开发环境和测试框架。了解Truffle开发框架内置智能合约编译、链接、部署和二进制管理等功能。了解在Truffle框架中项目模板被称为TruffleBoxes,其中提供了一组很有用的项目模板。项目模板中包含了一种类型DApp的基本框架。了解Truffle内置了一个自动测试的框架,可以很便捷地对智能合约进行测试。实验内容本实验主要包含以下内容。(1)练习安装和使用个人区块链Ganache。(2)练习Truffle项目管理。(3)练习智能合约编程。(4)练习在在Truffle框架中使用MetaMask。(5)练习使用TruffleReact框架开发基于以太坊智能合约的DApp。(6)练习在Truffle框架中测试合约。(7)练习编写Truffle示例项目宠物商店pet-shop。1.安装和使用个人区块链Ganache参照下面步骤练习安装和使用个人区块链Ganache:(1)从Truffle官网中的Ganache主页下载Ganache。(2)使用Windows应用安装程序打开下载得到的安装文件,根据提示安装Ganache。(3)启动Ganache后,单击NEWWORKSPACE按钮练习创建一个以太坊工作空间。确认创建工作空间后,可以看到Ganache区块链的详情。详情窗口中默认显示一组Ganache区块链账号的信息。每个账号中有100ether。(4)在CentOS中执行如下命令,全局安装ganache-cli。npminstall-gganache-cli(5)执行ganache-cli命令可以在命令行启动Ganache测试区块链。确认ganache-cli测试区块链提供了10个测试账号,每个账号中包含100ETH的测试币。2.Truffle项目管理参照下面的步骤练习开发认证服务器项目。(1)参照8.2.1节练习下载项目模板MetaCoin,了解项目中包含的目录和文件。(2)参照8.2.1节练习使用,truffleinit命令创建空白Truffle项目,了解空白项目中包含的目录和文件。(3)参照8.2.1节,打开Truffle项目的配置文件truffle-config.js了解各配置项的情况。(4)参照8.2.3节练习使用trufflecompile命令编译合约。(5)参照8.2.4节练习使用trufflemigrate命令部署合约。3.智能合约编程参照下面的步骤练习智能合约编程。(1)在项目模板MetaCoin中查看合约MetaCoin的内容,了解合约中包含的函数。(2)执行ganache-cli命令,启动Ganache个人测试链。(3)在Truffle项目目录下执行truffleconsole命令可以打开Truffle控制台。(4)在控制台中执行如下语句,确认可以查看合约抽象的内容:truffle(development)>letinstance=awaitMetaCoin.deployed()truffle(development)>instance(5)在Truffle控制台中执行如下语句,确认可以调用合约MetaCoin的sendCoin()函数。letinstance=awaitMetaCoin.deployed()letaccounts=awaitweb3.eth.getAccounts()instance.sendCoin(accounts[1],10,{from:accounts[0]})(6)在Truffle控制台中执行如下语句,确认可以部署合约MetaCoin并查看合约地址。letInstance=awaitMetaCoin.new()Instance.address(7)在Truffle控制台中执行如下语句,练习从第一个测试账户向合约MetaCoin转账。constinstance=awaitMyContract.deployed();constresult=awaitinstance.sendTransaction({from:accounts[0],web3.utils.toWei(1,"ether")}););(8)在Truffle项目的目录下执行truffledevelop命令运行TruffleDevelop控制台工具。确认TruffleDevelop启动了如下测试区块链,地址如下::9545/(9)参照8.3.3节运行项目MetaCoin。在CentOS虚拟机中进入桌面模式,打开fireFox浏览器,浏览如下URL:http://localhost:8080确认可以看到MetaCoin的示例页面。4.在Truffle框架中使用MetaMask参照下面的步骤练习在Truffle框架中使用MetaMask。(1)参照8.3.4节练习在Chrome浏览器中安装MetaMask钱包。(2)参照8.3.4节练习在CentOS虚拟机的Firefox浏览器中安装MetaMask钱包。(3)Ganache测试区块链,在MetaMask钱包中导入Ganache测试账户。确认可以看到账户中有100ETH的测试以太币。(5)项目MetaCoin。在CentOS虚拟机的Firefox浏览器中访问MetaCoin的示例页面。(6)从Ganache网络的测试账户中再选择不同于默认账户的另外一个账户作为接收转账的账户,将其复制到ToAddress文本框中,在Amount文本框中输入1,然后单击SendMetaCoin按钮,会在MetaMask钱包弹出一个确认支付交易的Gas。单击“确认”按钮完成交易。5.使用TruffleReact框架开发基于以太坊智能合约的DApp参照下面的步骤练习使用TruffleReact框架开发基于以太坊智能合约的DApp。(1)在/usr/local/truffle目录下创建react子目录,用于保存项目模板react。(2)执行下面的命令下载项目模板react。cd/usr/local/truffle/reacttruffleunboxreact(3)下载完成后后,对照表8-5了解项目模板react的Web应用中包含的前端资源文件。(5)在项目目录下运行truffledevelop,然后执行下面的命令,在内置的测试区块链中编译和部署。compilemigrate--reset编译成功后确认在client/src/contracts目录下可以生成Migrations.json和SimpleStorage.json两个文件。(6)查看并分析index.js、index.css、index.html和App.js等前端文件,了解它们的工作原理。(7)从truffledevelop列出的账户列表中选择一个账户的私钥,参照8.3.4节中介绍的方法将其导入到MetaMask钱包。确认账户中有100ETH的测试币。(8)打开另一个终端,执行如下命令,启动项目。cd/usr/local/truffle/react/clientnpmstart(9)打开Firefox浏览器,单击MetaMask图标,选择前面导入的账户。(10)访问如下URL,打开本实例的页面。http://localhost:3000(11)确认打开页面时会弹出MetaMask界面要求用户确认转账,如图8-47所示。单击“确认”按钮,完成交易。确认页面中的默认账户余额会变成5。6.在Truffle框架中测试合约参照下面的步骤练习在Truffle框架中测试合约。(1)参照8.4.1节练习在CentOS中安装Mocha测试框架。(2)参照例8-4编写Mocha测试脚本。(3)在项目react中安装Mocha,然后在项目react的目录下执行如下语句运行测试脚本:./node_modules/mocha/bin/mocha./test/test.js(4)确认可以通过测试。(5)在MetaCoin项目目录下执行ganache-cli命令,启动Ganache测试链。(6)在MetaCoin项目目录下执行trufflemigrate命令部署智能合约。(7)查看并了解项目模板MetaCoin中包含的测试脚本metacoin.js。(8)执行如下命令运行测试脚本:truffletest./test/metacoin.js(9)确认可以通过3项测试。7.编写Truffle示例项目宠物商店pet-shop参照下面的步骤练习编写Truffle示例项目宠物商店pet-shop。(1)参照8.5.1节练习从Truffle官网下载pet-shop示例项目。将下载得到的压缩包解压后,上传至/usr/local/truffle/pet-shop目录。(2)参照8.5.1节查看并了解pet-shop项目模板中包含的目录及文件。(3)参照8.5.1节在contracts目录下创建一个Adoption.sol文件,并编写其中的代码。(4)参照8.5.3节编译和部署智能合约Adoption。(5)参照8.5.3节编写入口函数init()的代码。(6)参照8.5.3节编写initWeb3()函数,用于初始化Web3库。(7)参照8.5.3节编写initContract()函数,用于初始化智能合约。(8)参照8.5.3节编写markAdopted()函数,用于从合约中获取并标记宠物的领养人账户地址。(9)参照8.5.3节编写handleAdopt()函数,用于实现在页面上单击领养按钮的功能。(10)参照8.5.3节编写应用的主要index.html。(11)参照8.5.5节安装并配置MetaMask。(12)参照8.5.6节运行应用程序。在CentOS虚拟机的桌面环境下打开Firefox,浏览如下URL:http://localhost:3000确认可以在pet-shop实例主页中查看到宠物列表及宠物的领养状态。(13)单击宠物下面的Adopt按钮可以领养该宠物。确认会弹出MetaMask面板,要求用户支付交易的手续费。单击“确认
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 癫痫病人的急救护理
- 浅谈制作课件教学课件
- 测量运动课件教学课件
- 部编版八年级地理上册第四章第二节《农业》课件
- 河南省2024九年级语文上册第一单元3我爱这土地课件新人教版
- 2.3.1共价键的极性 课件 高二上学期化学人教版(2019)选择性必修2
- 特殊药品管理应急演练
- 董氏奇穴治疗颈椎病
- 初中语文教案教学反思
- 护理专业说课稿
- 银行保险客户KYC基础信息表
- 新生儿液体外渗的处理赵静
- 城投债的2023:人口迁徙与产业模型市场预期与投资策略
- UL10368线材技术规格参照表
- JJG 1030-2007超声流量计
- 人教版音乐八年级下册-第四单元 神州音韵(四)-教案设计
- 小学研学游安全管理制度(学习生活技能资料)
- GB 30254-2013高压三相笼型异步电动机能效限定值及能效等级
- 部编版二年级上册语文课件“歪脑袋”木头桩
- 华支睾吸虫(肝吸虫)-课件
- 学生心理“一生一策”方案
评论
0/150
提交评论