Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

某交易所一面面经

  1. 自我介绍
  2. 交易所项目介绍(详细问)

Q:你们的解析项目解析了那些数据?

A:token token_balance nft Account

Q:你们的解析全流程是怎么样的?

A:我们上游有一个xx服务,用来从节点那block数据,解析block数据后,将transition数据发到kafka,我们从kafka拿到数据,之后解析

Q:为什么有一个xx服务,你们不直接从节点拿数据?

A:我们还有其他服务需要数据,都从kafka那可以减少对节点的调用次数

Q:先说说solana这一块怎么解析的

A:首先是token, 拿到transition后,解析tx里面的指令,遇到sql token系列合约里面的mintinit系列的指令就判断为token的发行,记录token的数据,token_balance 在tx里面有(postTokenBalance字段),可以直接拿到交易后的账户余额,solana的nft和token的实现是一样的,所以没有单独处理nft.

Q:这个过程有没有遇到什么问题?

A:token_balance遇到过postTokenBalance里面缺失数据,后面调研找到缺失的原因是当一个token account关闭时postTokenBalance里面不会记录这条数据,导致余额不一致,解决方案是对比postTokenBalance和preTokenBalance

Q:你们有没有解过交易的数据(我回答有解transfer,他反问dex相关的交易)?

A:我没有参与dex这一块的解析,但是有了解过。

Q:怎么解的?

A:一种是解析dex交易,dex交易实际上是dex的指令,根据指令和指令参数就可以知道交易里面包含怎样的swap情况,另外一种是解析dex里面的数据,比如说solana链上有一些通过订单铺实现的dex,链上数据中包含订单铺信息,这时候需要解析dex合约里面的数据账户里面的数据。

Q:那说说evm里面的数据怎么解析?

A:evm我们是从kafka里面订阅的recept(一开始说的是tx,tx里面没有log信息😢),在recept里面查看log信息,判断有没有transfer事件,如果有就通过rpc获取账户相关token的余额。

Q:为什么不像solana那样从数据中解析token余额,要用rpc获取?

A:我们这是一个分布式,多线程的处理方案,处理的数据不是有序的,所以没办法做加减,我们后续有做过一个优化,在一分钟内做加减,但是为了保证数据准确,每分钟会call一下rpc拿到精准的余额信息。

W:这里省略一部分关于业务方使用数据的问题…

Q:evm你们除了解token,还有没有解别的(721,1155之类的)?

A:有解析721,和1155 ,具体的解析方式也是根据transfer事件拿到基础信息,再那其他数据。

Q:nft这一块有没有遇到什么问题?

A:我们有一个NFT的项目,他们在链上做了一个非标准的操作,更新了nft的metadata,但是更新操作不是标准721里面的操作,导致我们没有解析到更新之后的nft数据,当时的解决方案是解析捕捉这个非标准操作,并且解析。但是后面调查到有部分项目的玩法就是更新metadata,后面指定的方案是用一个白名单定时刷新这些集合里面的nft。

  1. 跨链相关的两个项目

Q:聊一下下面的跨链项目:你们的跨链整体流程是什么样的。

A:大致回答了一下跨链流程(这里不做纤细介绍)

Q:这里说到的预编译合约是什么?

A:这个涉及到evm系的合约执行流程,在eth里面,geth收到交易后会丢给evm,evm首先判断call的合约是不是预编译合约,是的话会把参数抛给预编译的go对象,预编译合约可以接受用户的call参数,也能直接修改evm的存储结构(可以直接修改leveldb),预编译的go代码比evm里面的sol代码执行速度快很多,zkevm里面的zk相关合约就是通过预编译合约写的。

Q:假如我要把uniswap v2放到我们自己的evm里面有什么好的解决方案,需要把数据也搞过来?

A:我想他的意思是用预编译的方式放到evm里面(实际上预编译的方式实现会更麻烦),我理解是把uniswap的合约部署过来,然后需要把存储的东西给弄过来,所以回答是 –》 这个涉及到合约的底层结构,每个合约的数据都单独存储在自己的mpt数里面,我们只需要拿到eth上面uniswap的树根,然后便利树根,拿到所有数据之后,把数导入到我们自己的evm里面,但是很难保证我们自己的uniswap可以读取到这个树根,总之这个有可能实现,实现难度一定很大。

  1. 反问

Q:我了解到这边是做xxx,我想知道这边有多少个人?

A:n个,这是一个新开的项目

Q:为什么要做xxx, 有很多可以直接用的链上xxx

A:1.战略储备,2.链上已有的限制多。

  1. 拜拜

一面好像是过了,但是对xx协议解析存在问题,这两天得突击一下。听内推的伙伴说,如果二面的时候问道了xx协议,回答不上可能会挂掉。

评论