了解区块链技术(Patrick Collins)(一)

1、区块链基础

什么是区块链?

        比特币是最早使用区块链这个跨时代技术的协议之一,比特币的白皮书是由中本聪写的,它描述比特币如何在一个去中心化的网络中,进行p2p交易,网络以密码学算法为基础,能够让人们以去中心化的方式,发生非许可金融行为,人们认为这是一种高级的电子价值存储

        之后,V神发布了新的协议的白皮书,新的协议叫做以太坊。在以太坊上,除了去中心化的交易,人们还可以签署去中心化的合同构建去中心化的组织,以及在不需要中心化中介的情况下,以去中心化的方式进行协作。

        智能合约是指通过一些去中心化的方式执行一些命令(约定多个参与方的一些指令),在这些指令执行中,并不需要中心化或者第三方的中介。以太坊和比特币最大的不同点就是智能合约。比特币不是图灵完备的,不能执行一个编程语言所有的命令。比特币的开发者想把比特币作为价值存储,而以太坊的开发者除了想把以太坊作为价值存储外,还想要把它作为一个运行去中心化合约的平台。

        如果想要用这些只能合约来代替我们日常使用的合同,就需要真实世界的数据输入。区块链没有办法自己获取真实世界的信息,这就是预言机问题。区块链网络是确定性系统,会根据预设的规则去验证。智能合约能够获取发生在链上的所有的信息,但是想要作为日常合同使用的话,就需要外部的信息外部的计算,这就是预言机的作用。

        预言机是任何可以向区块链输入数据和进行链下计算的设备。然而,想要真正去中心化,我们不能只通过单个预言机单个数据提供商获取数据,或者单个资源去进行链下计算。我们需要去中心化的语言机网络。将链上去中心化逻辑和链下去中心化数据和计算相结合,这就叫做混合型智能合约

        混合智能合约会用到Chainlink,Chainlink是一个组件化去中心化预言机网络,不仅可以为智能合约提供外部数据,还可以进行链下计算。使智能合约可以像日常合同一样正常使用。Chainlink可以让我们获取数据,合约自动化执行随机数,以任何有意义的方式自定义你的智能合约。当我们提到混合智能合约的时候,特指有链下组件的智能合约。区块链网络(以太坊、Polygon、avalanche、Fantom、Harmony)。

        去中心化应用通常由多个智能合约组成。web3是指以区块链和智能合约为基础的下一代的网络。web1指的是一个有着固定内容的非许可的开源网络。web2指的是一个有着动态内容的许可网络,你所有的协议和逻辑运行在中心化的服务器上,中心化服务器控制着你的信息。web3回到了非许可网络,但再一次承载动态内容,智能合约允许你创建无需审核的合同和逻辑。智能合约创建了不可违背的承诺。

        许可的开源网络是指遵循特定开源许可证的网络,开源许可证是指允许用户查看、使用、分发和修改源代码的许可证。

