<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Merkle的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Merkle</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Merkle]]></copyright><item><title><![CDATA[Java基础（一）]]></title><link>https://blog.youkuaiyun.com/Merkle/article/details/124016902</link><guid>https://blog.youkuaiyun.com/Merkle/article/details/124016902</guid><author>Merkle</author><pubDate>Fri, 08 Apr 2022 23:35:00 +0800</pubDate><description><![CDATA[这个系列主要是介绍Java的基础知识，以及一些值得注意的点。


Java 是大小写敏感的。
	对于所有的类来说，类名的首字母应该大写。如果类名由若干单词组成，那么每个单词的首字母应该大写，例如MyFirstJavaClass。
	所有的方法名都应该以小写字母开头。如果方法名含有若干单词，则后面的每个单词首字母大写。
	单行注释为//，多行注释为/**/。
	在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中，方法结束后，变量就会自动销毁。
	成员变量是定义在类中，方法...]]></description><category></category></item><item><title><![CDATA[Go语言基础入门（创建简单HTTP服务器2）]]></title><link>https://blog.youkuaiyun.com/Merkle/article/details/123775139</link><guid>https://blog.youkuaiyun.com/Merkle/article/details/123775139</guid><author>Merkle</author><pubDate>Sun, 27 Mar 2022 16:19:41 +0800</pubDate><description><![CDATA[package main

import (
	"fmt"
	"net/http"
)

//创建处理器函数
func handler(w http.ResponseWriter, r *http.Request)  {
	fmt.Fprintln(w, "hello", r.URL.Path)
}

func main()  {
	//HandlerFunc是一个适配器，通过类型转换让我们可以将普通的函数作为HTTP处理器使用
	//如果f是一个具有适当签名的函数，HandlerFunc通过调用实现了H.]]></description><category></category></item><item><title><![CDATA[Go语言基础入门（TIME）]]></title><link>https://blog.youkuaiyun.com/Merkle/article/details/123444342</link><guid>https://blog.youkuaiyun.com/Merkle/article/details/123444342</guid><author>Merkle</author><pubDate>Sat, 12 Mar 2022 15:58:07 +0800</pubDate><description><![CDATA[时间是一个重要的编程元素，可用于计算、同步服务器以及测量。Go语言提供了time包，其中包含用于同当前时间交互以及测量时间的函数和方法。


打印计算机中的当前时间。


package main

import (
	"fmt"
	"time"
)

func main()  {
	fmt.Println(time.Now())
}

时间受到众多变数的影响，其中包括在操作系统中设置的时间不正确，鉴于此，很多系统管理员会安装将时间与网络时钟同步的服务，网络时间协议（network time protoc.]]></description><category></category></item><item><title><![CDATA[Go语言基础入门（正则表达式）]]></title><link>https://blog.youkuaiyun.com/Merkle/article/details/123443792</link><guid>https://blog.youkuaiyun.com/Merkle/article/details/123443792</guid><author>Merkle</author><pubDate>Sat, 12 Mar 2022 15:13:08 +0800</pubDate><description><![CDATA[啊，正则表达式，早在之前学习前端的时候就受到过该利器的折磨，它确实强大，但也确实难。anyway，还是要学的。


正则表达式描述了可用于与数据交互的搜索模式。使用正则表达式可完成验证数据、查找数据以及操作大量文本等任务，相比于其他方法，表达式查找和模式匹配的效率要高的多。

在Go语言中，正则表达式功能是由regex包提供的，这个包实现了正则表达式的查找和模式匹配功能。

函数MatchString，接受一个正则表达式模式和一个字符串，并根据是否匹配返回true或false。


package mai.]]></description><category></category></item><item><title><![CDATA[Go语言基础入门（处理文件）]]></title><link>https://blog.youkuaiyun.com/Merkle/article/details/123433880</link><guid>https://blog.youkuaiyun.com/Merkle/article/details/123433880</guid><author>Merkle</author><pubDate>Fri, 11 Mar 2022 21:20:35 +0800</pubDate><description><![CDATA[Go标准库中提供了ioutil包，让我们能够快速执行读写文件的操作。

读取文件。Readfile函数，将一个文件名作为参数，并以字节切片的方式返回文件的内容。这意味着如果要将文件内容作为字符串使用，则必须将返回的字节切片转换为字符串。

	
fileBytes, err := ioutil.ReadFile("xxx.txt")

