区块链学习笔记

本文探讨了区块链技术中的关键概念,如非确定性、哈希函数、挖矿过程、数字签名、以太坊的PoW和PoS共识机制,以及如何通过Solidity部署智能合约。还涉及了区块奖励机制和gas费用的概念。

1.从faucet里面获取0.25代币:

2.笔记,测试

区块链示例:https://andersbrownworth.com/blockchain/block

Nonce:1

hash:31ee046c4ccb858a794e279118d40fceab698b44a947ad1fbafad9c01612e978

3. {% post_link whatbc 区块链记账原理 %}

        我们了解到,每次记账的时候会把上一个块的Hash值和当前的账页信息一起作为原始信息进行Hash。如果仅仅是这样,显然每个人都可以很轻松的完成记账。

        为了保证10分钟左右只有一个人可以记账,就必须要提高记账的难度,使得Hash的结果必须以若干个0开头。同时为了满足这个条件,在进行Hash时引入一个随机数变量。

       改变Hash的原始信息的任何一部分,Hash值也会随之不断的变化,因此在运算Hash时,不断的改变随机数的值,总可以找到一个随机数使的Hash的结果以若干个0开头,率先找到随机数的节点就获得此次记账的唯一记账权。

XXXerror:要在其前面加0000,得到新的Nonce。

可能是得到0000开头的一组hash,根据新Nonce和data,

挖矿后:

数字签名

私钥:123456

公钥:

私钥加message:=message signature

验证:message+公钥=signature(你的签名)

1.你的私钥用来对信息签名,公钥让别人来验证签名是你的;

  • 以太坊地址是由公钥衍生过来的,eg,取公钥后20字节

 2.验证

        在节点成功找到满足的Hash值之后,会马上对全网进行广播打包区块,网络的节点收到广播打包区块,会立刻对其进行验证。

        如果验证通过,则表明已经有节点成功挖出区块,自己就不再竞争当前区块打包,而是选择接受这个区块,记录到自己的账本中,然后进行下一个区块的竞争猜谜。

区块奖励:(gas)

  1. 一个链 用的人越多,发送交易就越贵
  2. 在区块链中,区块存储交易的空间有限,为了让你的交易能被写在某个区块中,你需要支付手续费,
  3. 根据情况调节base gas,调节依据是,人员交易数量,被写入的数量上下增减

区块链概念

  1. 网络进入门槛就是一些硬件要求和软件运行环境,你能运行软件就能加入网络;
  2. 每个人都加入参与网络,这就是真正的去中心化;(我们只是提供一种或可解决的方法罢了)
  3. github,几分钟内运行一个以太坊节点;传统世界,APP被单一主体运营,崩坏即无;
  4. 以太坊,运算
  5. 共识consensus:机制,在状态和数值上达成一致。
  6. 两种:Chain Selection链选择算法,Sybil Resistance抗女巫攻击机制;防止用户使用大量的假身份。
  7. 区块奖励:有区块链协议自身发给节点的,增加密货币的流通量,
  8. 比特币减半,区块奖励减半?
  9. 以太坊:区块奖励以太币,比特币网络:比特币

Sybil Resistance

  1. PoW工作量证明proof of work(矿工)

    我们怎样确定哪个区块链是正确的链?

    Nakamoto Consensus 中本聪共识(比特币和以太坊1.0中使用,包括PoW和最长链规则)

  2. PoS权益证明(验证者)以太坊2.0

    放置一些抵押物以保证不作恶,stake,质押

  3. Scalability 可扩展性

  4. Sharding 分片,多个区块链的区块链有一个主链会协调一些不同的链,将他们链接在一起

    layer1:base layer blockchain implementation 基础层(比特币,以太坊,avalanche)

    layer2:any application built on top of a layer2


1.部署到测试网上

  • 部署步骤
  • 先改变网络,然后进行connect,随后account会自动填入,接着点击Deploy

  • 等待一会儿,出现绿色对√
  • 把合约部署到区块链上会修改区块链状态,因此我们必须支付gas

  • gas limit 和gas uasge单纯发以太币要高得多,因为我们把大量数据送到了链上,进而增加了大量的计算。

  1. 进行数据store:会花费gas
  2. okay!!!!已经成功将首个合约部署到了一个测试网上!!

2.尽量最后一步部署到测试网上,因为漫长等待和花费

3.总结

        EVM,Ethereum Virtual Machine 是以太坊区块链上部署智能合约的一个标准,并且任何实现某种EVM的区块链,你都可以把solidity代码部署上去。

//首先确定solidity的版本,因为他经常更新版本
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.8;//可以写成^0.8.8 比此新的版本都可以适用此代码

//EVM,Ethereum Virtual Machine 是以太坊区块链上部署智能合约的一个标准,
//并且任何实现某种EVM的区块链,你都可以把solidity代码部署上去.

//部署合约
contract SimpleStorage{
    //booleean,unit(无符号数,+),int,address(地址),bytes
    //bool hasFavoriteNumber = true;
   // uint128 f = 123;
    //string text = "five";
    //address myaddress = 0x8c7F90a1fD9B2bc3b936aa918c9f6C489B677750;
    //bytes32 bytee = "cat";//自动转换为byte,0x123hdsk

    //This gets initialized to zero!
    uint256 FavoriteNumber;  //全局变量
    //创建一个新的people并将其分配给这个person 变量
   // People public person = People({FavoriteNumber:2,name:"xaiw"});
    
    //当你创建一个映射时,会把所有东西都初始化为空,故而查询时找不到之前的数组信息
    //需要重新添加 一下
    mapping(string => uint256) public namaTofavoriteNumber;

    struct People{
        uint256 FavoriteNumber;
        string name;

    }
    //多个的话,可以写成数组的形式
    //uint256[] public FavoriteNumber;
    People[] public people;  //空列表;

    //function
    function store(uint256 _FavoriteNumber) public {
        FavoriteNumber = _FavoriteNumber;
    }
    //view,pure
    function retrieve() public view returns(uint256){
        return FavoriteNumber;
    }

    function addPerson(string memory _name, uint256 _FavoriteNumber) public {
    //    people.push(People(_FavoriteNumber, _name));//push表示添加;创建新的People对象,他将接收_FavoriteNumber,and name
        People memory newPerson = People(_FavoriteNumber,_name);
    //  People memory newPerson = People({FavoriteNumber:_FavoriteNumber,name:_name}); //效果相同
        people.push(newPerson);
        //甚至直接
        //people.push(People(_FavoriteNumber,_name));
        //我们把人添加到数组中,我们也要把人添加到映射中
        namaTofavoriteNumber[_name] = _FavoriteNumber;
    }

}

//solidity基础:EVM store in six places:Stack,memory,storage,calldata,code,logs
//calldata,不可被修改的临时变量,storage永久修改
//mapping映射,字典,key键值对

评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值