2、智能合约的作用

    区块链的目的很明确,就是保证承诺不被违背。智能合约是不可更改去中心化透明的

        不遵守承诺的例子,在80-90年代,麦当劳有一个推广活动,收集麦当劳大富翁游戏卡牌,就可以获得金钱奖励,你购买了麦当劳,就有机会获得100万美元的大奖,麦当劳向消费者承诺如果购买了食物,就会给你一个公平的机会去获取这笔钱。最终它们违背了承诺,实际的获奖机会为0,在90年代中期,奖励并没有给到正常参与游戏的人,而是给到了操纵游戏的诈骗分子,这意味着你去麦当劳玩大富翁游戏,你获取到一个承诺,承诺100%不会兑现。实际上可以认为奖励是从消费者这里偷走的。

        而如果这个系统是通过智能合约部署在区块链上的话,奖金根本不可能被骗走,因为智能合约不可更改去中心化透明的。对于我们签署的所有协议和合同,我们都可以认为10岁的小朋友拉钩行为,想象这个协议如何被保证。

        我能相信二手销售能卖给我一辆好车吗?我能相信衣服上的可洗标签吗?

        协议和合约最大的问题在于我们不得不相信履行合约的人,会按照合约内容办事,然而,通常不按合约履行会获得更大的收益。

        智能合约简单来说是部署去中心化区块链上的一个合约或者一组指令,当合约或者这组指令被部署以后,就无法改变,自动执行,每个人都可以看到合约上的条款,这些代码会被去中心化的执行。在智能合约,web3和区块链中,不能像以前一样更改合同,特别是智能合约部署在去中心化的区块链上,同时结合一个去中心化的预言机网络

        当黑客想要更改智能合约的时候,每个人都会知道,不仅如此,甚至你不可能改动它,因为一旦部署,智能合约上的内容就无法改变。将智能合约ChainlinkVRF相结合会获得一个可验证的随机数

        去中心化交易所,其中一个叫做UNISWAP,你可以交易ERC-20通证,和股票交易差不多,但是其不存在一个中心化实体,交易所的交易者们,可以节省数以千万记的美元,同时阻止欺诈和市场操纵行为。

        传统金融世界的份额正在被DeFi蚕食,已经有千亿美元存在于这些协议里面,这些协议帮助人们拥有更公平更负责任更透明的金融系统。现在,普通人变富有的机会,正在被一些团体占用,它们可以根据自身的利益改编规则,智能合约是通往更好世界的通道。

3、区块链其他优势

        比特币是第一个把区块链技术引入大众视野的协议,比特币是一种电子黄金,或者说是价值存储用户之间可以通过去中心化的方式发送交易,其他的智能合约平台推动区块链技术更近一步,使人们可以开发智能合约,去中心化的信任最小化合约,智能合约和去中心化应用通过一个工具与真实世界交互,也就是去中心化预言机网络,Chainlink允许我们开发混合型智能合约,混合型智能合约将我们的链上逻辑链下的去中心化的数据计算结合起来,使得我们的逻辑是完全去中心化的,数据和外部计算也是完全去中心化的。然而,现在像是比特币和以太坊这样的加密货币,即使没有智能合约部分,也是有价值的,他们可以抗审查、去中心化的存储数据。

        相对于传统金融,智能合约拥有的优势:

1、去中心化的,并且没有中心化的中介, 一个区块链上由不同的参与者运行,这些参与者称为节点运营者,成千上万的节点运营者运行同一个软件,运行智能合约,运行算法,才使得网络是去中心化的。

2、透明性和灵活性,去中心化网络中,由于所有的节点运营者都在运行着这个软件,每个人都可以看到链上发生的任何事情,这意味着没有内幕交易,不会有离奇的事情发生,任何不公平的事情,人们都会看到,并且不会使用它。每个人获取的信息是一致的,并且在统一的规则下协作。这并不是说没有隐私,区块链是匿名的,意味着你不需要绑定实际生活中的身份。

3、速度和效率,正常情况下海外转账的过程至少需要2~3周,实际上,这些银行做的就是简单的数学计算,将你的钱从你的账户中减掉,然后加到别人的账户上。在区块链上,所有的这些交易会即时发生。

3、安全性和不可更改,不可更改意味着合约一旦部署,就无法被更改了,不管代码是怎样的,通过任何方式,它们都无法更改,这意味着更容易做到安全。在去中心化的网络中,想要攻击区块链,你必须控制一半的节点。在区块链链世界,如果你的电脑和备用电脑坏掉,你的数据还是安全的,因为你的数据还存储在其他的去中心化节点中,只要有一个节点还有链上的数据,你就是安全的。攻击区块链是不可能的,比攻击一个中心化的服务器困难多了 ,这样也更加安全。你只需要私钥,就可以获得你所有的证明信息财产。私钥本质上就是你所有的信息的密码。

4、避免了交易对手风险

4、智能合约行业应用

