最近事有点多,捋一下。

O1:毕业设计

时间节点:3月1号交中期报告,3月31号交论文初稿。

KR:构建依赖图

暂定控制依赖和数据依赖,后续可完善函数调用和函数返回。

O:构建控制依赖关系

---初步构建---

现存问题:

  • 节点粒度:基本块,语句
  • 图基座:ir,源码

O:构建数据依赖关系

---初步构建---

分为状态依赖,局部依赖,暂时不考虑全局变量。

现存问题:

  • 依赖关系缺失:当指令后跟变量时,变量追溯存在缺陷

O:构建函数调用关系

待定,已初步构建。

O:构建函数返回关系

待定,已初步构建。

KR:定义切片准则

待定,现考虑CALL,CALLER和CALLVALUE指令。

KR:切片算法

待定,书上为后向切片。

O2:DePIN项目

时间节点:3月1号出成品。

KR:官网

已有样式,全静态网站。

KR:APP

---参与---

参考helium钱包app,未确定功能和文档,周二开会讨论。

KR:矿机

已确定大致功能,待确定具体硬件模块。

KR:质押界面

已有样式,类似流支付协议界面。

KR:合约

---参与---

未确定接口,至少有质押合约。

O3:升学

时间节点:去年2月10号开始报名,3月23号交材料,3月28号面试。

KR:材料准备

待定,2月准备。

KR:面试准备

数学、专业知识和项目经历。

O:高数

已开始准备。

O:概率论

O:线性代数

O:408

O:项目经历

O4:MultiGo

时间节点:无

KR:基本玩法设计

KR:单机demo

KR:联机demo

现node版本为20.10.0,想降为18.19.0,无法直接安装对应版本node,有以下两个工具可以进行node版本管理:

  1. 从npm安装的nvmw
  2. 从github安装的nvm

我采用的是nvmw,有诸多不便,以后尝试nvm。

安装nvmw命令:npm install -g nvmw

有安装node的命令nvmw install version_you_want,但是我下载不了,会卡住,可能得换源qaq。

这里我的办法是手动下载node到user/nvmw/nodejs中,需要修改文件名为版本号。

安装node后可以使用nvmw ls查看现有node版本。

有两个命令来切换node版本:

  1. 临时切换:nvmw use version_you_want
  2. 永久切换:nvmw switch version_you_want

however我不能用use命令来切换版本,只能switch后重启来切换cmd中的node版本,powershell中版本不受影响。

---2024.1.15更新---

装nvm,不用卸载原有node。装好后,安装对应版本的npmnpm install npm@version_you_want

四、issta投稿

4.1 写作思路回顾

这次的投稿文章有7个章节,abstract,introduction,background and motivation,overview,detail,evaluation,related work和conclusion。

内容较泛部分

可以一句话概括,然后用gpt进行扩写。

适用内容较泛部分,比如abstract第一段,introduction前几段,background和related work,甚至overview中解释solution的时候也可以小用一下doge。

各部分内容

abstract简要介绍背景,motivation,提出的方法思路,表现。

introduction介绍背景,现有工作不足,然后引出我们的方法,介绍我们的方法思路,最后讲评估表现。

background and motivation要先介绍研究内容的基座,然后着重介绍我们设计方法的考量,用一个motivation example来说明我们发现了什么什么情况,基于这种情况我们这样设计模型。

overview先摆我们遇到的挑战以及我们的解决方案,尽可能涉及我们用的所有部分,然后分部分说方法的整体框架。

detail无他,就是详细介绍各个部分的细节。

evaluation先介绍setup,其中包括实验环境,数据集,性能指标,RQ,参数等等。然后对应RQ开始评估,一般有对比实验,消融实验,参数实验,摆几个case study,最后可以来个limitations。表现能解释解释,不能解释就直接描述结果。case不用过于详尽,但要体现我们选他的理由。

related work略。

conclusion就是abstract- background and motivation。

4.2 标记规范

自己瞎定的。

  1. 用ffoo,XXX作为占位符
  2. 完成情况标记:1210todo表示1210做,doing表示正在做,todo?表示不一定做,done表示完成
  3. 原文注释规范:第X章开头:ffoo、第X节开头:ffoo

4.3 碎碎念

应该用钉钉的思维导图(okr那个),可以指派任务,完成后转移指派。

写论文真得开个gpt4,神中神,写废话和写代码利器。

chatgpt翻译 < deepl翻译,gpt喜欢拽高级表述,很奇怪,会影响原文的重点,不过deepl有时候也是一坨。

