Telegram Channel
记录和分享有趣的信息。

Record and share interesting information.

contact: [email protected]
- blog: https://blog.laisky.com/amend/web3-101/
- slides: https://s3.laisky.com/public/slides/web3-101.slides.html#/

做了一个面向新人的 Blockchain/Web3 技术入门分享,内容很浅,主要是相关概念的介绍,希望能帮助新人快速入门。各位有兴趣的话可以看看,有什么疑问或建议也欢迎在评论里讨论。 #blockchain
最近都在看这部记录中国人从偷渡美国的纪录片 'Walk The Line'(走线)。记者从厄瓜多尔开始,追踪了几个中国家庭的偷渡之路。为了遵守美墨法律,记者不能为偷渡者提供任何帮助,而且出于对黑帮的畏惧,记者也无法跟随他们同形,只能在各个中途站等待偷渡者。三部曲讲述了偷渡客的动机、历程和进入美国后的境遇,也算是对一个时代的记录,值得一看。

part 1: https://youtu.be/ukkLIFQWG4g?si=ILAmx3yYfPELU8cI
part 2: https://youtu.be/qW5V_nvd_vk?si=Ti9mknwnFv526aWC
part 3: https://youtu.be/erPlVX5fZaY?si=I_j7ijs5Jq6jSB14
花了两天时间总算看懂了 KZG 证明😢

如果你熟悉 Merkel-tree 的话,那么可以很容易理解,KZG 的功能完全一致,试图利用一个很小的承诺(Commitment)保证一大堆数据的完整性。在 Merkel-tree 中,Commitment 就是它的树根(Root)。

KZG 的优点在于,当你需要验证消息的完整性,比如某个点确实存在于这个数据集之中时,它所需的计算是常量级,而 Merkel-tree 需要提供所有相关路径的 HASH 值,计算复杂度为 O(logN)。所以在数据量较大时,KZG 会更有优势。

具体的证明过程就不在这里细说了,详见笔记 https://laisky.notion.site/Kate-Zaverucha-Goldberg-KZG-Constant-Sized-Polynomial-Commitments-Alin-Tomescu-30c1406d97fa4ecaa5190827d65faa9b?pvs=4

#blockchain #crypto
读完这本币圈圣经《货币的非国家化》(Denationalisation of Money)。这本书的出版时间正好与RSA算法发表的同一年,1978年。此前也分享过一片介绍加密货币起源的文章

自二战以来,世界范围内的政策和舆论深受凯恩斯主义的影响。凯恩斯主义认为央行可以通过货币政策进行逆周期调节,以维持金融稳定,并相信温和通胀对经济发展是有利的。

然而,哈耶克则驳斥了上述观点。他认为政府对货币的垄断是一切金融危机的根源,通胀无论程度如何都是有害的。逆周期调节只能使危机延迟并恶化,而不能真正解决危机,甚至认为危机本身就是法币通胀导致的。哈耶克进一步指出,亚当·斯密在论述国家职责时,根本没有提及货币发行权。事实上,国家对货币的垄断是一件相对比较新鲜的事情,但如今法币的垄断已经成为政府最重要的权力之一。

哈耶克主张货币的发行应当是市场驱动,而不是政府控制的。他认为,货币发行应当是竞争性的,而非垄断性的,去中心化而不是集权化。所有金融机构都可以提出一篮子货物作为价值锚点,发行自己的货币,而市场将自然选择最优质的货币。当人们以某种货币签署合同时,计算的是其所代表的真实价值。如果一个合同因为通胀不断贬值,债务人可以通过时间化解债务,这对于债权人是不公平的,也动摇了市场稳定的契约基础。

哈耶克的这些理论在加密货币世界得到了实践。然而,天然通缩的货币似乎必然导致财富的集中。比如,早期持有BTC的人富可敌国,而晚入场的人只能望洋兴叹。可惜的是,哈耶克对此问题并未作出论述。 我又考虑了一下,BTC 是天然通缩的,但是哈耶克设想的货币是锚定真实商品,应该是既不通缩也不通胀的,BTC 实际上并没能实现哈耶克的设想。
#blockchain
https://laisky.notion.site/Solidity-delegatecall-usage-and-pitfalls-3833eadc06ae4528bfa23d194ea8d3cb?pvs=4

