从月活数和交易规模看目前流行的web3应用

目前在Web 3的领域里,有哪些明星应用?这些应用的MAU(月活用户数)是多少?和金融相关的应用中,月交易规模是多少美金? 参考资料一的dappradar网站提供了实时的数据可以分析。 Web3应用和目前的web 2.0互联网应用有一点不一样, 所有用户数据和交易数据都是透明的。不需要通过应用的运营方,从区块链上就能获取真实的运营数据。 按照dappradar网站的统计,本文分别从两个维度看最近30天内的明星dapp应用: 活跃度:月活跃用户数(钱包数)前十的应用 交易规模: 进行交易流入的代币(等值美金)排名前十的应用 智能合约内的资产总值排名前十的应用 1. 活跃度 上表是30天内,按照使用用户数目(独立账户个数)排列的TOP 10应用。 排名 应用名称 简介 1 PancakeSwap BSC上领先的去中心化交易所 2 Primelab 从介绍看,Primelab 为用户提供了一个区块链生态系统,主要特征是比较好的可访问性和可用性。 所有 Primelab dapp 都允许用户 通过电子邮件或电话注册帐户。从数据看,其用户数量非常不稳定。 3 AtomicAssets 实现 WAX 区块链上的NFT协议(对应于以太坊上,常见的 NFT 标准ERC721 、ERC1155)。 4 Alien Worlds 游戏相关 5 Splinterlands 游戏相关 6 OpenSea 第一个也是最大的加密收藏品点对点市场,其中包括游戏物品、数字艺术和其他由区块链支持的虚拟商品。 7 Axie Marketplace 游戏相关 8 Upland 游戏相关 9 Katana 建立在 Ronin 之上的自动做市商 (AMM) 去中心化交易所 (DEX)。 10 Magic Eden Solana区块链上的NFT市场。 从上表分析可见: ...

2022年4月10日 · 1 分钟

Merkle Tree: Git 和 blockchain 背后的数据结构

默克尔树(Merkle tree)的概念由瑞夫·默克尔于 1979 年申请专利,故此得名。 Merkle tree 是一种二叉树数据结构,每个叶节点存储数据块的哈希值,而除了叶节点以外的节点存储其两个子节点值的哈希(对两个哈希值拼接后再做哈希)。哈希树能够高效、安全地验证大型数据结构的内容。 场景 假如有1000个数据块,每个块1M字节,需要用哈希值(校验码)来保证每一个数据块在传输中没有改动。 这时候有两种方案: 在传输时候,增加1000个哈希值, 每个数据块对应一个。数据接收方可以用哈希值一对一分别验证各个数据块是否有改动。 把这1000个块合并起来,生成一个1G的大数据块, 然后对这个1G的块做一次哈希。 数据接收方可以通过哈希值来整体上验证1000个数据块是不是有改动。 以上两个方案都有弊端: 方案1, 需要增加传输的数据长度。 假设用SHA256做哈希, 方案一需要额外增加 999 个 32 字节长的哈希值。 方案2, 只需要增加32字节的校验码(哈希值),比较高效。 但问题是,当数据接收方只想检查一个数据块的时候, 它必须得到所有的1000个数据块,拼接后统一计算才能验证。 Merkle Tree提供了第三种方案。 解决方案 Merkle Tree把数据块分别做哈希(类似上面的方案1),但并不直接传输这一堆的哈希值。 而是把这些哈希值两两拼接之后再哈希。 类似世界杯比赛一样, 直到得到最终的一个哈希值,称之为Merkle Root。 然后将所有数据块和Merkle Root的值一起传输。 接收方收到所有的数据块和Merkle Root值。 按照上述算法,可以再算一遍,验证Merkle Root是否和对数据块做Merkle哈希后的值一致。 接收方如果只想验证一个数据块的完整性。 例如上图比特币中的例子,接收方只想知道交易T(D)是不是在当前区块里面, 那么它只需要得到H(C),H(AB),H(EFGH)和Merkle Root四个哈希值就可以验证了。当数据块越多, Merkle Tree的层级就越多。验证一个数据块,需要得到从根节点到该块所在叶子结点的树枝上的所有兄弟节点的哈希值。哈希值一般只有32字节,比交易块短的多。 在比特币中 SPV 节点就是利用Merkle Tree的这一个性质来优化和可信节点之间的交互,大大减少数据传输。 SPV 结点为什么不直接向信任的结点要求 H(D) 的值做验证? 因为H(D)可能被伪造。 而Merkle Root的值在区块链的当前区块Header中有保存,是有完整性保护的。最终和Merkle Root做比较来验证更可靠。由于哈希函数的单向性,恶意节点无法根据Merkle Root伪造树枝上的哈希值,技术上拼不出来(需要解哈希碰撞问题)。 案例 Merkle Tree的使用场景是在分布式系统中,对数据做高效的验证时候。已经被业界广泛采用。以下是几个代表: ...

