脚本刷钱/Web3 程序员的“道法术器”

Created Thu, 09 Dec 2021 11:00:00 +0800 Modified Thu, 09 Dec 2021 11:00:00 +0800
7638 Words

本文素材来源于CryptoChasers技术社区从 2021 年 5 月底到 12 月初的群聊记录,经过整理编辑后,分为“道、法、术、器” 四大部分。适合新进社区的成员阅读,用于补全知识。

问答组成的段落开头的 Q: 是提问,A: 是回答。

一、道

“道”是指遵循事物的发展规律,确定自身的发展方向、愿景和战略。

程序员在 Crypto 发展的方向有多个,推荐新入行的程序员阅读「 程序员入坑 Web3 学习路径」

程序员在币圈可以做的事情

Q: 这边有一些给对币圈接触不深的程序员,你能说下你的建议吗?

A: 币圈目前的状态, 有点像早期互联网。 就很缺开发,但凡会点技术,一周赚的比你一个月工资多,适合不想当打工人的朋友尝试。炒币适合日常搞搞, 但是做 builder 真心舒服。 目前应该还不算内卷。各种生态,各种项目方, 各种链,基础设施,都在吸引开发者去搞东西。让你帮忙给测个节点,部署一下环境,给你打个几千$。开发的有门槛,做起来也好玩,更适合有技术的参加。正经生态的中长期,能组队 build 起来,也挺好的。而且搞搞开发对自己积累也有好处 。所以平时还是要多刷刷 github 的 commit,早先也有项目对 github 开发者空投的。

开发入门实践建议

Q: 能给还不是码农的门外汉指一条入门的学习路径吗?

A: 推荐 alchemy 的教程

A: 可以先跟着 hardhat 的官方教程部署一个合约体验一下。

A: web3j(JAVA 库) 有一些简单的接口,solidity 和 web3j 可以一起学习

A: 去 fork ETH 的链上,利用 ETH 生态完善的工具链,去开发项目。对于刚刚接触区块链的开发者来说还是很有锻炼机会的。

黑客松

Q: 想问组队做项目,是一般去 hackathon 还是什么渠道?目前大家都在做什么项目

A: 黑客松有好多,但写黑客松一个月的奖励还不如一笔交易。大家没啥心思做黑客松,估计熊市做项目的就多了。

科学家赚钱

要想在币圈用代码开挂赚钱,首先你得是个币圈的资深老韭菜,要对币圈热点风向有足够的把握,对各种币圈能让你亏钱的骗术了如指掌,能快速收集信息情报并做筛选过滤,能有足够的远见和风险意识,而不是看着币圈的暴富神话。传统企业程序员明明都不了解币圈的玩法,就贸然进入做发财美梦。你的代码只是让你比别的老韭菜胜率增大些的工具,而不是对币圈啥都不懂人的傻瓜式赚钱工具。

赚钱的机会稍纵即逝。 币圈要想通过技术赚钱,一定需要深厚的技术积累,看到好项目好机会,立马动身研究写代码,给你的时间可能都没有十来分钟,搞定了就是波大的。

固定模式的不一定赚钱,一般都是新发现的,从未有人涉猎的才赚大钱。

通过技术开挂赚钱要基于目前行情好的基础上才能展开,去年的时候真的是遍地黄金,只要你稍微会点代码都能赚不少。今年感觉就非常内卷,但是今年也不是说没有赚钱的路子,只是可能金钱的门槛变高了不少,现在光有技术已经没啥用了,还得要有钱。去年才是真正用技术以小博大,一波发家致富的好时机。

一定要善于学习,不断发现新东西。核心是要一直保持关注,不要幻想莫名冲一个项目就致富这件事

信息

当科学家冲新,信息很重要,信息是关键,技术只是扩大你的收入。

多关注推特和 discord,一般新的项目都是这两者比较多。

还有多关注链上数据的挖掘,例如 3ac,a16 那些鼎鼎大名的机构的钱包。