前文介绍了 solidity 中变量的持久化存储方式。而我们之所以关心变量的存储位置(slot),就是因为在使用 Proxy 模式时,需要在合约间共享变量,而合约间变量的共享方式就是通过 slot 对齐的。

合约一旦发布就是只读不可更改的,如果想要修复 bug 或升级功能而发布一个新的合约,那么就会得到一个新的地址。为了在保持地址不变的同时更改合约的代码,最常见的实现方法就是使用 Proxy-Implementation 模式。发布一个 Proxy 合约作为接口,地址永远不变。但是实际的业务代码指向 Implementation 合约,implementation 合约可以不断地升级迭代,只要同步更新 Proxy 合约的指向即可。

实现 Proxy 这一功能,依赖于 solidity 的 delegatecall(),这个函数可以让 Implementation 使用 Proxy 的上下文,即内存数据和存储。而这个数据共享的前提,就要求 Proxy 和 Implementation 的变量声明按照 slot 进行严格的对齐。

按照目前最推荐使用的 UUPS Proxy 模式(UUPS 简而言之就是将升级 Implementation 的 upgrade() method 也放在 Implementation 内定义),为了减少 Proxy 和 Implementation 间的变量冲突,一个最佳实践就是不要在 Proxy 内声明任何非必需的变量,理论上 Proxy 内仅需要定义 owner(设置管理者) 和 implementation(设置 Implementation 的地址) 两个变量即可。所有的业务数据,全部仅在 Implementation 内定义。当 Proxy 使用 delegatecall() 调用 Implementation 时,Proxy 的存储空间会被共享给 Implementation,所以虽然变量仅定义在 Implementation 内,但实际上全部存储于 Proxy 的存储空间内。当 Implementation 迭代升级时,新版本的 Implementation 内的变量声明必须严格对齐于旧版本,仅允许在尾部添加新变量,不允许修改或删除旧变量(append-only)。

此文详细介绍了 delegatecall() 时,Proxy 和 Implementation 间变量对齐的注意事项和案例。 #blockchain #evm Solidity delegatecall usage and pitfalls | Notion
https://laisky.notion.site/Bitcoin-s-UTXO-Model-What-Is-It-and-How-to-Manage-UTXOs-River-d92673a0172841429ec5f998d49f101f?pvs=4

区块链的分布式账本有两个主流实现方式:账户模式(account model)和 UTXO model。

Ethereum 和传统金融(如银行)都采用账户模式,也就是在持久化的数据中,存储账户和余额。这样做的优点是更简单,但是要追踪每一笔钱的去向就变得比较困难。

BTC 采用的是 Unspent Transaction Outputs(UTXOs)模式,每个地址下记录的是尚未消费的入账记录(UTXO),每一个 UTXO 都包含一个金额和其源自的交易(Transaction ID)。每一个交易都由若干个 inputs 和 outputs 组成,其中 inputs 就是付款方支付的 UTXOs,outputs 就是收款方收到的 UTXOs。每一笔交易都会销毁输入的 UTXOs 同时诞生一些新的输出的 UTXOs。通过回溯交易历史,每个 UTXO 最终可以追溯到其由矿工挖出时产生的 coinbase 交易(coinbase transaction)。

综上所述,实际上每个人账户中的每一笔 BTC 都不是完全同质化的,它们可以通过 coinbase 交易 ID 和输出编号(output number)进行唯一识别。正是利用这一点,构建了 BRC-20/BRC-100/BRC-420 等 FT/NFT/铭文生态。

BTC 的每一笔交易的转账费用也通过其中所包含的 UTXO 数量来确定。因此,作为私人钱包管理者,应该尽量避免持有大量小额 UTXO。在网络转账费较低的时候,可以通过将小额 UTXO 批量转账给自己的方式,以较低成本将其融合成一个大额的 UTXO。如果一个 UTXO 的面额小于转账所需的费用,那么这个 UTXO 实际上已经失去了价值,被称为比特币尘埃(bitcoin dust)。 #blockchain Bitcoin’s UTXO Model: What Is It and How to Manage UTXOs | River | Notion
读完 《工作的意义》(work: a history of how we spend time),这书很有些反常识。