2022年4月4日 · 1 分钟

以太坊图解

以太坊(Ethereum)是一个分布式的计算机,由大量分布式节点组成,其中的每一个节点,都可以执行字节码(也就是所谓智能合约),然后把结果存在区块链上。整个网络是分布式的,应用可以保存状态信息,应用有了状态信息,就可以根据状态提供丰富多彩的服务。以太坊没有中心化的节点,第三方不能干预整个网络的运行,可以看作是永不停机的世界计算机。 1. 以太坊-世界计算机 上图描述了以太坊的功能。 它把一台虚拟计算机放到了区块链上。 图中彩色方块是用哈希值串联起来的区块,每一个区块中有交易列表,交易在计算机中执行,并且导致计算机状态的变化。 以太坊中把这个虚拟计算机的状态叫做“世界状态”, 世界状态可以看作“世界计算机”的存储区域。 世界状态通过执行以太坊区块中的交易来不断变化。每一个区块添加到链的尾部,都会导致世界的状态发生变化。世界状态由各个节点独立在数据库中维护。 从这个视角看,这种状态管理的方式,类似git,每一个区块都是一个新的版本。每一个区块都可以得到一个当前所有账户的状态。 最后一个区块,就是当前系统中所有账户的当前状态。 世界计算机在以太坊的每一个节点上运行,每一个节点上的世界状态都一样。 交易触发的代码会在所有节点的虚拟机上运行一遍。 2. 账户 世界状态由所有账户的状态构成。 有两种账户,分别是外部账户和合约账户。账户的属性包括,余额(balance)、交易次数(nonce),code(代码)、存储(stroge)。 code和 storage只有合约账户有。外部账户用私钥控制,合约账户由合约代码控制。 每一个内部账户都有自己独立的storage区域。以太坊中的智能合约代码,一旦部署,是无法升级修改的。codeHash确保代码不会被修改。 上图中只画了两个账户,实际的世界状态中有很多账户。 3. 交易 以太坊的交易由网络用户发起,交易有两种,一种是普通消息调用,另外一种是创建内部账户(会生成一个新的地址,初始化智能合约)。 上图展示了交易执行后, 世界状态中多了一个内部账户。 4. EVM 虚拟机 作为世界计算机, 不仅仅有存储, 还有执行智能合约代码的虚拟机。称之为EVM。合约代码在EVM中执行,可以导致存储(世界状态)的变化。 智能合约开发使用高级语言,在部署到以太坊上时候,会编译成EVM可以识别的二进制串。合约一旦部署,就需要在所有维护世界状态的节点执行。注意不是在一个节点执行,而是一旦交易列表中有合约相关操作,则操作对应的代码要在所有节点执行,以太坊节点通过执行合约相关代码来更新世界状态。 对世界计算机的使用是收费的,每次执行需要预付费(术语叫gas),执行过程中不断扣减费用。扣完了预付费后,指令将不能再执行,智能合约的调用失败。 这种机制也增进了系统的可靠性。 如果智能合约中出了bug,写了一个死循环,至少还能欠费停下来。 5. 访问以太坊 外部用户通过以太坊节点,使用web3 API访问以太坊。 6. 数据结构 上图展示了以太坊的主要数据结构。最左侧是一个以太坊的区块,包括区块头和区块体。在区块头里面除了parentHash作为区块指针外,还有几个哈希值: stateRoot:其值是这个区块内所有交易执行后世界状态的哈希值。 receiptsRoot:其值是这个区块所有交易的执行结果的哈希值。 transactionRoot:其值是这个区块所有交易的哈希值。 ommersHash(UncleHash): 是对区块体中的叔块列表的哈希。 区块体中存放交易列表和叔块列表。 右侧的几棵merkle tree(世界状态,交易状态, 交易等),不会在区块中存储,而是会在节点的数据库中保存。 用区块中的哈希值来保证各个节点的merkle tree状态都一致。 7. 参考资料 getting-deep-into-ethereum-how-data-is-stored-in-ethereum 以太坊黄皮书 以太坊白皮书 DanFinlay-intro_to_ethereum

2022年4月4日 · 1 分钟

比特币和区块链