一天抽时间研究 5 个项目,好的就加入社区跟踪起来,干一个月应该上道了。

找现成代码

有些程序员是真的勤快,代码都给你写好开源在 gayhub 了

有时候把项目的合约直接丢 gayhub 里面搜,就可以看到很多现成的代码

拿来用吧,省得自己麻烦了,反正都是程序员,代码大家都看得懂,也不怕后门

想赚钱一定不要有技术偏见和倔强,有些程序员会有代码洁癖,不喜欢用别人的代码,觉得很 low,非要自己写,想显示自己技术强,大可不必,等你写好,可能行情都过去了,时间就是金钱,必须要迅速

打工

而且币圈赚钱是有正反馈的,一旦你抓住了一波,后面就会越来越顺,你想啊,你抓住了一波,有资金了,以后资金对你而言也没有门槛了,然后你又自由离职了,时间也充裕了,就会有越来越多时间抓住一些机会

打工影响暴富

要是还在 996 上班,又没钱的,今年怕是抓不到暴富机会了

薅羊毛

得跟着行情来,牛市就好好看项目炒币,什么在热点风口上就炒哪个,撸毛做项目钻研技术适合熊市干。

这个市场每年都会有很多人进来也有很多人出局,能熬下来,在熊市静静撸毛的,都暴富了。

我的逻辑是,撸毛我也会撸,但是我一定会避开内卷大军,会内卷的毛一定没有撸的价值,行情不好的时候,很多人离场,才是去发现好项目撸毛好机会。

gamefi

gamefi 要看团队还有经济模型,要是经常修改规则,国人团队的,直接略过,然后看经济模型,有消耗,有赌博,币本位,这种能稍微玩久些。国人的也不一定垃圾,国人的项目可以买币做波段,但不适合去玩游戏

gamefi,你主要要问清楚,你赚的钱到底是谁的钱。如果大家都在想几天回本的事,那结果就是几天就崩

gamefi 经济模型都已经升级过好几轮了,现在金本位的我已经几乎不看了,金本位的游戏可以买币做波段,一般币价容易涨,但是玩游戏的话就容易被坑。金本位目前已经好多游戏证明是长久不了的

在 gamefi 崩盘前,再好的画质都不顶用

头部 gamefi 还是值得去玩一玩

NFT

不要只会闭门搞技术,nft,我记得是今年 7 月份开始火的,那时候才是最好的时候,随便 mint 都能赚好几倍,那时候都没多少科学家搞 nft 的 mint,很多人连 flashbot 都不会用,每天就推特、discord 找最新最火的 nft 项目,轻轻松松获利

而现在,nft 都已经凉了好久了,我认为现在 nft 并不是赚钱的好领域,现在整体行情都不太行。

当黑客

能有做黑客的能力,还不如发跟热点发仿盘项目,不 rug,做出来给市场玩

可以匿名发仿盘项目。一般区块链项目,大家都能同意项目方(开发者)自己保留一部分额度

做黑客的话,不要以为简单,数额太小你看不上,数额太大怕你洗不走

不要以为 tornado 这种完全可以匿名,你数额小的话还好,数额大的话,根据一些特征还有最终流入地址可以大致跟踪出来的

之前慢雾抓到个从 tornado 跑走的黑客

数额如果巨大的话,通过多方合作还有不少方法可以找到人的,比如查看黑客使用的地址之前是否有 ip 登陆 etheraacn 查询过

二、法

“法“是指策划制定符合事物规律、规避风险和实现愿景的目标、方法、方案、行动路线

程序员可以通过编写代码,跳过前端页面,设计规则,直接和区块链进行交互,来达成想要的结果。社区对不同场景进行过讨论,总结如下,部分需要有一定的背景知识才能读懂。

web 风控

web 风控有查 IP、设备指纹算法、CloudFlare

一般的买节点然后换换 IP 就可以。也可以接第三方的 IP 库。为了获取过风控接口数据,可以用那种垃圾的海量 IP。为了长期使用来维护账号的固定 IP,舍得花钱的话就 luminati 租,911 和 s5 也可以,每个月几刀。

