区块链(一)
区块链
1、区块链基础和应用
区块链概述
下面关于区块链说话正确的是?
A:区块链有助于解决交易信任问题
B:智能合约是区块链2.0的代表技术
C:区块链就是比特币
答案:AB
区块链的组成
下面关于区块链说法正确的是
A:区块链是一个基于密码学的分布式账本
B:区块链记录的是一系列有顺序的交易
C:区块链中哈希和链式结构构成一个防篡改的数据结构
答案:ABC
区块链交易组成原理
下面关于公私钥说法正确的是
A:公钥签名,私钥验证签名
B:私钥签名,公钥验证签名
C:私钥一旦丢失还可以找系统找回
答案:B
智能合约概述
以下哪些是对智能合约的正确理解
A:智能合约可以理解为是区块链上执行的一段“程序”
B:智能合约可以智能的、自动的执行
C:智能合约是在区块链上执行的一段程序,多方同意按照智能合约的代码执行,并对资产进行处置与分配
答案:AC
以下哪些是支持图灵完备的智能合约的区块链平台?
A:以太坊网络
B:狗狗币网络
C:比特币网络
答案:A
2、智能合约基本原理与 Solidity 编程
合约的基本概念和定义
solidity智能合约的关键字是
A:contract
B:class
C:constant
答案:A
Solidity类型系统
下面说法正确的是
A:uint 和 uint32等价
B:uint 和 uint64等价
C:uint 和 uint256等价
答案:C
Solidity独特的单位系统
下列说法正确的是
A:1 seconds == 1
B:1 wei == 1
C:1 second == 1
答案:AB
单员工薪酬系统
下面关于solidity中this关键字说法正确的是?
A:this是address类型
B:this有个成员变量balance
C:合约代码中禁止使用this关键字
答案:AB
多员工薪酬系统
以下哪两个是常用的错误检测方法
A:assert
B:require
C:constant
答案:AB
动态静态数组的不同及Struct
在Solidity语言中,下列对静态数组的声明正确的是
A:uint[] a
B:uint[5] a
C:uint a[5]
答案:B
函数输入参数检查
solidity中数组如何增加新元素
A:.push()
B:.add()
C:.remove()
答案:A
数据存储机制DataLocation
下列哪个关键字与变量存储位置无关?
A:storage
B:memory
C:calldata
D:privacy
答案:D
数据结构优化
下面关于solidity中映射类型说法正确的是
A:映射类型的关键字是mapping
B:solidity中的映射类型是可以直接遍历
答案:A
可视度及合约的继承
solidity是否支持多重继承
A:是
B:否
答案:A
巧用modifier
下列语句正确的是
A:函数必须有modifier
B:函数中不能自定义modifier
C:modifier中必须有_;
答案:C
以太坊SAFEMATH
Solidity智能合约中库的关键字是
A:contract
B:library
C:safemath
答案:B
区块链运维
FISCO BCOS简介
BCOS是什么类型的链
A:私有链
B:公有链
C:联盟链
答案:C
FISCO BCOS环境搭建
第一步. 安装依赖
开发部署工具 build_chain.sh 脚本依赖于openssl, curl,使用以下命令安装openssl和curl。
apt install -y openssl curl
第二步. 创建操作目录, 下载安装脚本
以下命令,回到用户home目录,创建fisco目录,后续的操作都将在此目录下进行
回到用户home目录
cd ~
在home目录下创建fisco目录
mkdir -p fisco
进入fisco目录
cd fisco
在fisco目录下,下载脚本,通过curl命令下载脚本文件,下载成功后用chmod命令赋予脚本可执行权限
curl -#LO https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/FISCO-BCOS/FISCO-BCOS/releases/v2.7.2/build_chain.sh && chmod u+x build_chain.sh
如果下载失败,需要重复此命令下载,直到成功为止。
第三步. 搭建单群组4节点联盟链
在fisco目录下执行下面的指令,生成一条单群组4节点的FISCO链。 请确保机器的30300~30303, 20200~20203, 8545~8548端口没有被占用。
bash build_chain.sh -l 127.0.0.1:4 -p 30300,20200,8545
其中-p选项指定起始端口,分别是p2p_port,channel_port,jsonrpc_port
出于安全性和易用性考虑,v2.3.0版本最新配置将listen_ip拆分成jsonrpc_listen_ip和channel_listen_ip,但仍保留对listen_ip的解析功能,详细请参考 这里
为便于开发和体验,channel_listen_ip参考配置是 0.0.0.0 ,出于安全考虑,请根据实际业务网络情况,修改为安全的监听地址,如:内网IP或特定的外网IP。
命令执行成功会输出All completed,如下的信息。如果执行出错,请检查nodes/build.log文件中的错误信息
第四步. 启动FISCO BCOS链
启动所有节点,bash为linux系统自带的命令处理工具,下面命令由bash解析执行脚本,启动fisco区块链
bash nodes/127.0.0.1/start_all.sh
启动成功会输出类似下面内容的响应。否则请使用netstat -an | grep tcp检查机器的30300~30303, 20200~20203, 8545~8548端口是否被占用。
第五步. 检查进程
检查进程是否启动。
Linux ps (英文全拼:process status)命令用于显示当前进程的状态,类似于 windows 的任务管理器。
Linux grep 命令用于查找文件里符合条件的字符串。下面的命令意思是使用ps查看linux中正在运行的进程(ps -ef),然后找到不包含grep的进程列表(grep -v grep),再找到包含fisco-bcos的进程列表(grep fisco-bcos),中间的竖线代表管道,将上一个命令的输出,转换为下一个命令的输入。
ps -ef | grep -v grep | grep fisco-bcos
正常情况会有类似下面的输出; 如果进程数不为4,则进程没有启动(一般是端口被占用导致的)
第六步. 检查日志输出
如下,查看节点node0链接的节点数。tail 命令可用于查看文件的内容,有一个常用的参数 -f 表示查看文件尾部新增加的内容。
tail -f nodes/127.0.0.1/node0/log/log* | grep connected
正常情况会不停地输出连接信息,从输出可以看出node0与另外3个节点有连接。
按Ctrl+C按键,可结束当前命令执行。
执行下面指令,检查是否在共识
tail -f nodes/127.0.0.1/node0/log/log* | grep +++
正常情况会不停输出++++Generating seal,表示共识正常。
按Ctrl+C按键,可结束当前命令执行。
FISCO BCOS控制台安装和使用
第一步. 准备依赖
安装java,下面命令更新系统的安装源,安装默认的java jdk。
apt update
apt install -y openjdk-8-jdk
回到home目录下的fisco子目录,下载控制台程序
cd ~/fisco && curl -#LO https://gitee.com/FISCO-BCOS/console/raw/master/tools/download_console.sh && bash download_console.sh
安装需要等待一定时间,因为需要从网上下载安装包。
下载完成后,拷贝控制台配置文件,若节点未采用默认端口,请将文件中的20200替换成节点对应的channel端口。本例中,我们采用的就是默认配置安装,故直接使用样例配置文件即可。
# 最新版本控制台使用如下命令拷贝配置文件 cp -n console/conf/config-example.toml console/conf/config.toml
配置控制台证书,复制BCOS的证书到console的配置目录
cp -r nodes/127.0.0.1/sdk/* console/conf/
第二步. 启动并使用控制台
进入控制台程序所在目录,执行下面命令启动控制台
cd ~/fisco
cd ~/fisco/console && bash start.sh
用控制台部署智能合约
第一步. 编写HelloWorld合约
HelloWorld合约提供两个接口,分别是get()和set(),用于获取/设置合约变量name。合约内容如下:
第二步. 部署HelloWorld合约
为了方便用户快速体验,HelloWorld合约已经内置于控制台中,位于控制台目录下contracts/solidity/HelloWorld.sol,参考下面命令部署即可。
重新启动控制台后,在控制台输入以下指令 部署成功则返回合约地址
第三步. 调用HelloWorld合约
在控制台,调用合约
调用该命令 deploy HelloWorld
获得下面的三个信息
transaction hash:
contract address:
currentAccount:
call HelloWorld contract address(换成自己的) get
call HelloWorld contract address(换成自己的) set "Hello, FISCO BCOS"
getBlockNumber
call HelloWorld contract address(换成自己的) get
FISCO BCOS环境熟悉
FISCO BCOS控制台基本用法增强
本实验环境已经搭建好一个FISCO BCOS区块链节点环境,并配置好了控制台,我们可以基于控制台访问FISCO BCOS节点,实现查询区块链状态、部署调用合约等功能,能够快速获取到所需要的信息。
启动本实验环境后,工作目录为/fiscozj,可以执行如下命令,查看当前目录下的子目录
ls
cd 127.0.0.1
ls
此目录下,子目录node0为区块链节点环境,子目录console为该节点的console,可以和节点通信。
执行如下命令,进入控制台
cd console && bash start.sh
如果输出如下内容,则表示控制台启动成功
BCOS控制台常用命令展示
查看当前总的区块数量
getBlockNumber
查看当前的账户列表
listAccount
新生成账户
newAccount
部署合约
deploy HelloWorld
根据交易哈希获取交易详情
getTransactionByHash transaction hash(换成自己的)
调用合约方法
call HelloWorld newAccount(换成自己的) get
查看帮助
部署自己编写的合约
退出控制台后(命令:quit),在命令行执行如下命令
cd /fiscozj/127.0.0.1/console/contracts/solidity
可以看到,fisco控制台已经自带了部分智能合约
如果要新建合约,可以执行如下命令
cat > FirstContract.sol
然后输入如下智能合约代码,然后换行后再同时按下CTRL+C
pragma solidity>=0.4.24 <0.6.11;
contract FirstContract {
string name;
constructor() public { name = "This is the first fisco contract!"; } function get() public view returns (string memory) { return name; }
}
在命令执行如下命令,重新启动fisco控制台
cd /fiscozj/127.0.0.1/console/ && bash start.sh
在控制台,调用deploy命令,部署新建的合约
deploy FirstContract
transaction hash: 0xa765f68fa4a759e93c8f7b156079dc0360b1eea9bfd2cdf56508f4b714caa2dd
contract address:0xb85ce7b45faee1b4eb963d25f24a444bc537f9ac
上面命令执行完成后,会显示部署合约的交易hash,上面示例为0xa765f68fa4a759e93c8f7b156079dc0360b1eea9bfd2cdf56508f4b714caa2dd,可以通过命令查询该hash的详细信息
getTransactionByHash transaction hash
合约部署成功后,同时会返回一个地址,为此合约的地址,上面示例为0xb85ce7b45faee1b4eb963d25f24a444bc537f9ac,我们可以通过此地址来调用合约的具体方法。
调用智能合约
根据上一步部署合约时,显示的合约地址,调用合约
在命令执行如下命令,重新启动fisco控制台
call FirstContract contract address get
本文来自博客园,作者:Rescal_子轩,转载请注明原文链接:https://www.cnblogs.com/zx-demo/p/17447516.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)