首先通过朱/霍安西部落(Ju/ hoansi)的事实,证明热带和亚热带地区的原始人类是无需操心生计问题的,青壮年每周工作 15 小时就满足自己和家人的生活所需,包括对老人的赡养。这些部落成员的大部分时间,都是在休闲和娱乐。

既然古代人类并不需要长时间工作来养活自己,那么现代人为什么要工作如此长的时间?现代经济学建立在对“资源稀缺性”的假设上,其中的最为臭名昭著者莫过于马尔萨斯的人口论。但其实人类的资源稀缺很可能发源于农业时代,农业的生产特性迫使人们开始习惯于延迟满足和私有产权,这种习惯催生了欲望和贪婪,进而导致了资源的稀缺。

人类进入工业时代后,生产力得到极大解放,凯恩斯在 1930 年预测,预计到 21 世纪初,随着资本、技术的积累,世界的物质会极大充裕,每个人满足日常所需的工作时间应该少于每周 15 小时。但是现实却是,人们的工作时间越来越长,工作的压力越来越大,幕后的推手显然不是资源的稀缺性。现代社会的驱动力,逐渐从对物资匮乏的恐惧,转变为消费主义对无尽虚荣的追求。

另一方面,越来越多人开始试图从工作中寻找意义,工作不再仅仅是为了生存,而是为了自我实现。这种转变,可能预示了工作的某种本质。一切的生命体,都在试图加快熵增的速度,而智能体更是其中的佼佼者。我们的由神经网络所构成的大脑,依赖于不断地练习来增强自己的能力,而工作,可能就是这种练习的一种外在形式,人们总是会寻求不断地从事某项活动,对很多人而言,这种活动就是工作。实际上绝大部分人的工作对于社会而言都并不会创造任何价值,而只是一种参与法币分配游戏的手段。

雄性织布鸟会重复建造结构精妙的鸟巢,一旦完工,它会再付出同样的努力,一根根地仔细拆除,然后再重建。这种行为,看似毫无意义,正如同人们的工作。
https://youtu.be/yKtw4of-j0E?si=r_QsXJ0LCY-ozCxN

对 JPMorgan CEO Jamie Dimon 的访谈,内容是他对目前国际局势的一些看法。

地缘政治上,Dimon 认为我们目前面临着很多过去从未有过的挑战,这给未来造成很多不确定性:

1. 联合国、布林顿森林、WTO、北约体系成立以来,塑造了一个很长时间内相对和平的世界。如果俄罗斯在乌克兰战争中获胜,未来的新国际体系是会更和平还是更动荡?
2. 俄罗斯首次在侵略战争中使用了核讹诈,这给世界范围内的无核国家造成了巨大的冲击,核扩散的危机显著增加。
3. 美国过于依赖自己的军事力量,应该更多依靠经济和外交,以及更多的国际盟友和合作。

中国的威胁没有宣传的那么严重,中国的能源大量依赖进口,而在红海等关键海域,美国都有决定性的军事力量。美国还是应该尽可能寻求和中国的谈判和合作,而不是对抗。

疫情以来的大规模 QE 是前所未有的,这部分流动性仍然没有完全消解,社会的中上层仍然持有富足的流动性,这是目前社会经济数据看起来不错的原因。但是中下层人群的钱已经花完了,这造成了更大的不平等和失衡。而且目前的经济数据很大程度上都是由政策刺激所驱动的,这可能隐藏有很大的未来风险。(奥派认为政府的逆向刺激只会延缓和加剧冲击,而不能化解冲击)

最后 Dimon 还很详细地聊到了 LLM 和 Agent,认可 AI 的巨大潜能,并且建议主持人赶紧试试。
https://laisky.notion.site/Protocol-Specification-of-the-ao-Computer-9226ca385cd74a2c8716efb64704ac19?pvs=4

