我第一次看见uniswap的时候,挺震惊与兴奋的。不是建立在任何中心化的服务器上,任何人任何时候都可以去进行交易。去中心化交易所的尝试之前也不是没有过,但之前这类dex是无论从用户使用体验,还有用户量,还有交易金额都基本上都是相当于小众的玩物。当又看到gelato, 第一反应这不就是把定时自动化任务搬到链上了。随即触发了我的兴趣点,模糊与朦胧之中感觉到这里面有很多好玩的事情。
不是说web3一定会改天换地,但是基于三点,一是不仅仅是信息的传输与处理,而且是价值的传输与处理,思考一下,我们通过程序对于信息的处理达到任意颗粒度,任意级别,如果对于这种处理能力作用于价值将会什么效果?第二点,链上交互与信息对于所与人开放,这种开放本身与开源软件本身有一脉相承的感觉。第三点,可组合性,链上合约本身的功能天生就具有可组合性的特性与需求。基于如上三种特性,感觉就相当于突然爬上一座山峰,映入眼帘的是一片广袤的平原。
但与此同时,金钱会让人趋之若鹜。群体性的疯狂不可避免的会出现一些噪音,进而更进一步会放大某些噪音。我记得bankless有一期节目,好像是polygon投资人聊过对于这个行业的看法。其中polygon创始人提到了一个数199,即这个行业只有1%的人是真正的建设者或者有意思的人,另外9%则是投资机构,个人KOL之类,另外99%则是大众。所以,在这种喧闹之中,各类信息之中,有一个问题经常会触发我的神经?那就是什么是噪音,哪些应该去屏蔽?gabage in, gabage out. 如果吸收过多的垃圾信息,那么个人的输出或者产出质量也不会高。同时也会影响吸收有营养,有价值的信息或者知识。每个人的一天就只有24小时,为什么要把注意力贡献给这些噪音呢?
所以,从一开始我就思考应该关注哪些内容,哪些让人感觉到有意思,有挑战,充满新的可能性的事物? 与此同时,即便会遇到一些不那么美丽的事物,但是一些意料之外的惊喜链接与新的思考,还是挺能激活人更多鲜活的情绪与热情。
本文着重从三方面来说,我觉得哪些方面需要关注。
1.技术的演进与相应的技术栈
计算机形态演变
不同的开发范式
如何武装自己的技能栈
进阶实践与指导
EVM的深入理解
2.市场状况与产品形态的演进与尝试
不同架构下不同的产品
web2与web3下的金融产品
哪些天生的不同点值得关注
3.不同地域,不同语言,不同社群的差异
社群影响权重的上升
我眼中的中美之间的一些差别
这种差异可能释放出来的可能性
1.技术的演进与不同的实现方案。
1)计算机形态演变
首先从计算机的发展形态而言,从个人计算机(单机版的应用), 再到移动手机(不受限于地理位置),应用程序的服务化(CS客户端模式),中心化的服务器,云服务。在这之前,计算机所提供的服务本质上都是有一个独立的实体去进行维护的。分布式技术发展以来,出现了多点维护的服务,如分布式分享文档。但是这种服务也仅仅陷于分享文档。更多更复杂的应用还不能实现。
BTC本身从最初的设计而言来讲,也仅仅更多的是作为一种货币的交易媒介。尽管这种形式在人类历史上从来没有过。基于分布式技术之上提供更多的功能,就像我们现在使用手机上的各种app的功能一样,没有这样的基础。但是ethereum等公链,基于智能合约本身则让这一切有了涌现的可能性。
令我感到兴奋的则是,这就想一个超级大计算机,任何人只要联网都可以进行交互。只不过这种交互方式与我们之前通过计算机或者手机那种方式不一样,即便与这个超级大计算机交互的媒介也是通过计算机或者手机。
1.无许可性(任何人,任何时间,任何地点,只要有最基本的网络与硬件就可以交互)
2.底层运行基础基于分布式技术,任何中心化实体无法操控。
3.当前的交互方式与呈现内容也不一样。 实质则是链上的一笔笔交易(TX).
本质上是如下的数据结构
source:[noxx](https://noxx.substack.com/p/evm-deep-dives-the-path-to-shadowy-16e)
单纯的讲想想这就是一个超级大计算机,世界上任何人都可以玩,也许是这辈子都不会有交集的两个人。这件事情本身就不是很有意思吗?
不同的开发范式
对于曾经作为一名开发人员而言,这种不同感,则会更让人深受震动。这是两种不同范式下的开发模式。如下的视频对我触发很多,非常值的观看与思考。
DappCamp X Rajeev Gopalakrishna : Web 3 Security
不同角度下的不同点
keys and tokens
unstoppable and immutable
Open- source and transparent
Pseudonymous Teams & DAOs
New Architecture, Language & Toolchains
Composability by Design
Compressed Timescales
Test-in-Prod
Byzantine Threat Model
(who you trust and who don't you trust)
every actor could be malicious.
Miners,validator,infrastructure provider, developer,
Team,users,
Anyone could be a threat
Audit-as-a-Silver-Bullet
对于web2与web3的不同的架构,很多人应该很熟悉了,但是更多的其他角度,我觉得可能关注较少或者思考较少,比如从信任模型来说,传统的web2开发,谁可能是潜在的攻击者,是内部人员,还是外部人员,更多情况下这些评判都很明确。但是基于web3,任何一个参与方都可以是恶意人员,矿工可能是,验证者可能是,团队可能是,甚至开发者,用户都可能是。基于这些如和考虑安全?而如上的可能是,当前很多也已经发生了很多对应的案例。
如何武装自己的技能栈
在了解,编写智能合约以及进行交互的过程中,让我感受效率特别低的一个地方就是快速获取我想要的数据。传统web2开发时,基本上只要对于表数据结构很熟,很快就可以通过SQL等相关语句快速查询到想要的数据。或者通过IDE工具快速获取系统运行过程中的状态数据。
但是如果想要快速获取相关区块数据或者按照自己的需要快速获取数据,在我看看来往往是一种组合操作,需要对于一些工具达到一定程度的熟练运用,以及对于区块数据结构很熟悉。
所以,有一个问题我觉得很有意义。如何按照自己的需求快速获取区块数据?就像传统的web2开发一样。进而如何更快速的与和合约交互?
这个问题可以分为几个层面。
1.对于链上数据结构的深入理解
链上的数据结构如区块头,区块本身,区块本身包含的交易信息,日志信息,收据信息,Merkle数的信息。
又比如dune对于区块信息的封装
1.其将基础数据如区块信息、交易信息(TX)、状态信息,进行抽取,链上发生的每次操作都会反应在每条交易信息中(TX)。接着基于这些基础数据再根据各种需要,如是查询协议数据(如uniswap2交互的所有地址),还是查询相关操作的数据(如通过sushi一个池子进行交易的所有地址),进行封装,方便查询。
2.基于不同的需求而进行抽取的表,这里称之为abstractions(https://github.com/duneanalytics/abstractions…),比如将所有链上的ERC-20 token代币基础信息放入erc20.tokens表中。同时用户或者项目方也可以根据自身需求添加。这是动态扩展的。
3.数据的抽象层次根据需求可以进行分类,比如项目数据、合约数据、一些常用数据如即时价格数据、NFT数据,基本上我们能想到的需求,都可以根据基础数据或者已经封装好的表进行再次分析得到目标结果。
4.上面是粗略介绍其表结构。当然其还有很多有价值的功能,如数据可视化、查询其他大牛已经写好的sql。我个人认为如果这一领域未来影响力越来越大,那么链上数据分析将价值极大,对于有编程基础或者对此感兴趣的人而言。将是很好的工具库,随着了解与熟悉程度的加深,只会越来越有价值。
2.如何获取数据
获取数据的方式包括但不限于以下几种方式
geth客户端,命令行模式
etherscan 浏览器查看
dune, sql查询
常用的开发工具如Hardhat,forge(cast)
…
从编写程序的角度而言,当然是基于开发工具快速获取数据效率较高
比如通过hardhat, 可以自定义脚本的编写task, 从而可以集成到自己其它程序如shell中。
Hardhat.config.ts(配置一个获取当前合约code的task)
task("getCode", "Prints smart contract bytescodes by address'")
.addParam("account", "The account's address")
.setAction(async (taskArgs, hre) => {
let code = await hre.ethers.provider.getCode(taskArgs.account);
console.log(code);
});
命令行模式直接可以调用该task
npx hardhat getCode --account 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D --network goerli
forge cast(提供一些命令行方式)
获取与当前同一时间,2021年3月份的区块数据 (environment: mac)
date -v21y -v3m "+%s" | xargs cast find-block | xargs cast block
针对链上的不同数据,都可以根据自己的需求去实现快速获取,同时社区也不断涌现出更多的工具,很方便去进行交互。如
ctc
进阶实践与指导
如何成为一名web3开发者?我想是很多想进入这个行业的人非常想咨询的一个问题。整个社区也不乏很多热心者基于自己的经验去分享,有些也很有指导意义。
Roadmap for Web3/Smart Contract Hacking | 2022
1. Learn Blockchain Basics and Ethereum.
2. Smart Contracts and Programming Language.
3. Learn Testing Frameworks like hardhat/foundry
4. Learn Finance Basics.
5. DEFI and DEFI Attack Vectors:
6. Learn Commonly used Libraries and Token Standards:
7. Learn common Smartcontract bugs, Tools and best Practices
8. Complete CTF challenges.
9. Read Audit Reports and Postmortem Blogs:
10. Continuous Learning and Research
这里面容易被忽略的则是第三点,基础的金融知识。对于defi而言,其也提供了类似传统金融机构的功能如交易,抵押,借贷,衍生品交易。但这里面有相同点,也有不同点,比如floashloan传统金融就不存在。可以肯定的是随着市场的发展,相关的产品机制会越来越复杂。
这也是我个人感受特别深的一点,即当前web3的开发与传统web2的开发存在很多不同点,甚至本质上是两套不同的思维体系结构。
1.底层设计体系与思想的不同
2.开发工具的不同
3.对于安全需要从更多的角度考虑
4.产品本身就是跨区域,跨国界
5.社区力量的促进作用
6.业务逻辑的创新,理解与思考
other references:
EVM的深入理解
让我对EVM开始重点关注一是看到基本上头部协议的招聘要求都有写到对于EVM达到深入理解,另外一点则是基于自身过往的学习经历,gas优化与安全很大一部分也与EVM相关,第三点则是个人感觉evm是整个以太坊的核心功能,如果对于其达到一定理解,那么基本上所有的EVM链则可以快速熟悉,同时即便是非EVM链也有借鉴其的设计,这样了解其他非evm链也会更加轻松。
而在之前从事开发的时候,java语言是基于java虚拟机运行的,java虚拟机本身的设计则兼容了不同的平台,这样可以让java语言跨平台运行。而java虚拟机实际运行的时候就是一堆字节码。但是我从来没有深入理解其具体机制。联系到计算机本身处理的指令集,其本身也是一堆事先设计好的操作符,用来进行计算机最基本的运算。只不过EVM的设计本身是存粹基于软件设计的。尽管不是很熟悉,但是感觉这里面的设计有些地方是一脉相承的。
如上让我觉得深入了解EVM是一本万利的事情,同时看到社区有很多人写的很棒的资料,引导读者深入掌握,让我感觉太棒了,之前感觉非常高深的东西,竟然一步步被自己逐渐消化。
source: [Mastering Ethereum by Andreas Antonopoulos and Gavin Wood](https://github.com/ethereumbook/ethereumbook/blob/develop/13evm.asciidoc)
手把手教你理解EVM
理解EVM所有的存储位置
evm最全参考资料