过设备指纹算法,简单的可以用 chrome 自带的多 profile,可以隔离 cookie,但还是有被检测到的可能。专业的可以用指纹浏览器,每个配置指向不同的代理端口。

CloudFlare 的风控可以使用 CloudFlare 自家的 pages 服务,用自己家的矛戳自己家的盾。用 Pages 代理走一成流量。

养多号

养号的原因是,很容易被风控,要求认证手机号,而且 GV 这种号还不行

注册:Discord 可以用 Gmail 注册,推特可以用 GV。用接码平台容易被人改绑,不靠谱。也可以直接去淘宝买海外电话卡来注册。可以尝试的还有移和多号、无忧行香港号、无忧行 app、易博通、腾讯微小号等。GitHub 上还有批量注册 Discord 的代码可以参考。

操作:可以用 chrome 分身并写代码把类似 canvas 的特征去掉,或者直接用指纹浏览器。然后用 playwright 或 selenium 来群控,也可以直接抓 Discord 的接口发消息。无法技术解决的可以花几百块钱找大学生来点。

签名

Metamask 弹出的签名,除了模拟点击,也可以直接用 web3 的 签名方法去签名然后 Post

签名的内容,推荐直接去 Dapp 的源码里面去拿,或者把页面下载下来去查找。

签名的算法有多种,需看看小狐狸文档。

Post 的目标地址,如果开源就直接去源码找。如果没有源码,可以在扩展插件里找到 metamask,有个查看视图 background.html,会出来个开发者工具,里面就是 metamask 的请求。

监听

监听可以用来判断是否有合约创建,添加了流动池,或者交易跟单。

监听事件可以用 etherscan/bscscan API,但是有频率限制。

监听 mempool,公共 RPC 都不提供内存池,得自建。也可以用 blocknative 的服务,但是贵

查历史记录

历史记录主要用来做数据分析

可以用 bitquery 按条件查询

可以自建节点查询。以太坊节点拿双核 4G 机器都能跑,对于 bsc 不推荐自建,tps 比较高处理不过来

tokenview 在卖多链的全套服务,价格不便宜,适合后端使用,并且自己还要做缓存

相比 etherscan、 bscscan 的会员,不如买 nansen

白嫖 Key

infura 有限制,但可以白嫖,有几种方法

  1. 去 Github 一搜一大堆,用别人的
  2. 那 zapper 或者小狐狸的 infura
  3. 自己多申请一些做轮询

抢购

讨论过两种抢购,一种是商品上架抢购,一种是合约写好时间的申购

对于商品上架抢购:挂单和扫货可以在一个区块,一般都是相同 gas 做,但是不一定中,可能会排在挂单前面,而且需要节点速度快。通常是在后一个区块拼竞价。选用哪种方法主要看实际情况,比如是否有同行竞争。

对于合约写好时间的申购:建议提前几秒一直发送交易,手动做 nonce +1,浪费点 gas 可以保证每个区块都能挤进去。

闪电贷

闪电贷只是指最终实施时候用到了闪电贷,但是攻击本质还是合约有漏洞,有利可图。难点是挖掘这种攻击机会

闪电贷套利的例子,有兴趣可以在测试网上玩玩

另一个闪电贷套利的教程

碰撞私钥

从数学上来说很难,像在海滩上找沙粒

从人入手最简单,比如监控手机钱包剪切板之类的

碰 bip39 或 bip44 里常用单词的助记词更靠谱一些

有碰私钥的计算能力,直接挖矿保证赚更多

随机数漏洞

扳手腕之前有随机数 bug,开卡随机数是用的当前区块信息,如果用合约去执行开卡,如果根据当前区块信息计算出来的卡不是高星的,直接中断后续代码执行。后来采取了发 nft 不在同一个区的方案,避免了这个 bug