学习了 Arweave 生态的新项目 AO,我觉得这轮牛市大浪淘金能够看到给世界带来真正进步的技术,可能只有 ZK 和 AO。

L1 基于 Arweave,这是一种能够永久存储大量数据的区块链(区块纺)协议,具体细节这里不多说了。

AO 是基于 Arweave 的二层应用,在永久存储的基础上,构建起了一个消息的分发和处理机制。AO 负责消息的分发和存储,而不负责提供计算,它对计算节点只有一个要求:确定性。

所以这东西很像是微服务领域的 event-driven,每一个计算节点就相当于一个微服务业务节点,AO 网络会永久存储下所有的消息,而且每一个计算节点的消息都是有序的。所以每一个计算节点的任务,就是按照顺序处理完所有的消息,并且进行相应的输出,输出也是消息,也会被永久存储。

AO 的强大之处就在于,计算节点是分布式 + 并行的,每个人都可以运行自己的计算节点,每一个计算节点会有一个唯一的 process id,然后以这个 process id 为地址进行消息传输。这就为网络提供了近乎无限的并行计算能力。

从 Ethereum 的角度来说,它虽然也有无数个 EVM 在并行运行,但是最终能上链的数据实际上只来自一个 EVM,换句话说,你可以把整个 Ethereum 网络视为一个单线程的程序,这一特性为 EVM 提供了确定性和一致性,但恶果就是运算效率和吞吐极其低下。

AO 的每一个计算节点是并行计算的,而且计算节点是无状态的(计算任务是可以有状态的),并不需要存储,所以回避了分布式下的数据一致性问题。实际上计算机节点的任何时刻的状态,都可以用同一段代码和消息输入进行重现,所以计算节点根本不需要持久化存储任何中间数据。

可以期待,在 Arweave 大存储和 AO 大计算的加持下,AR 生态将会给区块链世界带来飞跃性的基础设施进步。 #blockchain

next: https://t.me/laiskynotes/249 Protocol Specification of the ao Computer. | Notion
https://taresky.com/crypto-arbitrage

虽然我不是从这篇文章入行的,但是 Taresky 这篇文章写得很好值得推荐。

自从开始套利后,感觉眼界都打开了。以前我对金融市场的理解是很肤浅的,只知道那些低买高卖,高风险高收益的交易者(traders),这些人是市场上的明星。我总是暗暗揣度自己,自认不能承受那么大的风险,也没那么聪明,这钱不是我能赚的。

但实际上金融市场上除了交易者外还有另外一帮人,称为套利者(Arbitrageurs)。交易者会用自己的本金持有商品,并且赌商品的价值会上涨;或者做空头,反正都是用自己的本金去赌商品价值的波动。但是套利者是完全另一个思路,套利者不能接受本金的损失,而只是把本金当着抵押品,去尽可能地赚取手续费或差价等一切蝇头小利。

拿文中所提到的做空对冲套利来说,其实逻辑很简单:

1. 你把自己的本金分成两半,一半做空,另一半购币
2. 如果币价上涨,你的做空合约亏本,但是购入的币价值上涨,本金不变
3. 如果币价下跌,你的做空合约赚钱,但是购入的币价值下跌,本金不变

只要币价的波动没有剧烈到让你的做空被爆仓,你的本金就是安全的,不亏不赚。你实际上赚取的,是期货交易中,做多方付给做空方的手续费,这个手续费会随着市场的交易热度动态调整,一般来说实现 10~40% 的年化收益是比较容易的。15% 的年化如果能持续五年,那就是翻一番,耐心,不要激动,做时间的朋友。

类似的套利逻辑还有很多,套利也不是没有风险的,比如交易所跑路、稳定币发行方跑路、剧烈波动导致爆仓等等,但是这个风险的概率远远小于交易者所承受的风险,比如你可以通过多交保证金以降低本金收益的方式减少爆仓风险,而长期收益可能会比大多数交易者都高。