fileString := string(fileBytes)
	
	创建文件。WriteFile函数，接受一个文件名，要写入文件的数据以及应用于文件的权限。Go语言使用UNI]]></description><category></category></item><item><title><![CDATA[Go语言基础入门（处理JSON）]]></title><link>https://blog.youkuaiyun.com/Merkle/article/details/123432407</link><guid>https://blog.youkuaiyun.com/Merkle/article/details/123432407</guid><author>Merkle</author><pubDate>Fri, 11 Mar 2022 20:52:06 +0800</pubDate><description><![CDATA[JavaScript 对象表示法是一种用于存储和交换数据的格式，这是一种人类能够理解的纯文本格式。JSON可以以键值对的方式表示数据，也可以以数组的方式表示数据。从很大程度上说它已经取代可扩展的标记语言XML。


Go标准库中提供了encoding/json包，用于编码和解码JSON数据。

函数Marshal将Go数据编码为JSON。


jsonByteData, err = json.Marshall(p)

在JSON数据中，所有的键名都是以小写字母大头。因此我们对结构体中的数据字段指定标签，对.]]></description><category></category></item><item><title><![CDATA[Go语言基础入门（创建简单HTTP服务器）]]></title><link>https://blog.youkuaiyun.com/Merkle/article/details/123428090</link><guid>https://blog.youkuaiyun.com/Merkle/article/details/123428090</guid><author>Merkle</author><pubDate>Fri, 11 Mar 2022 17:46:23 +0800</pubDate><description><![CDATA[标准库中的net/http包提供了多种创建HTTP服务器的方法，它还提供了一个基本路由器。


package main

import "net/http"

func helloWorld(w http.ResponseWriter, r *http.Request) {
	w.Write([]byte("Hello World\n")) //[]byte声明一个字节切片并将字符串转换为字节。
}

func main()  {
    //使用方法HandFunc创建路由/，这个方法接受一个模式和一个]]></description><category></category></item><item><title><![CDATA[GO语言基础入门（二）]]></title><link>https://blog.youkuaiyun.com/Merkle/article/details/123375229</link><guid>https://blog.youkuaiyun.com/Merkle/article/details/123375229</guid><author>Merkle</author><pubDate>Wed, 09 Mar 2022 21:21:03 +0800</pubDate><description><![CDATA[本篇内容主要是对于Go语言的基础及其相关特殊性语法进行总结。

字符串的拼接只能拼接字符串的变量，如果将整数和字符串进行拼接将导致编译错误。
	如果需要在循环中拼接字符串，则使用空的字节缓冲区来拼接的效率会更高。
	
for i := 0; i &lt; 500; i++ {
    buffer.WriteString("z")
}
fmt.Println(buffer.String)

//创建一个空的字节缓冲区，并将其值赋给变量buffer
//一个运行500次的循环，每次循环都将字符串z写入缓冲区
]]></description><category></category></item><item><title><![CDATA[GO语言基础入门（一）]]></title><link>https://blog.youkuaiyun.com/Merkle/article/details/123311658</link><guid>https://blog.youkuaiyun.com/Merkle/article/details/123311658</guid><author>Merkle</author><pubDate>Mon, 07 Mar 2022 19:42:54 +0800</pubDate><description><![CDATA[本篇内容主要是对于Go语言的基础及其相关特殊性语法进行总结。

不同于Go build, Go run不会创建可执行文件。故在开发阶段，使用命令go run，开发完毕进行分享时，使用Go build。
	Go语言在打造之初目的是用于开发高流量生产系统的语言。
	使用Go语言编写的函数中，对参数和返回值的类型都做了声明。
	
func addition(x int, y int) int {
    return x + y
}
	
	布尔值只能为true和false，0和1是不允许的。
	声明数组时必须指定]]></description><category></category></item><item><title><![CDATA[built-in method hexdigest of _hashlib.HASH object at 0x]]></title><link>https://blog.youkuaiyun.com/Merkle/article/details/120611075</link><guid>https://blog.youkuaiyun.com/Merkle/article/details/120611075</guid><author>Merkle</author><pubDate>Tue, 05 Oct 2021 09:49:21 +0800</pubDate><description><![CDATA[使用hashlib出现built-in method hexdigest of _hashlib.HASH object at 0x0000025AB3965050

前面是0x00000后面改变不大，这与预期的hash结果不符

后来发现

是因为hexdigest没加括号

也就是



这样，然后改成



就可以了






...]]></description><category></category></item><item><title><![CDATA[Unicode-objects must be encoded before hashing]]></title><link>https://blog.youkuaiyun.com/Merkle/article/details/120597565</link><guid>https://blog.youkuaiyun.com/Merkle/article/details/120597565</guid><author>Merkle</author><pubDate>Sun, 03 Oct 2021 19:40:14 +0800</pubDate><description><![CDATA[python 出现上述错误