主网的狼羊游戏之前也有过随机数漏洞。可以通过 flashbots 去 mint 然后 stake,如果 mint 出来不是指定的动物,stake 就会失败,两笔交易就会一起失败。只有主网的游戏才能用这个方法

私钥救援

群里出现过两次私钥泄露,一次是在 GitHub 上传了私钥,另一次是用了 Dapp 网站生成的公私对

私钥被泄露后,转进去的 ETH 和其他有价值的币马上就会被清道夫转走

黑客使用了 Permit 来授权,并用 flashbots 代付手续费打包交易,转移了 UniV3 NFT 资产

后来社区成员在 ENS 和 PSP 发空投时,通过 flashbots 在同一区块里领取空投并马上转移,拯救了被泄露私钥钱包的空投。 参考代码

私钥上传时一定要注意放在 .env 中。如果是 vps 上跑程序,不要用明文的私钥,自己设计个复杂的加解密的算法。

三、术

具体策划制定具体实施的技术层面的方法、技巧,以有效的做好每一件事

大多数的问题可以通过谷歌和文档找到,少数问题不好找,需要一定的技巧和经验。这部分可以大概看一下,遇到相似问题就有思路解决。

解析交易 Input Data

对于没有开源的合约,需要自己手动解析 Input Data。

比如这样一段的 data:0xa9059cbb000000000000000000000000b8790157b2e27f2a81d3ca72752fd1a46b87c9940000000000000000000000000000000000000000000000000000000000000001 进行拆分,前面 4 字节(除去 0x)是方法,后面 32 字节,32 字节这样拆 拆开就是: _0xa9059cbb(MethodID)

0xa9059cbb(MethodID)这个方法是什么,可以无视,能直接复用就行,直接看后边猜猜是什么。也可以搜索一下类似的,现在几乎没原创合约。

0:000000000000000000000000b8790157b2e27f2a81d3ca72752fd1a46b87c994 这个一看就知道,是个地址 1:0000000000000000000000000000000000000000000000000000000000000001 这个靠经验看,就是 16 进制的数量了

只要有网站,就能拿到 abi,拿到 abi 后用函数加上入参类型,sha3 哈希下,前四个字节就是调用的函数

方法名和参数,小狐狸发送交易的时候也会有提示

实在找不到,调用的时候方法名可以直接写 0xa9059cbb 也可以

更详细的可参考以太坊 Input Data 解析我们为什么需要交易数据?

数值转换

Q: 这个要怎么转换:_“amount”:“0x0233c8fe42703e800000”_,16 进制转 10 进制

A: 0x0233c8fe42703e800000 == 10400000000000000000000 去掉 Deciamls 18 == 10400

A: ethers.utils.formatUnits("0x0233c8fe42703e800000", 18)

合约间交互

有人把「发 mint 交易-查 id-判断-取消交易」 的逻辑做成了合约用于开盲盒,中间会涉及到智能合约中调用字节码。

合约间调用,直接用 call 调用即可。

还有个 delegatecall 方法,类似 call。不同的是 A 合约 delegateCall B 合约时,可以使用 A 合约的存储、msg.sender 和 msg.value

前端数字更新

Q: 页面上有个数字一直在变动(该数字是质押挖矿后,待收获的矿币数量)。我想知道这个数字是由前端页面的哪段代码来负责更新的呢,有没有思路?

A: FarmStakingCard.tsx

swap 分析

Q: 如何获取交易对

A:var pool_address = await uniswapFactory.methods.getPair(input_token_address, out_token_address).call();

Q: uniswap router 上的 swap function 沒有要输入 slippage tolerance, 那如果用 web3 交互应该怎么调这个参数?

A: minOutputAmount,最少也要换到这么多币,slippage tolerance 在发送转账的时候实际上也是被转换成了这个,只是用 slippage 更直观

opensea 相关

Q: opeasea 如何点赞?

A: 先签名 login。然后拿到 token,存下来。带上 token ,拼个请求 post 过去就行了。你可以走一遍流程,看看自己签出来的和小狐狸签出来的一样不一样。

