去中心化支付技术-知识点

比特币

POW共识

数字钱包

bip0039:助记词

bip0032:分层确定性

比特币交易格式

比特币中验证交易,怎么处理双花问题

7种输出脚本类型含义

公平承诺协议

txid可改性:多个签名

比特币存款协议

支付通道

闪电网络概念

区块链

区块链的定义

区块链的安全性:致性、活性(CG、CQ、CP)

以太坊

以太坊概念

状态是什么、如何存储

以太坊交易格式

以太坊共识:耗内存,计算资源

区块头部字段

数据流概述

海量数据

测量要求:

  1. 一次机会
  2. 空间小
  3. 处理和更新快
  4. 查询准确度

测量方式:

  1. 专用硬件
  2. 抽样技术(部分流量数据)
  3. 数据流(所有流量数据)

数据流定义:高速传输的数据

数据流适用任务场景:

  1. 熵估计
  2. 流量与流矩阵估计
  3. 连接度估计
  4. 大流估计
  5. 活跃流的计数

Bitmap

naive bitmap:bitset[n][m]

direct bitmap:对流标识进行hash,映射到bitmap的某个位

virtual bitmap:hash(流标识)若在virtual bitmap中则置位,相当于抽样

multiple bitmap

multiresolution bitmap

Bloom Filter

标准布隆过滤器:一个元素计算多次hash,若各个hash位置为1则说明元素在集合中

仅支持插入和查找,不支持删除

由于hash碰撞,存在误判的可能性

误判分析

k=7时有最小误判率

计数布隆过滤器:标准布隆计数器+可删除;每个元素一个计数器,当元素被删除时对应计数器减少

计数器4位够用

Sketch

count-min sketch:mxn的二维矩阵,每行对应一个hash函数,n为mod的大小;计算元素的各个hash值,mod n后每行对应位置加1

用于计数

返回不准确的结果

论文读书笔记

TSMC上的《Who Are the Phishers? Phishing Scam Detection on Ethereum via Network Embedding》这篇论文提出了一个以太坊上的钓鱼检测技术,下面是这篇论文的概述:

​随着区块链的发展,各种诈骗行为愈演愈烈,其中钓鱼诈骗占到了50%以上。但由于传统的钓鱼诈骗和以太坊上的钓鱼诈骗在通用货币,交易透明度,钓鱼方式等方面大相径庭,我们不能直接应用传统的钓鱼检测技术,因此我们提出了一种针对以太坊的钓鱼检测技术。

我们先从以太坊客户端中获得所有交易记录,以此构建一个交易图,节点表示以太坊账户,边表示账户之间的交易。接着我们从权威网站上获得被标记为钓鱼账户的信息。为了同时学习到图结构和交易信息的特征,我们提出了一种新的图嵌入算法trans2vec来进行特征提取。trans2vec算法由在交易金额和交易时间上有偏的随机游走来生成节点序列,再由skip-gram模型获得图嵌入特征。由于钓鱼账户占比过小,我们使用一类SVM来进行无监督异常检测,将前面学习到的特征作为一类SVM的输入进行钓鱼检测。

最后我们从不同采样偏差,不同图嵌入算法,不同的分类器,不同的参数和算法可扩展性等方面进行评估。

从这篇论文中我学习到了不少东西,比如说图嵌入和一类支持向量机。图嵌入将图结构映射到低维向量空间,将节点表示为向量形式,学习节点之间的关系,以便更好地捕捉节点之间的相似性和差异性。文中提到的deepwalk和node2vec就是两种常用的图嵌入算法。deepwalk通过随机游走生成节点序列,用这些节点序列来学习节点的向量形式,即节点嵌入。node2vec和deepwalk类似,在随机游走上略有不同,node2vec通过在dfs和bfs上有偏的随机游走来生成节点序列。一类SVM则是一种单分类器,通过学习正常样本的分布特征,来检测新样本是否属于正常类别。图嵌入算法为我们如何处理图的数据提供了一种思路,它可以将图中提取出具有结构信息和边点信息的特征;一类SVM则为我们如何处理有标签数据占比小的数据集提供了一种思路。

虽然学到了不少东西,但由于临近期末时间紧迫,还是有些东西没学明白的,比如skip-gram模型是怎么从序列中学习出词或者节点的嵌入的,一类SVM具体是怎么分类的等等。

