区块链(一)

区块链

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文件中的错误信息
image
第四步. 启动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端口是否被占用。
image
第五步. 检查进程
检查进程是否启动。
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,则进程没有启动(一般是端口被占用导致的)
image

第六步. 检查日志输出
如下,查看节点node0链接的节点数。tail 命令可用于查看文件的内容,有一个常用的参数 -f 表示查看文件尾部新增加的内容。
tail -f nodes/127.0.0.1/node0/log/log* | grep connected
正常情况会不停地输出连接信息,从输出可以看出node0与另外3个节点有连接。
image
Ctrl+C按键,可结束当前命令执行。
执行下面指令,检查是否在共识
tail -f nodes/127.0.0.1/node0/log/log* | grep +++
正常情况会不停输出++++Generating seal,表示共识正常。
image
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
image

image

image
用控制台部署智能合约
第一步. 编写HelloWorld合约
HelloWorld合约提供两个接口,分别是get()和set(),用于获取/设置合约变量name。合约内容如下:
image

第二步. 部署HelloWorld合约
为了方便用户快速体验,HelloWorld合约已经内置于控制台中,位于控制台目录下contracts/solidity/HelloWorld.sol,参考下面命令部署即可。

重新启动控制台后,在控制台输入以下指令 部署成功则返回合约地址
image

第三步. 调用HelloWorld合约
在控制台,调用合约
调用该命令 deploy HelloWorld
获得下面的三个信息
transaction hash:
contract address:
currentAccount:
call HelloWorld contract address(换成自己的) get
image
call HelloWorld contract address(换成自己的) set "Hello, FISCO BCOS"
image
getBlockNumber
call HelloWorld contract address(换成自己的) get
image

FISCO BCOS环境熟悉

FISCO BCOS控制台基本用法增强
本实验环境已经搭建好一个FISCO BCOS区块链节点环境,并配置好了控制台,我们可以基于控制台访问FISCO BCOS节点,实现查询区块链状态、部署调用合约等功能,能够快速获取到所需要的信息。
启动本实验环境后,工作目录为/fiscozj,可以执行如下命令,查看当前目录下的子目录
ls
image

cd 127.0.0.1
ls
image
此目录下,子目录node0为区块链节点环境,子目录console为该节点的console,可以和节点通信。
执行如下命令,进入控制台
cd console && bash start.sh
如果输出如下内容,则表示控制台启动成功
image
BCOS控制台常用命令展示
查看当前总的区块数量
getBlockNumber
image

查看当前的账户列表
listAccount
image

新生成账户
newAccount
image
部署合约
deploy HelloWorld
image
根据交易哈希获取交易详情
getTransactionByHash transaction hash(换成自己的)
image
调用合约方法
call HelloWorld newAccount(换成自己的) get
image
查看帮助
image
部署自己编写的合约
退出控制台后(命令:quit),在命令行执行如下命令
cd /fiscozj/127.0.0.1/console/contracts/solidity
可以看到,fisco控制台已经自带了部分智能合约
image
如果要新建合约,可以执行如下命令
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;
}

}
image

在命令执行如下命令,重新启动fisco控制台
cd /fiscozj/127.0.0.1/console/ && bash start.sh
在控制台,调用deploy命令,部署新建的合约
deploy FirstContract
transaction hash: 0xa765f68fa4a759e93c8f7b156079dc0360b1eea9bfd2cdf56508f4b714caa2dd
contract address:0xb85ce7b45faee1b4eb963d25f24a444bc537f9ac
image

上面命令执行完成后,会显示部署合约的交易hash,上面示例为0xa765f68fa4a759e93c8f7b156079dc0360b1eea9bfd2cdf56508f4b714caa2dd,可以通过命令查询该hash的详细信息

getTransactionByHash transaction hash
合约部署成功后,同时会返回一个地址,为此合约的地址,上面示例为0xb85ce7b45faee1b4eb963d25f24a444bc537f9ac,我们可以通过此地址来调用合约的具体方法。
image

调用智能合约
根据上一步部署合约时,显示的合约地址,调用合约
在命令执行如下命令,重新启动fisco控制台
call FirstContract contract address get
image

posted @   Rescal_子轩  阅读(310)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示