此外,我感觉,币圈主流币的套利风险可能比传统金融更小。我认为 BTC 的存在是有客观需求的,而且 BTC 的币价在可预期的未来里是不会归零的,即使腰斩,只要耐心等待几年,总能等来下一波的牛市。而传统金融市场上的股票、期货、债券,有可能真的就原地破产,本金归零。而 shitcoins 也是真的可能随时归零的,所以我不会持有小币。

以上不构成投资建议,只是分享一些个人的感想。 #blockchain
https://youtu.be/VHcgnRl2xPM?si=4d3gUKYvN_br-hSP

这部纪录片很有意思,从伊朗和沙特交锋的角度来诠释中东近代的动乱历史。

二战后,沙特(Saudi)、伊朗巴列维王朝(Pahlavi dynasty)和西方都保持着良好的关系。直到 1979 年伊斯兰革命成功,以霍梅尼(Ruhollah Khomeini)为代表的什叶派(Shias)统治了伊朗,并开始向以逊尼派(Sunnis)政府为主导的中东输出什叶派革命,令沙特和伊拉克(Iraq)倍感威胁。

沙特本身也是一个以原教旨瓦哈比教派(Wahhabism)为核心的神权国家,在进入石油时代发了大钱后,其国内的瓦哈比原教旨势力就一直寻求在全球宗教扩张的机会。苏联入侵阿富汗(Afghan–Soviet War)后,沙特、美国和巴基斯坦联合起来组建圣战军与苏联作战,巴基斯坦政府和沙特也正好联手将巴基斯坦从一个刚从英国手中解放的世俗国家转换为了一个充满极端色彩的伊斯兰国家,战争之初巴基斯坦有 200 座宗教学校,阿富汗战争结束后,这一数字变成了 24000 所。阿富汗战争结束后,圣战军们回到了家乡,巨大的失落感使得他们与社会脱节,成为当地巨大的隐患,若干年后,他们还会再度团结起来,如扎卡维(Abu Musab al-Zarqawi)和 ISIS。

趁着伊朗革命的机会,沙特和伊拉克联合起来,发动了一场对伊朗的战争,这场战争持续了 8 年,双方都损失惨重。军备不足的伊朗使用人海战术取得了战场的主动权,然而在反攻进入伊拉克境内后,萨达姆开始大规模使用生化毒气,给伊朗造成了惨烈的损失。对这一恶行,世界舆论保持沉默,这一事件使得伊朗彻底对西方失去了信任,也使得伊朗的革命更加极端化。

之后著名的智障布什用一罐洗衣粉发动了伊拉克战争(Iraq War),推翻了萨达姆(Saddam Hussein)及其逊尼派政权,并且将所有曾经为其效力的数十万复兴党党员全部逐出政府,这一举动使得伊拉克的逊尼派势力彻底失去了政治地位,而且为扎卡维等正在襁褓中的极端势力提供了大量的人员和装备,最终导致了 ISIS 的诞生。而且失去了萨达姆这一强势逊尼派领袖后,占人口多数的什叶派势力开始取得伊拉克的政治主导权,而伊朗正是伊拉克什叶派背后的核心支持者。简而言之,美国出面除掉了伊朗最大的敌人,并且将整个伊拉克拱手送给伊朗。
https://youtu.be/0aF_-J5n1RU?si=XKnsoB5I49hmEdtm

PBS 深入阿富汗访谈塔利班官员。说实话内容比较肤浅,这记者感觉脑子也有点问题,比如在一堆塔利班武装士兵的护卫下,问阿富汗老乡“你们觉得是美军时代的生活好,还是塔利班的统治下更好?”

不过倒是揭露了美军在阿富汗失败的一个非常简单的原因:缺乏一个长期可行的目标。布什作为美国历史上智商最低的总统,他对于推翻塔利班后的计划非常幼稚(他在隔壁伊拉克的计划更弱智),将塔利班完全排除出阿富汗的新权力结构后,但是又无法对广泛的乡村地区,尤其南部地区建立起新秩序,这就导致塔利班始终保持了在阿富汗内的活跃。奥巴马上台后将阿富汗战争的目的重新诠释为“解放妇女”,然而此时整个西方对阿富汗的战争利益链已经几乎牢不可破,阿富汗的重建资金只占美国对阿支出的 0.18%。

