Netflix NFT 漏洞Mint思路分析

前 Netflix 出了最新的一集的 《爱,死亡,机器人》,这一季是送NFT 的一季。 Nine Love, Death + Robots QR-Coded Artworks (艺术品) have been strewn across the digital and physical world. Each piece of special, limited edition imagery (意象) reflects Love, Death + Robots’ unique collective of visual perspectives and creative storytelling (弹词) from Volume 3. To collect them all, you’ll have to be vigilant (警惕) . Look out for Love, Death + Robots QR codes to scan in order to unlock (解锁) the art....

五月 21, 2022 · 2 分钟 · r4y

《区块链技术与应用》公开课笔记

https://github.com/WTFAcademy/WTF-Ethers BTC部分 加密算法 SHA256 数据结构 区块内构建成 merkle tree 不需要Sorted,因为btc没有使用到存在证明。 因为BTC的记帐权是爆块节点确定的,所以这里可以不进行排序。 但是 ETH 中是有账户状态的,状态比TX 要高几个数量级。状态是不上链的,保存在节点的本地。 所以为了保持节点本地的状态一致性,eth 本地是需要sorted 的。 ETH 中使用的 是 MPT来用来保存状态 MerklePatriciaTree 也就是有压缩的 挖矿难度 比特币脚本 分叉

五月 14, 2022 · 1 分钟 · r4y

《区块链技术与应用》公开课笔记

BTC部分 加密算法 SHA256 数据结构 区块内构建成 merkle tree 不需要Sorted,因为btc没有使用到存在证明。 因为BTC的记帐权是爆块节点确定的,所以这里可以不进行排序。 但是 ETH 中是有账户状态的,状态比TX 要高几个数量级。状态是不上链的,保存在节点的本地。 所以为了保持节点本地的状态一致性,eth 本地是需要sorted 的。 ETH 中使用的 是 MPT来用来保存状态 MerklePatriciaTree 也就是有压缩的 挖矿难度 比特币脚本 分叉

五月 14, 2022 · 1 分钟 · r4y

【转/译】评估公共比特币矿机时要评估什么?

评估公共比特币矿机时要评估什么? 比特币挖矿中六种独特指标的方法论 2023 年 3 月 10 日 在经历了悲观的 2022 年之后,随着美国破产法第 11 章破产、债务重组和并购,公共比特币挖矿业务的格局发生了巨大变化。只有少数业务在没有太多债务或股权稀释的情况下成功地按计划提高了算力。 尽管公开市场投资者通常将比特币矿业股票视为比特币本身的涡轮增压代理,但比特币矿业有一些独特的指标将一项业务与其他业务区分开来。虽然常用的财务指标,如营运资本、毛利率、D/E 和市盈率仍然有用,但还不够。 本文总结了比特币挖矿的六个独特的基本原理,可以帮助评估单个挖矿业务。 已实现算力 随着比特币挖矿行业的制度化,现在越来越多的市场参与者披露每月的比特币生产结果,这为进一步分析奠定了基础。最直接的指标是 TheMinerMag 引入的已实现哈希率。 简而言之,已实现算力是由公司每月的产量、比特币网络的总区块奖励以及网络一个月的平均算力所隐含的算力。 例如,比特币在 2023 年 2 月的总区块奖励为 26,907 BTC,当月 28 天平均网络算力为 297 EH/s。这意味着,平均而言,该月每个 EH/s 应该能够开采 90.5 BTC。换句话说,如果一家公司当月开采了 90.5 BTC,那么其实现的算力就是 1 EH/s。 为什么这有关系?通过标准化每月比特币网络哈希率和区块奖励的变化,它使每个挖矿操作随着时间的推移保持相同的规模。它可以更准确地描述公司当前和未来在争夺整体奖励方面的地位,更重要的是,它是否已经超越了竞争对手。 下图总结了几乎所有上市矿业公司的已实现算力以及它们随时间的增长情况。实现的算力越高,公司在比特币挖矿奖励蛋糕中所占的份额就越大,因此收入潜力就越大。 实现率 评估公共挖矿业务的另一个有用指标是实现率,即实现的算力占已安装运营容量的份额。 例如,如果一家公司在 2 月份安装并运行了 1.2 EH/s 的设备,但当月仅开采了 90.5 BTC,实现算力为 1 EH/s,那么其有效变现率仅为 83%。 一般来说,实现率越高越好。这是因为它显示了公开上市的挖矿运营商能够在多大程度上为股东最大化其已安装的哈希能力。 下图总结了每家公司随时间的变现率。单个公司的已实现算力和实现率也可以在 TheMinerMag 数据部分的公司类别中找到。2022年初以来,HIVE、CleanSpark、Bitfarms持续取得最高变现率。 说到实现率低,可能有很多原因。例如,限电活动和意外的站点问题可能会导致停机。与此同时,如果运营商在一个月中插入更多采矿设备,它将在月底报告更高的安装算力。由于分母较高,导致实现率较低。 简而言之,单月变现率较低本身可能并不是坏消息,但如果连续几个月出现这种情况,无疑是一个不健康的信号。这也是为什么上面的实现率图表默认在任何月度值之前显示“平均”值。 价格与哈希率 就像评估公开股票时常用的市盈率 (P/E)一样,比特币挖矿中的市盈率 (P/H) 可以帮助投资者估计他们为每 TH/s 支付的费用矿业公司实现的算力。计算如下: P/H 比率 ($/TH/s) = 市值 / 已实现算力...

