本文素材来源于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 有限制,但可以白嫖,有几种方法
- 去 Github 一搜一大堆,用别人的
- 那 zapper 或者小狐狸的 infura
- 自己多申请一些做轮询
抢购
讨论过两种抢购,一种是商品上架抢购,一种是合约写好时间的申购
对于商品上架抢购:挂单和扫货可以在一个区块,一般都是相同 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: 页面上有个数字一直在变动(该数字是质押挖矿后,待收获的矿币数量)。我想知道这个数字是由前端页面的哪段代码来负责更新的呢,有没有思路?
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
Solidity
IDE 推荐用 Remix
Capture the Ether 是一个游戏,在这个游戏中,你要入侵以太坊智能合约,以了解安全问题。
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 的,是贵,但是真的特别及时
节点服务都很贵,如果量大,自己搭划算一些