原因是在使用hashlib的sha256函数时，其中的参数类型应该是bytes

所以要在hash钱把数据类型转换为bytes类型



在后面加上这个即可。


]]></description><category></category></item><item><title><![CDATA[共识协议POW]]></title><link>https://blog.youkuaiyun.com/Merkle/article/details/120468130</link><guid>https://blog.youkuaiyun.com/Merkle/article/details/120468130</guid><author>Merkle</author><pubDate>Sat, 25 Sep 2021 10:30:51 +0800</pubDate><description><![CDATA[PoW（Proof of Work，工作量证明）


简单的说就是多劳多得


    以比特币为例，矿工首先根据存储的交易池中的交易构造一个候选区块，计算区块头信息的哈希值，观察是否小于当前目标值。如果小于目标值，那么在没有其他节点广播信息的时候，矿工成功争夺记账权；如果哈希值不小于目标值，那么矿工就会修改nonce值，然后再试一次。

    矿工成功挖矿就代表得到了新区块的工作量证明解，就会迅速在网络中进行广播，其他节点在接受并验证后也会继续传播新区块，每个节点都会把它当做新区块添加到...]]></description><category></category></item><item><title><![CDATA[Remix-IDE（四）]]></title><link>https://blog.youkuaiyun.com/Merkle/article/details/120412775</link><guid>https://blog.youkuaiyun.com/Merkle/article/details/120412775</guid><author>Merkle</author><pubDate>Wed, 22 Sep 2021 12:52:20 +0800</pubDate><description><![CDATA[这次我们尝试使用remix编写一个加法计算的智能合约并部署在ropsten这个测试链上

首先我们新建一个sol文件，也就是智能合约的文件，然后输入下面的代码


pragma solidity ^0.4.23; //指定版本

contract Test {
    //输入两个参数
    function add(uint8 arg1,uint8 arg2) public pure returns (uint8){
        return arg1+arg2;
    }
}


然后进行编译，]]></description><category></category></item><item><title><![CDATA[Remix-IDE（三）]]></title><link>https://blog.youkuaiyun.com/Merkle/article/details/120372421</link><guid>https://blog.youkuaiyun.com/Merkle/article/details/120372421</guid><author>Merkle</author><pubDate>Sat, 18 Sep 2021 18:54:59 +0800</pubDate><description><![CDATA[创建和部署合约

点击ethereum然后右边还有一个四边形的按钮就来到了部署的页面。



    第一个environment就是选择环境，Remix可以插入三种不同类型的环境：javascript虚拟机、注入的web3和web3 provider.。

    javascript VM：所有的交易都将在浏览器的沙盒区块链中执行。这意味着当我们重新加载页面时不会保留任何内容。jsVM是它自己的区块链，每次重新加载它都会启动一个新的区块链，就的区块链不会被保存。如果你选择了VM模式，那...]]></description><category></category></item><item><title><![CDATA[Remix-IDE（二）]]></title><link>https://blog.youkuaiyun.com/Merkle/article/details/120370863</link><guid>https://blog.youkuaiyun.com/Merkle/article/details/120370863</guid><author>Merkle</author><pubDate>Sat, 18 Sep 2021 17:32:57 +0800</pubDate><description><![CDATA[下面介绍IDE的第二个部分-编译器



那么点击solidity的图标我们就进入到了编译器的界面。

    compiler旁边的那个加号是自定义编译器，点击+打开一个模式导入，可以在输出要加载的编译器的url。compile下面的框框就是选择不同的编译器版本，点击可以选，下面的框框的意思与平时的构建是一样的，不理解的可以百度。

    Language就是选择语言，有两种语言可以选择，默认是solidity，还有一个YUL。

    EVM version就...]]></description><category></category></item><item><title><![CDATA[Remix-IDE（一）]]></title><link>https://blog.youkuaiyun.com/Merkle/article/details/120369351</link><guid>https://blog.youkuaiyun.com/Merkle/article/details/120369351</guid><author>Merkle</author><pubDate>Sat, 18 Sep 2021 16:35:20 +0800</pubDate><description><![CDATA[认识Remix-IDE

    智能合约的编写需要使用计算机语言，目前常用的是Solidity语言。Solidity是Ethereum官方设计和支持的变成语言，专门用于编写智能合约。那么编写智能合约的工具有很多种，笔者推荐使用的以太坊官方退出的Remix，它是一个开源的Solidity智能合约开放环境，提供了基本的编译、部署、合约测试和执行合约等功能，它的地址是：remix

Remix-IDE的界面


...]]></description><category></category></item></channel></rss>