五月 14, 2022 · 1 分钟 · r4y

”做空“比特币

前 听到了一个相当新颖的观点,比特币系统是不可持续的。 “做空”比特币 矿工过低的Fee收入 曾经的btc被微软等公司支持支付,那是最好的时代。 这里是最主要的问题,因为BTC 的区块大小太小了,一秒钟只能有7笔交易。 TX的低直接导致的就是影响链上转账的过程。目前的爆块的收益水平是下面的情况。 Block Reward 6.25000000 BTC BTC Fee Reward 0.23313970 BTC 随着一次又一次的减半,区块奖励越来越少,交易费用受txs的影响没有太大提升,挖矿可能逐步变得无利可图。 因为挖出的增量市值 单价*爆块数量 和 本身的存量市值 单价*存量BTC数量 的比值将会变得非常的小。那么从矿工的角度来说,就是获得非常小的比例的奖励,来保护一个市值的系统。那么整个矿工的算力水平会随着收益的减小而逐步减小,也就是说维护网络安全的成本逐渐减小。那么进行51%攻击的成本在下降,收益在增加(btc 的存量市值)。安全事件迟早会发生 爆块时间导致的矿池偏袒 ETH 矿池很多五花八门,但是BTC很少,为什么呢 BTC的爆块时间在10分钟,而ETH的时间在15秒。这样就拓展出一个问题,虽然参与挖矿的游戏,每个人挖到块的概率是一定的。但是由于BTC的10分钟的区块时间导致每天只会出块144块,而eth有5760个块,一样掷硬币的游戏,掷的速度慢,意味着我们得到的结果的方差会非常非常的大。而矿工本身的加入矿池的信条就是:稳定 所以在这种情况下,大算力的矿池,在144次中或者多数,方差低,每天可以获得近似稳定的收入。 而小矿池,只能获取144次中的少数,方差大,收入波动厉害。如果连续几天不出块,那么可以直接饿死了。 所以在10分钟的出块机制下,对大矿池的存在是有偏袒的。而小矿池的加入会变得非常困难。 因此降低了去中心化的程度。 商品市场的缺失 BTC 没有商品市场,不能老靠着信仰走一辈子 市场上存在两批人,消费者和投资者。就按腾讯这个公司来讲,股票是他的投资者市场,而他的游戏,娱乐等等,为他带来了消费者市场,也就是商品市场。这样才会引领腾讯这家公司走向成功。 使用ETH的生态举例,上面有 NFT 和 GameFi ,这些都是商品生态的一部分,也就是说从一个无聊的链上符号变成了一个对外售卖的东西。而反观BTC 是没有商品市场的,本身机制对日常消费等等场景非常不友好。除了链上的无聊符号,没有能获取消费者市场的能力。 综上,也就是说,目前BTC是一个只有投资者,没有消费者的东西。一个单单靠信仰支撑的东西 我的看法 首先,上面描述的观点,是我听到的很独特的,且的确引发了我从另一些层面的思考。我的看法主要是从BTC的价值储蓄出发。类比国库中的黄金一样,是一种价值的存储。(虽然,的确失去了黄金的商品市场,首饰)。 全球的黄金(資源)分布也是不均匀的,有限的,石油等等这些的产量也是受制于OPEC组织,所以矿池的集中化和这点对等 矿工的收入,实际上最根本来讲是取决于能源的消耗,节能是发展路上的一个礼貌但是缺无知的问题。能源的成本在人类文明的进化中,势必越来越低。由此,矿工的收入与网络的算力平衡有了平衡的等式 商品市场,是成功的地方,危险的地方。我对ETH的看法,就像我们的网络,有用不贵。想象在40年前上网的成本,以及现在的网络成本的对比,随着基础设施的发展,网络的费用会越来越低。eth 也许会随着这种设施的进步,成本也越发低。所以在 eth的生态上,使用 ETH 来作为价值的锚定并不合理:本身的Defi/商品 的价值,会随着寄托他们的基础网络而变化。 所以我想以后可能会是 BTC 价值为锚,在eth 网络上快速奔跑。WBTC 类似的形式来存在。