至于论文的改进方案或后续的工作方向,其实文中在conclusion部分已经提到了,这里我再补一点我的想法:

  1. 会不会有更好的交易特征:设想现在有一个网站的交易金额和交易时间的数据,我们能判断该网站是否有钓鱼诈骗行为吗?以太坊上的钓鱼诈骗是和传统钓鱼诈骗有不同,但我感觉仅从交易金额和交易时间来进行钓鱼诈骗识别的话,只能识别出ICOs期间的钓鱼诈骗,总金额大,时间集中。要是未来以太坊上出现类似传统钓鱼网站的钓鱼诈骗,金额和时间散布大的,trans2vec是否还能提取出有效的特征?

  2. 钓鱼账户所有的交易都是关于钓鱼的吗:这个不是对论文内容的问题,这个是对数据集的问题。我在想这些被标记为钓鱼诈骗的账户有没有可能进行过正当交易,这些交易会不会影响提取出来的特征,比如说这些账户一开始就是普通账户,进行过许多正常交易,后来突然开始钓鱼诈骗,被权威网站标记为钓鱼账户等等。

参考资料

随机游走

skip-gram模型

课程作业:

科目 作业 期限
电子商务安全* none
人工神经网络 none
网络协议逆向 期末项目 7.8
云计算技术* none
计算机视觉 hw3 & 论文 6.20 & wait
专业综合实践 none

论文

夏令营

实习

课程作业:

科目 作业 期限
电子商务安全 none
人工神经网络 期末项目 6.18
网络协议逆向 期末项目 7.8
云计算技术 课程项目 7.2
计算机视觉 hw3 6.20
专业综合实践 none

夏令营

实习准备

课程作业:

科目 作业 期限
电子商务安全 none
人工神经网络 期末项目 wait
网络协议逆向 hw3 & 期末项目 5.30 & 7.8
云计算技术 lab2 & lab3 6.7 & 6.7
计算机视觉 hw3 6.20
专业综合实践 期末项目 6.3

夏令营

实习准备

课程作业:

科目 作业 ddl
电子商务安全 none
人工神经网络 期末项目 wait
网络协议逆向 hw5 5.30
云计算技术 lab1 6.7
计算机视觉 hw3 wait
专业综合实践 期末项目 6.5

夏令营

实习准备

Polkadot

peaq网络基于polkadot,Polkadot是一个可扩展的异构多链区块链。由一个协作的去中心化区块链网络组成,这个网络叫做中继链,它与并行运行的分片链即平行链交互,所有平行链共享中继链的安全性。

Substrate

一个基于rust的模块化的区块链框架

安装

在WSL中安装,不要在windows下安装!!!由于windows环境和rust的版本会遇到很多坑!

先安装rust,然后clone模板,注意版本,git clonesubstrate-node-templatesubstrate-front-end-template后分别cargo build --releaseyarn install

运行

在substrate-node-template中执行./target/release/node-template --dev --tmp,开启一个临时节点

在substrate-front-end-template中执行yarn start,打开可视化界面。

遇到的问题

报错:build error: Rust WASM toolchain not installed, please install it!

解决办法:build前执行rustup target add wasm32-unknown-unknown --toolchain nightly

WASM

WebAssembly(缩写为Wasm)是一种基于栈式虚拟机的二进制指令集,可以作为编程语言的编译目标,使得程序可以在Web上进行客户端和服务器应用的部署

参考资料

知乎专栏-Substrate区块链开发

知乎专栏-Substrate开发快速入门

Substrate开发者中心-substrate安装

csdn-Substrate学习记录

官方-Windows安装Substrate

Docker入门

镜像和容器

使用步骤:

  1. 拉取镜像
  2. 用镜像创建容器
  3. 进入容器

拉取镜像

docker pull imageName:version

可设置镜像加速器

启动容器

新建容器并启动:docker run imageName:version-i保持io流对容器开放,-t分配终端,--name设置容器名

启动已有容器:docker start containerName

查看容器信息:docker ps -a

停止容器

停止正在运行的容器:docker stop containerName-t指定等待时间

Docker容器以sh为主进程,执行完启动命令,主进程将停止,容器也将自动终止。

容器启动后不立即停止:

  1. 启动命令设置为死循环
  2. 启动命令设置为某个一直运行的子进程

进入容器

docker run-d可以使容器在后台运行