画latex表格网址

excel画折线图,ppt画示意图,还可以用matlabplot画3d图和热力矩阵。

参加了一回港警招聘,记录一下相关信息。

香港警务处有在官网和公众号宣传招聘信息和宣传点信息,在广州设立了三天的宣传点,两天在SYSU,一天在暨大。

宣传点

先说宣传单上的信息吧。

督察要求本科且中英文一级,月薪5w+,警员仅要求DSE,月薪2.8w+。

督察先笔试,再两轮面试,警员无笔试仅有面试,都有体测,项目包括4x10、立定跳高、俯卧撑、800米。

在宣传点当场咨询了一个警员和督察,根据了解的情况来说,督察的面试每次一天,内容包括中英文自我介绍,小组讨论,时事分析,领导力展示等等,存在户外面试。心理测试不筛人。

PS. 确实存在中英夹杂的情况。

笔试情况

下面说说考试的情况。

在公教楼使用了D402和D401两间教室,一间进行警员面试,一间进行笔试。宣传单上表示警员无笔试,但实际上考场有看见警员笔试的信息。

督察的话两篇作文,一篇中文一篇英文,各60分钟三百字,题目分别是《你希望居住在怎样的城市?》和《view on "money is not the only answer but it makes a difference"》,注意不接受简体字qaq。

警员的话,就我所看到的,好像全是选择题,有中文有英文(maybe,仅供参考)

考试氛围的话,十分的轻松,不用摘手表,不收手机,主监考十分友善hhhh。

不知道为什么他们对信息的涂改很重视,动不动就换一张。

总体警员观感

目测大概有7个人,两个督察,五个警员。

一个女督察一个男督察貌似没笑过,男督察说实话有点像姚sw,说话风格和精神面貌像,梳个大背头,贼壮,不怎么笑。感觉在宣传点热情介绍那个的男警员有点怕男督察,有点阿谀奉承。

在宣传点的另一个是女督察,也不笑,介绍情况倒是挺详细的。

在考场的是三个警员,一个负责面试,一个负责笔试,一个两边跑。噢男督察也是宣传点考场两边跑。

两边跑的警员也不爱笑,但不凶,我一开始拿红笔填信息她也没怪我,只是帮我换了一张,最后还鼓励我说努力hhhh。

考完之后和监考姐聊了一会,她还问我为什么要当警察,理工科明明有更好的出路,当警察压力大,还要受气hhhh。我说我不会说白话,她还说我会,只不过歪音hhhh。

闲聊

在外头填信息的时候和两个等待面试的同学聊,才知道督察面试对英语要求很高qaq,要英语自我介绍回答问题啥的。

他们还问我怎么敢没准备就报督导,还劝我换去警员hhhh。

反思

从这次应聘还发现一些问题。

一个是做事态度出了问题,现在不会高中那样,一点点分解问题,尽可能去解决问题,现在是遇到问题,尝试一下,然后心里就拼命敲响退堂鼓了。

另一个是香港和内地工作氛围差异的问题,就从这次的观察来看,香港上下级之间的界限有点分明,工作氛围可能会压抑,可能存在职场霸凌?

数据集:https://xblock.pro/#/dataset/25

传统庞氏合约

目前将庞氏合约根据合约分配资金的模式分成4类:树形合约、链式合约、瀑布式合约和交接合约。

树形合约

用户之间的关系为树形结构。每当用户加入这个合约时,他必须将另一个用户指示为邀请者(父节点)。

新用户的钱在她的邀请者或邀请者的邀请者等等(即树形结构下的“祖先”)之间分配,逻辑是距离她越近邀请者获得的份额越大。

例子:Etheramid和DynamicPyramid

链式合约

用户之间的关系是线性的,每个节点都只有一个子节点。通常承诺一个常数因子(收益金额/投资金额),这个常数因子对所有用户都是相等的。合约按顺序一次性全额支付用户的收益。

所有新的投资都被收集起来,直到获得到期的金额。

例子:Doubler、dianaem和ZeroPonzi

瀑布式合约

类似于链式合约,但分配逻辑不同。分发总是从链的头部开始,按顺序支付用户的收益,直到余额耗尽。

每次分钱会跳着分。

例子:TreasureChest和PiggyBank

交接合约

类似于链式合约,用户投资金额由合约决定,每次有新的用户加入,合约就会提高投资金额。合约将新用户的资金直接支付给前一个用户,前一个用户立即获得了利润。

例子:KingOfTheEtherThrone

新发现