metamask 自动登录

Q: selenium 怎么让 metamask 来登录的?

A: Google\ Chrome --remote-debugging-port=9222 --user-data-dir='~/ChromeProfile'直接用 chrome app 开一个 debug port (即先登录好 metamask,程序再 attach 到浏览器)

A: 点击按钮弹出小狐狸后,可以轮询窗口获取到小狐狸

sol 相关

Q: 请教下,solana 中的 uint8 array 格式的私钥, 怎么通过 javascript 变成 sollet, mathwallet 等钱包支持的私钥格式呢?

A: const keyOutput = isArrayFormat ? `[${[].slice.call(wallet.provider.account.secretKey)}]` : bs58.encode(wallet.provider.account.secretKey); bs58.encode 在一个 solana 钱包的 GitHub issue 看到的。

Q: 话说 solana 上,只是转一下 token,咋这么麻烦?getOrCreateAssociatedAccountInfo, 这都啥玩意?

A: 它的账户体系,是每个代币都有自己的合约地址和收款地址,一开始真的好多人转账出错 现在是统一账户,但是实际上你转账,是要转给目标账户下跟这个 token 相关的账户 现在改成 如果你账户里已经生产代币的收款地址 那么就是获取地址转账 如果没有就帮你生成一个 再转账 你去 explorer 看就知道了,A 转给 B,实际上是 A 地址跟 Token 关联地址转给 B 地址跟 Token 关联的地址。 所以你看代码,他首先获取了 mint 这个玩意,用它来取得 A 和 B 地址下 跟 token 相关的子地址,然后作为参数去转账的。

A: 我说下 sol 链的理念,按照这个去想,有些事就能想明白了,sol 你把他想成一个 Linux 系统,里面所有的地址就是你系统里的文件,所有信息都是存在不同的地址里的,这些地址生成的 owner 就是文件信息的所有者。按照这个理解,比如你创建了一个钱包地址,这个就是你的 root 身份,你有不同的文件需要存储,对应于 sol 上就是你有多个币需要存放,那就是多个不同的地址,地址由 mintAddress 和你当前的钱包地址计算得出

A: spl 我觉得就像是 sol 官方出的 openzeppelin,很多合约进行标准化了。sol 和各种 token 的转账,都是通过系统内置的一个 program 来转账的。官方提供了很多的 programid,这些就像标准函数库,你就直接构造他们需要的参数直接调他们就行了

web3js & ethersjs 相关

与 web3 相比,ethers 执行合约函数极其简单,它封装了很多细节,只需要:

1 实例化合约: contract = new ethers.Contract(合约地址, 合约 abi, provider);

2 使用钱包对合约进行签名: contractWithSigner = contract.connect(wallet);

3 调用合约函数: tx = await contractWithSigner.函数 A(参数 1,参数 2); 这样就可以与链上合约进行交互了,进行质押、转账、swap 等。 不需要像 web3 一样手动设置 from to value data 等交易参数

Q: transfer 和 web3.eth.sendSignedTransaction 还有 methods.myMethod.send 这些有什么区别

A: sendsignedtransaction, 一个是合约内函数,一个是 web3 提供的访问 ethereum 的方法

Q: 有没有计算 gas 的好方法,用 gasEstimate 的结果和 metamask 的不同

A: Metamask 大概乘了个 1.5

Q: 转账出现 invalid sender 错误

A: ethereum-tx 在 bsc 上要自己定义一个 forCustomChain

nonce 处理

Q: 如果我有笔交易 nonce 是 1 pending 中,然后又产生一笔交易 nonce 是 2 跟着 pending,如果我这个时候手动指定 nonce 为 1,抬高 gas price,是不是也没法成功冲掉前面两笔交易了?

A: nonce == 1 的交易会成交, 之后 nonce == 2 的交易如果 gas price 够的话 也会跟着成交,evm 链的都是这样的

Q: 在 metamask 里没法发起 nonce 为 1 的交易了,用 web3.py 去发起个交易倒是会提交成功生成 tx hash 但是老是不成功