DeFi:代表的是去中心化金融,让用户参与到金融市场,不需要经过中心化中介。比如说Robinhood,你不需要Robinhood会持续给你提供服务,让你接入市场。相反,你可以直接查看智能合约,这样就接入了市场。2008年,金融危机,你不用相信这些集团和机构会在后台给你提供正确的信息,你在区块链上可以看到的东西,他们都是透明的。

DAOs:去中心化自治组织,是一个完全被去中心化管理的组织,它们被区块链上的一组指令或智能合约管理。

NFTs:非同质化代币,在某种程度上是一种电子产品,是一个独一无二的资产。像是无聊猿和加密朋克这样的项目,革新了人们获取报酬的方式。       

5、第一笔交易       

在区块链上发送交易之前,我们要先设置好一个钱包,metaMask(metamask.io)最流行的钱包之一,也是最好用的钱包之一,metamask是一个浏览器的扩展,它存储了所有的以太坊相关货币。

第一步:添加扩展,点击Install metaMask for Brave,add to Brave,add Extension。

第二步:get start,创建钱包,同意用户协议,创建密码,确保钱包是安全的,点击Click Head To Reveal Secret Words查看助记词,如果你丢失了助记词(12个词语)或者私钥,意味着你的钱包就丢失了。

第三步:点击metamask扩展,查看自己的钱包,正上方的账户下面显示着钱包地址,复制后进入etherscan.io区块链浏览器,粘贴钱包地址,就可以看到账户的细节。可以用来查看不同的交易,地址和在区块链上发生的其他事情。

地址是公开的身份,同时还有一个独一无二的私有身份,像助记词一样,不能给他人分享或暴露这些私有身份,这就是账户的私钥。助记词可以让你进入多个账户,私钥只能让你进入这些账户中的一个。

点击账户右边的三个点,account Details,export private key,输入创建metamask的密码,就可以看到私钥。拥有私钥,才拥有比特币和以太坊这些资产。

在账户旁有一个ethereum mainnet,以太坊主网,点击后就可以看到我们接入的所有网络,以太坊主网上,我们可以使用真正的钱来发送交易。我们使用测试网和本地环境去测试我们的代码,测试我们的智能合约。Rinkeby和Kovan是最流行的测试网。 rinkeby.etherscan.io。

测试网水龙头,https://faucets.chain.link,通过水龙头,来获取测试币,写入地址,获得一些测试用的Link和ETH代币,确保使用的网络都是rinkeby,点击connect,允许网站和我们的钱包相交互。

第四步:创建第一笔测试交易,选择0.1 test ETH,发送交易,发送交易的时候会显示交易hash。

6、gas介绍

        区块链是被不同的节点运行的,不同的节点运行区块链,因为它们可以通过区块链上的交易获取收入。当创建一笔交易的时候 ,就会有一个节点,或者叫做矿工验证者。某个运行区块链软件的人,它们会被支付一小部分的以太坊或者其他区块链的原生代币,会激励人们去运行节点。它们的收入是由gas的使用量决定的,gas是一个计算量的单位,要是用更多的资源,就要支付更多的gas。对于发送以太币这样简单的交易,gas比较便宜。对于像是铸造NFT,像某个DeFi存钱这样复杂的交易,会花费更多的gas,因为会用到更多的计算。区块链上的交易,都需要支付手续费。

7、区块链运作机制