五月 12, 2022 · 1 分钟 · r4y

ERC20的Permit

前 之前学习的时候遇到了 permit 这个ERC20 方法,可以实现无gas 转账和离线交易。 听起来很神奇,但是实际上的原理并不复杂,在这里来进行一个总结 正文 什么是 Permit permit 在 EIP-2612 中被引入到 ERC20 的协议中。子标题是 signed approvals ,另外从字面意思上看permit 在文字含义上是许可的意思,也正是与经典的erc20 协议里面 allowance 有关。 其功能从简单来讲,就是A在需要给B进行授权的时候,不需要主动的去调用 approval函数来给B进行授权。而是给这个approval 函数一个合法的签名,得到的签名提供给B,B用这个签名来调用 permit来获得对应额度的 allowance,从而可以对指定金额来进行消费或者转账。 这里用伪代码的approve函数以及 permit 函数进行对比,可见其核心的功能就是set一个对应的allowance function approve(address usr, uint wad) external returns (bool) { allowance[msg.sender][usr] = wad; … } function permit( address holder, address spender, uint256 nonce, uint256 expiry, bool allowed, uint8 v, bytes32 r, bytes32 s ) external { … allowance[holder][spender] = wad; … } permit应用场景 前面讲到permit,使用对approval的调用来进行签名,给到收款方来获得一个预先设置的 allowance的额度。...

五月 7, 2022 · 2 分钟 · r4y

multi_claim 合约分析

前 囤了很久的一个任务,来做一个简单的代码解析。 一个用于合约批量Claim 的操作。 比如之前的$rnd,就可以使用这套代码来进行批量的Claim 的交互操作。 代码仓库 POC 正文 代码思路 对代码思路来进行一个简单梳理。先定义一个ERC20 的 interface 用于来进行合约来进行交互。之后new claim 合约来进行对token的mint操作,在完成mint之后批量的转回sender。 这里的前提是代码没有EOA(Externally Owned Accounts)机制也就是说没有,对合约账户CA还是外部账户EOA的检测。 另外这里还需要说明的是,这种mint的Token是没有验证机制的,就是有claim接口之后就可以随便领取的。 代码分析 栈 大体按照调用栈来逐步分析 call Addressto abi.encodePacked New claimer claim transfer Call 这里是这个合约的主调函数,函数体如下。这里主要是进行 循环并且自增nonce,计算出即将new 出来的合约的地址,用于后面的转账操作。之后吧nonce +1 之后进行接下来的操作。 function call(uint256 times) public { for(uint i=0;i<times;++i){ address to = addressto(address(this), nonce); new claimer(to, address(msg.sender)); nonce+=1; } } addressto 这个是比较有意思的地方,在一个合约创建之前能否知道这个的地址? 答案是可以的,这个也被用于一些LP添加前的预判,也就是说可能LP还没创建,你就可以拿到LP的地址,早早冲进去。 这里的 addressto 就是这个算法的实现。 合约地址生成 资料参考:以太坊合约地址是怎么计算出来的? 以太坊合约的地址是根据创建者(sender)的地址以及创建者发送过的交易数量(nonce)来计算确定的。 sender和nonce 进行RLP编码,然后用Keccak-256 进行hash计算。 nonce0 = address(keccak256(0xd6, 0x94, address, 0x80)) nonce1 = address(keccak256(0xd6, 0x94, address, 0x01)) 所以在这个合约里面可以看到也是按这个形式来进行了字节码的组装。这里来对组装过程进行分析。...

四月 30, 2022 · 2 分钟 · r4y

ERC721项目发行分析

