区块链学习第二期

myBlog

前端基础知识

[toc] ---

html 中标签的定义

我们都知道,html 中可以使用<p></p>这些标签去定义内容,但是如何能定义自己的标签呢?例如我想用“ZYN”这个名字作为一个标签,怎么办呢?

此时就需要 js 了:

1
2
3
4
5
class 周亚男 extends THMLElement{
...内容
}
customElements.define("ZYN",周亚男);
<ZYN></ZYN>

伪类和伪元素

语法 数量 位置 类与元素 使用场景
伪类 : 多个 前后方 修饰(基于 dom)
伪元素 :: 单个 后方 创建对象 少(关键)

form 表单与 php(这是我认为最重要的)

form 能给我一个最直观的前后端数据交互的体验

表单:在网页中主要负责数据采集功能,基本正常网页都有这样一个控件

表单:可以看作是一个表单容器。

  • 一个或者多个输入框
  • 一个提交按钮或者一个重置按钮
  • 通过 dom 对象拓展的 forms 属性拿到具体表单
  • HTMLFormElement:
    属性 介绍
    action 请求的 URL,等价于 html 中的 action,提交到哪里
    elements 表单中所有控件的 HTMLCollection
    method HTTP 请求的方法类型
    reset 设置表单默认值
    submit 提交表单

工作流程

  1. 数据收集
    • 表单单域内部的输入控件获得用户输入的值
      • 常见输入控件:input、textarea、select
      • type 属性的值决定了唤起的键盘是什么类型:number、password、text、file(传文件)···
      • 当然 html5 还有更多关于时间、颜色 type 的更新
  2. 数据校验
  3. 数据提交

理解

不管是一般的企业网站还是复杂的网络应用,都离不开数据的添加。通过 php 服务器脚本语言,程序可以处理那些通过服务器对 web 应用进行数据调用或添加的请求。

  • web 邮箱
  • qq 留言

虽然 form 是 html 的,但是 php 与 form 的衔接是无缝的。php 关心怎么获得和使用 form 的数据

处理表单的基本过程

  1. 数据从 web 表单发送到 php 代码(action=“xxx.php”)
  2. 经过处理在生成 html 输出
  3. php 会检查 url、表单数据、上传文件、可用 cookie、web 服务器和环境变量
  4. 如果有可用信息,就可以通过 php 访问自动全局变量数组$_XXX

标签区分

行内块级行内块


标签权重

权重的大小

  1. !important,加在样式属性值后,权重值为 10000
  2. 内联样式,如:style=””,权重值为 1000
  3. ID 选择器,如:# content 权重为 100
  4. 类,伪类,属性选择器如:content、:hover 权值为 10
  5. 标签选择器和伪元素选择器,如:div、p、:before 权值为 1
  6. 通用选择器(*)、子类选择器(>)、相邻选择器(+)、同胞选择器(~)权值为 0

jquery 的顶级对象$

  • $是 jq 的别称,为了方便
  • 是 jq 的顶级对象,相当于原生 js 的 window,包装成 jq 对象。利用$对 dom 对象包装后产生的对象(伪数组存储对象)bow

json and ajax?

ajax:一种用于创建更好更快以及交互性更强的 web 应用程序技术。它无需刷新页面便可以从服务器获取数据

json:一种用户数据交互的格式
对比一下:很明显,json 简单得多

1
2
3
4
5
<student>
<name>周亚男<name>
<sex><sex>
<age>21<age>
<student>
1
2
3
4
5
6
7
{
"student": {
"name": "周亚男",
"sex": "男",
"age": 21
}
}

区块链知识

对区块链矿工以及挖矿上链的思考

在做完第一次简单的区块链实验后,不禁加深了对区块链的思考。我还有很多基础知识没有学透或者学的混杂了。

实验:

  • 获取一个地址的 CBI 余额;
  • 获取一个区块的哈希值;
  • 获取上一个区块的哈希值;
  • 获取当前的时间戳;
  • 获取当前区块的高度;
  • 获取当前区块的难度(difficulty);
  • 获取当前区块的 gas limit;
  • 获取当前区块的 coinbase 账户;
  • 部署合约到内部教学链;
  • 在 Remix IDE 中调用合约的所有方法,查看数据;

测试结果
第一次运行
第二次运行

解释一下:本次实验是老师提供的测试链测试币

实验疑问:(提问方式)

  1. 老师的链是自己写的吗?用什么写的?是不是很厉害?

    >可以可以。应该是自己的写的,不过这种链去太坊fork一块也可以。任何语言都可以,但一般用go语言写,然后部署在云服务器上
  2. 我们班明明就几十个人,为什么我部署合约查到的区块高度已经是6813了呀?

    >首先你不是把整个合约部署到链上,而是把部署合约这笔交易的哈希记录在链上,而高度那么高,是因为有 **空区块** 的存在 - 区块头主要用来记录说明信息,而区块体则是用来记录交易。真正的数据记录在客户端的数据库列表中
  3. 空区块怎么来的啊?还有那个coinbase有什么用啊?矿工怎么挖出来的?我们都在做交易,那矿工是谁?

  4. 梳理一下挖矿全过程

参考:区块链交易过程是怎样的

mine1

mine2

mine3

  1. 交易怎么进入区块的?

一直以来有困惑

  1. 私钥确定是完全不能重复的吗?虽然是 256 位二进制。
  2. 节点说的是矿工节点吗,还是所有的节点
  3. 矿工是如何一边打包交易一边破解随机数的,交易被确认的过程不是在网络中广播的过程吗?
  4. 比如,我在打包,你也在打包,咱们俩是打的同一个吗?
    还是各自打包各自的,谁破解谜题了谁的区块就得到认可。
    或者说咱们面对的是同一个交易池吗?
  5. 我不能理解的是交易是如何被打包进区块的,比如有一万笔交易,只有 1000 笔被确认,但是这一万笔都被广播了,莫非会有一些处于“未确认”的状态?等待着被打包进下一个区块?

  1. 私钥并不是完全不重复,只是说在地球上,这种重复的概率几乎为 0 ;
    私钥是程序生成的 256 位二进制的随机数。他的大小是 10^76 这个量级的。宇宙所有原子的量级大概是 10^80。重复的概率微乎其微。
  2. 节点就是矿工,你的电脑也可以作为一个节点,虽然算力很小;
  3. 交易在一个内存池(队列)里,矿工尝试打包,取出交易,计算难题,计算出来了,于是加上自己的签名,完成确认过程。没有准确的时间先后的问题。
    但是我还有疑惑,是不是可以这样理解,在未找到答案之前,有许多区块,谁找到答案,谁的区块就被打到区块链中,进而区块中的交易被确认,并且可以进行下一步的交易。

接着就有了下面的回答

  1. 一个交易可能在不同的节点上的队列里 ,就像你在一班排第三,在三班可能排第九。
  2. 然后有一个区块打包会包含这个交易,其他节点处理是会把交易抛弃掉。所以,一个交易只能被包含到一个区块里。
    区块提交后,其他节点进行同步,同步该区块,并对区块中的每个交易进行验证,如果发现有交易是本地队列已经有的,就将该交易从自己的队列里剔除。