进入一个docker容器的几种方法:

  1. 使用ssh登陆进容器;
  2. 使用nsenter、nsinit等第三方工具;
  3. 使用docker本身提供的工具:execattach

docker run创建容器并让它在后台执行,在用docker attach进入容器内部,其实就是进入容器启动命令的终端

docker exec则可以在容器内部执行一条命令

删除容器

删除终止状态的容器:docker rm containerName

删除运行状态的容器:

  1. docker stop,再docker rm
  2. 强制删除docker rm -f

查看所有容器ID:docker ps –a –q

Docker镜像管理

Commit制作镜像

docker run -p 80:80将主机的80端口映射到容器的80端口

docker commit containerName imageName将容器保存成镜像

保存和加载镜像

保存镜像:docker save imageName1:version imageName2:version > tarName.tar

加载镜像:docker load < tarName.tar

导入导出容器

把容器的文件系统保存为tar包:docker export containerName -o tarName.tar

从tar包导入镜像:docker import tarName.tar imageName:version

删除镜像

docker rmi image-f表示强制删除

构建私有仓库

创建私人仓库:docker run -d -p 5000:5000 --restart=always --name registry registry:2-v可以指定仓库位置

镜像加标签:docker tag imageName:version tagName

推送镜像到仓库:docker push tagName,如果tagName正好是主机名:端口号则推送到私人仓库

从私人仓库拉取镜像:docker pull tagName

删除私人仓库:docker rm repoName-f表示强制,-v表示删除仓库的同时删除其中镜像

Dockerfile

用于构建镜像

FROM和RUN

FROM imgaeName:version指定构建镜像的基础镜像

RUN 命令创建容器并执行命令,命令结束后提交容器为新镜像

build,COPY和ADD

构建镜像:docker build -t foo .-t指定名字,-f指定Dockerfile

COPY 源路径 目标路径将源路径复制到目标路径,源路径必须为绝对路径

ADD 源路径 目标路径COPY的加强版,可自动解压tar包,自动下载文件等等操作

CMD和ENTRYPOINT

CMD [命令,参数1,参数2]设置容器启动时的默认命令,可被覆盖,可作为ENTRYPOINT的参数

ENTRYPOINT [命令,参数1,参数2]设置容器启动时的默认命令,不可被覆盖

ENV,EXPOSE,WORKDIR和ARG

WORKDIR 路径设置工作目录

ENV key value设置环境变量

ARG argName设置参数,可被之后指令及docker build使用

EXPOSE port1暴露端口,只是一个声明,仍需要在docker run中用-p指定端口

ONBUILD和VOLUME

ONBUILD 其他指令其他指令为RUN,COPY等等指令,当前镜像中不会使用,仅用于下一级镜像构建,不会被继承

VOLUME 路径定义数据卷

缓存

none

Docker数据卷

创建数据卷

docker volume create --name volName创建数据卷

docker run -v /data创建一个随机名字的数据卷,并挂载到容器的/data

docker run -v volName:/data创建volName数据卷,并挂载到容器的/data

挂载和共享数据卷

docker run --name containerName -v /host/dir:/container/dir将主机的/host/dir挂载到/container/dir

docker run --name volName2 --volumes-from volName1创建volName2并与volName1共享数据卷

查看数据卷信息

docker inspect可查看镜像,容器,数据卷等的具体信息

删除数据卷

docker volume rm volName若数据卷仍被使用则无法删除

docekr rm -v containerName删除容器时同时删除数据卷,若数据卷仍被使用则无法删除

删除正在使用的数据卷:

  1. docker rm -v containerName解除数据卷和容器的关系
  2. docker volume rm volName删除数据卷

备份和恢复数据卷

$(pwd)表示当前目录

docker run --volumes-from CONTAINER_NAME -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /path/to/data将CONTAINER_NAME的/path/to/data备份到主机的当前目录

docker run --volumes-from dbcontainer2 -v $(pwd):/backup busybox tar -xvf /backup/backup.tar -C /dbdata

新容器,旧容器和主机一起实现的数据卷备份和恢复,新容器和旧容器共享,主机数据卷挂载到新主机。

课程作业:

科目 作业 ddl
电子商务安全 none
人工神经网络 none
网络协议逆向 hw5 wait
云计算技术 lab2 & lab1 5.24 & 6.7
计算机视觉 none
专业综合实践 none
0%