前 从庖丁解牛说起,懂了刀法之后就要开了这头牛了。 从区块链浏览器来看看 项目方的动作以及用户的东西还是很有意思的一件事情 这里使用Legend Maps Adventurers (LMA) 这个项目,自己蛮喜欢的一个 NFT项目。是做的链上的像素地牢。 这篇文章就简单的把这个NFT 的生命周期来分析一下。 正文 正文顺序就是直接按照合约的交互顺序来进行分析。 deploy TX:0xc6520011946abdf7577a6224a12d663556c836dbfd71d6fa4f802b3e2f186619 内容在Data字段,对应的是合约的编译后的 EVM操作码,实际上对应的就是合约。 set Base URI TX: 0x511692fe76c4c6a325bc47edc7d464269405dd498be608e8fa0744bbf74c3c16 在这里设置 NFT 的资源的BaseURI Function: setBaseURI(string baseURI_) MethodID: 0x55f804b3 [0]: 0000000000000000000000000000000000000000000000000000000000000020 [1]: 0000000000000000000000000000000000000000000000000000000000000036 [2]: 697066733a2f2f516d5a45545459326f766541327669375a336f7038505a4c6d [3]: 614c54744d73437961623157786a5857664b78645a2f00000000000000000000 涉及到的函数是下面这部分 function setBaseURI(string memory baseURI_) external onlyOwner { _tokenBaseURI = baseURI_; } 设置的 baseURI 解码出来之后是 是一个 ipfs 的存储链接 ipfs://QmZETTY2oveA2vi7Z3op8PZLmaLTtMsCyab1WxjXWfKxdZ/ 我们可以通过ipfs 的网关来进行访问 https://ipfs.io/ipfs/QmZETTY2oveA2vi7Z3op8PZLmaLTtMsCyab1WxjXWfKxdZ 这里项目方犯了一个错误,BASE设置错误了,所以项目方里面用下面这比交易修改 TX: 0x0379fddc8c43c35a3f7dd4403003cc44424e742f7aa0b9bf514c07702c21e1e2 Reserve 交易TX: 0x7f8962455056175e720abf68e8bd89a3ba468ec3ded33567ec9a20c239d103b7 项目方调用合约来进行批量的NFT 预留。直接safemint 50个,到Owner自己的账户下。...

四月 29, 2022 · 2 分钟 · r4y

NFT合约级mint实践

简明教程 找到对应地址 可以先试用页面触发小狐狸的审批页面,之后找对应的地址。 浏览器查看合约交互 nft 项目一般都是 mint 的方法的调用。在交易详情的advance里面看到decode 之后的内容,一般是合约的方法名和参数 看合约代码 直接找到 调用的mint 函数的定义内容,检查其逻辑。 构造调用参数,进行合约交互 实践记录 以下面的合约为例子。 https://polygonscan.com/address/0x3a67c34c7dbd846108044fed38a3154b99a97cb1 看到有大量的Mint 调用,在advence查看调用内容,如下 Function: mint(uint256 amount, uint256 timeout) *** MethodID: 0x1b2ef1ca [0]: 0000000000000000000000000000000000000000000000000000000000000001 [1]: 000000000000000000000000000000000000000000000000000000000001c378 这里主要是看解码出来的 Functiin name,这里的参数不一定百分百准确,因为是使用 字典来进行解码的。 这里推荐使用 4byte来进行方法名解码。有比较强大的 DB https://www.4byte.directory/signatures/?bytes4_signature=0x1b2ef1ca 我们可以看到解码的内容是。 ID Text Signature Bytes Signature 167720 mint(uint256,uint256) 0x1b2ef1ca 在其公布的sol code的 RaremintsERC721 里面我们可以找到mint的定义: function mint(uint256 num, uint256 metadata) public payable { uint256 supply = totalSupply(); require( !_paused, "Sale paused" ); require( supply + num <= _supply - _reserved, "Exceeds maximum supply" ); require( msg....

四月 26, 2022 · 1 分钟 · r4y

浅析白名单校验原理

ETH 上的GAS 不是欢乐豆 这篇文章来在于一个群中的一次关于一个项目的大讨论。 一个NFT项目 mint 的成本异常的高。售价是 0.01 但是实际上mint 的 gas 在 0.1+@75gwei的情况下。 网络并不繁忙。 项目的合约地址在下面 https://etherscan.io/address/0x99a8e1cc829d6b33dc37851466c360e08757a0ae 在 MonkeyPoly.sol 的69~76段。可以看到一个白名单校验的函数。这里存在着一个循环结构。我们知道ETH上的计算是需要gas的,所以这里的一个对白名单列表的遍历。就是调用高gas的元凶。 function isWhitelisted(address _user) public view returns (bool) { for (uint i = 0; i < whitelistedAddresses.length; i++) { if (whitelistedAddresses[i] == _user) { return true; } } return false; } 而在另一段代码里面我们看到了写入白名单的地方 function whitelistUsers(address[] calldata _users) public onlyOwner { delete whitelistedAddresses; whitelistedAddresses = _users; } 这里项目方直接把地址列表给导入了进去,通过传参的方式。十分的生猛。 这里的gas 消耗,可以参考下文,记录了每个evm操作符消耗的 gas 情况。对上面的来进行一个估算。 以太坊的存储成本_跨链技术践行者-CSDN博客 evm-opcode-gas-costs/opcode-gas-costs_EIP-150_revision-1e18248_2017-04-12.csv at master · djrtwo/evm-opcode-gas-costs...

二月 7, 2022 · 2 分钟 · r4y