《比特币白皮书》是一篇很短的论文, 只有12小段。 Satoshi Nakamoto发表于2008年10月31日。其中蕴含的思想在后来发展出了区块链。 白皮书很值得一看,是这个领域经典中的经典。这篇笔记从比特币白皮书中的视角开始展开,加入了一些对比特币网络相关实现细节的理解。 1. 比特币和区块链原理 比特币方案的目标是要实现点对点的电子现金,允许在线支付直接从一方发送到另一方,无需通过金融机构作为中介。 它要在一个点对点网络,去中心化的环境中解决如下几个问题: 如何确定电子现金是谁的?你只能花自己的钱,不能花别人的。 如何防止双花(就是上面邮件中的Double Spending)?你的一笔钱只能被花一次,不能趁记账还没完成,同时发起两笔交易,把一笔钱花两次。 如何发行货币,如何驱动网络自发运转。 这些问题在有金融机构做中介时候是很容易解决的,例如: 银行给客户开通账户,记录这个客户有多少钱,并给客户配置支付密码。 客户通过自己的密码在银行做认证,证明是本人后,支付全部或部分金额。 花钱的时候,银行会实时变更客户的账户余额。这样越花越少,不存在一笔钱花了两次的可能。 货币发行和整个系统运转都是通过金融机构。 在比特币系统中: 针对第一个问题,使用传统的非对称加密机制解决。比特币系统中每一个账户都关联一个公钥,用户使用私钥签名自己的交易。系统通过验证交易的数字签名来确定交易的合法性。 针对第二个问题,比特币系统提出了一种新方法。把交易打包进区块,进行哈希摘要,按照摘要把区块链接成一个分布式的不断增长的链状结构,链状结构能让大家对账本里面的交易的先后顺序有共识(形成Single Source of Truth),如果前面有交易已经花过一笔钱了,后面的交易想要再花这同一笔钱就无法被大家认可,不能上链形成共识。这种机制在比特币白皮书中第一次被提出来,后来被称作区块链。区块打包上链的工作是所有参与者分布式竞争完成的,在比特币中,采用POW(工作量证明)做共识算法。关于POW,下文挖矿环节有详述。 针对第三个问题, 货币发行和整个交易系统的运行都是通过矿工的挖矿行为来驱动。 比特币使用公私钥系统来解决用户认证的问题。 这个方案具有很强的隐私保护能力。 举个极端的例子,一个人可以在小黑屋里,在完全离线的环境下,用笔和纸生成一对公私钥,然后用公钥导出一个比特币地址。 只要把这个地址(例如:1J7mdg5rbQyUHENYdx39AWISME7fsLpEoXZy)发布出去,他就可以接受汇款了。 入账后, 只有小黑屋里的这个人可以操作区块链上的那笔钱(因为只有他有该比特币账户对应的私钥)。如果刻意隐瞒,比特币网络上的钱很难追踪到对应的人。当然,隐私在比特币和法币的转换过程中有可能泄漏。 上图示意比特币的区块链。图中Block2的Header里面,保存着Block 1 的Header的哈希值。 哈希值起到了指向链表中父节点指针的作用。 根据上链的先后顺序,Block2中的交易比Block1中的交易晚, Block3中的交易比Block2中的交易晚。 每一个区块(Block)中记录的交易放在区块体中, 对区块体中所有交易也做一次哈希,得到的值放到区块头里面(在Merkle Root域)。 通过区块链,保证了交易的先后顺序,也保证了区块链中形成共识的交易不可篡改(因为交易的哈希也存在区块头中,改变交易的内容会导致区块头里面的Merkel Root哈希值对不上, 如果把Merkle Root的值也改了,又会导致区块头的哈希值变化,区块头哈希值变化就会让区块本身从链表里面移除)。 The network timestamps transactions by hashing them into an ongoing chain of hash-based proof-of-work, forming a record that cannot be changed without redoing the proof-of-work. The longest chain not only serves as proof of the sequence of events witnessed, but proof that it came from the largest pool of CPU power. As long as a majority of CPU power is controlled by nodes that are not cooperating to attack the network, they’ll generate the longest chain and outpace attackers. — 比特币白皮书 ...

2022年4月3日 · 5 分钟

关于Web 3.0

什么是NFT?什么是DAO?DeFi?GameFi?SocialFI? 区块链钱包里放的是什么? Web 3对于公司有什么机会? 对于程序员有什么机会? 美国为啥能block俄罗斯用户的加密币交易? 1. Web1, Web2,Web3 web1 主要应用是做个网站发布信息。 web2 除了web1之外多了交互, 信息的消费者也产生内容,并且被平台消费(看广告给平台产生收入)。 web3 结合了web1的去中心化和社区管理,以及web2的丰富交互功能, 最大特点是用户和开发者可以拥有内容。web3是代币驱动的。 根据 Chis Dixon @ a16z 的描述, web3是开发者和用户共同拥有的网络,由代币来驱动。 Web1 (roughly 1990-2005) was about open protocols that were decentralized and community-governed. Most of the value accrued to the edges of the network — users and builders. Web2 (roughly 2005-2020) was about siloed, centralized services run by corporations. Most of the value accrued to a handful of companies like Google, Apple, Amazon, and Facebook. Web3 is the internet owned by the builders and users, orchestrated with tokens. … combines the decentralized, community-governed ethos of web1 with the advanced, modern functionality of web2. ...

2022年3月27日 · 3 分钟