A: 重新构造一笔交易,和以前的那笔交易数据一致就行,nonce 和卡主的那笔交易一样, gas 提高一点,这样可以覆盖掉前面卡住的交易

Q: 程序批量发了 10 个交易 nonce 在累加。然后一直不上链, 我等了一会以为卡住了。这个时候 我发了一个 高 gas,nonce=第一笔交易,然后卡住的 10 个交易, 瞬间就打出来了。是怎么回事?

A: nonce 必须一次确认 比如现在 10 没确认, 10 后面的 nonce 都不会得到确认。要依次确认,只要第一笔卡住了,后面就都卡住了。相同的 nonce 被覆盖的交易不会消耗 gas,不会上链的。

四、器

在做事时使用适宜的工具器具,以保证达到“术”的结果,提高“术”的效率

React vs Vue

框架只是工具,自己擅长最好

React:1. 海外区块链项目基本都是 react,有很多代码可以参考,比如 uniswap-interface; 2. 岗位需求大; 3. react hooks 上手快

Vue: 1. 包体小,省 CDN 的钱;2. 一看就是国产项目

Rust

SOL、ICP、DOT、NEAR 的开发都是用 rust

学习 rust 的教程

Solidity

IDE 推荐用 Remix

Capture the Ether 是一个游戏,在这个游戏中,你要入侵以太坊智能合约,以了解安全问题。

辅助参考资料: 解答 1 解答 2 解答 3 解答 4

flashbots

用来打包交易和避免失败的神器

有群友用来领取私钥被泄露钱包的空投

flashbots 对矿工是有利的,有 80%+的矿池都支持了,有专有的 API 文档

官方制作的手把手教编写 flashbots 发送交易的视频

反编译工具

反编译整个合约 ethervm 查找函数名 4byte.directory

合约调试

Q: 问一个问题。现在有什么好用的智能合约调试器吗?类似通用 ide 的

A: hardhat 可以打 console.log,还行

Q: 话说除了 remix 这种在线的,合约的开发与编译调试有本地的工具吗?

A: truffle compile

VPS

Q: 性价比比较高的服务器商,都有哪些啊,国外的

A: contabo(用国外的邮箱注册、美西最快)、linode、datapacket、hostloc、hetzner

批量转账工具

disperse.app banteg 开发好现成的了,直接用就行。省很多的 gas,转越多省越多

去其他链用的话,我就直接拿他的 code 去其他链 deploy 一下,都不需要编译了

指纹浏览器

指纹浏览器就是一个浏览器可以开几百个指纹不一样的独立应用,自动生成字体,系统语言这些指纹信息的一套环境

免费的可以试试 Ghostbrowser,免费可以开 3 个 session 好像

刷 coinlist 用 adspower 指纹浏览器,价格还可以,50 刀 200 个号

生产电脑

Q: 想买个 mac,请问大家是推荐 M1 还是 intel 的,主要开发用

A: 前端买 M1 可以,后端用兼容性不行,各种包安装很麻烦。

A: 我是 air,拿 m1 咖啡厅可以待一天

A: 我有 mac 也有 win 的台式机,讲道理,我觉得用起来都差不多,在家台式,出去都是 mbp

邮箱注册

Q: 有什么好用的邮箱, 可以生成很多个子邮箱那种。 大佬求推荐个

A: 这是个简单好用的邮件转发系统,两行代码就能跑起来,我用这个,注册了一大堆 discord

A: 用了下谷歌的 add+无限邮箱 还可以

A: 直接用谷歌手机注册真实的 gmail 账号、ip 够干净可以无限注册不要手机号

节点服务

节点就那几家有卖的,infura,quicknode,alchemy,ankr,你花钱给他,他给你个节点地址,包括 wss 都有

自己跑节点至少 500-1t 的 ssd,你还很折腾

blocknative 专门做 mempool 的,是贵,但是真的特别及时

节点服务都很贵,如果量大,自己搭划算一些