在数据集中发现有很多被标记为庞氏的合约是建立在自己实现的token上的,不一定符合ERC20标准。这类合约接收到新投资后,一般会增加老投资者的分红变量,而不是直接向老投资者转账。

数据集不足

现在数据集有点旧,仅截止到2019年1月生成的区块7136486。

得更新一下数据集,从中找一个新模式的庞氏合约(或者我们自己想一个hhhh有没有可能整个跨链庞氏)

亲测https://blog.csdn.net/Miracle_ps/article/details/114791335中的第二个办法可行,这里mark一下。

方法一:

  1. 找到Hexo下的_config.yml里的post_asset_folder,把这个选项从false改成true
  2. 在Hexo目录下打开Git Brsh,执行一个下载上传图片插件的命令npm install hexo-asset-image --save。
  3. 继续在Git Brsh下利用hexo n "xxxx"来生成md的文件(""里的内容填自己的文件名),这时就会在同级的目录下生成一个同名的文件夹。
  4. 在.md的文件中要插入图片时,先要把所要插入的图片放在生成的同名文件夹下。

方法二:

在source路径下新建一个文件夹,然后用md语法正常插入即可。

如新建路径source/assets,则插入![imgname](/assets/xxx.png)

Bug描述:hexo的categories和tags不对大小写进行区分,假如改变某个tag的大小写并同步到github上后将导致404。

解决方法:将.deploy_git中的categories或者tags路径删除,是不管用滴。要将.deploy_git/config中的ignorcase改为false才行。

一、论文信息

题目:《Ponzi Scheme Detection in Smart Contract via Transaction Semantic Representation Learning》

级别:IEEE Transactions on Reliability,中科院二区,CCF-C类

作者院校:扬州大学

二、论文动机

现有方法的局限性:

  1. 语义不足
  2. 庞氏关键语义获取
  3. 未充分利用特征

提出一个基于学习交易语义的方法:用一种新的代码表示方法sTPG,将交易语义表示成一个图,然后利用gcn来学习交易模式。

设计方法的考量:

  1. 为了处理复杂语义:cfg
  2. 为了处理无关代码:切片
  3. 状态变量的过程内数据依赖重要性

三、具体方法

文中有给一个走完了全流程的例子,各部分的最后一段是对该例子的操作。

训练阶段

简单说就是通过静态分析,程序切片和过程内状态变量依赖分析这三个步骤,从一个合约中获得一组sTPG,然后用这些sTPG作为特征进行训练。

3.1 静态分析

  1. 先构建交易函数集
  2. 然后用slither对每个交易函数构建cfg
  3. 接着对每个cfg用forward dominance relation方法来获得控制依赖边,用变量def-use链来获得数据依赖边和数据流边
  4. 构建状态变量依赖边,从read到write

至此对每个交易函数都有一个PDG图,图中有5种边,控制依赖边、数据依赖边、控制流边、数据流边和状态变量依赖边。

3.2 程序切片

对静态分析中获得的每个PDG应用以下两个切片标准:

  1. 每个transfer API,后向切片
  2. 切片1中存在的全部状态变量,后向前向切片

3.3 过程内状态变量依赖分析

在所有可调用的函数中,查找修改了(交易API依赖的状态变量)的语句,添加过程间状态变量依赖边,从read到write。

3.4 模型训练

初始化:

  • 节点嵌入初始化:用一个开源的基于AST的模型Infercode来获得向量
  • 边嵌入初始化:先合并同方向边,接着将边编码成五维的onehot形式,每一维度分别表示控制流、数据流、数据依赖、控制依赖和状态变量依赖

为了利用上边的信息,他们提出了一个relation-sensitive gcn:先用一个MLP计算边的隐藏特征,然后将节点特征和隐藏特征相拼接,用拼接后的特征进行图卷积(不太了解图卷积,这里没懂),最后用一个最大池化层和MLP进行分。

检测阶段

类似训练阶段

四、实验复现

数据集是开源的,放在了https://github.com/smartcontract-detect-yzu/PonziDataset,一部分是之前文章的开源数据集,一部分是从各个地方找合约然后人工打标签的,剩下是etherscan上标记为庞氏的。

用slither进行静态分析,然后用Networkx构建sTPG,接着用Pytorch和PYG实现RS-GCN。

硬件信息和模型参数都有交代,见EXPERIMENT章节的Implementation段

五、不足

  1. 仅针对solidity
  2. 识别出的交易语义源自一个交易函数——可扩展到跨函数交易语义挖掘
  3. 可尝试利用更多信息,比如AST中的信息
  4. 数据不平衡

