# Renaissance Labs

By [阿5](https://paragraph.com/@5-3) · 2022-03-18

---

第一章 背景
------

1.  实现目标：基于地理位置坐标实现对用户所在区域的零知识监控，即用户无需无需上报个人详细的地理位置信息，即可证明自己在合法的区域。
    
2.  Zk算法：Zk算法基于Groth16实现，该算法目前是公认的在加密领域应用最多的算法，包括著名ZCash，其生成的证据最小，认证时间较快。
    

第二章 开发准备
--------

1.  依赖组件：circom 、snarkjs
    
2.  开发环境：Visual Code
    
    ### 环境安装
    
    1.  安装Node(如果已经安装请跳过)
        
            sudo apt update
            sudo apt install nodejs npm -y
            node --version
            
        
    2.  安装Rust(如果已经安装请跳过)
        
            sudo apt install curl -y
            sudo apt install cmake build-essential -y
            curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh
            
        
    3.  安装Circom(如果已经安装请跳过)
        
            git clone https://github.com/iden3/circom.git
            cd circom
            source $HOME/.cargo/env
            cargo build --release
            
        
        在这一步特别提醒一下，如果用户已经安装了请确保安装了正确的版本，因为之前用户可能通过执行npm install circom命令来安装的，这种方法提示也是安装成功，但是版本和库都不对，此时需要通过执行which circom命令来查看具体安装的位置，然后进入到对应的目录把相关的文件夹全部删除掉，通过执行npm uninstall circom是没有效果的。最后可以通过执行circom --version，如果显示的是类似2.\*.\*就代表OK了。
        
    4.  更新Circom
        
            cargo install --path circom
            circom --help
            
        
    5.  安装Snarkjs(如果已经安装请跳过)
        
            sudo npm install -g snarkjs
            
        
        如果执行到此处都没有错误的话，那么就是安装环境OK了。
        
    
    第三章 计算和证明
    ---------
    
    ### 1\. 设计电路
    
    在VS code中新建文件InRange.circom，编写如下电路代码
    
           
        template Main() {
            signal input latitudeRange[2];
            signal input longitudeRange[2];
           
            signal input fishingLocation[2];
           
            signal output out;
           
            component gt1 = GreaterEqThan(9);
            gt1.in[0] <== fishingLocation[0];
            gt1.in[1] <== latitudeRange[0];
            gt1.out === 1;
        }
           
        template GreaterEqThan(n) {
            signal input in[2];
            signal output out;
           
            component lt = LessThan(n);
           
            lt.in[0] <== in[1];
            lt.in[1] <== in[0]+1;
            lt.out ==> out;
        }
           
        template LessThan(n) {
            assert(n <= 252);
            signal input in[2];
            signal output out;
           
            component n2b = Num2Bits(n+1);
           
            n2b.in <== in[0]+ (1<<n) - in[1];
           
            out <== 1-n2b.out[n];
        }
           
        template Num2Bits(n) {
            signal input in;
            signal output out[n];
            var lc1=0;
           
            var e2=1;
            for (var i = 0; i<n; i++) {
                out[i] <-- (in >> i) & 1;
                out[i] * (out[i] -1 ) === 0;
                lc1 += out[i] * e2;
                e2 = e2+e2;
            }
           
            lc1 === in;
        }
           
        component main = Main();
        
    
    ### 2\. 编译电路
    
    执行如下命令进行编译
    
        circom InRange.circom --r1cs --wasm --sym
        
    
    > With these options we generate three types of files:
    > 
    > `--r1cs`: it generates the file `multiplier2.r1cs` that contains the [R1CS constraint system](https://docs.circom.io/background/background#rank-1-constraint-system) of the circuit in binary format.
    > 
    > `--wasm`: it generates the directory `multiplier2_js` that contains the `Wasm` code (multiplier2.wasm) and other files needed to generate the [witness](https://docs.circom.io/background/background#witness).
    > 
    > `--sym` : it generates the file `multiplier2.sym` , a symbols file required for debugging or for printing the constraint system in an annotated mode.
    > 
    > `--c` : it generates the directory `multiplier2_cpp` that contains several files (multiplier2.cpp, multiplier2.dat, and other common files for every compiled program like main.cpp, MakeFile, etc) needed to compile the C code to generate the witness.
    
3.  执行成功后，会生成如下截图的文件1：
    

3月3日Cosmos EVM网络Evmos宣布主网正式上线。作为连接EVM和Cosmos两大生态系统的项目，Evmos颇受加密社区关注。金色财经带你看懂Evmos。

EVMOS由来
-------

EVMOS一词来自是EVM和CosmOS。 这个名字清楚地表明了EVMOS的使命，成为链接Cosmos生态系统的EVM Hub。

简而言之，Evmos能够将EVM兼容链（不仅仅是以太坊）集成到Cosmos。这意味着Fantom、Avalanche和Harmony等公链可以通过Evmo将资产整合到Cosmos生态系统中，也意味着基于EVM的去中心化应用程序、代币和NFT都可以桥接到Cosmos。

本人手工制，引用请注明出处。

❶ A端先将自己的公钥Public Key提供给B端。\\

❷ A端将运算出的讯息摘要，透过自己的私钥Private Key，执行签章运算Sign( )，产生了数字签名Signature。\\ ❸ A端将讯息与数字签名一同传送给B端。(上图省略了讯息的传输示意) \\ ❹ B端利用收到的数字签名与A端公钥，解密出讯息摘要。

本文将为您详细解读 ZKS Token 的分发机制，带您了解 ZKS Token 是如何帮助 ZKSwap 启动生态并发挥重要作用的。

原文标题：ZKSwap 经济白皮书

项目背景\\

ZKSwap 是首个基于 ZK-Rollups 技术的 Layer2 自动做市商模型去中心化交易所, 目前在以太坊 Layer2 上面完整实现了免信任并且免费的 Layer2 支付和转账（ZKPay），以及Layer2 上免费的、极速的、可以无限扩容的 Swap 交易体验（ZKSwap）。

在 ZKPay 中, 我们提供一套完整的 Layer2 解决方案，可以支持所有的 ERC20 的免费、实时、最终 TPS 超过 2000 的转账体验，后续计划重点支持所有的稳定币，使用 ZKPay 的转账服务。

故事
--

> 美国登山运动有句行话 fourteener，指海拔 14000 英尺以上的山峰。全美 96 座，科罗拉多州最多，有 58 座。所有高阶的登山者对科罗拉多州有一种向往。ETHDenver 的象征虚拟神兽 Bufficorn，就是生活在 14ers 上，与 Unicorn 是堂表亲关系。Peeking Bufficorn，勇于攀登，又与社区、开发者更近。

背景
--

为期10 天的ETHDenver 2022 正式落幕。在这里，多名黑客松参与者组成的超过170 个团队角逐30 强， 以获得总计100 万美元的赏金和奖金、200 万美元的投资资本以及额外100 万枚SPORK 零知识二次方奖金矿池，当然，也是为了共同建设以太坊和多链生态。

从NFT到GameFi，再到Loot，在市场热潮的几番更迭下，市场对于Layer 2的需求已经逐渐加大，随着Arbitrum主网的上线，越来越多的资金开始投身于Layer2 扩容协议市场，市场又掀起了新一轮的赛道竞争。

        虽然现阶段的Layer 2网络总锁仓量屡创新高，但仍然无法满足目前市场上投资者的需求，而且，现在市场Layer 2热度都是基于Zksync ,Arbitrum、Opitimism等项目的炒热而升温，根本无法长期持续。基于此，**Layer 2**热潮是否会成为“昙花一现”也成为了大众比较关注的事情。那么Layer 2技术目前发展如何？Layer 2网络的未来究竟是怎样的？而这一个个的疑问，路印协议CTO Steve Guo在一次演讲中给了我们答案。

        笔者用简单的方式讲述了Layer 2技术的演进，深入分析了每个Layer 2项目的优缺点，并且向我们叙述了Layer 2网络未来的发展方向。以下内容来自Steve的演讲实录。

           随着Layer 2热度的高涨，一个疑问逐渐浮现在大众面前：Layer 2的真正未来到底是什么？

Overflow
--------

[Solidity](https://so.csdn.net/so/search?q=Solidity&spm=1001.2101.3001.7020) 可以处理 256 位数字, 最高为 2^256 - 1, 所以对 (2^256 - 1) 加 1 会导致归 0。同理, 对 unsigned 类型 0 做减 1 运算会得到 (2\*\*256 - 1)

    pragma solidity 0.4.18;
    contract OverflowUnderflow {
        uint public zero = 0;
        uint public max = 2^256 - 1;
        // zero will end up at  2^256 - 1
        function underflow() public {
            zero -= 1;
        }
        function overflow() public {
            max += 1;
        }
    }
    

> DAS 之于加密世界，应如手机号/Email 之于互联网。

1\. 背景
------

伴随比特币的出现，人类第一次真正意义上实现了私人财产不可侵犯。更深层次的，它启发了人们开始以去中心化的视角重新审核和着手重构这个世界。既然我们的货币可以彻底掌握在我们自己的手中，那我们的数据是不是也可以，我们的身份是不是也可以？答案是肯定的。

去中心化身份是 Web3.0 的关键组成部分。已有不少团队在尝试构建去中心化身份，但这些尝试仍存在诸多的问题。这些尝试包括：

Version claim
-------------

> 合约文件开头需要声明编译器的版本号，目的是为了该合约在未来版本的升级中引入了不兼容的编译器，其语法为：

    pragma solidity 版本号
    

> 版本号应该遵循“0.x.0”或者“x.0.0”的形式，比如：

一、投注合约
------

主要功能点：1）投注；2）开奖；3）退奖；4）获取奖池奖金；5）返回当前期数；6）返回中奖者地址；7）返回参与彩民的地址；

1.1 定义合约属性
----------

合约主要包含有四个属性：

1\. create contract instance
----------------------------

创建合约的语法:

    new 合约名();
    
    示例：
    contract A {}
    contract B {
        function test() public { 
            A a = new A();
        }
    }
    

创建合约实例的时候，默认会调用构造函数，并执行构造函数中的代码。如果没有定义构造函数，EVM编译器会自动生成一个默认的构造函数。如果构造函数指定了参数，那么创建合约实例时候需要传入相同数量的实参。

function define
---------------

> 函数入参和出参类型不能够使用var关键字。另外，函数可以返回多个值。
> 
> 如果参数没有被使用，那么可以省略参数名。但是这些参数仍然存在堆栈中，只是无法访问而已。

    function 函数名(参数类型 参数名, ...) 修饰符 [returns(返回类型, ...)] {
        函数体
    }
    
    示例：
    function sum(int a, int b) public pure returns(int) {
       return a + b;
    }
    
    function test1(int a, int b) public pure returns(int, int) {
       return (a, b);
    }
    
    function test2(int a, int b) public pure returns(int x, int y) {
       x = a;
       y = b;
    }
    function test(int a, int) public pure returns(int) {
      return a;
    }
    

> 函数声明使用`pure`，代表该函数不能读取或修改状态变量，也不能发送和接收以太币，只能调用其他`pure`函数
> 
> 除了`pure`以外，还可以使用`view`来修饰函数，这时候该函数只能够读取状态变量，而不能修改状态变量，也不能发送或接收以太币，只能调用其他`pure`或`view`函数。

![ART](https://storage.googleapis.com/papyrus_images/95401af71cd7e0f04046e8f97154293a17ef6955db01185a92eed4731bbf2896.png)

ART

ART

主要是通过代码中memory来大幅度减少gas使用，示例代码如下：

    pragma solidity ^0.5.10;
    
    contract Test{
        
        struct User{
            uint age;
            uint balance;
            uint num;
        }
        
        User user;
        
        function initUser() public{
            user = User({age:20,balance:1000,num:1});
        }
        
        function setUser1() public {
            user.age = 30;
            user.balance = 20000;
            user.num = 2;
        }
        
        function setUser2() public {
            User memory temp = user;
            temp.age = 40;
            temp.age = 20001;
            user.num = 3;
            user = temp;
        }
    }
    pragma solidity ^0.5.10;
    
    contract Test{
        
        struct User{
            uint age;
            uint balance;
            uint num;
        }
        
        User user;
        
        function initUser() public{
            user = User({age:20,balance:1000,num:1});
        }
        
        function setUser1() public {
            user.age = 30;
            user.balance = 20000;
            user.num = 2;
        }
        
        function setUser2() public {
            User memory temp = user;
            temp.age = 40;
            temp.age = 20001;
            user.num = 3;
            user = temp;
        }
    }
    

我们首先通过initUser方法来初始化一个User对象的数据，然后分别调用setUser1和setUser2两个方法。

![Art](https://storage.googleapis.com/papyrus_images/a78fbb937d646c36a86febd9820458d734fe6d1296ef305138e5441a5d6f9723.png)

Art

Art

概念
--

![概念](https://storage.googleapis.com/papyrus_images/557fcb7fa43e968fa3be0ee0628890c004c0504ecc4e5e5f9da255b80c0c89ac.png)

概念

概念

> Merkle Tree，也被称作[Hash](https://so.csdn.net/so/search?q=Hash&spm=1001.2101.3001.7020) Tree，存储hash值的一棵树。Merkle树的叶子是数据块(例如，文件或者文件的集合)的hash值，非叶节点是其对应子节点串联字符串的hash。

![Art](https://storage.googleapis.com/papyrus_images/5063ab4470a352a5058419b578249cc5fb702c8cb832b68a9a07a0e209eda3a4.png)

Art

Art

Bitcoin中的数据区块
-------------

由区块头和区块体2部分组成，如下：

![区块结构](https://storage.googleapis.com/papyrus_images/bee419c3dac28becce72e8002341ef9ef8d4ec7819171baf99441576c4b853e9.png)

区块结构

区块结构

![Learn Solidity Series](https://storage.googleapis.com/papyrus_images/fff7d2fe1df09cc840322b2293b4e0bb6b42fc9bb03d3a12b1603070e6e6ca08.png)

Learn Solidity Series

Learn Solidity Series

delete
------

它用于将变量设置为其初始值，这意味着该语句delete a的行为如下：

对于整数，它等于a = 0。 对于数组，它分配长度为零的动态数组或长度相同的静态数组，并将所有元素设置为其初始值。 delete a\[x\]删除数组索引x处的项目，并保持所有其他元素和数组长度不变。这尤其意味着它在数组中留有间隙。 对于结构体，它将重置结构体的所有成员。 delete对映射没有影响(因为映射的键可能是任意的，并且通常是未知的)。

![Learn Solidity Series](https://storage.googleapis.com/papyrus_images/c89c66949231ed1978aa157c38f8ebeb44a45b07fa00ac0e49aeb092bf9470b6.png)

Learn Solidity Series

Learn Solidity Series

Struct
------

> 与在C和C ++中一样，结构体允许你定义自己的类型

定义结构体后，就可以开始将其用作状态变量或在函数中使用。

![Learn Solidity Series](https://storage.googleapis.com/papyrus_images/c5b855393055dde7486bb9f6dae8f17adcb798ba1d0184de400c6948143bb6d9.png)

Learn Solidity Series

Learn Solidity Series

> Solidity中，有两种类型的数组：存储数组和内存数组。

存储数组(Storage Arrays)
--------------------

> 这些数组被声明为状态变量，并且可以具有固定长度或动态长度。动态存储数组可以调整数组的大小，它们通过访问`push()`和`pop()`方法来调节长度。

![Learn Solidity Series](https://storage.googleapis.com/papyrus_images/520e605d924d553f81b21c43fa3af8a79fc8871ed1e10759c5042db4642aef84.png)

Learn Solidity Series

Learn Solidity Series

Before Solidity 0.4.22
----------------------

默认构造方法与Java类似，如果未指定会采用默认的构造方法。当然，也可以明确指定构造方法。通过function指定了Solidity的构造方法，同时也可以像Java一样，给构造方法指定参数，但无法像Java那样创建多个重载的构造方法。

    pragma solidity ^0.4.21;
    
    contract DemoTest{
    
        function DemoTest() public{
    
        }
    }
    

![Solidity Series](https://storage.googleapis.com/papyrus_images/b579a47723b368f62110ca4e3442142720bd232ee9e396b07ea5ec370262301a.png)

Solidity Series

Solidity Series

> 在Solidity中一个[函数](https://so.csdn.net/so/search?q=%E5%87%BD%E6%95%B0&spm=1001.2101.3001.7020)方法是可以返回多个结果的

    pragma solidity ^0.5.10;
    
    contract ManyReturns{
    
        // 基础方法：返回多个参数，用于被调用
        function getThreeNum() public returns(uint one,uint two, uint three){
            uint one = 1;
            uint two = 2;
            uint three = 3;
            return(one,two,three);
        }
    
        // 场景一：接收全部参数
        function call() public {
            uint one;
            uint two;
            uint three;
            // 接收结果的变量必须实现定义完成
            (one,two,three) = getThreeNum();
        }
    
        // 场景二：接收部分参数
        function call1() public{
            uint one;
            uint two;
            // 定义部分参数进行接收，未接收的参数，直接用逗号","分割即可。
            (one,two,) = getThreeNum();
        }
    }
    

![](https://storage.googleapis.com/papyrus_images/559fd426e1139b3499c64d1595d23e79ab17e693e06d0a8b023df9ccf3785713.jpg)

What is constant ?
------------------

> Functions can be declared constant in which case they [promise](https://so.csdn.net/so/search?q=promise&spm=1001.2101.3001.7020) not to modify the state.

也就是说当执行函数时不会去修改区块中的数据状态时，那么这个函数就可以被声明成constant的，比如说getter类的方法。

Optimism batch提交示例
------------------

optimistic etherscan 29307 包含[72 transactions](https://optimistic.etherscan.io/txs?batch=29307)

etherscan txHash

State Transfer
--------------

### Overview

Polygon validators continuously monitor a contract on Ethereum chain called **_StateSender_**. Each time a registered contract on Ethereum chain calls this contract, it emits an event. Using this event Polygon validators relay the data to another contract on Polygon chain. This **_StateSync_** mechanism is used to send data from Ethereum to Polygon.

Polygon validators also periodically submit a hash of all transactions on Polygon chain to Ethereum chain. This **_Checkpoint_** can be used to verify any transaction that happened on Polygon. Once a transaction is verified to have happened on Polygon chain, action can be taked accordingly on Ethereum.

近来最火的圈内“技术”事件，无疑是Arbitrum的上线。

原因无他，去年V神便已定调Rollup将会作为ETH当前的主要扩容手段，未来在2.0分片时代也将会和分片一起承担ETH“全球结算层”的历史重任。定调之后，LRC（路印协议）算是第一个实现了Rollup方案的项目，但LRC本质上只是一个应用，并非一个通用型Rollup解决方案。

刚刚主网上线的Arbitrum，严格意义来说，才是历史上第一个上线了主网的“通用性Rollup Layer2扩容方案”（OP更早上线了测试网，但主网要7、8月份了）。

这几天在不少社群里看到有人问：“Arbitrum和Matic哪个厉害啊？不都是Layer2 么？Arbitrum和后面的Optimism以及Zk-Sync哪个厉害呀？不都是Rollup吗？”

Transactions
------------

Fact Sheet
----------

*   Instructions are the most basic operational unit on Solana
    
*   Each instruction contains:
    
    *   The `program_id` of the intended program
        
    *   An array of all `accounts` it intends to read from or write to
        
    *   An `instruction_data` byte array that is specific to the intended program
        
*   Multiple instructions can be bundled into a single transaction
    
*   Each transaction contains:
    
    *   An array of all `accounts` it intends to read from or write to
        
    *   One or more `instructions`
        
    *   A recent `blockhash`
        
    *   One or more `signatures`
        
*   Instructions are processed in order and atomically
    
*   If any part of an instruction fails, the entire transaction fails.
    
*   Transactions are limited to 1232 bytes
    

**什么是分片（Sharding）**

分片技术并不是什么创新的概念，早在区块链技术出现之前，就已经在传统数据库中运作了，主要用于大型商业数据库的优化。

其概念就是**将数据库中的数据，切割成很多数据分片**，再将这些分片分配到不同的伺服器中储存，如此一来，就不会因为短时间内出现大量数据访问请求，而出现单一伺服器压力过大的问题。

在传统的区块链网络中，交易必须有网络中的每个节点进行确认，以保证交易的安全，然而这也是导致交易速度难以提升的主因之一。

**DeFi 的出现凸显了区块链技术的真正能力，并展示了其在金融领域的实用性。随着 DeFi 的增长迅猛，越来越多的组织和项目利用其功能，高度安全和去中心化的信息源也大量增加。**

这就是预言机出现的地方——随着 DeFi 的发展，它们的用例变得比以往任何时候都更加重要和相关。

**究竟什么是预言机？**

预言机可以定义为第三方服务，它利用区块链上的智能合约从链下世界检索任何所需的信息或从外部来源检索数据。

前言
--

匿名性一直被视为 加密货币 社区的非常有价值的特征之一。它是可替代性的前身，该特性对于广泛使用的货币形式来说也是必要的。同样，大多数加密资产持有者不希望他们的资产和交易记录被完全公开。在所有在为区块链提供隐私性的各种加密技术中，zk-SNARK 和 zk-STARK 是两个值得注意的例子。

zk-SNARK 代表了简洁化的非交互式零知识证明，而 zk-STARK 代表了简洁化的全透明零知识证明。 Zk-SNARK 已经在基于区块链的支付系统上如 Zcash，JP Morgan Chase 项目中使用，并作为一种客户端到服务器的安全验证方式。但是，虽然 zk-SNARKs 已经很成熟并被很广泛的使用，但 zk-STARK 现在也被吹捧为该协议的新版本和改进版本，旨在解决 zk-SNARKs 先前的许多缺点。

从历史角度而言，以太坊的 Gas 费用曾三次飙升至天文数字的高度：2017 年的牛市期间、2020 年的 DeFi 之夏以及 2021 年的 NFT 之夏。如下图所示：

上图：2015年至2021年11月的以太坊网络 Gas 费用上涨情况。

每次 Gas 费再次飙升时，围绕以太坊区块链可扩展性的讨论就会再次燃起，与此同时更多人则争先恐后地寻找下一个与之竞争的区块链网络。实际上，高涨的 Gas 费用只是我们必须应对的冰山一角。当前 Gas 费用如此之高的原因是因为以太坊无法扩展，也即对交易的需求仍然比以太坊区块链每次实际能够处理的更多。

在当前区块链世界中，主要有两种记录保存方式，UTXO 模式（Unspent Transaction Output) 和 Account 模式。[Bitcoin](https://so.csdn.net/so/search?q=Bitcoin&spm=1001.2101.3001.7020) 采用的是 UTXO 模型，Ethereum 采用的 Account 模型，同样 CITA 也采用了 Account 模型。

Bitcoin 的设计初衷是点对点的电子现金系统，在比特币中，每个交易消耗之前交易生成的 UTXO 然后生成新的 UTXO，账户的余额即所有属于该地址的未花费 UTXO 集合，Bitcoin 的全局状态即当前所有未花费的 UTXO 集合。Ethereum 意图创建一个更为通用的协议，该协议支持图灵完备的编程语言，在此协议上用户可以编写智能合约，创建各种去中心化的应用。由于 UTXO 模型在状态保存以及可编程性方面的缺陷，Ethereum 引入了 Account 模型。下面我们对两种模型的优缺点做进一步展开。

UTXO 模型
-------

UTXO 模型中，交易只是代表了 UTXO 集合的变更。而账户和余额的概念是在 UTXO 集合上更高的抽象，账号和余额的概念只存在于钱包中。

跨链通信是一个跨链的技术，它和 Plasma 不一样，两条链之间没有特别强的主次关系，其子链和侧链仍然有权利自己产生资产，自己运行，然后通过某种协议和主链或者其他链进行跨链交互，大家进行数据互通。

它严格来说不是 [Layer](https://so.csdn.net/so/search?q=Layer&spm=1001.2101.3001.7020) 1 的 Layer 2，但是它对整个系统 Scability 的提升是很有好处的。接下来我简单介绍两个项目，方便大家来理解。

### Cosmos

Cosmos 的系统架构如图所示，它中间有一个 Cosmos Hub，周围的叫做 Zone，可以认为中间是一个交换链，周围其他是子链。Zone 是用 Tendermint 来做的，采用的是 BFT 共识以及区块链框架，它也满足 Instant Finality（即时终结性），如果系统是少于三分之一的作恶节点，它一定是正确的。它引入了链间通讯协议（ Inter-Blockchain Communication ，简称 IBC） ，这个是类似 Plasma 和 State Channel 的一个协议。

### 查看TVL工具

*   TVL 追踪工具
    
    *   ETH：[DeFi Pulse](https://link.zhihu.com/?target=https%3A//defipulse.com/)
        
    *   BSC：[DeFi Station](https://link.zhihu.com/?target=https%3A//www.defistation.io/)
        
*   [Zapper](https://link.zhihu.com/?target=https%3A//zapper.fi/dashboard)：DeFi 资产追踪工具，支持 ETH、BSC、Polygon、Fantom
    
*   [Zerion](https://link.zhihu.com/?target=https%3A//app.zerion.io/)：ETH 和 BSC 资产追踪工具，可以清晰看到 ETH 上的资产分布（自己或别人），设置交易提醒。（ V神的 [ETH 钱包](https://link.zhihu.com/?target=https%3A//bit.ly/3oGsy2l)）
    

链下计算（ Off Chain Computation ）
-----------------------------

以太坊声称要做计算机，EOS 要做全球操作系统，但无论是做计算机还是做操作系统都得正视计算这个问题，链上计算的开销是非常大的，链上每一个 EVM 的 Code 计算需要全球计算机都算一遍，才能得出结果，所以有人做了这么一个计算的扩展，在链外做 Computation。

这个方式大致有两种

Research Institute
------------------

### 状态通道 State Channel

我们先来谈谈状态通道，举一个例子方便大家理解。

Alice 和 Bob 一起玩一个划拳游戏。Alice 赢了可以从 Bob 那里得到 1 块钱，而如果 Alice 输了需要给 Bob 1 块钱，反之亦然。

如果这个游戏是在以太坊主链上运行，我们通常的方法是 Alice 和 Bob 一起创建一个智能合约，每当划拳游戏开始的时候，他们向智能合约发起一个交易，当其中一个玩家赢了的时候，智能合约会执行规则付给赢家 1 块钱。

在上一篇文章中，我们介绍了解决扩展性问题的第一个 Layer2  解决方案，即状态通道。接下来，本篇将会为大家揭开另一个称为 Plasma 的链下交易技术，而该技术则是由 Vitalik Buterin 和 Joseph Poon 在 2017 年，含金量十足。

Plasma
------

Plasma 是一个链下交易的技术，由 Vitalik Buterin 和 Joseph Poon 在 2017 年提出，它相当于贡献了一条子链，可以让你在主链上质押资产，然后在子链上产生资产，而且它提供一个服务器，不需要点对点的交互，在服务器上就可以进行交互。

Plasma 子链可以更快地操作，且交易费用更低，因为它的操作不需要在整个以太坊区块链存留副本

Layer2是个大的话题。是否去中心化，是否安全，资金状态确认时间是Layer2的主要的讨论话题。最近有点时间，总结一下Layer2的理解和思考。

Layer2交互模型
----------

Layer2，相对于Layer1，在Layer1的基础上提供更丰富功能，更好的用户体验。抽象一下Layer2的逻辑以及交互模型如下：

0.账户 交易 消息
----------

### 账户

以太坊账户与我们所知的账户概念有一定相似之处，却又有很大的区别，更不同于比特币中UTXO。 账户分两类：

*   外部拥有账户(EOA)，也就是普通账户
    
*   合约账户
    

unitimes.io

**全球视角，独到见解**

预计将于2019年1月16日进行的以太坊君士坦丁堡硬分叉(当区块高度到达7,080,000时)，即将对以太坊网络带来怎样的升级呢？我们一起来了解一下。

提醒一下：如果你只是一名普通的ETH持有者，你不需要对这次升级做任何准备。

imToken 服务协议

最近更新于：2021年10月14日

imToken Pte. Ltd.（“我们”、或“我们的”）是一家领先的区块链软件开发公司，专注于利用去中心化技术为像您这样的个人（“您”或“您的”）提供可信的数字资产管理服务。我们托管一个顶级域名站：[https://token.im](https://token.im/)，该网站提供有关imToken和我们的产品的信息，以及我们产品的子域（“网站”）信息，其中包括文本、图像、音频、代码和其他材料或第三方信息。

由于越来越多的诈骗者想方设法欺骗毫无戒心的受害者的数字资产，请您在每次访问我们的域名站时验证SSL证书。本《服务协议》（定义如下）仅适用于由Encryption Everywhere DV TLS CA发布的具备有效SSL证书的域名站：[https://token.im](https://token.im/)。在从您正在访问的网站下载、点击或以其他方式与之交互之前，请确保SSL证书的真实性。为免疑义，我们无法控制任何第三方网站或服务的内容、隐私政策或行为，也不对其承担任何责任。对于因使用或依赖任何此类网站或服务上或通过此类网站或服务提供的任何此类内容、商品或服务而造成或声称造成的任何损害或损失，我们概不负责或承担任何直接或间接责任。

### 1.1 DAO

#### 1.1.1 DAO定义

> DAO 即 Decentralized Autonomous Corporations，中文为去中心化的自治组织，是一个以公开透明的计算机代码来体现的组织，其受控于组织成员，并不受集中控制或第三方干预，一个分布式自治组织的金融交易记录和程序规则是保存在区块链中的。

Web3的核心是去中心化和用户拥有信息，因此所有的创业投资机会将围绕着这两点。

互联网经过40年的发展逐渐进入了一个新时代，一方面消费互联网由于巨头垄断停滞发展；另一方面，企业互联网的发展在过去10年取得突飞猛进的进展，SaaS成为最亮眼的股票。

从2010年起，消费互联网的巨头进入收割期，各大巨头的垄断利润暴涨，占据了市值前10名的90%。另一方面，在创新领域，却再也没有巨头产生。虽然在中国，由于巨头的反应迟钝，给了移动互联网的巨头字节跳动和美团机会。但是整体上，全球范围内消费互联网进入一个停滞状态毫无争议。

大家经常讲创新总是发生在边缘，正如互联网诞生于70年代，万维网诞生于90年代，最初的互联网只是由几个大学的节点组成，经过40年的发展，在没有任何人能够预测到的情况下，发展出来改变世界的各种应用。

---

*Originally published on [阿5](https://paragraph.com/@5-3/renaissance-labs)*