另外一个失败的主要因素是,美国缺乏和其他国家的合作和信任,特别是阿富汗的邻国,塔利班的发源地:巴基斯坦。巴基斯坦不相信美国有能力在阿富汗站稳脚,而且巴基斯坦相信塔利班最终会重新控制阿富汗,所以巴基斯坦为塔利班提供了持续不断的援助,正如片中的一位塔利班所言:“我们在巴基斯坦接受训练,巴基斯坦人给我们提供装备,然后我们返回阿富汗炸飞美国人。

* part 1: https://t.me/laiskynotes/235
* part 2: https://t.me/laiskynotes/253
* part 3: https://t.me/laiskynotes/256
https://laisky.notion.site/Solidity-layout-and-access-of-storage-state-variables-simply-explained-6fb8c4eaca0d4004b361e4358257fa92?pvs=4

详细介绍了 solidity storage 的存储结构。每一个 smart contract 都有独立的 storage,由 2^{256}-1 个 slots 组成,每个 slot 的长度为 32 bytes。

在 solidity 中声明的 variables 都会在 slot 中从头开始逐一存放,它们存储的位置称为 slot index。

比较奇葩的是 dynamic variables,如 array、mapping 和长度超过 32 bytes 的 string。拿 array 来说,其 slot 内存放的只是其长度,它的成员数据实际上是连续存放在另外一组随机的 slots 里的,这组 slots 的首地址由 keccak256(slot index) 计算而来。

理论上,dynamic variables 是有可能和其他的数据的 slot 发生冲突的,但是考虑到 2^256 是一个足够巨大的空间,一般认为超过 2^100 就足够满足密码学的碰撞安全性要求了,ECC-256 的安全等级也就是 2^128,如果你不担心自己的私钥被别人碰撞出来,那么也不需要担心 dynamic variables 和其他 slot 碰撞。

#blockchain #evm
next: https://t.me/laiskynotes/245 Solidity layout and access of storage state variables simply explained | Notion
https://laisky.notion.site/Solidity-c48cc6d6c9924dd5a912e19edaef756c?pvs=4 最近学习 solidity 的一些简单笔记,作为一个 Web2 开发者,主要是厘清很多基础概念,实际的代码是不难的。 #blockchain Solidity | Notion
读完《特拉法尔加战役》('The Campaign of Trafalgar'),一部不多见的现实主义战争史,和那些浪漫主义的海权拥护者不同,作者通过细致的史料和事实,指出虽然英国舰队在战役重创了法军主力舰队,但是这一战役在整个第三次反法同盟战争中其实并没有起到决定性作用,大国的战争胜负一定取决于陆军,而拿破仑赢得了欧陆战场的胜利。与其说特拉法尔加战役是保护了英国本土安全,不如过是彻底体现了在古代的战场态势下,拿破仑那种指挥陆军的方式在海战中只会导致毁灭性的灾难。

该书中对英国各个分舰队在各个时间的行动和命令进行了详细的描述,在那个通讯不灵,舰船航速缓慢(普遍 1~2 节)的时代,英国的海军部和各个舰队的指挥官们在战场上居然实现了总体目标协调一致的行动,真是一个令人惊叹的奇迹。

在最终的特拉法尔加战场上,实际战斗的发展其实完全脱离了纳尔逊的计划,英军几乎是以自杀的一字纵队直接冲入了对方的新月型阵列,英舰一艘艘地遭遇法西舰队的集火射击,接下来就是彻底的大混战。英舰队凭借优秀的训练和坚毅的士气坚持到了最后,丧失战斗意志的法西舰队的残存舰只在夜幕降临后纷纷逃离战场。从某种意义上说,这场战役,很可能无论怎么样打英国都是会赢的,毕竟你很难想出比纳尔逊更糟的进攻方式了,更别说法国海军根本没有战斗意志,混战后总是会逃跑的。
Telegram Channel