一、概述

控制流图CFG、数据流图DFG、程序依赖图PDG、系统依赖图SDG

程序切片从可执行到不可执行

根据输入分类:静态切片,动态切片,有条件切片

程序切片应用之处

二、图论基础

控制流图

基本块:第一句进入,最后一句离开

控制流图以基本块为节点

控制流和数据流

控制流分析就是去发现过程内or过程间的控制流

什么是过程?~函数

控制流图表示形式:

  1. AST
  2. CFG
  3. PDG中的控制依赖

数据流描述了变量的值从定义点如何流到使用点

数据流边表示什么?~变量和变量之间的关系

可到达定义怎么计算?~求解数据流方程

控制依赖和数据依赖

控制依赖:控制流引起的程序实体之间的关系

控制依赖定义:满足以下三个条件:

  1. n1n2之间存在可执行路径
  2. 对可到达路径上的其他点,n2都是它的后必经节点
  3. n2不是n1的后必经节点

条件语句内部的语句控制依赖于条件部分

数据依赖:由于数据定义和使用所形成的实体之间的关系

数据依赖定义:满足以下三个条件:

  1. n2定义了变量v
  2. n1使用了变量v
  3. n2n1存在可执行路径且变量v未重新定义

程序依赖图

这里只是简单介绍

过程内依赖图:即过程依赖图PrDG,即控制依赖图+数据依赖图

过程间依赖图:即系统依赖图,各个过程依赖图+调用边+调用引起的依赖边

三、静态程序分析

MarkWeiser程序切片

切片准则:<n, V>,n表示某个语句,V表示代码中变量的子集

其实就是在简化代码,希望留下切片准则相关的代码,求切片就是求图的可达性问题

切片结果可能不符合语法

切片优化:寻找最小切片问题是不可解的

不足:只能解决简单的程序,为了解决过程和过程调用的问题提出了过程内切片和过程间切片

过程内切片

先在cfg上构建控制依赖图和数据依赖图,然后把两个图合并即可得到pdg

先构建程序依赖图pdg,再应用图可达性算法

前向后向区别:

  • 后向:是指以漏洞关注点为终点,能够到达该节点的所有路径上的所有节点
  • 前向:是指从关注点节点出发,能够达到达到的所有路径上的节点

过程间切片

一样的逻辑,构建系统依赖图,然后应用图可达性算法

在过程依赖图上添加调用边、参数输入边和参数输出边形成系统依赖图(根据P50,好像有更多操作)

参考资料

《程序切片技术及其应用》

【南大软件分析】lecture7 笔记-Interprocedural Analysis

Cosmos多链拆解

区块链的发展:btc,eth,cosmos(多链)

Tendermint共识机制

tendermint分为core和abci两个组件

Tendermint Core

共识算法为优化后的POS

需要使用客户端以保证安全性和一致性

tendermint core作为共识引擎,网络层使用Gossip协议,共识层使用BFT+POS共识算法

验证者获得2/3的投票即添加新的区块

节点上限100个以保证性能

ABCI接口

  • CheckTx:验证交易
  • DeliverTx:提交并更新状态
  • BeginBlock和EndBlock:查询状态

Cosmos SDK

SDK内分成多个部分,开发者可以组合不同模块来构建DApp,也可以自行开发模块

支持WebAssembly

支持对象能力模型,将模块的运行逻辑保存在Keeper中。

IBC协议

类似TCP/IP协议

建立握手连接:

  1. A链发起跨链到B链的OpenInit请求,等待Relayer接收到该请求。
  2. Relayer收到OpenInit的请求之后,构造OpenTry的请求发送到B链上。
  3. B链收到OpenTry请求之后,同意并确认之后生成OpenACK数据包,并由Relayer按照同样的方式发送给A链。
  4. A链通过OpenACK数据包判断此次握手是否成功,成功则发送OpenConfirm并把包含信息的数据包返回B链,成功传输信息;否则握手失败。

Cosmos vs. Polkadot

  • 跨链协议:IBC和Parachain
  • 共识机制:Tendermint和GRANDPA(ghost协议)
  • 资产管理:账户模型和链上资产模型

polkadot的中继链是平行链的唯一安全提供者,带来了一定的中心化。

疑惑

  1. gossip协议是什么?
  2. ABCI接口没看明白?
  3. Multistore机制是什么意思?
  4. 用SDK开发出的应用的运行逻辑?
  5. cosmos和polkadot的资产管理分别是什么意思?
0%