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 的
按照目前最推荐使用的 UUPS Proxy 模式(UUPS 简而言之就是将升级 Implementation 的
此文详细介绍了
前文介绍了 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 #evmhttps://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
区块链的分布式账本有两个主流实现方式:账户模式(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
https://youtu.be/yKtw4of-j0E?si=r_QsXJ0LCY-ozCxN
对 JPMorgan CEO Jamie Dimon 的访谈,内容是他对目前国际局势的一些看法。
地缘政治上,Dimon 认为我们目前面临着很多过去从未有过的挑战,这给未来造成很多不确定性:
1. 联合国、布林顿森林、WTO、北约体系成立以来,塑造了一个很长时间内相对和平的世界。如果俄罗斯在乌克兰战争中获胜,未来的新国际体系是会更和平还是更动荡?
2. 俄罗斯首次在侵略战争中使用了核讹诈,这给世界范围内的无核国家造成了巨大的冲击,核扩散的危机显著增加。
3. 美国过于依赖自己的军事力量,应该更多依靠经济和外交,以及更多的国际盟友和合作。
中国的威胁没有宣传的那么严重,中国的能源大量依赖进口,而在红海等关键海域,美国都有决定性的军事力量。美国还是应该尽可能寻求和中国的谈判和合作,而不是对抗。
疫情以来的大规模 QE 是前所未有的,这部分流动性仍然没有完全消解,社会的中上层仍然持有富足的流动性,这是目前社会经济数据看起来不错的原因。但是中下层人群的钱已经花完了,这造成了更大的不平等和失衡。而且目前的经济数据很大程度上都是由政策刺激所驱动的,这可能隐藏有很大的未来风险。(奥派认为政府的逆向刺激只会延缓和加剧冲击,而不能化解冲击)
最后 Dimon 还很详细地聊到了 LLM 和 Agent,认可 AI 的巨大潜能,并且建议主持人赶紧试试。
对 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
学习了 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
https://taresky.com/crypto-arbitrage
虽然我不是从这篇文章入行的,但是 Taresky 这篇文章写得很好值得推荐。
自从开始套利后,感觉眼界都打开了。以前我对金融市场的理解是很肤浅的,只知道那些低买高卖,高风险高收益的交易者(traders),这些人是市场上的明星。我总是暗暗揣度自己,自认不能承受那么大的风险,也没那么聪明,这钱不是我能赚的。
但实际上金融市场上除了交易者外还有另外一帮人,称为套利者(Arbitrageurs)。交易者会用自己的本金持有商品,并且赌商品的价值会上涨;或者做空头,反正都是用自己的本金去赌商品价值的波动。但是套利者是完全另一个思路,套利者不能接受本金的损失,而只是把本金当着抵押品,去尽可能地赚取手续费或差价等一切蝇头小利。
拿文中所提到的做空对冲套利来说,其实逻辑很简单:
1. 你把自己的本金分成两半,一半做空,另一半购币
2. 如果币价上涨,你的做空合约亏本,但是购入的币价值上涨,本金不变
3. 如果币价下跌,你的做空合约赚钱,但是购入的币价值下跌,本金不变
只要币价的波动没有剧烈到让你的做空被爆仓,你的本金就是安全的,不亏不赚。你实际上赚取的,是期货交易中,做多方付给做空方的手续费,这个手续费会随着市场的交易热度动态调整,一般来说实现 10~40% 的年化收益是比较容易的。15% 的年化如果能持续五年,那就是翻一番,耐心,不要激动,做时间的朋友。
类似的套利逻辑还有很多,套利也不是没有风险的,比如交易所跑路、稳定币发行方跑路、剧烈波动导致爆仓等等,但是这个风险的概率远远小于交易者所承受的风险,比如你可以通过多交保证金以降低本金收益的方式减少爆仓风险,而长期收益可能会比大多数交易者都高。
此外,我感觉,币圈主流币的套利风险可能比传统金融更小。我认为 BTC 的存在是有客观需求的,而且 BTC 的币价在可预期的未来里是不会归零的,即使腰斩,只要耐心等待几年,总能等来下一波的牛市。而传统金融市场上的股票、期货、债券,有可能真的就原地破产,本金归零。而 shitcoins 也是真的可能随时归零的,所以我不会持有小币。
以上不构成投资建议,只是分享一些个人的感想。 #blockchain
虽然我不是从这篇文章入行的,但是 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 的诞生。而且失去了萨达姆这一强势逊尼派领袖后,占人口多数的什叶派势力开始取得伊拉克的政治主导权,而伊朗正是伊拉克什叶派背后的核心支持者。简而言之,美国出面除掉了伊朗最大的敌人,并且将整个伊拉克拱手送给伊朗。
这部纪录片很有意思,从伊朗和沙特交锋的角度来诠释中东近代的动乱历史。
二战后,沙特(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
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 的首地址由
理论上,dynamic variables 是有可能和其他的数据的 slot 发生冲突的,但是考虑到 2^256 是一个足够巨大的空间,一般认为超过 2^100 就足够满足密码学的碰撞安全性要求了,ECC-256 的安全等级也就是 2^128,如果你不担心自己的私钥被别人碰撞出来,那么也不需要担心 dynamic variables 和其他 slot 碰撞。
#blockchain #evm
next: https://t.me/laiskynotes/245
详细介绍了 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
https://blogs.vmware.com/workstation/2024/05/vmware-workstation-pro-now-available-free-for-personal-use.html 个人 PC 跑虚拟机用户的大福音,Vmware Pro 对个人用户免费啦。
* VMware Fusion Pro Download
* VMware Workstation Pro Download
* VMware Fusion Pro Download
* VMware Workstation Pro Download
https://laisky.notion.site/Solidity-c48cc6d6c9924dd5a912e19edaef756c?pvs=4 最近学习 solidity 的一些简单笔记,作为一个 Web2 开发者,主要是厘清很多基础概念,实际的代码是不难的。 #blockchain
最新版的 tailscale 1.66 修改了 ACL 中
详细的威胁参考: https://tailscale.com/security-bulletins#ts-2024-005
如果想保持向后兼容性,最简单的修复是将 ACL 中的
"src": "*"
的定义,如果你为 exit node 设置了 "src": "*"
,然后在其他 node 上试图通过 tailnet 转发流量,可能会在升级后被阻断。详细的威胁参考: https://tailscale.com/security-bulletins#ts-2024-005
如果想保持向后兼容性,最简单的修复是将 ACL 中的
"src": "*"
修改为 "src": "autogroup:danger-all"
。
最近好像有点不顺,又遇到了一个把我惊吓到的 BUG,我的密码数据差点被 1Password 搞丢了!
我有两台 mac,一台是我日常使用的,另一台使用频率很低。刚才我在好几天没用过的 mac 上打开 1Password,发现它没能显示最新的数据。我以为是因为数据没同步,就远程连接另一台 mac 上打开 1Password,然后发现上面的最新的数据在短暂显示后立刻就消失了,全部被旧数据给覆盖了。
消失的数据是我昨天离线生成的冷钱包私钥,吓出我一身冷汗,找遍 App 都没有恢复历史记录的地方。好在最后在网页版的 1Password 上找到了 'View Item History' 的按钮,把历史数据恢复回来了。
我有两台 mac,一台是我日常使用的,另一台使用频率很低。刚才我在好几天没用过的 mac 上打开 1Password,发现它没能显示最新的数据。我以为是因为数据没同步,就远程连接另一台 mac 上打开 1Password,然后发现上面的最新的数据在短暂显示后立刻就消失了,全部被旧数据给覆盖了。
消失的数据是我昨天离线生成的冷钱包私钥,吓出我一身冷汗,找遍 App 都没有恢复历史记录的地方。好在最后在网页版的 1Password 上找到了 'View Item History' 的按钮,把历史数据恢复回来了。
刚遇到了一件很震惊的事情,我 iphone 上的 icloud 经常卡死,我也一直没当回事儿,一般重启一下就能解决。今天早上发现昨天相册里新增的几十张照片一直卡着没能同步到 icloud,我就随手重启了一下。然后重启后发现所有未同步的照片都彻底消失了😱。
BTW, 拍脑袋瞎猜,我倾向于是 icloud bug 卡死了 disk I/O,然后照片实际上全部存储于 Kernel Buffer 而没有落盘持久化,重启就全完了。
强烈建议 iPhone 用户立刻禁用 icloud drive!
BTW, 拍脑袋瞎猜,我倾向于是 icloud bug 卡死了 disk I/O,然后照片实际上全部存储于 Kernel Buffer 而没有落盘持久化,重启就全完了。
强烈建议 iPhone 用户立刻禁用 icloud drive!