Blockchain Demo (andersbrownworth.com)

        hash是一个独一无二固定长度的字符串,用来表示一段数据,它是通过将一段数据传入哈希函数来生成的,以太坊使用的哈希算法是SHA-256

        在一个区块中,将块高、Nonce、Data三部分进行哈希运算,得到hash值。当我在Data中输入数据后,点击挖矿后,我们可以看到Nonce的值改变了,哈希值的开头有了四个0。这里矿工要解决的问题是它们需要找到一个Nonce,或者一个数值,一个用来解决难题的数字,和块高以及Data进行哈希运算,结果必须是以四个0开始的。矿工要做的就是找到4个零开始的hash值,它们唯一的解决办法就是一个一个试,这就是区块链挖矿的过程。

        在区块链中,prev全是0的区块,我们称之为创世区块,指向一个不存在的区块。将块高、Nonce、Data、Prev四部分进行哈希运算得到哈希值。当更改区块链上任意一个区块的数据,整个区块链都会变得无效,因为没有一个区块里的Nounce能够生成正确的哈希值,解决“难题”,这就是区块链难以篡改的原因。你需要重新挖这些区块,需要很大的计算。修改的区块越靠前,重新哈希运算的难度就越大。如果我控制了区块链,还是可以做到。

        进入分布式页面,不同的peer都在运行着区块链,它们的权重不同,区块链上的每一个peer,节点或者是运营主体,都有着相同的权利,决定那条链是正确的链很简单,就是看最后一个区块上的哈希值,通过它来确定整个区块链的信息。最后一个区块的哈希值,包含了前面所有区块的信息。所有的节点、运行区块链的不同用户,数据都是一致的,节点可以很容易的检查其他节点的哈希,然后确定数据是一样的。

        假设peerA在链上有一些之前的数据改动,需要经过大量的计算,重新挖剩下的区块,以赶上其他peer的速度,peerA又变成了一条有效的区块链。通过查看每一个节点最后一个区块的哈希值,发现peerA和其他peer最后一个节点的哈希值不同,peerA是一条错误的链,不能获得挖矿奖励。它们彼此检查和对比,判断哪些是诚实节点,哪些是恶意节点。区块链是由节点中的大多数控制的,节点通过挖矿来获取收益,不同的区块链要解决的难题不同。

        怎样确定交易确实是由某个人发出的?需要了解公钥和私钥。

8、签名交易

Blockchain Demo: Public / Private Keys & Signing (andersbrownworth.com)

        可以随便选择一个私钥,相对应会使用ECDSA算法,根据私钥创建出公钥。对于公钥,我们希望每个人都有权限使用它,全世界都可以看到这个公钥。使用私钥对交易进行密码学电子签名,然后别人使用公钥来验证这个签名的交易。你可以使用私钥创建信息签名,但是别人不能通过信息签名得到你的私钥。

        如果我想从我的地址发送20美元到另一个地址,通过私钥,对交易进行签名,世界上的任何人都可以验证这笔交易。助记词可以让我们轻松看到不同账户的私钥。账户地址,是由公钥衍生来的。

9、gas区块链奖励&EIP1559

一个链用的人越多,发送交易就越贵。

        在etherscan上,可以看到总费用=(区块基础费+最大优先费)*gas使用量,在发送交易时,由于发送时间和指令不同,花费的gas比预计的多,如果不想使用超过x个gas,可以在metamask中,点击next,market,advance编辑一些交易参数,改变gas limit,区块基础费,最大优先费,当超过的时候,拒绝发送这笔交易。    

        根据交易的版本,EIP-1559,以太坊上,每一笔交易都有base fee,这是能够设置的最低的gas price,1eth=10^9GWei=10^18Wei,方便的计量极小数量的以太币,MaxPriority是我们愿意给矿工的最多Tip+最大的gas,在以太坊上base fee(会根据算法调整)会被烧掉,基础费用*gas的使用数量就是烧掉的费用,这意味着每次转账的时候,一部分以太币就不会流通,或者说是被烧掉了。现在在以太坊上,手续费一部分被烧掉了,一部分给了矿工。在区块链中,区块能存储的交易空间有限,为了让你的交易写在区块链中,需要支付一定的gas。

10、区块链概念知识

        区块链运行在网络上,被多个独立peer运行,peer指的是运行这个区块链程序的服务器。

        区块链或者去中心化系统的共识协议,可以粗略的分为两部分,链的选择算法抗女巫机制,我们说的挖矿,或者说是工作量证明算法,就是一种抗女巫机制。这也正是以太坊1.0和比特币正在使用的。

        一旦节点找到符合要求的哈希值,它就可以将新的区块广播到网络中,其他节点可以验证这个区块的合法性,并将其添加到自己的本地区块链中。此外,对于每个成功创建的区块,节点可以获得一定数量的加密货币作为奖励,这也是节点参与POW机制的动力之一。

        抗女巫机制是一种能力,来防止用户使用大量的假身份在整个系统获得超出应有比例的权益和影响力。工作量证明能抗女巫攻击,不管一个用户有多少个账户,每个账户都需要经过大量的计算来找到工作量证明中“难题”的答案。调整难题的难度,取决于系统想要出块时间是多少。

        链选择规则,怎样确定哪个区块链是正确的链。在比特币和以太坊中,使用的共识叫做中本聪共识,中本聪共识包括了工作量证明和最长链原则,去中心化网络规定,哪条链有最长、最多的区块,就用哪条链。确定区块的数量是指在我们的交易写入区块后,新挖出的区块数量。

        谁得到了手续费?是矿工还是验证者?在工作量证明网络中是矿工,在权益证明的网络中是验证者。在工作量证明网络中,节点会相互竞争解决区块链难题,所有的节点会尽可能多的尝试,第一个找到答案,因为第一个找到答案的节点会获得交易手续费,他们会有收入,收入分为两部分,一部分是交易手续费,一部分是区块奖励,区块奖励是由区块链协议自身发给节点的。

          51%攻击,你有最长的链和51%的网络,你就可以分叉区块链,让整个网络使用你的链。区块链越大,去中心化程度越高,越安全。

        工作量证明需要消耗很多的电力,不环保。权益证明需要放置一些抵押物保证不作恶,也叫作质押,以太坊2.0中,质押以太币以保证自己会诚实运行,没有诚实运行,就会被提出,或者质押被扣掉,在网络中,矿工被称作验证者,因为它们不用再挖矿了,只去验证其他节点。在权益证明中,节点会被直接推举出来,提出一个区块,别的节点验证这个区块是否有效。

        现在,随机是区块链中很重要的话题,区块链是一个确定性系统,确定性系统没有办法产生随机数,怎么在系统重选择随机验证者,以太坊2.0选择了RANDAO,这是一个去中心化自治组织,他们共同选择随机数,共同选择下一个生成随机数的节点。

        可扩展性,如果同时有很多人发送交易,gas price会很高,节点存储的交易有限,这就无法实现扩展性,因为我们想让更多人进入区块链,那个交易写入区块链的花费也就越高,分片是可扩展性问题的一个良好的解决方案。

        区块链的分片指的是多个区块链的区块链,有一个主链会协调不同的链,将他们连接在一起,意味着人们可以在多个链上发送交易,分片可以极大的增加在layer1(底层区块链)上发送的交易数量,layer1是区块链的基础层,layer2是在layer1和区块链上的任何应用,Chainlink是layer2。

        layer2与侧链不同,侧链的安全性来自于自身协议,RollUp的安全性来源于基础层。

总结:

(1)以太坊1.0和比特币是工作量证明,使用的是中本聪共识,在以太坊升级到2.0后,使用权益证明和分片。

(2)工作量证明和权益证明杜绝了女巫攻击。

(3)区块链越大,51%攻击越难。

(4)共识是区块链确定当前状态的机制。

(5)分片和RollUp是layer1的可扩展性问题的解决方案

(6)layer1是基础层的实现,像是比特币和以太坊。

(7)可扩展性问题,是由于区块空间不足导致写入的交易有限,这会导致很高的gas price。

(8)gas price是与区块链进行交互的费用。        

11、部署第一个合约

智能合约代码示例:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.8;

contract SimpleStorage {
    uint256 public favoriteNumber;

    mapping(string => uint256) public nameToFavoriteNumber;

    struct People{
        uint256 favoriteNumber;
        string name;
    }

    People public person = People({favoriteNumber: 2,name: "zoujiawei"});

    People[] public people;
    // 数组、结构体和映射
    function addPerson(string memory _name,uint256 _favoriteNumber)public{
        // People memory newPerson = People({favoriteNumber: _favoriteNumber,name: _name});
        people.push(People(_favoriteNumber,_name));
        nameToFavoriteNumber[_name] = _favoriteNumber;
    }

    function store(uint256 _favoriteNumber) public {
        favoriteNumber = _favoriteNumber;
    }
    
    function retrieve() public view returns (uint256) {
        return favoriteNumber;
    }
}

        将合约发送到测试网络,和其他人进行互动,怎么把合约部署到测试网络或真正的网络上?

前期准备:

1、在火狐或者谷歌上下载MetaMask扩展,创建新钱包。

2、下载node-v 12.22.12-x64.msi,并在命令行界面运行指令:npm install -g ganache-cli,下载客户端测试网络,如果出现不能创建文件夹的话,那么就使用管理员权限运行。

3、运行ganache-cli在安装目录下,生成十个测试用户。

Available Accounts
==================
(0) 0x99F8A704a38C3E5AeFd73561596113AeAC39F578 (100 ETH)
(1) 0x24D3C02290fE451dd40Cbb41F8E9523dB587C865 (100 ETH)
(2) 0xad378a7DbC20a9Ca33B52e4cb343Ee718eC3026a (100 ETH)
(3) 0xE48897ACf5ADaED5680a6f24f30Ba4C02795Eaf3 (100 ETH)
(4) 0x97b1eAfB80491d08ecc082b7b491e3528E984A83 (100 ETH)
(5) 0x16219c5a68792b35086842a7941B0169Ba0B6AcC (100 ETH)
(6) 0x53cdA1082c991E5A82c73273bcCa9972D5311658 (100 ETH)
(7) 0xDdA98Af259E0AD4bbdDF31daC0dbD1CF3EcC453F (100 ETH)
(8) 0x9B43b9b83Cf6f901eE6f4968824668bfe2DC4Bb3 (100 ETH)
(9) 0x9dcAa9686F73b6AeD004b4b148162c66234247Af (100 ETH)

Private Keys
==================
(0) 0x284751b49084e3a9aa236426365d1c195955459f014f33b4b39283ac07949a8a
(1) 0xcfe0c32f12ff80c73a0ffaf0339bdb768237e7d2763bd916f851065091d445dc
(2) 0x3d142c1a00a15eeac9c922d1ce1c33fc8c0a60a731d6ff65059f817f1958abb7
(3) 0x2d0a405705443c7449eccaf44a3a483529fb27d62ba88236243e46bbcbf68e0f
(4) 0x17dbe9ce4c5894d428612e5a54c1b91d2467a24230841f378174af94dfbe1401
(5) 0xba9c1e38d7bc404ac5527d2e37af3aa560d74f75bf0fdd07a847d73bcbe55b61
(6) 0x4982fea50ba6eaaa1aa935874ddf2bc73da3b5b1f6f02f74a0963ad34dfc3745
(7) 0xf9d7993644374815e113f293c7abcfe68b657f109fd1a1b94729cc9682b174a8
(8) 0xca7b10f5089c50d6269579b62fefce541d90525f4f9ffc390abfd21d81beed65
(9) 0x9aced10cb662b519ec5610ee94705bd010f635dcc547ce85b0d2100d836eeec1

4、将MetaMask上的测试网络更改成自己的,左上角点击添加网络,手动添加网络,新的RPC URL为127.0.0.1:8545,链为1337,货币符号为ETH。

5、使用私钥导入两个账户进行转账模拟操作。

6、添加代币,钱包和remix要在同一个浏览器中,智能合约编译成功后,设置ENVIRONMENT为Injecter Provider,和自己的MetaMask连接,会看到account变成自己的钱包地址。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值